## Automatically generated incremental diff
## From:   linux-2.5.70-bk8
## To:     linux-2.5.70-bk9
## Robot:  $Id: make-incremental-diff,v 1.11 2002/02/20 02:59:33 hpa Exp $

diff -urN linux-2.5.70-bk8/Documentation/kobject.txt linux-2.5.70-bk9/Documentation/kobject.txt
--- linux-2.5.70-bk8/Documentation/kobject.txt	2003-05-26 18:00:26.000000000 -0700
+++ linux-2.5.70-bk9/Documentation/kobject.txt	2003-06-04 04:37:23.000000000 -0700
@@ -2,7 +2,18 @@
 
 Patrick Mochel <mochel@osdl.org>
 
-7 January 2003
+Updated: 3 June 2003
+
+
+Copyright (c)  Patrick Mochel
+Copyright (c)  Open Source Development Labs
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.2
+or any later version published by the Free Software Foundation;
+with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+A copy of the license is included in the section entitled "GNU
+Free Documentation License".
+
 
 
 0. Introduction
@@ -102,6 +113,28 @@
 This allows any memory allocated for the object to be freed.
 
 
+NOTE!!! 
+
+It is _imperative_ that you supply a desctructor for dynamically
+allocated kobjects to free them if you are using kobject reference
+counts. The reference count controls the duration of the lifetime of
+the object. If it goes to 0, then it is assumed that the object  will
+be freed and cannot be used. 
+
+More importantly, you must free the object there, and not immediately
+after an unregister call. If someone else is referencing the object
+(e.g. through a sysfs file), they will obtain a reference to the
+object, assume it's valid and operate on it. If the object is
+unregistered and freed in the meantime, the operation will then
+reference freed memory and go boom. 
+
+This can be prevented, in the simplest case, by defining a release
+method and freeing the object from there only. Note that this will not
+secure reference count/object management models that use a dual
+reference count or do other wacky things with the reference count
+(like the networking layer). 
+
+
 1.4 sysfs
 
 Each kobject receives a directory in sysfs. This directory is created
diff -urN linux-2.5.70-bk8/Makefile linux-2.5.70-bk9/Makefile
--- linux-2.5.70-bk8/Makefile	2003-06-04 04:37:16.000000000 -0700
+++ linux-2.5.70-bk9/Makefile	2003-06-04 04:37:23.000000000 -0700
@@ -1,7 +1,7 @@
 VERSION = 2
 PATCHLEVEL = 5
 SUBLEVEL = 70
-EXTRAVERSION = -bk8
+EXTRAVERSION = -bk9
 
 # *DOCUMENTATION*
 # To see a list of typical targets execute "make help"
diff -urN linux-2.5.70-bk8/arch/i386/kernel/smp.c linux-2.5.70-bk9/arch/i386/kernel/smp.c
--- linux-2.5.70-bk8/arch/i386/kernel/smp.c	2003-05-26 18:00:22.000000000 -0700
+++ linux-2.5.70-bk9/arch/i386/kernel/smp.c	2003-06-04 04:37:23.000000000 -0700
@@ -461,17 +461,6 @@
 }
 
 /*
- * this function sends a reschedule IPI to all (other) CPUs.
- * This should only be used if some 'global' task became runnable,
- * such as a RT task, that must be handled now. The first CPU
- * that manages to grab the task will run it.
- */
-void smp_send_reschedule_all(void)
-{
-	send_IPI_allbutself(RESCHEDULE_VECTOR);
-}
-
-/*
  * Structure and data for smp_call_function(). This is designed to minimise
  * static memory requirements. It also looks cleaner.
  */
diff -urN linux-2.5.70-bk8/arch/ia64/kernel/smp.c linux-2.5.70-bk9/arch/ia64/kernel/smp.c
--- linux-2.5.70-bk8/arch/ia64/kernel/smp.c	2003-05-26 18:01:00.000000000 -0700
+++ linux-2.5.70-bk9/arch/ia64/kernel/smp.c	2003-06-04 04:37:23.000000000 -0700
@@ -205,24 +205,6 @@
 	platform_send_ipi(cpu, IA64_IPI_RESCHEDULE, IA64_IPI_DM_INT, 0);
 }
 
-/*
- * This function sends a reschedule IPI to all (other) CPUs.  This should only be used if
- * some 'global' task became runnable, such as a RT task, that must be handled now. The
- * first CPU that manages to grab the task will run it.
- */
-void
-smp_send_reschedule_all (void)
-{
-	int i;
-	int cpu = get_cpu(); /* disable preemption */
-
-	for (i = 0; i < NR_CPUS; i++)
-		if (cpu_online(i) && i != cpu)
-			smp_send_reschedule(i);
-	put_cpu();
-}
-
-
 void
 smp_flush_tlb_all (void)
 {
diff -urN linux-2.5.70-bk8/arch/ppc64/Kconfig linux-2.5.70-bk9/arch/ppc64/Kconfig
--- linux-2.5.70-bk8/arch/ppc64/Kconfig	2003-05-26 18:00:40.000000000 -0700
+++ linux-2.5.70-bk9/arch/ppc64/Kconfig	2003-06-04 04:37:23.000000000 -0700
@@ -37,6 +37,13 @@
 	bool
 	default y
 
+# We optimistically allocate largepages from the VM, so make the limit
+# large enough (16MB). This badly named config option is actually
+# max order + 1
+config FORCE_MAX_ZONEORDER
+	int
+	default "13"
+
 source "init/Kconfig"
 
 
diff -urN linux-2.5.70-bk8/arch/ppc64/boot/Makefile linux-2.5.70-bk9/arch/ppc64/boot/Makefile
--- linux-2.5.70-bk8/arch/ppc64/boot/Makefile	2003-05-26 18:00:56.000000000 -0700
+++ linux-2.5.70-bk9/arch/ppc64/boot/Makefile	2003-06-04 04:37:23.000000000 -0700
@@ -98,7 +98,7 @@
 $(obj)/kernel-initrd.gz: $(obj)/ramdisk.image.gz
 	cp -f $(obj)/ramdisk.image.gz $@
 
-$(call src-sec, $(required) $(initrd)): $(obj)/kernel-%.c: $(obj)/kernel-%.gz
+$(call src-sec, $(required) $(initrd)): $(obj)/kernel-%.c: $(obj)/kernel-%.gz FORCE
 	touch $@
 
 $(call obj-sec, $(required) $(initrd)): $(obj)/kernel-%.o: $(obj)/kernel-%.c FORCE
diff -urN linux-2.5.70-bk8/arch/ppc64/boot/main.c linux-2.5.70-bk9/arch/ppc64/boot/main.c
--- linux-2.5.70-bk8/arch/ppc64/boot/main.c	2003-05-26 18:01:03.000000000 -0700
+++ linux-2.5.70-bk9/arch/ppc64/boot/main.c	2003-06-04 04:37:23.000000000 -0700
@@ -8,7 +8,6 @@
  * as published by the Free Software Foundation; either version
  * 2 of the License, or (at your option) any later version.
  */
-#define __KERNEL__
 #include "ppc32-types.h"
 #include "zlib.h"
 #include <linux/elf.h>
@@ -28,6 +27,10 @@
 void pause(void);
 extern void exit(void);
 
+unsigned long strlen(const char *s);
+void *memmove(void *dest, const void *src, unsigned long n);
+void *memcpy(void *dest, const void *src, unsigned long n);
+
 static struct bi_record *make_bi_recs(unsigned long);
 
 #define RAM_START	0x00000000
diff -urN linux-2.5.70-bk8/arch/ppc64/defconfig linux-2.5.70-bk9/arch/ppc64/defconfig
--- linux-2.5.70-bk8/arch/ppc64/defconfig	2003-05-26 18:00:27.000000000 -0700
+++ linux-2.5.70-bk9/arch/ppc64/defconfig	2003-06-04 04:37:23.000000000 -0700
@@ -2,7 +2,6 @@
 # Automatically generated make config: don't edit
 #
 CONFIG_MMU=y
-CONFIG_SWAP=y
 CONFIG_RWSEM_XCHGADD_ALGORITHM=y
 CONFIG_GENERIC_ISA_DMA=y
 CONFIG_HAVE_DEC_LOCK=y
@@ -18,10 +17,14 @@
 #
 # General setup
 #
+CONFIG_SWAP=y
 CONFIG_SYSVIPC=y
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
 CONFIG_LOG_BUF_SHIFT=15
+# CONFIG_EMBEDDED is not set
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
 
 #
 # Loadable module support
@@ -155,6 +158,7 @@
 # CONFIG_SCSI_QLOGIC_ISP is not set
 # CONFIG_SCSI_QLOGIC_FC is not set
 # CONFIG_SCSI_QLOGIC_1280 is not set
+# CONFIG_SCSI_DC395x is not set
 # CONFIG_SCSI_DC390T is not set
 # CONFIG_SCSI_U14_34F is not set
 # CONFIG_SCSI_NSP32 is not set
@@ -199,7 +203,6 @@
 # CONFIG_PACKET_MMAP is not set
 # CONFIG_NETLINK_DEV is not set
 # CONFIG_NETFILTER is not set
-CONFIG_FILTER=y
 CONFIG_UNIX=y
 # CONFIG_NET_KEY is not set
 CONFIG_INET=y
@@ -214,8 +217,9 @@
 CONFIG_SYN_COOKIES=y
 # CONFIG_INET_AH is not set
 # CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_IPV6 is not set
 # CONFIG_XFRM_USER is not set
-CONFIG_IPV6=y
 
 #
 # SCTP Configuration (EXPERIMENTAL)
@@ -306,6 +310,11 @@
 # CONFIG_R8169 is not set
 # CONFIG_SK98LIN is not set
 # CONFIG_TIGON3 is not set
+
+#
+# Ethernet (10000 Mbit)
+#
+# CONFIG_IXGB is not set
 # CONFIG_FDDI is not set
 # CONFIG_HIPPI is not set
 # CONFIG_PPP is not set
@@ -428,6 +437,7 @@
 #
 # I2C Hardware Sensors Chip support
 #
+# CONFIG_I2C_SENSOR is not set
 
 #
 # Mice
@@ -466,61 +476,81 @@
 # CONFIG_VIDEO_DEV is not set
 
 #
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
 # File systems
 #
-# CONFIG_QUOTA is not set
-CONFIG_AUTOFS_FS=y
-# CONFIG_AUTOFS4_FS is not set
-CONFIG_REISERFS_FS=y
-# CONFIG_REISERFS_CHECK is not set
-# CONFIG_REISERFS_PROC_INFO is not set
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
 CONFIG_EXT3_FS=y
 # CONFIG_EXT3_FS_XATTR is not set
 CONFIG_JBD=y
 # CONFIG_JBD_DEBUG is not set
-CONFIG_FAT_FS=y
-CONFIG_MSDOS_FS=y
-CONFIG_VFAT_FS=y
-# CONFIG_EFS_FS is not set
-# CONFIG_CRAMFS is not set
-# CONFIG_TMPFS is not set
-CONFIG_RAMFS=y
-CONFIG_ISO9660_FS=y
-# CONFIG_JOLIET is not set
-# CONFIG_ZISOFS is not set
+CONFIG_REISERFS_FS=y
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
 CONFIG_JFS_FS=y
 # CONFIG_JFS_POSIX_ACL is not set
 # CONFIG_JFS_DEBUG is not set
 # CONFIG_JFS_STATISTICS is not set
+CONFIG_XFS_FS=y
+# CONFIG_XFS_RT is not set
+# CONFIG_XFS_QUOTA is not set
+# CONFIG_XFS_POSIX_ACL is not set
 # CONFIG_MINIX_FS is not set
-# CONFIG_VXFS_FS is not set
+# CONFIG_ROMFS_FS is not set
+# CONFIG_QUOTA is not set
+CONFIG_AUTOFS_FS=y
+# CONFIG_AUTOFS4_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=y
+# CONFIG_JOLIET is not set
+# CONFIG_ZISOFS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
 # CONFIG_NTFS_FS is not set
-# CONFIG_HPFS_FS is not set
+
+#
+# Pseudo filesystems
+#
 CONFIG_PROC_FS=y
 # CONFIG_DEVFS_FS is not set
 CONFIG_DEVPTS_FS=y
+# CONFIG_DEVPTS_FS_XATTR is not set
+# CONFIG_TMPFS is not set
+CONFIG_RAMFS=y
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
 # CONFIG_QNX4FS_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
 # CONFIG_SYSV_FS is not set
-# CONFIG_UDF_FS is not set
 # CONFIG_UFS_FS is not set
-CONFIG_XFS_FS=y
-# CONFIG_XFS_RT is not set
-# CONFIG_XFS_QUOTA is not set
-# CONFIG_XFS_POSIX_ACL is not set
 
 #
 # Network File Systems
 #
-# CONFIG_CODA_FS is not set
-# CONFIG_INTERMEZZO_FS is not set
 CONFIG_NFS_FS=y
 CONFIG_NFS_V3=y
 CONFIG_NFS_V4=y
@@ -528,14 +558,16 @@
 CONFIG_NFSD_V3=y
 # CONFIG_NFSD_V4 is not set
 CONFIG_NFSD_TCP=y
-CONFIG_SUNRPC=y
-# CONFIG_SUNRPC_GSS is not set
 CONFIG_LOCKD=y
 CONFIG_LOCKD_V4=y
 CONFIG_EXPORTFS=y
-CONFIG_CIFS=y
+CONFIG_SUNRPC=y
+# CONFIG_SUNRPC_GSS is not set
 # CONFIG_SMB_FS is not set
+CONFIG_CIFS=y
 # CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_INTERMEZZO_FS is not set
 # CONFIG_AFS_FS is not set
 
 #
@@ -591,7 +623,7 @@
 # Graphics support
 #
 CONFIG_FB=y
-# CONFIG_FB_CLGEN is not set
+# CONFIG_FB_CIRRUS is not set
 # CONFIG_FB_PM2 is not set
 # CONFIG_FB_CYBER2000 is not set
 CONFIG_FB_OF=y
@@ -600,7 +632,12 @@
 # CONFIG_FB_S3TRIO is not set
 # CONFIG_FB_VGA16 is not set
 # CONFIG_FB_RIVA is not set
-# CONFIG_FB_MATROX is not set
+CONFIG_FB_MATROX=y
+CONFIG_FB_MATROX_MILLENIUM=y
+CONFIG_FB_MATROX_MYSTIQUE=y
+CONFIG_FB_MATROX_G450=y
+CONFIG_FB_MATROX_G100=y
+CONFIG_FB_MATROX_MULTIHEAD=y
 # CONFIG_FB_RADEON is not set
 # CONFIG_FB_ATY128 is not set
 # CONFIG_FB_ATY is not set
@@ -618,7 +655,19 @@
 # CONFIG_VGA_CONSOLE is not set
 # CONFIG_MDA_CONSOLE is not set
 CONFIG_DUMMY_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE is not set
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_PCI_CONSOLE=y
+# CONFIG_FONTS is not set
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+
+#
+# Logo configuration
+#
+CONFIG_LOGO=y
+CONFIG_LOGO_LINUX_MONO=y
+CONFIG_LOGO_LINUX_VGA16=y
+CONFIG_LOGO_LINUX_CLUT224=y
 
 #
 # Sound
@@ -629,6 +678,7 @@
 # USB support
 #
 # CONFIG_USB is not set
+# CONFIG_USB_GADGET is not set
 
 #
 # Bluetooth support
diff -urN linux-2.5.70-bk8/arch/ppc64/kernel/Makefile linux-2.5.70-bk9/arch/ppc64/kernel/Makefile
--- linux-2.5.70-bk8/arch/ppc64/kernel/Makefile	2003-05-26 18:01:00.000000000 -0700
+++ linux-2.5.70-bk9/arch/ppc64/kernel/Makefile	2003-06-04 04:37:23.000000000 -0700
@@ -7,7 +7,7 @@
 obj-y               :=	setup.o entry.o traps.o irq.o idle.o \
 			time.o process.o signal.o syscalls.o misc.o ptrace.o \
 			align.o semaphore.o bitops.o stab.o htab.o pacaData.o \
-			udbg.o binfmt_elf32.o sys_ppc32.o sys32.o ioctl32.o \
+			udbg.o binfmt_elf32.o sys_ppc32.o ioctl32.o \
 			ptrace32.o signal32.o pmc.o rtc.o init_task.o \
 			lmb.o pci.o pci_dn.o pci_dma.o
 
diff -urN linux-2.5.70-bk8/arch/ppc64/kernel/head.S linux-2.5.70-bk9/arch/ppc64/kernel/head.S
--- linux-2.5.70-bk8/arch/ppc64/kernel/head.S	2003-05-26 18:00:40.000000000 -0700
+++ linux-2.5.70-bk9/arch/ppc64/kernel/head.S	2003-06-04 04:37:23.000000000 -0700
@@ -596,7 +596,7 @@
 	cmpi    0,r22,0xc
 
 	/* Segment fault on a bolted segment. Go off and map that segment. */
-	beq     .do_stab_bolted
+	beq-	.do_stab_bolted
 stab_bolted_user_return:
 	EXCEPTION_PROLOG_COMMON
 	ld      r3,_DSISR(r1)
@@ -606,7 +606,7 @@
 	rlwinm	r4,r3,32-23,29,29	/* DSISR_STORE -> _PAGE_RW */
 	ld      r3,_DAR(r1)             /* into the hash table */
 
-	beq	2f			/* If so handle it */
+	beq+	2f			/* If so handle it */
 	li	r4,0x300                /* Trap number */
 	bl	.do_stab_SI
 	b	1f
@@ -658,7 +658,7 @@
 	EXCEPTION_PROLOG_COMMON
 
 	andis.	r0,r23,0x0020		/* no ste found? */
-	beq	2f
+	beq+	2f
 	mr	r3,r22			/* SRR0 at interrupt */
 	li	r4,0x400		/* Trap number       */
 	bl	.do_stab_SI
@@ -688,7 +688,7 @@
 	li	r4,0x480                /* Exception vector  */
 	bl	.ste_allocate
 	or.	r3,r3,r3		/* Check return code */
-	beq     fast_exception_return   /* Return if we succeeded */
+	beq+	fast_exception_return   /* Return if we succeeded */
 
 	addi	r3,r1,STACK_FRAME_OVERHEAD
 #ifdef DO_SOFT_DISABLE
@@ -897,18 +897,8 @@
 
 	mfspr   r22,DSISR
 	andis.  r22,r22,0x0020
-	bne+    2f
-	ld	r22,8(r21)	/* get SRR1 */
-	andi.	r22,r22,MSR_PR	/* check if from user */
-	bne+	stab_bolted_user_return  /* from user, send the error on up */
-#if 0
-	li	r3,0
-#ifdef CONFIG_XMON
-	bl	.xmon
-#endif
-1:	b	1b
-#endif
-2:
+	beq-	stab_bolted_user_return
+
 	/* (((ea >> 28) & 0x1fff) << 15) | (ea >> 60) */
 	mfspr	r21,DAR
 	rldicl  r20,r21,36,32   /* Permits a full 32b of ESID */
@@ -1106,9 +1096,11 @@
 	oris    r21,r23,2048   /* valid bit    */
 	rldimi  r21,r22,0,52   /* Insert entry */
 
-	isync
+	/* 
+	 * No need for an isync before or after this slbmte. The exception
+	 * we enter with and the rfid we exit with are context synchronizing .
+	 */
 	slbmte  r20,r21
-	isync
 
 	/* All done -- return from exception. */
 	mfsprg  r20,3                   /* Load the PACA pointer  */
@@ -1861,9 +1853,9 @@
 	li	r5,0
 	std	r0,PACAKSAVE(r13)
 
-	/* ptr to hardware interrupt stack for processor 0                */
+	/* ptr to hardware interrupt stack for boot processor */
 	LOADADDR(r3, hardware_int_paca0)
-	li      r5,0x1000
+	li      r5,PAGE_SIZE
 	sldi    r5,r5,3
 	subi    r5,r5,STACK_FRAME_OVERHEAD
 
@@ -1991,7 +1983,7 @@
 
 	.globl  hardware_int_paca0
 hardware_int_paca0:
-	.space	8*4096
+	.space	8*PAGE_SIZE
 
 /* 1 page segment table per cpu (max 48, cpu0 allocated at STAB0_PHYS_ADDR) */
 	.globl	stab_array
diff -urN linux-2.5.70-bk8/arch/ppc64/kernel/iSeries_setup.c linux-2.5.70-bk9/arch/ppc64/kernel/iSeries_setup.c
--- linux-2.5.70-bk8/arch/ppc64/kernel/iSeries_setup.c	2003-05-26 18:00:45.000000000 -0700
+++ linux-2.5.70-bk9/arch/ppc64/kernel/iSeries_setup.c	2003-06-04 04:37:23.000000000 -0700
@@ -864,7 +864,7 @@
 {
 	if ( dprof_buffer ) {
 		unsigned i;
-		for (i=0; i<MAX_PACAS; ++i) {
+		for (i=0; i<NR_CPUS; ++i) {
 			paca[i].prof_shift = dprof_shift;
 			paca[i].prof_len = dprof_len-1;
 			paca[i].prof_buffer = dprof_buffer;
diff -urN linux-2.5.70-bk8/arch/ppc64/kernel/irq.c linux-2.5.70-bk9/arch/ppc64/kernel/irq.c
--- linux-2.5.70-bk8/arch/ppc64/kernel/irq.c	2003-05-26 18:00:39.000000000 -0700
+++ linux-2.5.70-bk9/arch/ppc64/kernel/irq.c	2003-06-04 04:37:23.000000000 -0700
@@ -381,22 +381,48 @@
 	return 0;
 }
 
-static inline void
-handle_irq_event(int irq, struct pt_regs *regs, struct irqaction *action)
+extern char *ppc_find_proc_name(unsigned *p, char *buf, unsigned buflen);
+
+static inline void handle_irq_event(int irq, struct pt_regs *regs,
+				    struct irqaction *action)
 {
 	int status = 0;
+	int retval = 0;
+	struct irqaction *first_action = action;
 
 	if (!(action->flags & SA_INTERRUPT))
 		local_irq_enable();
 
 	do {
 		status |= action->flags;
-		action->handler(irq, action->dev_id, regs);
+		retval |= action->handler(irq, action->dev_id, regs);
 		action = action->next;
 	} while (action);
 	if (status & SA_SAMPLE_RANDOM)
 		add_interrupt_randomness(irq);
 	local_irq_disable();
+	if (retval != 1) {
+		static int count = 100;
+		char name_buf[256];
+		if (count) {
+			count--;
+			if (retval) {
+				printk("irq event %d: bogus retval mask %x\n",
+					irq, retval);
+			} else {
+				printk("irq %d: nobody cared!\n", irq);
+			}
+			dump_stack();
+			printk("handlers:\n");
+			action = first_action;
+			do {
+				printk("[<%p>]", action->handler);
+				printk(" (%s)\n",
+				       ppc_find_proc_name((unsigned *)action->handler, name_buf, 256));
+				action = action->next;
+			} while (action);
+		}
+	}
 }
 
 /*
@@ -676,7 +702,7 @@
 #ifdef CONFIG_PPC_ISERIES
 	{
 		unsigned i;
-		for (i=0; i<MAX_PACAS; ++i) {
+		for (i=0; i<NR_CPUS; ++i) {
 			if ( paca[i].prof_buffer && (new_value & 1) )
 				paca[i].prof_enabled = 1;
 			else
diff -urN linux-2.5.70-bk8/arch/ppc64/kernel/misc.S linux-2.5.70-bk9/arch/ppc64/kernel/misc.S
--- linux-2.5.70-bk8/arch/ppc64/kernel/misc.S	2003-05-26 18:00:56.000000000 -0700
+++ linux-2.5.70-bk9/arch/ppc64/kernel/misc.S	2003-06-04 04:37:23.000000000 -0700
@@ -609,7 +609,7 @@
 	.llong .sys_ni_syscall		/* old profil syscall */
 	.llong .compat_sys_statfs
 	.llong .compat_sys_fstatfs		/* 100 */
-	.llong .sys_ioperm
+	.llong .sys_ni_syscall		/* old ioperm syscall */
 	.llong .compat_sys_socketcall
 	.llong .sys32_syslog
 	.llong .compat_sys_setitimer
@@ -852,7 +852,7 @@
 	.llong .sys_ni_syscall		/* old profil syscall holder */
 	.llong .sys_statfs
 	.llong .sys_fstatfs		/* 100 */
-	.llong .sys_ioperm
+	.llong .sys_ni_syscall		/* old ioperm syscall */
 	.llong .sys_socketcall
 	.llong .sys_syslog
 	.llong .sys_setitimer
diff -urN linux-2.5.70-bk8/arch/ppc64/kernel/pacaData.c linux-2.5.70-bk9/arch/ppc64/kernel/pacaData.c
--- linux-2.5.70-bk8/arch/ppc64/kernel/pacaData.c	2003-05-26 18:00:45.000000000 -0700
+++ linux-2.5.70-bk9/arch/ppc64/kernel/pacaData.c	2003-06-04 04:37:23.000000000 -0700
@@ -64,7 +64,7 @@
 		(&paca[number].exception_stack[0]) - EXC_FRAME_SIZE,	    \
 }
 
-struct paca_struct paca[MAX_PACAS] __page_aligned = {
+struct paca_struct paca[NR_CPUS] __page_aligned = {
 #ifdef CONFIG_PPC_ISERIES
 	PACAINITDATA( 0, 1, &xItLpQueue, 0, STAB0_VIRT_ADDR),
 #else
@@ -101,6 +101,7 @@
 	PACAINITDATA(29, 0, 0, 0, 0),
 	PACAINITDATA(30, 0, 0, 0, 0),
 	PACAINITDATA(31, 0, 0, 0, 0),
+#if NR_CPUS > 32
 	PACAINITDATA(32, 0, 0, 0, 0),
 	PACAINITDATA(33, 0, 0, 0, 0),
 	PACAINITDATA(34, 0, 0, 0, 0),
@@ -116,5 +117,22 @@
 	PACAINITDATA(44, 0, 0, 0, 0),
 	PACAINITDATA(45, 0, 0, 0, 0),
 	PACAINITDATA(46, 0, 0, 0, 0),
-	PACAINITDATA(47, 0, 0, 0, 0)
+	PACAINITDATA(47, 0, 0, 0, 0),
+	PACAINITDATA(48, 0, 0, 0, 0),
+	PACAINITDATA(49, 0, 0, 0, 0),
+	PACAINITDATA(50, 0, 0, 0, 0),
+	PACAINITDATA(51, 0, 0, 0, 0),
+	PACAINITDATA(52, 0, 0, 0, 0),
+	PACAINITDATA(53, 0, 0, 0, 0),
+	PACAINITDATA(54, 0, 0, 0, 0),
+	PACAINITDATA(55, 0, 0, 0, 0),
+	PACAINITDATA(56, 0, 0, 0, 0),
+	PACAINITDATA(57, 0, 0, 0, 0),
+	PACAINITDATA(58, 0, 0, 0, 0),
+	PACAINITDATA(59, 0, 0, 0, 0),
+	PACAINITDATA(60, 0, 0, 0, 0),
+	PACAINITDATA(61, 0, 0, 0, 0),
+	PACAINITDATA(62, 0, 0, 0, 0),
+	PACAINITDATA(63, 0, 0, 0, 0),
+#endif
 };
diff -urN linux-2.5.70-bk8/arch/ppc64/kernel/pci.c linux-2.5.70-bk9/arch/ppc64/kernel/pci.c
--- linux-2.5.70-bk8/arch/ppc64/kernel/pci.c	2003-05-26 18:00:56.000000000 -0700
+++ linux-2.5.70-bk9/arch/ppc64/kernel/pci.c	2003-06-04 04:37:23.000000000 -0700
@@ -124,7 +124,7 @@
 	ioaddr = (addr > isa_io_base) ? addr - isa_io_base : 0;
 
 	pci_for_each_dev(dev) {
-		if ((dev->class >> 8) == PCI_BASE_CLASS_BRIDGE)
+		if ((dev->class >> 16) == PCI_BASE_CLASS_BRIDGE)
 			continue;
 		for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) {
 			unsigned long start = pci_resource_start(dev,i);
diff -urN linux-2.5.70-bk8/arch/ppc64/kernel/pci_dma.c linux-2.5.70-bk9/arch/ppc64/kernel/pci_dma.c
--- linux-2.5.70-bk8/arch/ppc64/kernel/pci_dma.c	2003-05-26 18:00:41.000000000 -0700
+++ linux-2.5.70-bk9/arch/ppc64/kernel/pci_dma.c	2003-06-04 04:37:23.000000000 -0700
@@ -710,12 +710,6 @@
 	for (ln=bus_list->next; ln != bus_list; ln=ln->next) {
 		bus = pci_bus_b(ln);
 		busdn = PCI_GET_DN(bus);
-		/* NOTE: there should never be a window declared on a bus when
-		 * child devices also have a window.  If this should ever be
-		 * architected, we probably want children to have priority.
-		 * In reality, the PHB containing ISA has the property, but otherwise
-		 * it is the pci-bridges that have the property.
-		 */
 		dma_window = (u32 *)get_property(busdn, "ibm,dma-window", 0);
 		if (dma_window) {
 			/* Bussubno hasn't been copied yet.
@@ -724,6 +718,7 @@
 			busdn->bussubno = bus->number;
 			create_pci_bus_tce_table((unsigned long)busdn);
 		}
+		/* look for a window on a bridge even if the PHB had one */
 		create_tce_tables_for_busesLP(&bus->children);
 	}
 }
diff -urN linux-2.5.70-bk8/arch/ppc64/kernel/process.c linux-2.5.70-bk9/arch/ppc64/kernel/process.c
--- linux-2.5.70-bk8/arch/ppc64/kernel/process.c	2003-05-26 18:00:41.000000000 -0700
+++ linux-2.5.70-bk9/arch/ppc64/kernel/process.c	2003-06-04 04:37:23.000000000 -0700
@@ -67,18 +67,34 @@
 #endif /* CONFIG_SMP */
 }
 
-int
-dump_fpu(struct pt_regs *regs, elf_fpregset_t *fpregs)
+#ifdef CONFIG_SMP
+static void smp_unlazy_onefpu(void *arg)
 {
-	/*
-	 * XXX temporary workaround until threaded coredumps for ppc64
-	 * are implemented - Anton
-	 */
+	struct pt_regs *regs = current->thread.regs;
+
 	if (!regs)
-		return 0;
+		return;
 	if (regs->msr & MSR_FP)
 		giveup_fpu(current);
-	memcpy(fpregs, &current->thread.fpr[0], sizeof(*fpregs));
+}
+
+void dump_smp_unlazy_fpu(void)
+{
+	smp_call_function(smp_unlazy_onefpu, NULL, 1, 1);
+}
+#endif
+
+int dump_task_fpu(struct task_struct *tsk, elf_fpregset_t *fpregs)
+{
+	struct pt_regs *regs = tsk->thread.regs;
+
+	if (!regs)
+		return 0;
+	if (tsk == current && (regs->msr & MSR_FP))
+		giveup_fpu(current);
+
+	memcpy(fpregs, &tsk->thread.fpr[0], sizeof(*fpregs));
+
 	return 1;
 }
 
@@ -113,7 +129,7 @@
 }
 
 static void show_tsk_stack(struct task_struct *p, unsigned long sp);
-static char *ppc_find_proc_name(unsigned *p, char *buf, unsigned buflen);
+char *ppc_find_proc_name(unsigned *p, char *buf, unsigned buflen);
 
 void show_regs(struct pt_regs * regs)
 {
@@ -410,7 +426,7 @@
 
 extern char _stext[], _etext[], __init_begin[], __init_end[];
 
-static char *ppc_find_proc_name(unsigned *p, char *buf, unsigned buflen)
+char *ppc_find_proc_name(unsigned *p, char *buf, unsigned buflen)
 {
 	unsigned long tb_flags;
 	unsigned short name_len;
diff -urN linux-2.5.70-bk8/arch/ppc64/kernel/prom.c linux-2.5.70-bk9/arch/ppc64/kernel/prom.c
--- linux-2.5.70-bk8/arch/ppc64/kernel/prom.c	2003-05-26 18:00:44.000000000 -0700
+++ linux-2.5.70-bk9/arch/ppc64/kernel/prom.c	2003-06-04 04:37:23.000000000 -0700
@@ -1134,7 +1134,7 @@
 	_prom->cpu = (int)(unsigned long)getprop_rval;
 	_xPaca[_prom->cpu].active = 1;
 #ifdef CONFIG_SMP
-	RELOC(cpu_online_map) = 1 << _prom->cpu;
+	RELOC(cpu_online_map) = 1UL << _prom->cpu;
 #endif
 	RELOC(boot_cpuid) = _prom->cpu;
 
diff -urN linux-2.5.70-bk8/arch/ppc64/kernel/setup.c linux-2.5.70-bk9/arch/ppc64/kernel/setup.c
--- linux-2.5.70-bk8/arch/ppc64/kernel/setup.c	2003-05-26 18:00:39.000000000 -0700
+++ linux-2.5.70-bk9/arch/ppc64/kernel/setup.c	2003-06-04 04:37:23.000000000 -0700
@@ -194,7 +194,7 @@
 	printk("naca->pftSize                 = 0x%lx\n", naca->pftSize);
 	printk("naca->debug_switch            = 0x%lx\n", naca->debug_switch);
 	printk("naca->interrupt_controller    = 0x%ld\n", naca->interrupt_controller);
-	printk("systemcf                      = 0x%p\n", systemcfg);
+	printk("systemcfg                      = 0x%p\n", systemcfg);
 	printk("systemcfg->processorCount     = 0x%lx\n", systemcfg->processorCount);
 	printk("systemcfg->physicalMemorySize = 0x%lx\n", systemcfg->physicalMemorySize);
 	printk("systemcfg->dCacheL1LineSize   = 0x%x\n", systemcfg->dCacheL1LineSize);
@@ -256,7 +256,7 @@
 		return 0;
 	}
 
-	if (!(cpu_online_map & (1<<cpu_id)))
+	if (!(cpu_online_map & (1UL << cpu_id)))
 		return 0;
 
 #ifdef CONFIG_SMP
@@ -584,7 +584,7 @@
 	/* The parameter is the number of processors to share in processing lp events */
 	unsigned long i;
 	unsigned long val = simple_strtoul( str, NULL, 0 );
-	if ( ( val > 0 ) && ( val <= MAX_PACAS ) ) {
+	if ( ( val > 0 ) && ( val <= NR_CPUS ) ) {
 		for ( i=1; i<val; ++i )
 			paca[i].lpQueuePtr = paca[0].lpQueuePtr;
 		printk("lpevent processing spread over %ld processors\n", val);
diff -urN linux-2.5.70-bk8/arch/ppc64/kernel/signal.c linux-2.5.70-bk9/arch/ppc64/kernel/signal.c
--- linux-2.5.70-bk8/arch/ppc64/kernel/signal.c	2003-05-26 18:00:20.000000000 -0700
+++ linux-2.5.70-bk9/arch/ppc64/kernel/signal.c	2003-06-04 04:37:23.000000000 -0700
@@ -69,13 +69,11 @@
 };
 
 
-extern int do_signal(sigset_t *oldset, struct pt_regs *regs);
-
 /*
  * Atomically swap in the new signal mask, and wait for a signal.
  */
-long sys_rt_sigsuspend(sigset_t *unewset, size_t sigsetsize, int p3, int p4, int p6,
-		  int p7, struct pt_regs *regs)
+long sys_rt_sigsuspend(sigset_t *unewset, size_t sigsetsize, int p3, int p4,
+		       int p6, int p7, struct pt_regs *regs)
 {
 	sigset_t saveset, newset;
 
@@ -390,8 +388,6 @@
  * want to handle. Thus you cannot kill init even with a SIGKILL even by
  * mistake.
  */
-extern int do_signal32(sigset_t *oldset, struct pt_regs *regs);
-
 int do_signal(sigset_t *oldset, struct pt_regs *regs)
 {
 	siginfo_t info;
diff -urN linux-2.5.70-bk8/arch/ppc64/kernel/signal32.c linux-2.5.70-bk9/arch/ppc64/kernel/signal32.c
--- linux-2.5.70-bk8/arch/ppc64/kernel/signal32.c	2003-05-26 18:00:57.000000000 -0700
+++ linux-2.5.70-bk9/arch/ppc64/kernel/signal32.c	2003-06-04 04:37:23.000000000 -0700
@@ -563,10 +563,6 @@
 	return ret;
 }
 
-
-extern long sys_rt_sigprocmask(int how, sigset_t *set,
-		sigset_t *oset, size_t sigsetsize);
-
 /*
  * Note: it is necessary to treat how as an unsigned int, with the
  * corresponding cast to a signed int to insure that the proper
@@ -613,10 +609,6 @@
 	return 0;
 }
 
-
-extern long sys_rt_sigpending(sigset_t *set, size_t sigsetsize);
-
-
 long sys32_rt_sigpending(compat_sigset_t *set, compat_size_t sigsetsize)
 {
 	sigset_t s;
@@ -683,11 +675,6 @@
 	return err;
 }
 
-
-extern long sys_rt_sigtimedwait(const sigset_t *uthese,
-		siginfo_t *uinfo, const struct timespec *uts,
-		size_t sigsetsize);
-
 long sys32_rt_sigtimedwait(compat_sigset_t *uthese, siginfo_t32 *uinfo,
 		struct compat_timespec *uts, compat_size_t sigsetsize)
 {
@@ -758,9 +745,6 @@
 	return d;
 }
 
-
-extern long sys_rt_sigqueueinfo(int pid, int sig, siginfo_t *uinfo);
-
 /*
  * Note: it is necessary to treat pid and sig as unsigned ints, with the
  * corresponding cast to a signed int to insure that the proper conversion
@@ -786,8 +770,6 @@
 	return ret;
 }
 
-extern int do_signal(sigset_t *oldset, struct pt_regs *regs);
-
 int sys32_rt_sigsuspend(compat_sigset_t* unewset, size_t sigsetsize, int p3,
 		int p4, int p6, int p7, struct pt_regs *regs)
 {
diff -urN linux-2.5.70-bk8/arch/ppc64/kernel/smp.c linux-2.5.70-bk9/arch/ppc64/kernel/smp.c
--- linux-2.5.70-bk8/arch/ppc64/kernel/smp.c	2003-05-26 18:00:45.000000000 -0700
+++ linux-2.5.70-bk9/arch/ppc64/kernel/smp.c	2003-06-04 04:37:23.000000000 -0700
@@ -113,7 +113,7 @@
 	struct ItLpPaca * lpPaca;
 
 	np = 0;
-        for (i=0; i < MAX_PACAS; ++i) {
+        for (i=0; i < NR_CPUS; ++i) {
                 lpPaca = paca[i].xLpPacaPtr;
                 if ( lpPaca->xDynProcStatus < 2 ) {
                         ++np;
@@ -128,7 +128,7 @@
 	unsigned np = 0;
 	struct ItLpPaca *lpPaca;
 
-	for (i=0; i < MAX_PACAS; ++i) {
+	for (i=0; i < NR_CPUS; ++i) {
 		lpPaca = paca[i].xLpPacaPtr;
 		if (lpPaca->xDynProcStatus < 2) {
 			paca[i].active = 1;
@@ -144,7 +144,7 @@
 	struct ItLpPaca * lpPaca;
 	/* Verify we have a Paca for processor nr */
 	if ( ( nr <= 0 ) ||
-	     ( nr >= MAX_PACAS ) )
+	     ( nr >= NR_CPUS ) )
 		return;
 	/* Verify that our partition has a processor nr */
 	lpPaca = paca[nr].xLpPacaPtr;
@@ -228,7 +228,7 @@
 {
 	/* Verify we have a Paca for processor nr */
 	if ( ( nr <= 0 ) ||
-	     ( nr >= MAX_PACAS ) )
+	     ( nr >= NR_CPUS ) )
 		return;
 
 	/* The information for processor bringup must
@@ -392,17 +392,6 @@
 	smp_message_pass(cpu, PPC_MSG_RESCHEDULE, 0, 0);
 }
 
-/*
- * this function sends a reschedule IPI to all (other) CPUs.
- * This should only be used if some 'global' task became runnable,
- * such as a RT task, that must be handled now. The first CPU
- * that manages to grab the task will run it.
- */
-void smp_send_reschedule_all(void)
-{
-	smp_message_pass(MSG_ALL_BUT_SELF, PPC_MSG_RESCHEDULE, 0, 0);
-}
-
 #ifdef CONFIG_XMON
 void smp_send_xmon_break(int cpu)
 {
diff -urN linux-2.5.70-bk8/arch/ppc64/kernel/stab.c linux-2.5.70-bk9/arch/ppc64/kernel/stab.c
--- linux-2.5.70-bk8/arch/ppc64/kernel/stab.c	2003-05-26 18:00:45.000000000 -0700
+++ linux-2.5.70-bk9/arch/ppc64/kernel/stab.c	2003-06-04 04:37:23.000000000 -0700
@@ -23,7 +23,8 @@
 #include <asm/pmc.h>
 
 int make_ste(unsigned long stab, unsigned long esid, unsigned long vsid);
-void make_slbe(unsigned long esid, unsigned long vsid, int large);
+void make_slbe(unsigned long esid, unsigned long vsid, int large,
+	       int kernel_segment);
 
 /*
  * Build an entry for the base kernel segment and put it into
@@ -45,7 +46,8 @@
 		asm volatile("isync":::"memory");
 		asm volatile("slbmte  %0,%0"::"r" (0) : "memory");
 		asm volatile("isync; slbia; isync":::"memory");
-		make_slbe(esid, vsid, 0);
+		make_slbe(esid, vsid, 0, 1);
+		asm volatile("isync":::"memory");
 #endif
 	} else {
 		asm volatile("isync; slbia; isync":::"memory");
@@ -139,10 +141,13 @@
 
 /*
  * Create a segment buffer entry for the given esid/vsid pair.
+ *
+ * NOTE: A context syncronising instruction is required before and after
+ * this, in the common case we use exception entry and rfid.
  */
-void make_slbe(unsigned long esid, unsigned long vsid, int large)
+void make_slbe(unsigned long esid, unsigned long vsid, int large,
+	       int kernel_segment)
 {
-	int kernel_segment = 0;
 	unsigned long entry, castout_entry;
 	union {
 		unsigned long word0;
@@ -153,42 +158,15 @@
 		slb_dword1    data;
 	} vsid_data;
 
-	if (REGION_ID(esid << SID_SHIFT) >= KERNEL_REGION_ID)
-		kernel_segment = 1;
-
 	/*
-	 * Find an empty entry, if one exists.
+	 * Find an empty entry, if one exists. Must start at 0 because
+	 * we use this code to load SLB entry 0 at boot.
 	 */
 	for (entry = 0; entry < naca->slb_size; entry++) {
 		asm volatile("slbmfee  %0,%1" 
 			     : "=r" (esid_data) : "r" (entry)); 
-		if (!esid_data.data.v) {
-			/* 
-			 * Write the new SLB entry.
-			 */
-			vsid_data.word0 = 0;
-			vsid_data.data.vsid = vsid;
-			vsid_data.data.kp = 1;
-			if (large)
-				vsid_data.data.l = 1;
-			if (kernel_segment)
-				vsid_data.data.c = 1;
-
-			esid_data.word0 = 0;
-			esid_data.data.esid = esid;
-			esid_data.data.v = 1;
-			esid_data.data.index = entry;
-
-			/* slbie not needed as no previous mapping existed. */
-			/* Order update  */
-			asm volatile("isync" : : : "memory");
-			asm volatile("slbmte  %0,%1" 
-				     : : "r" (vsid_data), 
-				     "r" (esid_data)); 
-			/* Order update  */
-			asm volatile("isync" : : : "memory");
-			return;
-		}
+		if (!esid_data.data.v)
+			goto write_entry;
 	}
 
 	/*
@@ -211,13 +189,13 @@
 		if (castout_entry >= naca->slb_size)
 			castout_entry = 1; 
 		asm volatile("slbmfee  %0,%1" : "=r" (esid_data) : "r" (entry));
-	} while (esid_data.data.esid == GET_ESID((unsigned long)_get_SP()) &&
-			esid_data.data.v);
+	} while (esid_data.data.esid == GET_ESID((unsigned long)_get_SP()));
 
 	get_paca()->xStab_data.next_round_robin = castout_entry;
 
 	/* slbie not needed as the previous mapping is still valid. */
-	
+
+write_entry:	
 	/* 
 	 * Write the new SLB entry.
 	 */
@@ -234,10 +212,11 @@
 	esid_data.data.v = 1;
 	esid_data.data.index = entry;
 
-	asm volatile("isync" : : : "memory");   /* Order update */
-	asm volatile("slbmte  %0,%1" 
-		     : : "r" (vsid_data), "r" (esid_data)); 
-	asm volatile("isync" : : : "memory" );   /* Order update */
+	/*
+	 * No need for an isync before or after this slbmte. The exception
+         * we enter with and the rfid we exit with are context synchronizing.
+	 */
+	asm volatile("slbmte  %0,%1" : : "r" (vsid_data), "r" (esid_data)); 
 }
 
 static inline void __ste_allocate(unsigned long esid, unsigned long vsid,
@@ -246,10 +225,10 @@
 	if (cpu_has_slb()) {
 #ifndef CONFIG_PPC_ISERIES
 		if (REGION_ID(esid << SID_SHIFT) == KERNEL_REGION_ID)
-			make_slbe(esid, vsid, 1); 
+			make_slbe(esid, vsid, 1, kernel_segment); 
 		else
 #endif
-			make_slbe(esid, vsid, 0); 
+			make_slbe(esid, vsid, 0, kernel_segment);
 	} else {
 		unsigned char top_entry, stab_entry, *segments; 
 
diff -urN linux-2.5.70-bk8/arch/ppc64/kernel/sys32.S linux-2.5.70-bk9/arch/ppc64/kernel/sys32.S
--- linux-2.5.70-bk8/arch/ppc64/kernel/sys32.S	2003-05-26 18:00:56.000000000 -0700
+++ linux-2.5.70-bk9/arch/ppc64/kernel/sys32.S	1969-12-31 16:00:00.000000000 -0800
@@ -1,27 +0,0 @@
-/* 
- * sys32.S: I-cache tricks for 32-bit compatibility layer simple
- *          conversions.
- *
- * Copyright (C) 1997 David S. Miller (davem@caip.rutgers.edu)
- * Copyright (C) 1998 Jakub Jelinek   (jj@ultra.linux.cz)
- * Copyright (C) 2000 Ken Aaker (kdaaker@rchland.vnet.ibm.com)
- * For PPC ABI convention is parms in Regs 3-10.
- * The router in entry.S clears the high 32 bits in the first
- * 4 arguments (R3-R6).
- *
- *      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 <asm/ppc_asm.h>
-#include <asm/errno.h>
-#include <asm/processor.h>
-
-	.text
-
-_GLOBAL(ppc32_lseek)
-	extsw		r4,r4		/* sign extend off_t offset parm */
-	b		.sys_lseek
-
diff -urN linux-2.5.70-bk8/arch/ppc64/kernel/sys_ppc32.c linux-2.5.70-bk9/arch/ppc64/kernel/sys_ppc32.c
--- linux-2.5.70-bk8/arch/ppc64/kernel/sys_ppc32.c	2003-05-26 18:00:44.000000000 -0700
+++ linux-2.5.70-bk9/arch/ppc64/kernel/sys_ppc32.c	2003-06-04 04:37:23.000000000 -0700
@@ -2318,6 +2318,14 @@
 	return sys_nice((int)increment);
 }
 
+extern off_t sys_lseek(unsigned int fd, off_t offset, unsigned int origin);
+
+off_t ppc32_lseek(unsigned int fd, u32 offset, unsigned int origin)
+{
+	/* sign extend n */
+	return sys_lseek(fd, (int)offset, origin);
+}
+
 /*
  * This is just a version for 32-bit applications which does
  * not force O_LARGEFILE on.
diff -urN linux-2.5.70-bk8/arch/ppc64/kernel/syscalls.c linux-2.5.70-bk9/arch/ppc64/kernel/syscalls.c
--- linux-2.5.70-bk8/arch/ppc64/kernel/syscalls.c	2003-05-26 18:00:43.000000000 -0700
+++ linux-2.5.70-bk9/arch/ppc64/kernel/syscalls.c	2003-06-04 04:37:23.000000000 -0700
@@ -50,11 +50,6 @@
 {
 }
 
-int sys_ioperm(unsigned long from, unsigned long num, int on)
-{
-	return -EIO;
-}
-
 /*
  * sys_ipc() is the de-multiplexer for the SysV IPC calls..
  *
diff -urN linux-2.5.70-bk8/arch/ppc64/kernel/traps.c linux-2.5.70-bk9/arch/ppc64/kernel/traps.c
--- linux-2.5.70-bk8/arch/ppc64/kernel/traps.c	2003-05-26 18:00:40.000000000 -0700
+++ linux-2.5.70-bk9/arch/ppc64/kernel/traps.c	2003-06-04 04:37:23.000000000 -0700
@@ -349,9 +349,8 @@
 void
 KernelFPUnavailableException(struct pt_regs *regs)
 {
-	printk("Illegal floating point used in kernel "
-			"(task=0x%p, pc=0x%016lx, trap=0x%08lx)\n",
-		current, regs->nip, regs->trap);
+	printk("Illegal floating point used in kernel (task=0x%p, "
+		"pc=0x%016lx, trap=0x%lx)\n", current, regs->nip, regs->trap);
 	panic("Unrecoverable FP Unavailable Exception in Kernel");
 }
 
diff -urN linux-2.5.70-bk8/arch/ppc64/lib/copyuser.S linux-2.5.70-bk9/arch/ppc64/lib/copyuser.S
--- linux-2.5.70-bk8/arch/ppc64/lib/copyuser.S	2003-05-26 18:01:00.000000000 -0700
+++ linux-2.5.70-bk9/arch/ppc64/lib/copyuser.S	2003-06-04 04:37:23.000000000 -0700
@@ -483,8 +483,20 @@
  * on an exception, reset to the beginning and jump back into the
  * standard __copy_tofrom_user
  */
-100:	ld	r3,-24(r1)
-	ld	r4,-24(r1)
+100:	ld	r20,-120(1)
+	ld	r21,-112(1)
+	ld	r22,-104(1)
+	ld	r23,-96(1)
+	ld	r24,-88(1)
+	ld	r25,-80(1)
+	ld	r26,-72(1)
+	ld	r27,-64(1)
+	ld	r28,-56(1)
+	ld	r29,-48(1)
+	ld	r30,-40(1)
+	ld	r31,-32(1)
+	ld	r3,-24(r1)
+	ld	r4,-16(r1)
 	li	r5,4096
 	b	.Ldst_aligned
 
diff -urN linux-2.5.70-bk8/arch/ppc64/mm/init.c linux-2.5.70-bk9/arch/ppc64/mm/init.c
--- linux-2.5.70-bk8/arch/ppc64/mm/init.c	2003-05-26 18:00:41.000000000 -0700
+++ linux-2.5.70-bk9/arch/ppc64/mm/init.c	2003-06-04 04:37:23.000000000 -0700
@@ -36,6 +36,7 @@
 #include <linux/delay.h>
 #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
@@ -509,6 +510,34 @@
 }
 #endif
 
+static struct kcore_list kcore_vmem;
+
+static void setup_kcore(void)
+{
+	int i;
+
+	for (i=0; i < lmb.memory.cnt; i++) {
+		unsigned long physbase, size;
+		unsigned long type = lmb.memory.region[i].type;
+		struct kcore_list *kcore_mem;
+
+		if (type != LMB_MEMORY_AREA)
+			continue;
+
+		physbase = lmb.memory.region[i].physbase;
+		size = lmb.memory.region[i].size;
+
+		/* GFP_ATOMIC to avoid might_sleep warnings during boot */
+		kcore_mem = kmalloc(sizeof(struct kcore_list), GFP_ATOMIC);
+		if (!kcore_mem)
+			panic("mem_init: kmalloc failed\n");
+
+		kclist_add(kcore_mem, __va(physbase), size);
+	}
+
+	kclist_add(&kcore_vmem, (void *)VMALLOC_START, VMALLOC_END-VMALLOC_START);
+}
+
 void initialize_paca_hardware_interrupt_stack(void);
 
 void __init mem_init(void)
@@ -577,6 +606,8 @@
 #endif
 	mem_init_done = 1;
 
+	setup_kcore();
+
 	/* set the last page of each hardware interrupt stack to be protected */
 	initialize_paca_hardware_interrupt_stack();
 
diff -urN linux-2.5.70-bk8/arch/um/drivers/daemon_kern.c linux-2.5.70-bk9/arch/um/drivers/daemon_kern.c
--- linux-2.5.70-bk8/arch/um/drivers/daemon_kern.c	2003-05-26 18:00:20.000000000 -0700
+++ linux-2.5.70-bk9/arch/um/drivers/daemon_kern.c	2003-06-04 04:37:23.000000000 -0700
@@ -24,18 +24,13 @@
 	struct daemon_data *dpri;
 	struct daemon_init *init = data;
 
-	init_etherdev(dev, 0);
 	pri = dev->priv;
 	dpri = (struct daemon_data *) pri->user;
-	*dpri = ((struct daemon_data)
-		{ .sock_type 		= init->sock_type,
-		  .ctl_sock 		= init->ctl_sock,
-		  .ctl_addr 		= NULL,
-		  .data_addr 		= NULL,
-		  .local_addr 		= NULL,
-		  .fd 			= -1,
-		  .control 		= -1,
-		  .dev 			= dev });
+	dpri->sock_type = init->sock_type;
+	dpri->ctl_sock = init->ctl_sock;
+	dpri->fd = -1;
+	dpri->control = -1;
+	dpri->dev = dev;
 
 	printk("daemon backend (uml_switch version %d) - %s:%s", 
 	       SWITCH_VERSION, dpri->sock_type, dpri->ctl_sock);
diff -urN linux-2.5.70-bk8/arch/um/drivers/mcast_kern.c linux-2.5.70-bk9/arch/um/drivers/mcast_kern.c
--- linux-2.5.70-bk8/arch/um/drivers/mcast_kern.c	2003-05-26 18:00:20.000000000 -0700
+++ linux-2.5.70-bk9/arch/um/drivers/mcast_kern.c	2003-06-04 04:37:23.000000000 -0700
@@ -32,15 +32,13 @@
 	struct mcast_data *dpri;
 	struct mcast_init *init = data;
 
-	init_etherdev(dev, 0);
 	pri = dev->priv;
 	dpri = (struct mcast_data *) pri->user;
-	*dpri = ((struct mcast_data)
-		{ .addr 	= init->addr,
-		  .port 	= init->port,
-		  .ttl 		= init->ttl,
-		  .mcast_addr 	= NULL,
-		  .dev 		= dev });
+	dpri->addr = init->addr;
+	dpri->port = init->port;
+	dpri->ttl = init->ttl;
+	dpri->dev = dev;
+
 	printk("mcast backend ");
 	printk("multicast adddress: %s:%u, TTL:%u ",
 	       dpri->addr, dpri->port, dpri->ttl);
diff -urN linux-2.5.70-bk8/arch/um/drivers/net_kern.c linux-2.5.70-bk9/arch/um/drivers/net_kern.c
--- linux-2.5.70-bk8/arch/um/drivers/net_kern.c	2003-05-26 18:00:39.000000000 -0700
+++ linux-2.5.70-bk9/arch/um/drivers/net_kern.c	2003-06-04 04:37:23.000000000 -0700
@@ -292,45 +292,46 @@
 	struct uml_net *device;
 	struct net_device *dev;
 	struct uml_net_private *lp;
-	int save, err, size;
+	int err, size;
 
 	size = transport->private_size + sizeof(struct uml_net_private) + 
 		sizeof(((struct uml_net_private *) 0)->user);
 
 	device = kmalloc(sizeof(*device), GFP_KERNEL);
-	if(device == NULL){
+	if (device == NULL) {
 		printk(KERN_ERR "eth_configure failed to allocate uml_net\n");
 		return(1);
 	}
 
-	*device = ((struct uml_net) { .list 	= LIST_HEAD_INIT(device->list),
-				      .dev 	= NULL,
-				      .index	= n,
-				      .mac	= { [ 0 ... 5 ] = 0 },
-				      .have_mac	= 0 });
+	memset(device, 0, sizeof(*device));
+	device->list = INIT_LIST_HEAD(device->list);
+	device->index = n;
 
 	spin_lock(&devices_lock);
 	list_add(&device->list, &devices);
 	spin_unlock(&devices_lock);
 
-	if(setup_etheraddr(mac, device->mac))
+	if (setup_etheraddr(mac, device->mac))
 		device->have_mac = 1;
 
 	printk(KERN_INFO "Netdevice %d ", n);
-	if(device->have_mac) printk("(%02x:%02x:%02x:%02x:%02x:%02x) ",
-				    device->mac[0], device->mac[1], 
-				    device->mac[2], device->mac[3], 
-				    device->mac[4], device->mac[5]);
+	if (device->have_mac)
+		printk("(%02x:%02x:%02x:%02x:%02x:%02x) ",
+		       device->mac[0], device->mac[1],
+		       device->mac[2], device->mac[3],
+		       device->mac[4], device->mac[5]);
 	printk(": ");
-	dev = kmalloc(sizeof(*dev) + size, GFP_KERNEL);
-	if(dev == NULL){
+	dev = alloc_etherdev(size);
+	if (dev == NULL) {
 		printk(KERN_ERR "eth_configure: failed to allocate device\n");
-		return(1);
+		return 1;
 	}
-	memset(dev, 0, sizeof(*dev) + size);
 
+	/* If this name ends up conflicting with an existing registered
+	 * netdevice, that is OK, register_netdev{,ice}() will notice this
+	 * and fail.
+	 */
 	snprintf(dev->name, sizeof(dev->name), "eth%d", n);
-	dev->priv = (void *) &dev[1];
 	device->dev = dev;
 
         dev->hard_header = uml_net_hard_header;
@@ -357,42 +358,35 @@
 	rtnl_lock();
 	err = register_netdevice(dev);
 	rtnl_unlock();
-	if(err)
-		return(1);
+	if (err)
+		return 1;
 	lp = dev->priv;
 
-	/* lp.user is the first four bytes of the transport data, which
-	 * has already been initialized.  This structure assignment will
-	 * overwrite that, so we make sure that .user gets overwritten with
-	 * what it already has.
-	 */
-	save = lp->user[0];
-	*lp = ((struct uml_net_private) 
-		{ .list  		= LIST_HEAD_INIT(lp->list),
-		  .lock 		= SPIN_LOCK_UNLOCKED,
-		  .dev 			= dev,
-		  .fd 			= -1,
-		  .mac 			= { 0xfe, 0xfd, 0x0, 0x0, 0x0, 0x0},
-		  .have_mac 		= device->have_mac,
-		  .protocol 		= transport->kern->protocol,
-		  .open 		= transport->user->open,
-		  .close 		= transport->user->close,
-		  .remove 		= transport->user->remove,
-		  .read 		= transport->kern->read,
-		  .write 		= transport->kern->write,
-		  .add_address 		= transport->user->add_address,
-		  .delete_address  	= transport->user->delete_address,
-		  .set_mtu 		= transport->user->set_mtu,
-		  .user  		= { save } });
+	lp->list = INIT_LIST_HEAD(lp->list);
+	spin_lock_init(&lp->lock);
+	lp->dev = dev;
+	lp->fd = -1;
+	lp->mac = { 0xfe, 0xfd, 0x0, 0x0, 0x0, 0x0 };
+	lp->have_mac = device->have_mac;
+	lp->protocol = transport->kern->protocol;
+	lp->open = transport->user->open;
+	lp->close = transport->user->close;
+	lp->remove = transport->user->remove;
+	lp->read = transport->kern->read;
+	lp->write = transport->kern->write;
+	lp->add_address = transport->user->add_address;
+	lp->delete_address = transport->user->delete_address;
+	lp->set_mtu = transport->user->set_mtu;
+
 	init_timer(&lp->tl);
 	lp->tl.function = uml_net_user_timer_expire;
-	memset(&lp->stats, 0, sizeof(lp->stats));
-	if(lp->have_mac) memcpy(lp->mac, device->mac, sizeof(lp->mac));
+	if (lp->have_mac)
+		memcpy(lp->mac, device->mac, sizeof(lp->mac));
 
-	if(transport->user->init) 
+	if (transport->user->init) 
 		(*transport->user->init)(&lp->user, dev);
 
-	if(device->have_mac)
+	if (device->have_mac)
 		set_ether_mac(dev, device->mac);
 	return(0);
 }
@@ -538,13 +532,15 @@
 	if(err) return(1);
 
 	new = alloc_bootmem(sizeof(new));
-	if(new == NULL){
+	if (new == NULL){
 		printk("eth_init : alloc_bootmem failed\n");
 		return(1);
 	}
-	*new = ((struct eth_init) { .list  	= LIST_HEAD_INIT(new->list),
-				    .index  	= n,
-				    .init 	= str });
+
+	new->list = INIT_LIST_HEAD(new->list);
+	new->index = n;
+	new->init = str;
+
 	list_add_tail(&new->list, &eth_cmd_line);
 	return(1);
 }
diff -urN linux-2.5.70-bk8/arch/um/drivers/pcap_kern.c linux-2.5.70-bk9/arch/um/drivers/pcap_kern.c
--- linux-2.5.70-bk8/arch/um/drivers/pcap_kern.c	2003-05-26 18:00:59.000000000 -0700
+++ linux-2.5.70-bk9/arch/um/drivers/pcap_kern.c	2003-06-04 04:37:23.000000000 -0700
@@ -23,16 +23,12 @@
 	struct pcap_data *ppri;
 	struct pcap_init *init = data;
 
-	init_etherdev(dev, 0);
 	pri = dev->priv;
 	ppri = (struct pcap_data *) pri->user;
-	*ppri = ((struct pcap_data)
-		{ .host_if 	= init->host_if,
-		  .promisc 	= init->promisc,
-		  .optimize 	= init->optimize,
-		  .filter 	= init->filter,
-		  .compiled 	= NULL,
-		  .pcap 	= NULL });
+	ppri->host_if = init->host_if;
+	ppri->promisc = init->promisc;
+	ppri->optimize = init->optimize;
+	ppri->filter = init->filter;
 }
 
 static int pcap_read(int fd, struct sk_buff **skb, 
diff -urN linux-2.5.70-bk8/arch/um/os-Linux/drivers/ethertap_kern.c linux-2.5.70-bk9/arch/um/os-Linux/drivers/ethertap_kern.c
--- linux-2.5.70-bk8/arch/um/os-Linux/drivers/ethertap_kern.c	2003-05-26 18:00:21.000000000 -0700
+++ linux-2.5.70-bk9/arch/um/os-Linux/drivers/ethertap_kern.c	2003-06-04 04:37:23.000000000 -0700
@@ -24,18 +24,16 @@
 	struct ethertap_data *epri;
 	struct ethertap_init *init = data;
 
-	init_etherdev(dev, 0);
 	pri = dev->priv;
 	epri = (struct ethertap_data *) pri->user;
-	*epri = ((struct ethertap_data)
-		{ .dev_name 		= init->dev_name,
-		  .gate_addr 		= init->gate_addr,
-		  .data_fd 		= -1,
-		  .control_fd 		= -1,
-		  .dev 			= dev });
+	epri->dev_name = init->dev_name;
+	epri->gate_addr = init->gate_addr;
+	epri->data_fd = -1;
+	epri->control_fd = -1;
+	epri->dev = dev;
 
 	printk("ethertap backend - %s", epri->dev_name);
-	if(epri->gate_addr != NULL) 
+	if (epri->gate_addr != NULL)
 		printk(", IP = %s", epri->gate_addr);
 	printk("\n");
 }
diff -urN linux-2.5.70-bk8/arch/um/os-Linux/drivers/tuntap_kern.c linux-2.5.70-bk9/arch/um/os-Linux/drivers/tuntap_kern.c
--- linux-2.5.70-bk8/arch/um/os-Linux/drivers/tuntap_kern.c	2003-05-26 18:00:41.000000000 -0700
+++ linux-2.5.70-bk9/arch/um/os-Linux/drivers/tuntap_kern.c	2003-06-04 04:37:23.000000000 -0700
@@ -24,17 +24,16 @@
 	struct tuntap_data *tpri;
 	struct tuntap_init *init = data;
 
-	init_etherdev(dev, 0);
 	pri = dev->priv;
 	tpri = (struct tuntap_data *) pri->user;
-	*tpri = ((struct tuntap_data)
-		{ .dev_name 		= init->dev_name,
-		  .fixed_config 	= (init->dev_name != NULL),
-		  .gate_addr 		= init->gate_addr,
-		  .fd 			= -1,
-		  .dev 			= dev });
+	tpri->dev_name = init->dev_name;
+	tpri->fixed_config = (init->dev_name != NULL);
+	tpri->gate_addr = init->gate_addr;
+	tpri->fd = -1;
+	tpri->dev = dev;
+
 	printk("TUN/TAP backend - ");
-	if(tpri->gate_addr != NULL) 
+	if (tpri->gate_addr != NULL)
 		printk("IP = %s", tpri->gate_addr);
 	printk("\n");
 }
diff -urN linux-2.5.70-bk8/drivers/base/base.h linux-2.5.70-bk9/drivers/base/base.h
--- linux-2.5.70-bk8/drivers/base/base.h	2003-05-26 18:00:38.000000000 -0700
+++ linux-2.5.70-bk9/drivers/base/base.h	2003-06-04 04:37:23.000000000 -0700
@@ -4,3 +4,12 @@
 extern int bus_add_driver(struct device_driver *);
 extern void bus_remove_driver(struct device_driver *);
 
+static inline struct class_device *to_class_dev(struct kobject *obj)
+{
+	return container_of(obj,struct class_device,kobj);
+}
+static inline
+struct class_device_attribute *to_class_dev_attr(struct attribute *_attr)
+{
+	return container_of(_attr,struct class_device_attribute,attr);
+}
diff -urN linux-2.5.70-bk8/drivers/base/bus.c linux-2.5.70-bk9/drivers/base/bus.c
--- linux-2.5.70-bk8/drivers/base/bus.c	2003-05-26 18:00:26.000000000 -0700
+++ linux-2.5.70-bk9/drivers/base/bus.c	2003-06-04 04:37:23.000000000 -0700
@@ -1,10 +1,11 @@
 /*
  * bus.c - bus driver management
+ *
+ * Copyright (c) 2002-3 Patrick Mochel
+ * Copyright (c) 2002-3 Open Source Development Labs
  * 
- * Copyright (c) 2002 Patrick Mochel
- *		 2002 Open Source Development Lab
- * 
- * 
+ * This file is released under the GPLv2
+ *
  */
 
 #undef DEBUG
diff -urN linux-2.5.70-bk8/drivers/base/class.c linux-2.5.70-bk9/drivers/base/class.c
--- linux-2.5.70-bk8/drivers/base/class.c	2003-05-26 18:01:00.000000000 -0700
+++ linux-2.5.70-bk9/drivers/base/class.c	2003-06-04 04:37:23.000000000 -0700
@@ -1,7 +1,11 @@
 /*
  * class.c - basic device class management
+ *
+ * Copyright (c) 2002-3 Patrick Mochel
+ * Copyright (c) 2002-3 Open Source Development Labs
  * 
- * Copyright (c) 2001-2003 Patrick Mochel <mochel@osdl.org>
+ * This file is released under the GPLv2
+ *
  */
 
 #undef DEBUG
@@ -148,9 +152,6 @@
 }
 
 
-#define to_class_dev(obj) container_of(obj,struct class_device,kobj)
-#define to_class_dev_attr(_attr) container_of(_attr,struct class_device_attribute,attr)
-
 static ssize_t
 class_device_attr_show(struct kobject * kobj, struct attribute * attr,
 		       char * buf)
@@ -182,8 +183,20 @@
 	.store	= class_device_attr_store,
 };
 
+static void class_dev_release(struct kobject * kobj)
+{
+	struct class_device *cd = to_class_dev(kobj);
+	struct class * cls = cd->class;
+
+	pr_debug("device class '%s': release.\n",cd->class_id);
+
+	if (cls->release)
+		cd->release(cd);
+}
+
 static struct kobj_type ktype_class_device = {
 	.sysfs_ops	= &class_dev_sysfs_ops,
+	.release	= class_dev_release,
 };
 
 static int class_hotplug_filter(struct kset *kset, struct kobject *kobj)
@@ -311,11 +324,8 @@
 		up_write(&parent->subsys.rwsem);
 	}
 
-	if (class_dev->dev) {
-		class_device_dev_unlink(class_dev);
-		class_device_driver_unlink(class_dev);
-		put_device(class_dev->dev);
-	}
+	class_device_dev_unlink(class_dev);
+	class_device_driver_unlink(class_dev);
 	
 	kobject_del(&class_dev->kobj);
 
diff -urN linux-2.5.70-bk8/drivers/base/core.c linux-2.5.70-bk9/drivers/base/core.c
--- linux-2.5.70-bk8/drivers/base/core.c	2003-05-26 18:00:21.000000000 -0700
+++ linux-2.5.70-bk9/drivers/base/core.c	2003-06-04 04:37:23.000000000 -0700
@@ -1,8 +1,11 @@
 /*
  * drivers/base/core.c - core driver model code (device registration, etc)
+ *
+ * Copyright (c) 2002-3 Patrick Mochel
+ * Copyright (c) 2002-3 Open Source Development Labs
  * 
- * Copyright (c) 2002 Patrick Mochel
- *		 2002 Open Source Development Lab
+ * This file is released under the GPLv2
+ *
  */
 
 #undef DEBUG
diff -urN linux-2.5.70-bk8/drivers/base/cpu.c linux-2.5.70-bk9/drivers/base/cpu.c
--- linux-2.5.70-bk8/drivers/base/cpu.c	2003-05-26 18:00:28.000000000 -0700
+++ linux-2.5.70-bk9/drivers/base/cpu.c	2003-06-04 04:37:23.000000000 -0700
@@ -46,7 +46,7 @@
 	snprintf(cpu->sysdev.class_dev.class_id, BUS_ID_SIZE, "cpu%d", num);
 	retval = class_device_register(&cpu->sysdev.class_dev);
 	if (retval) {
-		// FIXME cleanup sys_device_register
+		sys_device_unregister(&cpu->sysdev);
 		return retval;
 	}
 	return 0;
@@ -58,10 +58,12 @@
 	int error;
 
 	error = class_register(&cpu_class);
-	if (!error) {
-		error = driver_register(&cpu_driver);
-		if (error)
-			class_unregister(&cpu_class);
-	}
+	if (error)
+		goto out;
+	
+	error = driver_register(&cpu_driver);
+	if (error)
+		class_unregister(&cpu_class);
+out:
 	return error;
 }
diff -urN linux-2.5.70-bk8/drivers/base/driver.c linux-2.5.70-bk9/drivers/base/driver.c
--- linux-2.5.70-bk8/drivers/base/driver.c	2003-05-26 18:00:56.000000000 -0700
+++ linux-2.5.70-bk9/drivers/base/driver.c	2003-06-04 04:37:23.000000000 -0700
@@ -1,6 +1,11 @@
 /*
  * driver.c - centralized device driver management
  *
+ * Copyright (c) 2002-3 Patrick Mochel
+ * Copyright (c) 2002-3 Open Source Development Labs
+ * 
+ * This file is released under the GPLv2
+ *
  */
 
 #undef DEBUG
diff -urN linux-2.5.70-bk8/drivers/base/firmware.c linux-2.5.70-bk9/drivers/base/firmware.c
--- linux-2.5.70-bk8/drivers/base/firmware.c	2003-05-26 18:00:40.000000000 -0700
+++ linux-2.5.70-bk9/drivers/base/firmware.c	2003-06-04 04:37:23.000000000 -0700
@@ -1,5 +1,11 @@
 /*
  * firmware.c - firmware subsystem hoohaw.
+ *
+ * Copyright (c) 2002-3 Patrick Mochel
+ * Copyright (c) 2002-3 Open Source Development Labs
+ * 
+ * This file is released under the GPLv2
+ *
  */
 
 #include <linux/kobject.h>
diff -urN linux-2.5.70-bk8/drivers/base/init.c linux-2.5.70-bk9/drivers/base/init.c
--- linux-2.5.70-bk8/drivers/base/init.c	2003-05-26 18:00:22.000000000 -0700
+++ linux-2.5.70-bk9/drivers/base/init.c	2003-06-04 04:37:23.000000000 -0700
@@ -1,3 +1,11 @@
+/*
+ *
+ * Copyright (c) 2002-3 Patrick Mochel
+ * Copyright (c) 2002-3 Open Source Development Labs
+ * 
+ * This file is released under the GPLv2
+ *
+ */
 
 #include <linux/device.h>
 #include <linux/init.h>
diff -urN linux-2.5.70-bk8/drivers/base/interface.c linux-2.5.70-bk9/drivers/base/interface.c
--- linux-2.5.70-bk8/drivers/base/interface.c	2003-05-26 18:00:22.000000000 -0700
+++ linux-2.5.70-bk9/drivers/base/interface.c	2003-06-04 04:37:23.000000000 -0700
@@ -1,8 +1,12 @@
 /*
  * drivers/base/interface.c - common driverfs interface that's exported to 
  * 	the world for all devices.
- * Copyright (c) 2002 Patrick Mochel
- *		 2002 Open Source Development Lab
+ *
+ * Copyright (c) 2002-3 Patrick Mochel
+ * Copyright (c) 2002-3 Open Source Development Labs
+ * 
+ * This file is released under the GPLv2
+ *
  */
 
 #include <linux/device.h>
diff -urN linux-2.5.70-bk8/drivers/base/platform.c linux-2.5.70-bk9/drivers/base/platform.c
--- linux-2.5.70-bk8/drivers/base/platform.c	2003-05-26 18:00:23.000000000 -0700
+++ linux-2.5.70-bk9/drivers/base/platform.c	2003-06-04 04:37:23.000000000 -0700
@@ -1,6 +1,11 @@
 /*
  * platform.c - platform 'psuedo' bus for legacy devices
  *
+ * Copyright (c) 2002-3 Patrick Mochel
+ * Copyright (c) 2002-3 Open Source Development Labs
+ * 
+ * This file is released under the GPLv2
+ *
  * Please see Documentation/driver-model/platform.txt for more
  * information.
  */
diff -urN linux-2.5.70-bk8/drivers/base/power.c linux-2.5.70-bk9/drivers/base/power.c
--- linux-2.5.70-bk8/drivers/base/power.c	2003-05-26 18:00:42.000000000 -0700
+++ linux-2.5.70-bk9/drivers/base/power.c	2003-06-04 04:37:23.000000000 -0700
@@ -1,14 +1,16 @@
 /*
  * power.c - power management functions for the device tree.
  * 
- * Copyright (c) 2002 Patrick Mochel
- *		 2002 Open Source Development Lab
+ * Copyright (c) 2002-3 Patrick Mochel
+ *		 2002-3 Open Source Development Lab
+ * 
+ * This file is released under the GPLv2
  * 
  *  Kai Germaschewski contributed to the list walking routines.
  *
  */
 
-#undef DEBUG
+#define DEBUG
 
 #include <linux/device.h>
 #include <linux/module.h>
@@ -88,10 +90,12 @@
 	down_write(&devices_subsys.rwsem);
 	list_for_each(entry,&devices_subsys.kset.list) {
 		struct device * dev = to_dev(entry);
+		pr_debug("shutting down %s: ",dev->name);
 		if (dev->driver && dev->driver->shutdown) {
-			pr_debug("shutting down %s\n",dev->name);
+			pr_debug("Ok\n");
 			dev->driver->shutdown(dev);
-		}
+		} else
+			pr_debug("Ignored.\n");
 	}
 	up_write(&devices_subsys.rwsem);
 }
diff -urN linux-2.5.70-bk8/drivers/base/sys.c linux-2.5.70-bk9/drivers/base/sys.c
--- linux-2.5.70-bk8/drivers/base/sys.c	2003-05-26 18:00:19.000000000 -0700
+++ linux-2.5.70-bk9/drivers/base/sys.c	2003-06-04 04:37:23.000000000 -0700
@@ -1,8 +1,10 @@
 /*
  * sys.c - pseudo-bus for system 'devices' (cpus, PICs, timers, etc)
  *
- * Copyright (c) 2002 Patrick Mochel
- *              2002 Open Source Development Lab
+ * Copyright (c) 2002-3 Patrick Mochel
+ *               2002-3 Open Source Development Lab
+ *
+ * This file is released under the GPLv2
  * 
  * This exports a 'system' bus type. 
  * By default, a 'sys' bus gets added to the root of the system. There will
diff -urN linux-2.5.70-bk8/drivers/ide/ide-proc.c linux-2.5.70-bk9/drivers/ide/ide-proc.c
--- linux-2.5.70-bk8/drivers/ide/ide-proc.c	2003-05-26 18:00:40.000000000 -0700
+++ linux-2.5.70-bk9/drivers/ide/ide-proc.c	2003-06-04 04:37:25.000000000 -0700
@@ -712,7 +712,6 @@
 
 	for (d = 0; d < MAX_DRIVES; d++) {
 		ide_drive_t *drive = &hwif->drives[d];
-		ide_driver_t *driver = drive->driver;
 
 		if (!drive->present)
 			continue;
@@ -720,13 +719,8 @@
 			continue;
 
 		drive->proc = proc_mkdir(drive->name, parent);
-		if (drive->proc) {
+		if (drive->proc)
 			ide_add_proc_entries(drive->proc, generic_drive_entries, drive);
-			if (driver) {
-				ide_add_proc_entries(drive->proc, generic_subdriver_entries, drive);
-				ide_add_proc_entries(drive->proc, driver->proc, drive);
-			}
-		}
 		sprintf(name,"ide%d/%s", (drive->name[2]-'a')/2, drive->name);
 		ent = proc_symlink(drive->name, proc_ide_root, name);
 		if (!ent) return;
@@ -735,34 +729,6 @@
 
 EXPORT_SYMBOL(create_proc_ide_drives);
 
-void recreate_proc_ide_device(ide_hwif_t *hwif, ide_drive_t *drive)
-{
-	struct proc_dir_entry *ent;
-	struct proc_dir_entry *parent = hwif->proc;
-	char name[64];
-
-	if (drive->present && !drive->proc) {
-		drive->proc = proc_mkdir(drive->name, parent);
-		if (drive->proc)
-			ide_add_proc_entries(drive->proc, generic_drive_entries, drive);
-
-/*
- * assume that we have these already, however, should test FIXME!
- * if (driver) {
- *      ide_add_proc_entries(drive->proc, generic_subdriver_entries, drive);
- *      ide_add_proc_entries(drive->proc, driver->proc, drive);
- * }
- *
- */
-		sprintf(name,"ide%d/%s", (drive->name[2]-'a')/2, drive->name);
-		ent = proc_symlink(drive->name, proc_ide_root, name);
-		if (!ent)
-			return;
-	}
-}
-
-EXPORT_SYMBOL(recreate_proc_ide_device);
-
 void destroy_proc_ide_device(ide_hwif_t *hwif, ide_drive_t *drive)
 {
 	ide_driver_t *driver = drive->driver;
@@ -909,16 +875,11 @@
 void proc_ide_destroy(void)
 {
 #ifdef CONFIG_BLK_DEV_IDEPCI
-	ide_pci_host_proc_t *p = ide_pci_host_proc_list;
-	char name[32];
+	ide_pci_host_proc_t *p;
 
-	while ((p->name != NULL) && (p->set) && (p->get_info != NULL)) {
-		name[0] = '\0';
-		sprintf(name, "ide/%s", p->name);
+	for (p = ide_pci_host_proc_list; p; p = p->next) {
 		if (p->set == 2)
 			remove_proc_entry(p->name, p->parent);
-		if (p->next == NULL) break;
-		p = p->next;
 	}
 #endif /* CONFIG_BLK_DEV_IDEPCI */
 	remove_proc_entry("ide/drivers", proc_ide_root);
diff -urN linux-2.5.70-bk8/drivers/ide/ide.c linux-2.5.70-bk9/drivers/ide/ide.c
--- linux-2.5.70-bk8/drivers/ide/ide.c	2003-06-04 04:37:17.000000000 -0700
+++ linux-2.5.70-bk9/drivers/ide/ide.c	2003-06-04 04:37:25.000000000 -0700
@@ -2349,8 +2349,10 @@
 	}
 	drive->suspend_reset = 0;
 #ifdef CONFIG_PROC_FS
-	ide_add_proc_entries(drive->proc, generic_subdriver_entries, drive);
-	ide_add_proc_entries(drive->proc, driver->proc, drive);
+	if (drive->driver != &idedefault_driver) {
+		ide_add_proc_entries(drive->proc, generic_subdriver_entries, drive);
+		ide_add_proc_entries(drive->proc, driver->proc, drive);
+	}
 #endif
 	return 0;
 }
diff -urN linux-2.5.70-bk8/drivers/message/fusion/mptlan.c linux-2.5.70-bk9/drivers/message/fusion/mptlan.c
--- linux-2.5.70-bk8/drivers/message/fusion/mptlan.c	2003-05-26 18:00:40.000000000 -0700
+++ linux-2.5.70-bk9/drivers/message/fusion/mptlan.c	2003-06-04 04:37:25.000000000 -0700
@@ -1356,16 +1356,16 @@
 }
 
 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
-struct net_device *
+static struct net_device *
 mpt_register_lan_device (MPT_ADAPTER *mpt_dev, int pnum)
 {
-	struct net_device *dev = NULL;
+	struct net_device *dev = alloc_fcdev(sizeof(struct mpt_lan_priv));
 	struct mpt_lan_priv *priv = NULL;
 	u8 HWaddr[FC_ALEN], *a;
 
-	dev = init_fcdev(NULL, sizeof(struct mpt_lan_priv));
 	if (!dev)
-		return (NULL);
+		return NULL;
+
 	dev->mtu = MPT_LAN_MTU;
 
 	priv = (struct mpt_lan_priv *) dev->priv;
@@ -1435,15 +1435,18 @@
 
 	SET_MODULE_OWNER(dev);
 
+	if (register_netdev(dev) != 0) {
+		kfree(dev);
+		dev = NULL;
+	}
 	return dev;
 }
 
 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
-int __init
-mpt_lan_init (void)
+static int __init mpt_lan_init (void)
 {
 	struct net_device *dev;
-	MPT_ADAPTER *curadapter;
+	MPT_ADAPTER *p;
 	int i, j;
 
 	show_mptmod_ver(LANAME, LANVER);
@@ -1477,51 +1480,49 @@
 		mpt_landev[j] = NULL;
 	}
 
-	curadapter = mpt_adapter_find_first();
-	while (curadapter != NULL) {
-		for (i = 0; i < curadapter->facts.NumberOfPorts; i++) {
+	for (p = mpt_adapter_find_first(); p; p = mpt_adapter_find_next(p)) {
+		for (i = 0; i < p->facts.NumberOfPorts; i++) {
 			printk (KERN_INFO MYNAM ": %s: PortNum=%x, ProtocolFlags=%02Xh (%c%c%c%c)\n",
-					curadapter->name,
-					curadapter->pfacts[i].PortNumber,
-					curadapter->pfacts[i].ProtocolFlags,
-					MPT_PROTOCOL_FLAGS_c_c_c_c(curadapter->pfacts[i].ProtocolFlags));
-
-			if (curadapter->pfacts[i].ProtocolFlags & MPI_PORTFACTS_PROTOCOL_LAN) {
-				dev = mpt_register_lan_device (curadapter, i);
-				if (dev != NULL) {
-					printk (KERN_INFO MYNAM ": %s: Fusion MPT LAN device registered as '%s'\n",
-							curadapter->name, dev->name);
-					printk (KERN_INFO MYNAM ": %s/%s: LanAddr = %02X:%02X:%02X:%02X:%02X:%02X\n",
-							IOC_AND_NETDEV_NAMES_s_s(dev),
-							dev->dev_addr[0], dev->dev_addr[1],
-							dev->dev_addr[2], dev->dev_addr[3],
-							dev->dev_addr[4], dev->dev_addr[5]);
+					p->name,
+					p->pfacts[i].PortNumber,
+					p->pfacts[i].ProtocolFlags,
+					MPT_PROTOCOL_FLAGS_c_c_c_c(p->pfacts[i].ProtocolFlags));
+
+			if (!(p->pfacts[i].ProtocolFlags & MPI_PORTFACTS_PROTOCOL_LAN)) {
+				printk (KERN_INFO MYNAM ": %s: Hmmm... LAN protocol seems to be disabled on this adapter port!\n",
+						p->name);
+				continue;
+			}
+
+			dev = mpt_register_lan_device (p, i);
+			if (!dev) {
+				printk (KERN_ERR MYNAM ": %s: Unable to register port%d as a LAN device\n",
+						p->name,
+						p->pfacts[i].PortNumber);
+			}
+			printk (KERN_INFO MYNAM ": %s: Fusion MPT LAN device registered as '%s'\n",
+					p->name, dev->name);
+			printk (KERN_INFO MYNAM ": %s/%s: LanAddr = %02X:%02X:%02X:%02X:%02X:%02X\n",
+					IOC_AND_NETDEV_NAMES_s_s(dev),
+					dev->dev_addr[0], dev->dev_addr[1],
+					dev->dev_addr[2], dev->dev_addr[3],
+					dev->dev_addr[4], dev->dev_addr[5]);
 //					printk (KERN_INFO MYNAM ": %s/%s: Max_TX_outstanding = %d\n",
 //							IOC_AND_NETDEV_NAMES_s_s(dev),
 //							NETDEV_TO_LANPRIV_PTR(dev)->tx_max_out);
-					j = curadapter->id;
-					mpt_landev[j] = dev;
-					dlprintk((KERN_INFO MYNAM "/init: dev_addr=%p, mpt_landev[%d]=%p\n",
-							dev, j,  mpt_landev[j]));
-
-				} else {
-					printk (KERN_ERR MYNAM ": %s: Unable to register port%d as a LAN device\n",
-							curadapter->name,
-							curadapter->pfacts[i].PortNumber);
-				}
-			} else {
-				printk (KERN_INFO MYNAM ": %s: Hmmm... LAN protocol seems to be disabled on this adapter port!\n",
-						curadapter->name);
-			}
+			j = p->id;
+			mpt_landev[j] = dev;
+			dlprintk((KERN_INFO MYNAM "/init: dev_addr=%p, mpt_landev[%d]=%p\n",
+					dev, j,  mpt_landev[j]));
+
 		}
-		curadapter = mpt_adapter_find_next(curadapter);
 	}
 
 	return 0;
 }
 
 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
-static void mpt_lan_exit(void)
+static void __exit mpt_lan_exit(void)
 {
 	int i;
 
@@ -1532,7 +1533,7 @@
 
 		printk (KERN_INFO ": %s/%s: Fusion MPT LAN device unregistered\n",
 			       IOC_AND_NETDEV_NAMES_s_s(dev));
-		unregister_fcdev(dev);
+		unregister_netdev(dev);
 		//mpt_landev[i] = (struct net_device *) 0xdeadbeef; /* Debug */
 		mpt_landev[i] = NULL;
 	}
diff -urN linux-2.5.70-bk8/drivers/net/defxx.c linux-2.5.70-bk9/drivers/net/defxx.c
--- linux-2.5.70-bk8/drivers/net/defxx.c	2003-05-26 18:00:19.000000000 -0700
+++ linux-2.5.70-bk9/drivers/net/defxx.c	2003-06-04 04:37:25.000000000 -0700
@@ -425,11 +425,7 @@
 	}
 #endif
 
-	/*
-	 * init_fddidev() allocates a device structure with private data, clears the device structure and private data,
-	 * and  calls fddi_setup() and register_netdev(). Not much left to do for us here.
-	 */
-	dev = init_fddidev(NULL, sizeof(*bp));
+	dev = alloc_fddidev(sizeof(*bp));
 	if (!dev) {
 		printk (KERN_ERR "defxx: unable to allocate fddidev, aborting\n");
 		return -ENOMEM;
@@ -483,12 +479,17 @@
 		goto err_out_region;
 	}
 
+	err = register_netdev(dev);
+	if (err)
+		goto err_out_kfree;
+
 	return 0;
 
+err_out_kfree:
+	if (bp->kmalloced) kfree(bp->kmalloced);
 err_out_region:
 	release_region(ioaddr, pdev ? PFI_K_CSR_IO_LEN : PI_ESIC_K_CSR_IO_LEN);
 err_out:
-	unregister_netdev(dev);
 	kfree(dev);
 	return err;
 }
diff -urN linux-2.5.70-bk8/drivers/net/fc/iph5526.c linux-2.5.70-bk9/drivers/net/fc/iph5526.c
--- linux-2.5.70-bk8/drivers/net/fc/iph5526.c	2003-05-26 18:00:26.000000000 -0700
+++ linux-2.5.70-bk9/drivers/net/fc/iph5526.c	2003-06-04 04:37:25.000000000 -0700
@@ -234,7 +234,7 @@
 {
 	if (pci_present() && (iph5526_probe_pci(dev) == 0))
 		return 0;
-    return -ENODEV;
+	return -ENODEV;
 }
 
 static int __init iph5526_probe_pci(struct net_device *dev)
@@ -242,37 +242,30 @@
 #ifdef MODULE
 	struct fc_info *fi = (struct fc_info *)dev->priv;
 #else
-	struct fc_info *fi;
+	struct fc_info *fi = fc[count];
 	static int count;
+	int err;
  
-	if(fc[count] != NULL) {
-		if (dev == NULL) {
-			dev = init_fcdev(NULL, 0);
-			if (dev == NULL)
-				return -ENOMEM;
-		}
-		fi = fc[count];
-#endif
-		fi->dev = dev;
-		dev->base_addr = fi->base_addr;
-		dev->irq = fi->irq;
-		if (dev->priv == NULL) 
-			dev->priv = fi; 
-		fcdev_init(dev);
-		/* Assign ur MAC address.
-		 */
-		dev->dev_addr[0] = (fi->g.my_port_name_high & 0x0000FF00) >> 8;
-		dev->dev_addr[1] = fi->g.my_port_name_high;
-		dev->dev_addr[2] = (fi->g.my_port_name_low & 0xFF000000) >> 24;
-		dev->dev_addr[3] = (fi->g.my_port_name_low & 0x00FF0000) >> 16;
-		dev->dev_addr[4] = (fi->g.my_port_name_low & 0x0000FF00) >> 8;
-		dev->dev_addr[5] = fi->g.my_port_name_low;
-#ifndef MODULE
-		count++;
-	}
-	else
+	if (!fi)
 		return -ENODEV;
+
+	fc_setup(dev);
+	count++;
 #endif
+	fi->dev = dev;
+	dev->base_addr = fi->base_addr;
+	dev->irq = fi->irq;
+	if (dev->priv == NULL) 
+		dev->priv = fi; 
+	fcdev_init(dev);
+	/* Assign ur MAC address.
+	 */
+	dev->dev_addr[0] = (fi->g.my_port_name_high & 0x0000FF00) >> 8;
+	dev->dev_addr[1] = fi->g.my_port_name_high;
+	dev->dev_addr[2] = (fi->g.my_port_name_low & 0xFF000000) >> 24;
+	dev->dev_addr[3] = (fi->g.my_port_name_low & 0x00FF0000) >> 16;
+	dev->dev_addr[4] = (fi->g.my_port_name_low & 0x0000FF00) >> 8;
+	dev->dev_addr[5] = fi->g.my_port_name_low;
 	display_cache(fi);
 	return 0;
 }
@@ -287,9 +280,6 @@
 	dev->change_mtu = iph5526_change_mtu; 
 	dev->tx_timeout = iph5526_timeout;
 	dev->watchdog_timeo = 5*HZ;
-#ifndef MODULE
-	fc_setup(dev);
-#endif
 	return 0;
 }
 
@@ -4507,7 +4497,7 @@
 
 int init_module(void)
 {
-int i = 0;
+	int i = 0;
 
 	driver_template.module = THIS_MODULE;
 	scsi_register_host(&driver_template);
@@ -4520,43 +4510,39 @@
 	}
 
 	while(fc[i] != NULL) {
-		dev_fc[i] = NULL;
-		dev_fc[i] = init_fcdev(dev_fc[i], 0);	
-		if (dev_fc[i] == NULL) {
+		struct net_device *dev = alloc_fcdev(0);
+		int err;
+
+		if (!dev) {
 			printk("iph5526.c: init_fcdev failed for card #%d\n", i+1);
 			break;
 		}
-		dev_fc[i]->irq = irq;
-		dev_fc[i]->mem_end = bad;
-		dev_fc[i]->base_addr = io;
-		dev_fc[i]->init = iph5526_probe;
-		dev_fc[i]->priv = fc[i];
-		fc[i]->dev = dev_fc[i];
-		if (register_fcdev(dev_fc[i]) != 0) {
-			kfree(dev_fc[i]);
-			dev_fc[i] = NULL;
-			if (i == 0) {
-				printk("iph5526.c: IP registeration failed!!!\n");
-				return -ENODEV;
-			}
+		dev->priv = fc[i];
+		iph5526_probe_pci(dev);
+		err = register_netdev(dev);
+		if (err < 0) {
+			kfree(dev);
+			printk("iph5526.c: init_fcdev failed for card #%d\n", i+1);
+			break;
 		}
+		dev_fc[i] = dev;
 		i++;
 	}
 	if (i == 0)
 		return -ENODEV;
-	
+
 	return 0;
 }
 
 void cleanup_module(void)
 {
-int i = 0;
+	int i = 0;
 	while(fc[i] != NULL) {
-	struct net_device *dev = fc[i]->dev;
-	void *priv = dev->priv;
+		struct net_device *dev = fc[i]->dev;
+		void *priv = dev->priv;
 		fc[i]->g.dont_init = TRUE;
 		take_tachyon_offline(fc[i]);
-		unregister_fcdev(dev);
+		unregister_netdev(dev);
 		clean_up_memory(fc[i]);
 		if (dev->priv)
 			kfree(priv);
diff -urN linux-2.5.70-bk8/drivers/net/net_init.c linux-2.5.70-bk9/drivers/net/net_init.c
--- linux-2.5.70-bk8/drivers/net/net_init.c	2003-05-26 18:00:21.000000000 -0700
+++ linux-2.5.70-bk9/drivers/net/net_init.c	2003-06-04 04:37:25.000000000 -0700
@@ -178,17 +178,6 @@
 	return dev;
 }
 
-#if defined(CONFIG_HIPPI) || defined(CONFIG_TR) || defined(CONFIG_NET_FC)
-static int __register_netdev(struct net_device *dev)
-{
-	if (dev->init && dev->init(dev) != 0) {
-		unregister_netdev(dev);
-		return -EIO;
-	}
-	return 0;
-}
-#endif
-
 /**
  * init_etherdev - Register ethernet device
  * @dev: An ethernet device structure to be filled in, or %NULL if a new
@@ -252,28 +241,6 @@
 #ifdef CONFIG_FDDI
 
 /**
- * init_fddidev - Register FDDI device
- * @dev: A FDDI device structure to be filled in, or %NULL if a new
- *	struct should be allocated.
- * @sizeof_priv: Size of additional driver-private structure to be allocated
- *	for this ethernet device
- *
- * Fill in the fields of the device structure with FDDI-generic values.
- *
- * If no device structure is passed, a new one is constructed, complete with
- * a private data area of size @sizeof_priv.  A 32-byte (not bit)
- * alignment is enforced for this private data area.
- *
- * If an empty string area is passed as dev->name, or a new structure is made,
- * a new name string is constructed.
- */
-
-struct net_device *init_fddidev(struct net_device *dev, int sizeof_priv)
-{
-	return init_netdev(dev, sizeof_priv, "fddi%d", fddi_setup);
-}
-
-/**
  * alloc_fddidev - Register FDDI device
  * @sizeof_priv: Size of additional driver-private structure to be allocated
  *	for this FDDI device
@@ -290,7 +257,6 @@
 	return alloc_netdev(sizeof_priv, "fddi%d", fddi_setup);
 }
 
-EXPORT_SYMBOL(init_fddidev);
 EXPORT_SYMBOL(alloc_fddidev);
 
 static int fddi_change_mtu(struct net_device *dev, int new_mtu)
@@ -330,27 +296,50 @@
 	return 0;
 }
 
+static int hippi_neigh_setup_dev(struct net_device *dev, struct neigh_parms *p)
+{
+	/* Never send broadcast/multicast ARP messages */
+	p->mcast_probes = 0;
+ 
+	/* In IPv6 unicast probes are valid even on NBMA,
+	* because they are encapsulated in normal IPv6 protocol.
+	* Should be a generic flag. 
+	*/
+	if (p->tbl->family != AF_INET6)
+		p->ucast_probes = 0;
+	return 0;
+}
 
-/**
- * init_hippi_dev - Register HIPPI device
- * @dev: A HIPPI device structure to be filled in, or %NULL if a new
- *	struct should be allocated.
- * @sizeof_priv: Size of additional driver-private structure to be allocated
- *	for this ethernet device
- *
- * Fill in the fields of the device structure with HIPPI-generic values.
- *
- * If no device structure is passed, a new one is constructed, complete with
- * a private data area of size @sizeof_priv.  A 32-byte (not bit)
- * alignment is enforced for this private data area.
- *
- * If an empty string area is passed as dev->name, or a new structure is made,
- * a new name string is constructed.
- */
-
-struct net_device *init_hippi_dev(struct net_device *dev, int sizeof_priv)
+static void hippi_setup(struct net_device *dev)
 {
-	return init_netdev(dev, sizeof_priv, "hip%d", hippi_setup);
+	dev->set_multicast_list	= NULL;
+	dev->change_mtu			= hippi_change_mtu;
+	dev->hard_header		= hippi_header;
+	dev->rebuild_header 		= hippi_rebuild_header;
+	dev->set_mac_address 		= hippi_mac_addr;
+	dev->hard_header_parse		= NULL;
+	dev->hard_header_cache		= NULL;
+	dev->header_cache_update	= NULL;
+	dev->neigh_setup 		= hippi_neigh_setup_dev; 
+
+	/*
+	 * We don't support HIPPI `ARP' for the time being, and probably
+	 * never will unless someone else implements it. However we
+	 * still need a fake ARPHRD to make ifconfig and friends play ball.
+	 */
+	dev->type		= ARPHRD_HIPPI;
+	dev->hard_header_len 	= HIPPI_HLEN;
+	dev->mtu		= 65280;
+	dev->addr_len		= HIPPI_ALEN;
+	dev->tx_queue_len	= 25 /* 5 */;
+	memset(dev->broadcast, 0xFF, HIPPI_ALEN);
+
+
+	/*
+	 * HIPPI doesn't support broadcast+multicast and we only use
+	 * static ARP tables. ARP is disabled by hippi_neigh_setup_dev. 
+	 */
+	dev->flags = 0; 
 }
 
 /**
@@ -370,34 +359,7 @@
 	return alloc_netdev(sizeof_priv, "hip%d", hippi_setup);
 }
 
-int register_hipdev(struct net_device *dev)
-{
-	return __register_netdev(dev);
-}
-
-void unregister_hipdev(struct net_device *dev)
-{
-	unregister_netdev(dev);
-}
-
-EXPORT_SYMBOL(init_hippi_dev);
 EXPORT_SYMBOL(alloc_hippi_dev);
-EXPORT_SYMBOL(register_hipdev);
-EXPORT_SYMBOL(unregister_hipdev);
-
-static int hippi_neigh_setup_dev(struct net_device *dev, struct neigh_parms *p)
-{
-	/* Never send broadcast/multicast ARP messages */
-	p->mcast_probes = 0;
- 
-	/* In IPv6 unicast probes are valid even on NBMA,
-	* because they are encapsulated in normal IPv6 protocol.
-	* Should be a generic flag. 
-	*/
-	if (p->tbl->family != AF_INET6)
-		p->ucast_probes = 0;
-	return 0;
-}
 
 #endif /* CONFIG_HIPPI */
 
@@ -455,41 +417,6 @@
 
 #endif /* CONFIG_FDDI */
 
-#ifdef CONFIG_HIPPI
-void hippi_setup(struct net_device *dev)
-{
-	dev->set_multicast_list	= NULL;
-	dev->change_mtu			= hippi_change_mtu;
-	dev->hard_header		= hippi_header;
-	dev->rebuild_header 		= hippi_rebuild_header;
-	dev->set_mac_address 		= hippi_mac_addr;
-	dev->hard_header_parse		= NULL;
-	dev->hard_header_cache		= NULL;
-	dev->header_cache_update	= NULL;
-	dev->neigh_setup 		= hippi_neigh_setup_dev; 
-
-	/*
-	 * We don't support HIPPI `ARP' for the time being, and probably
-	 * never will unless someone else implements it. However we
-	 * still need a fake ARPHRD to make ifconfig and friends play ball.
-	 */
-	dev->type		= ARPHRD_HIPPI;
-	dev->hard_header_len 	= HIPPI_HLEN;
-	dev->mtu		= 65280;
-	dev->addr_len		= HIPPI_ALEN;
-	dev->tx_queue_len	= 25 /* 5 */;
-	memset(dev->broadcast, 0xFF, HIPPI_ALEN);
-
-
-	/*
-	 * HIPPI doesn't support broadcast+multicast and we only use
-	 * static ARP tables. ARP is disabled by hippi_neigh_setup_dev. 
-	 */
-	dev->flags = 0; 
-}
-EXPORT_SYMBOL(hippi_setup);
-#endif /* CONFIG_HIPPI */
-
 #if defined(CONFIG_ATALK) || defined(CONFIG_ATALK_MODULE)
 
 static int ltalk_change_mtu(struct net_device *dev, int mtu)
@@ -598,28 +525,6 @@
 }
 
 /**
- * init_trdev - Register token ring device
- * @dev: A token ring device structure to be filled in, or %NULL if a new
- *	struct should be allocated.
- * @sizeof_priv: Size of additional driver-private structure to be allocated
- *	for this ethernet device
- *
- * Fill in the fields of the device structure with token ring-generic values.
- *
- * If no device structure is passed, a new one is constructed, complete with
- * a private data area of size @sizeof_priv.  A 32-byte (not bit)
- * alignment is enforced for this private data area.
- *
- * If an empty string area is passed as dev->name, or a new structure is made,
- * a new name string is constructed.
- */
-
-struct net_device *init_trdev(struct net_device *dev, int sizeof_priv)
-{
-	return init_netdev(dev, sizeof_priv, "tr%d", tr_setup);
-}
-
-/**
  * alloc_trdev - Register token ring device
  * @sizeof_priv: Size of additional driver-private structure to be allocated
  *	for this token ring device
@@ -636,25 +541,11 @@
 	return alloc_netdev(sizeof_priv, "tr%d", tr_setup);
 }
 
-int register_trdev(struct net_device *dev)
-{
-	return __register_netdev(dev);
-}
-
-void unregister_trdev(struct net_device *dev)
-{
-	unregister_netdev(dev);
-}
-
 EXPORT_SYMBOL(tr_setup);
-EXPORT_SYMBOL(init_trdev);
 EXPORT_SYMBOL(alloc_trdev);
-EXPORT_SYMBOL(register_trdev);
-EXPORT_SYMBOL(unregister_trdev);
 
 #endif /* CONFIG_TR */
 
-
 #ifdef CONFIG_NET_FC
 
 void fc_setup(struct net_device *dev)
@@ -675,28 +566,6 @@
 }
 
 /**
- * init_fcdev - Register fibre channel device
- * @dev: A fibre channel device structure to be filled in, or %NULL if a new
- *	struct should be allocated.
- * @sizeof_priv: Size of additional driver-private structure to be allocated
- *	for this ethernet device
- *
- * Fill in the fields of the device structure with fibre channel-generic values.
- *
- * If no device structure is passed, a new one is constructed, complete with
- * a private data area of size @sizeof_priv.  A 32-byte (not bit)
- * alignment is enforced for this private data area.
- *
- * If an empty string area is passed as dev->name, or a new structure is made,
- * a new name string is constructed.
- */
-
-struct net_device *init_fcdev(struct net_device *dev, int sizeof_priv)
-{
-	return init_netdev(dev, sizeof_priv, "fc%d", fc_setup);
-}
-
-/**
  * alloc_fcdev - Register fibre channel device
  * @sizeof_priv: Size of additional driver-private structure to be allocated
  *	for this fibre channel device
@@ -713,21 +582,8 @@
 	return alloc_netdev(sizeof_priv, "fc%d", fc_setup);
 }
 
-int register_fcdev(struct net_device *dev)
-{
-	return __register_netdev(dev);
-}                                               
-        
-void unregister_fcdev(struct net_device *dev)
-{
-	unregister_netdev(dev);
-}
-
 EXPORT_SYMBOL(fc_setup);
-EXPORT_SYMBOL(init_fcdev);
 EXPORT_SYMBOL(alloc_fcdev);
-EXPORT_SYMBOL(register_fcdev);
-EXPORT_SYMBOL(unregister_fcdev);
 
 #endif /* CONFIG_NET_FC */
 
diff -urN linux-2.5.70-bk8/drivers/net/pcmcia/ibmtr_cs.c linux-2.5.70-bk9/drivers/net/pcmcia/ibmtr_cs.c
--- linux-2.5.70-bk8/drivers/net/pcmcia/ibmtr_cs.c	2003-05-26 18:00:40.000000000 -0700
+++ linux-2.5.70-bk9/drivers/net/pcmcia/ibmtr_cs.c	2003-06-04 04:37:26.000000000 -0700
@@ -208,10 +208,13 @@
     flush_stale_links();
 
     /* Create new token-ring device */
-    info = kmalloc(sizeof(*info), GFP_KERNEL);
-    if (!info) return NULL;
-    memset(info, 0, sizeof(*info));
-    link = &info->link; link->priv = info;
+    dev = alloc_trdev(sizeof(*info));
+    if (!dev)
+	    return NULL;
+    info = dev->priv;
+
+    link = &info->link;
+    link->priv = info;
 
     init_timer(&link->release);
     link->release.function = &ibmtr_release;
@@ -232,12 +235,6 @@
     link->conf.IntType = INT_MEMORY_AND_IO;
     link->conf.Present = PRESENT_OPTION;
 
-    dev = init_trdev(NULL,0);
-    if (dev == NULL) {
-	ibmtr_detach(link);
-        return NULL;
-    }
-    dev->priv = &info->ti;
     link->irq.Instance = info->dev = dev;
     
     dev->init = &ibmtr_probe;
@@ -258,11 +255,16 @@
     ret = CardServices(RegisterClient, &link->handle, &client_reg);
     if (ret != 0) {
         cs_error(link->handle, RegisterClient, ret);
-        ibmtr_detach(link);
-        return NULL;
+	goto out_detach;
     }
 
+out:
     return link;
+
+out_detach:
+    ibmtr_detach(link);
+    link = NULL;
+    goto out;
 } /* ibmtr_attach */
 
 /*======================================================================
@@ -307,12 +309,8 @@
 
     /* Unlink device structure, free bits */
     *linkp = link->next;
-    if (info->dev) {
-	unregister_trdev(info->dev);
-	kfree(info->dev);
-    }
-    kfree(info);
-
+    unregister_netdev(dev);
+    kfree(dev);
 } /* ibmtr_detach */
 
 /*======================================================================
@@ -413,10 +411,10 @@
         Adapters Technical Reference"  SC30-3585 for this info.  */
     ibmtr_hw_setup(dev, mmiobase);
 
-    i = register_trdev(dev);
+    i = register_netdev(dev);
     
     if (i != 0) {
-	printk(KERN_NOTICE "ibmtr_cs: register_trdev() failed\n");
+	printk(KERN_NOTICE "ibmtr_cs: register_netdev() failed\n");
 	goto failed;
     }
 
diff -urN linux-2.5.70-bk8/drivers/net/ptifddi.c linux-2.5.70-bk9/drivers/net/ptifddi.c
--- linux-2.5.70-bk8/drivers/net/ptifddi.c	2003-05-26 18:00:20.000000000 -0700
+++ linux-2.5.70-bk9/drivers/net/ptifddi.c	1969-12-31 16:00:00.000000000 -0800
@@ -1,259 +0,0 @@
-/* $Id: ptifddi.c,v 1.14 2001/04/14 01:12:04 davem Exp $
- * ptifddi.c: Network driver for Performance Technologies single-attach
- *            and dual-attach FDDI sbus cards.
- *
- * Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu)
- */
-
-static char *version =
-        "ptifddi.c:v1.0 10/Dec/96 David S. Miller (davem@caipfs.rutgers.edu)\n";
-
-#include <linux/string.h>
-#include <linux/init.h>
-
-#include "ptifddi.h"
-
-#include "ptifddi_asm.h"
-
-#ifdef MODULE
-static struct ptifddi *root_pti_dev;
-#endif
-
-static inline void pti_reset(struct ptifddi *pp)
-{
-	pp->reset = 1;
-}
-
-static inline void pti_unreset(struct ptifddi *pp)
-{
-	pp->unreset = 1;
-}
-
-static inline void pti_load_code_base(struct dfddi_ram *rp, unsigned short addr)
-{
-	rp->loader_addr = ((addr << 8) & 0xff00) | ((addr >> 8) & 0x00ff);
-}
-
-static inline void pti_clear_dpram(struct ptifddi *pp)
-{
-	memset(pp->dpram, 0, DPRAM_SIZE);
-}
-
-#define CARD_TEST_TIMEOUT	100000
-
-static inline int pti_card_test(struct ptifddi *pp)
-{
-	struct dfddi_ram *rp	= pp->dpram;
-	unsigned char *code	= &rp->loader;
-	unsigned char *status	= (unsigned char *) rp;
-	int clicks		= CARD_TEST_TIMEOUT;
-
-	/* Clear it out. */
-	pti_clear_dpram(pp);
-
-	/* Load test data. */
-	for(i = 0; i < test_firmware_size; i++)
-		code[i] = test_firmware[i];
-
-	/* Tell card where to execute the code. */
-	pti_load_code_base(pp, test_firmware_dev_addr);
-
-	/* Clear test run status in dpram. */
-	*status = 0;
-
-	/* Reset single attach state machine before the test. */
-	rp->reset = 1;
-
-	/* Unreset, to get the test code running. */
-	pti_unreset(pp);
-
-	/* Wait for dpram status to become 5, else fail if we time out. */
-	while(--clicks) {
-		if(*status == 5) {
-			pti_reset(pp);
-			return 0;
-		}
-		udelay(20);
-	}
-	return 1;
-}
-
-static inline void pti_init_firmware_loader(struct ptifddi *pp)
-{
-	struct dfddi_ram *rp = pp->dpram;
-	int i;
-
-	for(i = 0; i < firmware_loader_size; i++)
-		rp->loader.loader_firmware[i] = firmware_loader[i];
-}
-
-static inline void pti_load_main_firmware(struct ptifddi *pp)
-{
-	struct dfddi_ram *rp		= pp->dpram;
-	struct dpram_loader *lp		= &rp.loader;
-	int i;
-
-
-}
-
-static void pti_init_rings(struct ptifddi *pp, int from_irq)
-{
-}
-
-static int pti_init(struct ptifddi *pp, int from_irq)
-{
-}
-
-static void pti_is_not_so_happy(struct ptifddi *pp)
-{
-}
-
-static inline void pti_tx(struct ptifddi *pp, struct net_device *dev)
-{
-}
-
-static inline void myri_rx(struct ptifddi *pp, struct net_device *dev)
-{
-}
-
-static void pti_interrupt(int irq, void *dev_id, struct pt_regs *regs)
-{
-	struct net_device *dev		= (struct net_device *) dev_id;
-	struct ptifddi *pp		= (struct ptifddi *) dev->priv;
-
-}
-
-static int pti_open(struct net_device *dev)
-{
-	struct ptifddi *pp = (struct ptifddi *) dev->priv;
-
-	return pti_init(pp, in_interrupt());
-}
-
-static int pti_close(struct net_device *dev)
-{
-	struct ptifddi *pp = (struct ptifddi *) dev->priv;
-
-	return 0;
-}
-
-static int pti_start_xmit(struct sk_buff *skb, struct net_device *dev)
-{
-	struct ptifddi *pp = (struct ptifddi *) dev->priv;
-}
-
-static struct net_device_stats *pti_get_stats(struct net_device *dev)
-{ return &(((struct ptifddi *)dev->priv)->enet_stats); }
-
-static void pti_set_multicast(struct net_device *dev)
-{
-}
-
-static inline int pti_fddi_init(struct net_device *dev, struct sbus_dev *sdev, int num)
-{
-	static unsigned version_printed;
-	struct ptifddi *pp;
-	int i;
-
-	dev = init_fddidev(0, sizeof(struct ptifddi));
-
-	if(version_printed++ == 0)
-		printk(version);
-
-	/* Register 0 mapping contains DPRAM. */
-	pp->dpram = (struct dfddi_ram *) sbus_ioremap(
-	    &sdep->resource[0], 0, sizeof(sturct dfddi_ram), "PTI FDDI DPRAM");
-	if(!pp->dpram) {
-		printk("ptiFDDI: Cannot map DPRAM I/O area.\n");
-		return -ENODEV;
-	}
-
-	/* Next, register 1 contains reset byte. */
-	pp->reset = (unsigned char *) sbus_ioremap(
-	    &sdep->resource[1], 0, 1, "PTI FDDI RESET Byte");
-	if(!pp->reset) {
-		printk("ptiFDDI: Cannot map RESET byte.\n");
-		return -ENODEV;
-	}
-
-	/* Register 2 contains unreset byte. */
-	pp->unreset = (unsigned char *) sbus_ioremap(
-	    &sdep->resource[2], 0, 1, "PTI FDDI UNRESET Byte");
-	if(!pp->unreset) {
-		printk("ptiFDDI: Cannot map UNRESET byte.\n");
-		return -ENODEV;
-	}
-
-	/* Reset the card. */
-	pti_reset(pp);
-
-	/* Run boot-up card tests. */
-	i = pti_card_test(pp);
-	if(i) {
-		printk("ptiFDDI: Bootup card test fails.\n");
-		return -ENODEV;
-	}
-
-	/* Clear DPRAM, start afresh. */
-	pti_clear_dpram(pp);
-
-	/* Init the firmware loader. */
-	pti_init_firmware_loader(pp);
-
-	/* Now load main card FDDI firmware, using the loader. */
-	pti_load_main_firmware(pp);
-}
-
-int __init ptifddi_sbus_probe(struct net_device *dev)
-{
-	struct sbus_bus *bus;
-	struct sbus_dev *sdev = 0;
-	static int called;
-	int cards = 0, v;
-
-	if(called)
-		return -ENODEV;
-	called++;
-
-	for_each_sbus(bus) {
-		for_each_sbusdev(sdev, bus) {
-			if(cards) dev = NULL;
-			if(!strcmp(sdev->prom_name, "PTI,sbs600") ||
-			   !strcmp(sdev->prom_name, "DPV,fddid")) {
-				cards++;
-				DET(("Found PTI FDDI as %s\n", sdev->prom_name));
-				if((v = pti_fddi_init(dev, sdev, (cards - 1))))
-					return v;
-			}
-		}
-	}
-	if(!cards)
-		return -ENODEV;
-	return 0;
-}
-
-
-#ifdef MODULE
-
-int
-init_module(void)
-{
-	root_pti_dev = NULL;
-	return ptifddi_sbus_probe(NULL);
-}
-
-void
-cleanup_module(void)
-{
-	struct ptifddi *pp;
-
-	while (root_pti_dev) {
-		pp = root_pti_dev->next_module;
-
-		unregister_netdev(root_pti_dev->dev);
-		kfree(root_pti_dev->dev);
-		root_pti_dev = mp;
-	}
-}
-
-#endif /* MODULE */
diff -urN linux-2.5.70-bk8/drivers/net/ptifddi.h linux-2.5.70-bk9/drivers/net/ptifddi.h
--- linux-2.5.70-bk8/drivers/net/ptifddi.h	2003-05-26 18:00:39.000000000 -0700
+++ linux-2.5.70-bk9/drivers/net/ptifddi.h	1969-12-31 16:00:00.000000000 -0800
@@ -1,77 +0,0 @@
-/* $Id: ptifddi.h,v 1.3 1999/08/20 00:31:08 davem Exp $
- * ptifddi.c: Defines for Performance Technologies FDDI sbus cards.
- *
- * Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu)
- */
-
-#ifndef _PTIFDDI_H
-#define _PTIFDDI_H
-
-struct dpram_loader {
-	volatile unsigned char dpram_stat;
-	volatile unsigned char _unused;
-	volatile unsigned char addr_low;
-	volatile unsigned char addr_hi;
-	volatile unsigned char num_bytes;
-	volatile unsigned char data[0x3b];
-
-	volatile unsigned char loader_firmware[0xc0];
-};
-
-struct dfddi_ram {
-/*0x000*/	unsigned char		_unused0[0x100];
-/*0x100*/	struct dpram_loader	loader;
-/*0x200*/	unsigned char		instructions[0x400];
-/*0x600*/	unsigned char		msg_in[0x20];
-/*0x620*/	unsigned char		msg_out[0x20];
-/*0x640*/	unsigned char		_unused2[0x50];
-/*0x690*/	unsigned char		smsg_in[0x20];
-/*0x6b0*/	unsigned char		_unused3[0x30];
-/*0x6e0*/	unsigned char		beacom_frame[0x20];
-/*0x700*/	unsigned char		re_sync;
-/*0x701*/	unsigned char		_unused4;
-/*0x702*/	unsigned short		tswitch;
-/*0x704*/	unsigned char		evq_lost;
-/*0x705*/	unsigned char		_unused6;
-/*0x706*/	unsigned char		signal_lost;
-/*0x707*/	unsigned char		_unused7;
-/*0x708*/	unsigned char		lerror;
-/*0x709*/	unsigned char		_unused8;
-/*0x70a*/	unsigned char		rstate;
-/*0x70b*/	unsigned char		_unused9[0x13];
-/*0x716*/	unsigned short		dswitch;
-/*0x718*/	unsigned char		_unused10[0x48];
-/*0x750*/	unsigned char		cbusy;
-/*0x751*/	unsigned char		hbusy;
-/*0x752*/	unsigned short		istat;
-/*0x754*/	unsigned char		_unused11[];
-/*0x756*/	unsigned char		disable;
-/*0x757*/	unsigned char		_unused12[];
-/*0x78e*/	unsigned char		ucvalid;
-/*0x78f*/	unsigned char		_unused13;
-/*0x790*/	unsigned int		u0addr;
-/*0x794*/	unsigned char		_unused14[];
-/*0x7a8*/	unsigned int		P_player;
-/*0x7ac*/	unsigned int		Q_player;
-/*0x7b0*/	unsigned int		macsi;
-/*0x7b4*/	unsigned char		_unused15[];
-/*0x7be*/	unsigned short		reset;
-/*0x7c0*/	unsigned char		_unused16[];
-/*0x7fc*/	unsigned short		iack;
-/*0x7fe*/	unsigned short		loader_addr;
-};
-
-#define DPRAM_SIZE		0x800
-
-#define DPRAM_STAT_VALID	0x80
-#define DPRAM_STAT_EMPTY	0x00
-
-struct ptifddi {
-	struct dfddi_ram	*dpram;
-	unsigned char		*reset;
-	unsigned char		*unreset;
-	struct net_device		*dev;
-	struct ptifddi		*next_module;
-};
-
-#endif /* !(_PTIFDDI_H) */
diff -urN linux-2.5.70-bk8/drivers/net/ptifddi_asm.h linux-2.5.70-bk9/drivers/net/ptifddi_asm.h
--- linux-2.5.70-bk8/drivers/net/ptifddi_asm.h	2003-05-26 18:00:39.000000000 -0700
+++ linux-2.5.70-bk9/drivers/net/ptifddi_asm.h	1969-12-31 16:00:00.000000000 -0800
@@ -1,2543 +0,0 @@
-/* $Id: ptifddi_asm.h,v 1.3 1997/04/16 10:27:28 jj Exp $ */
-#ifndef _PTIFDDI_ASM_H
-#define _PTIFDDI_ASM_H
-
-/* This is the code for the DPRAM firmware loader. */
-const unsigned short firmware_loader_code_addr = 0x140;  /* Offset from dpram base.   */
-const unsigned short firmware_loader_dev_addr  = 0xf940; /* Offset as seen by device. */
-const unsigned short firmware_loader_size      = 0x6f;   /* Size of fware loader code.*/
-
-static unsigned char firmware_loader[] __initdata = {
-  0xb7, 0x01, 0xc0, 0xc4, 0x97, 0x14, 0xc0, 0xb7, 0xf9, 0x02, 0x12, 0x03, 0x30,
-  0x2c, 0x8b, 0x0d, 0x30, 0x28, 0x8b, 0x0c, 0x30, 0x24, 0x8b, 0x11, 0x82, 0x00,
-  0x11, 0xdc, 0x56, 0x30, 0x1b, 0x86, 0xff, 0xfc, 0x0c, 0xfc, 0x49, 0x86, 0xff,
-  0xfd, 0x0c, 0xfc, 0x43, 0xad, 0x0c, 0x8b, 0xa9, 0x0c, 0x8a, 0x11, 0x75, 0x83,
-  0x00, 0xf9, 0x00, 0xab, 0x95, 0x31, 0x03, 0x40, 0xb6, 0xf9, 0x00, 0xa8, 0x96,
-  0xc8, 0x17, 0x41, 0x68, 0xad, 0x12, 0x88, 0xa9, 0x12, 0x86, 0xf9, 0x16, 0x12,
-  0xfc, 0x47, 0x86, 0xf9, 0x16, 0x12, 0xfd, 0x41, 0x3c, 0x83, 0x00, 0xf9, 0x00,
-  0xab, 0xb7, 0xf9, 0x02, 0x12,	0x3c, 0x83, 0x00, 0xf9, 0x00, 0xab, 0xb7, 0xf9,
-  0x02, 0x12, 0x03, 0x95, 0x2f
-};
-
-/* This is test code which we run at boot time to go and verify the proper
- * functioning of the PTI fddi card.
- */
-const unsigned short test_firmware_code_addr  = 0x100;  /* Offset from dpram base.   */
-const unsigned short test_firmware_dev_addr   = 0xfa00; /* Offset as seen by device. */
-const unsigned short test_firmware_size       = 0x414;  /* Size of card test code.   */
-
-static unsigned char test_firmware[] __initdata = {
-  0x97, 0x00, 0xd0, 0x90, 0x01, 0x8b, 0xd4, 0x8b, 0xf4, 0x97, 0x1f, 0xe2, 0x97,
-  0x1f, 0xf2, 0x97, 0x14, 0xc0, 0xb7, 0x01, 0xc0, 0xc4, 0x00, 0x8b, 0x0b, 0x00,
-  0x8b, 0x03, 0x8b, 0x0a, 0xab, 0x08, 0x90, 0x00, 0x8b, 0x04, 0x90, 0x40, 0x8b,
-  0x05, 0x90, 0xff, 0x8b, 0x06, 0x90, 0xf7, 0x8b, 0x07, 0x90, 0x00, 0x8b, 0x0c,
-  0x33, 0x8d, 0x82, 0x00, 0x0a, 0xdd, 0x94, 0x57, 0x89, 0x0c, 0x89, 0x0b, 0x33,
-  0x81, 0x82, 0x00, 0x0a, 0xdd, 0x94, 0x4b, 0x89, 0x0c, 0x33, 0x77, 0x82, 0x00,
-  0x0a, 0xdd, 0x94, 0x41, 0x91, 0x01, 0x30, 0xc4, 0x00, 0x30, 0xd2, 0x9c, 0x00,
-  0x91, 0x02, 0x9d, 0x00, 0x91, 0x42, 0x30, 0xb7, 0xb6, 0x01, 0x04, 0x88, 0x96,
-  0xc8, 0x10, 0x41, 0x4e, 0x90, 0x01, 0x30, 0xbb, 0x9c, 0x00, 0x91, 0x03, 0x9d,
-  0x00, 0x91, 0x43, 0x30, 0xa0, 0x31, 0x97, 0x9c, 0x00, 0x91, 0x04, 0x9d, 0x00,
-  0x91, 0x44, 0x30, 0x94, 0x32, 0x6b, 0x9c, 0x00, 0x91, 0x05, 0x9d, 0x00, 0x91,
-  0x45, 0x30, 0x88, 0x60, 0x91, 0x41, 0x95, 0x41, 0xab, 0xce, 0xe1, 0x41, 0x3c,
-  0x82, 0x02, 0x0c, 0xdc, 0x49, 0xa8, 0xce, 0x03, 0xf7, 0x07, 0xb8, 0x00, 0x01,
-  0x72, 0xa8, 0xcc, 0x75, 0xab, 0xce, 0xc1, 0x41, 0x3c, 0x82, 0x02, 0x0c, 0xdc,
-  0x4b, 0xa8, 0xce, 0x03, 0xf7, 0x96, 0xc9, 0x10, 0xb8, 0x00, 0x01, 0x74, 0xa8,
-  0xcc, 0x77, 0xab, 0xce, 0xe0, 0x41, 0x3c, 0x96, 0xce, 0xfc, 0x42, 0x30, 0x46,
-  0x82, 0x02, 0x0c, 0xdc, 0x4b, 0xae, 0xce, 0x03, 0xf7, 0x07, 0xb8, 0x00, 0x01,
-  0xae, 0xce, 0x78, 0xac, 0xcc, 0xce, 0x7c, 0xab, 0xce, 0xc0, 0x41, 0x3c, 0xaf,
-  0xc8, 0x96, 0xce, 0xfb, 0x99, 0xff, 0x9c, 0x00, 0x45, 0x3f, 0xc8, 0x30, 0x1b,
-  0x42, 0x3f, 0xc8, 0x82, 0x02, 0x0c, 0xdc, 0x4e, 0xae, 0xce, 0x03, 0xf7, 0x96,
-  0xc9, 0x10, 0xb8, 0x00, 0x01, 0xae, 0xce, 0x95, 0x25, 0xac, 0xcc, 0xce, 0x95,
-  0x2a, 0x97, 0x01, 0x0a, 0x3c, 0x97, 0x01, 0x0a, 0x3c, 0x82, 0x05, 0xca, 0xfd,
-  0x46, 0xa1, 0xca, 0xf8, 0x00, 0x8b, 0x3c, 0xa1, 0xca, 0xf8, 0x00, 0x8b, 0x60,
-  0xb7, 0x20, 0x00, 0x10, 0x9d, 0x00, 0xb7, 0x28, 0x00, 0x10, 0xac, 0x10, 0xcc,
-  0x97, 0x37, 0x12, 0x30, 0x64, 0xac, 0x10, 0xcc, 0x97, 0x37, 0x12, 0x30, 0x87,
-  0x30, 0x0a, 0x82, 0x00, 0x0a, 0xdd, 0x42, 0x00, 0x3c, 0x90, 0x01, 0x3c, 0xac,
-  0x10, 0xcc, 0x97, 0x00, 0x12, 0x97, 0x01, 0x03, 0x44, 0xeb, 0x58, 0x24, 0x3c,
-  0xb7, 0xfb, 0x5b, 0x14, 0x91, 0x01, 0xad, 0x14, 0x88, 0x96, 0xca, 0xf9, 0xae,
-  0xca, 0x03, 0xf7, 0xae, 0xca, 0x9d, 0x00, 0x30, 0x15, 0xa9, 0xcc, 0xa9, 0xcc,
-  0x86, 0x01, 0x00, 0xca, 0xfc, 0x41, 0x7a, 0xa9, 0x14, 0x86, 0xfb, 0x5f, 0x14,
-  0xfc, 0x3c, 0x95, 0x25, 0xc4, 0x88, 0x12, 0xc6, 0xc4, 0x96, 0x12, 0xdc, 0x3c,
-  0x80, 0x12, 0xce, 0xab, 0xa9, 0xcc, 0x34, 0x87, 0xae, 0xcc, 0x05, 0xae, 0xcc,
-  0x3c, 0xb7, 0xfb, 0x5b, 0x14, 0x91, 0x01, 0xad, 0x14, 0x88, 0x96, 0xca, 0xf9,
-  0xae, 0xca, 0x03, 0xf7, 0xae, 0xca, 0x9d, 0x00, 0x30, 0x40, 0xa9, 0xcc, 0xa9,
-  0xcc, 0x86, 0x01, 0x00, 0xca, 0xfc, 0x41, 0x7a, 0xa9, 0x14, 0x86, 0xfb, 0x5f,
-  0x14, 0xfc, 0x3c, 0x95, 0x25, 0xb7, 0xfb, 0x5b, 0x14, 0x91, 0x01, 0xad, 0x14,
-  0x88, 0x96, 0xca, 0xf9, 0xae, 0xca, 0x03, 0xf7, 0xae, 0xca, 0x9d, 0x00, 0x30,
-  0x1c, 0xa9, 0xcc, 0xa9, 0xcc, 0x86, 0x01, 0x00, 0xca, 0xfc, 0x41, 0x7a, 0xa9,
-  0x14, 0x86, 0xfb, 0x5f, 0x14, 0xfc, 0x3c, 0x95, 0x25, 0xc4, 0x88, 0x12, 0xc6,
-  0x89, 0x12, 0x3c, 0xc4, 0x96, 0x12, 0xdc, 0x4d, 0x80, 0x12, 0xce, 0xab, 0xa9,
-  0xcc, 0x34, 0xf7, 0xae, 0xcc, 0x05, 0xae, 0xcc, 0x89, 0x12, 0x3c, 0xb2, 0x10,
-  0x00, 0x00, 0xc6, 0xb2, 0x10, 0x00, 0x97, 0x55, 0x12, 0x30, 0x61, 0xb2, 0x10,
-  0x00, 0x97, 0x55, 0x12, 0x30, 0x84, 0x82, 0x00, 0x0a, 0xdd, 0x44, 0x30, 0x05,
-  0x00, 0x3c, 0x90, 0x01, 0x3c, 0xb2, 0x10, 0x00, 0x97, 0x00, 0x12, 0x97, 0x01,
-  0x03, 0x58, 0x02, 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x5e, 0xef,
-  0x01, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0xb7, 0xfc, 0x3e, 0x14, 0x91, 0x01, 0xad, 0x14, 0x88, 0x96, 0xca, 0xf9, 0xae,
-  0xca, 0x03, 0xf7, 0xae, 0xca, 0x9d, 0x00, 0x34, 0xe0, 0xa9, 0xcc, 0xa9, 0xcc,
-  0x86, 0x01, 0x00, 0xca, 0xfc, 0x41, 0x7a, 0xa9, 0x14, 0x86, 0xfc, 0x56, 0x14,
-  0xfc, 0x3c, 0x95, 0x25, 0xb7, 0xfc, 0x3e, 0x14, 0x91, 0x01, 0xad, 0x14, 0x88,
-  0x96, 0xca, 0xf9, 0xae, 0xca, 0x03, 0xf7, 0xae, 0xca, 0x9d, 0x00, 0x30, 0x40,
-  0xa9, 0xcc, 0xa9, 0xcc, 0x86, 0x01, 0x00, 0xca, 0xfc, 0x41, 0x7a, 0xa9, 0x14,
-  0x86, 0xfc, 0x56, 0x14, 0xfc, 0x3c, 0x95, 0x25, 0xb7, 0xfc, 0x3e, 0x14, 0x91,
-  0x01, 0xad, 0x14, 0x88, 0x96, 0xca, 0xf9, 0xae, 0xca, 0x03, 0xf7, 0xae, 0xca,
-  0x9d, 0x00, 0x30, 0x1c, 0xa9, 0xcc, 0xa9, 0xcc, 0x86, 0x01, 0x00, 0xca, 0xfc,
-  0x41, 0x7a, 0xa9, 0x14, 0x86, 0xfc, 0x56, 0x14, 0xfc, 0x3c, 0x95, 0x25, 0xc4,
-  0x88, 0x12, 0xc6, 0x89, 0x12, 0x3c, 0xc4, 0x96, 0x12, 0xdc, 0x4d, 0x80, 0x12,
-  0xce, 0xab, 0xa9, 0xcc, 0x35, 0xd7, 0xae, 0xcc, 0x05, 0xae, 0xcc, 0x89, 0x12,
-  0x3c, 0xb2, 0x12, 0x00, 0x00, 0xc6, 0xb2, 0x12, 0x00, 0x97, 0x55, 0x12, 0x30,
-  0x51, 0xb2, 0x12, 0x00, 0x97, 0x55, 0x12, 0x30, 0x74, 0x82, 0x00, 0x0a, 0xdd,
-  0x48, 0x30, 0x09, 0x82, 0x00, 0x0a, 0xdc, 0x00, 0x3c, 0x90, 0x01, 0x3c, 0xb2,
-  0x12, 0x00, 0x97, 0x00, 0x12, 0x97, 0x01, 0x03, 0x44, 0x02, 0xa8, 0x0f, 0x80,
-  0xb7, 0xfd, 0x22, 0x14, 0x91, 0x01, 0xad, 0x14, 0x88, 0x96, 0xca, 0xf9, 0xae,
-  0xca, 0x03, 0xf7, 0xae, 0xca, 0x9d, 0x00, 0x35, 0xb0, 0xa9, 0xcc, 0xa9, 0xcc,
-  0x86, 0x01, 0x00, 0xca, 0xfc, 0x41, 0x7a, 0xa9, 0x14, 0x86, 0xfd, 0x26, 0x14,
-  0xfc, 0x3c, 0x95, 0x25, 0xb7, 0xfd, 0x22, 0x14, 0x91, 0x01, 0xad, 0x14, 0x88,
-  0x96, 0xca, 0xf9, 0xae, 0xca, 0x03, 0xf7, 0xae, 0xca, 0x9d, 0x00, 0x30, 0x40,
-  0xa9, 0xcc, 0xa9, 0xcc, 0x86, 0x01, 0x00, 0xca, 0xfc, 0x41, 0x7a, 0xa9, 0x14,
-  0x86, 0xfd, 0x26, 0x14, 0xfc, 0x3c, 0x95, 0x25, 0xb7, 0xfd, 0x22, 0x14, 0x91,
-  0x01, 0xad, 0x14, 0x88, 0x96, 0xca, 0xf9, 0xae, 0xca, 0x03, 0xf7, 0xae, 0xca,
-  0x9d, 0x00, 0x30, 0x1c, 0xa9, 0xcc, 0xa9, 0xcc, 0x86, 0x01, 0x00, 0xca, 0xfc,
-  0x41, 0x7a, 0xa9, 0x14, 0x86, 0xfd, 0x26, 0x14, 0xfc, 0x3c, 0x95, 0x25, 0xc4,
-  0x88, 0x12, 0xc6, 0x89, 0x12, 0x3c, 0xc4, 0x96, 0x12, 0xdc, 0x4d, 0x80, 0x12,
-  0xce, 0xab, 0xa9, 0xcc, 0x36, 0xa7, 0xae, 0xcc, 0x05, 0xae, 0xcc, 0x89, 0x12,
-  0x3c, 0xac, 0x04, 0xcc, 0xac, 0x06, 0xca, 0xb0, 0xff, 0x7f, 0x82, 0x00, 0x0c,
-  0xdc, 0xb0, 0x04, 0x01, 0x82, 0x02, 0x0c, 0xdc, 0x90, 0x05, 0x82, 0x00, 0x0b,
-  0xdc, 0x37, 0x30, 0x82, 0x00, 0x0b, 0xdd, 0x37, 0x4c, 0x00, 0xaa, 0xc8, 0x62,
-  0xaa, 0xc8, 0x62, 0xaa, 0xc8, 0x62, 0xac, 0x04, 0xcc, 0xac, 0x06, 0xca, 0xb0,
-  0xff, 0x7f, 0x82, 0x00, 0x0c, 0xdc, 0xb0, 0x04, 0x01, 0x82, 0x02, 0x0c, 0xdc,
-  0x90, 0x05, 0x82, 0x00, 0x0b, 0xdc, 0x37, 0x25, 0x82, 0x00, 0x0b, 0xdd, 0x37,
-  0x4a,0x3c
-};
-
-/* This is the main firmware which implements the FDDI PHY transactions and talks
- * to the MAC chipsets.
- */
-const unsigned short main_firmware_dev_addr   = 0xf000; /* Offset as seen by device. */
-const unsigned short main_firmware_size       = 0x1000; /* Size of main firmware.    */
-
-static unsigned char main_firmware[] __initdata = {
-  0x00, 0xaa, 0xc8, 0x62, 0xab, 0x00, 0xab, 0xbe, 0x8b, 0xba, 0x97, 0x3c, 0xd0,
-  0x90, 0x01, 0x8b, 0xd4, 0x8b, 0xf4, 0xb7, 0x02, 0x03, 0xe2, 0xb7, 0x02, 0x03,
-  0xf2, 0x97, 0x14, 0xc0, 0xb2, 0x20, 0x3c, 0xb3, 0x01, 0x52, 0x00, 0xf3, 0xa7,
-  0x01, 0x92, 0x01, 0x82, 0x90, 0x0c, 0xe3, 0xb0, 0xcc, 0xcc, 0xf6, 0xe6, 0xb6,
-  0x01, 0x5c, 0x08, 0xf1, 0xb0, 0x88, 0xcc, 0xe3, 0xb0, 0x21, 0x52, 0xe3, 0x00,
-  0x05, 0xe3, 0x63, 0x8f, 0x08, 0x8d, 0x00, 0x07, 0xe4, 0x04, 0xe6, 0xb3, 0xff,
-  0x80, 0xf1, 0x00, 0xaa, 0xca, 0x64, 0xb7, 0x3e, 0x80, 0xb6, 0x91, 0x16, 0xf1,
-  0xa8, 0xb6, 0x82, 0x80, 0xb7, 0xdb, 0xaa, 0xca, 0x69, 0xb0, 0x3f, 0xff, 0xf1,
-  0xf0, 0xb2, 0x20, 0x3c, 0xb7, 0x01, 0xc0, 0xc4, 0xb6, 0xff, 0xfe, 0xa8, 0x27,
-  0x90, 0xf7, 0x92, 0xba, 0x17, 0x20, 0x1f, 0x00, 0x8b, 0xd2, 0xab, 0xaa, 0x05,
-  0xf3, 0x9c, 0x00, 0x55, 0xb6, 0x01, 0x04, 0x10, 0x9a, 0x04, 0xab, 0xbe, 0x83,
-  0x01, 0xff, 0x16, 0xab, 0x96, 0xc8, 0x12, 0x83, 0x02, 0xff, 0x16, 0xab, 0x90,
-  0x01, 0xb6, 0x01, 0x04, 0x11, 0x04, 0xb6, 0xff, 0x02, 0xab, 0x92, 0xce, 0xb3,
-  0x20, 0x30, 0x30, 0x26, 0xb3, 0x28, 0x30, 0x96, 0xbe, 0x12, 0x30, 0x1e, 0xb2,
-  0x20, 0x2e, 0x30, 0x06, 0xb6, 0xff, 0x00, 0x89, 0x94, 0x2b, 0x00, 0xc6, 0xc4,
-  0x99, 0x01, 0x9d, 0x00, 0x4a, 0x90, 0x40, 0xc6, 0xa8, 0xe2, 0xb9, 0xfd, 0xff,
-  0xab, 0xe2, 0x3c, 0xd4, 0x9d, 0x11, 0x3c, 0xc7, 0x0e, 0x90, 0x01, 0x06, 0xd6,
-  0x0b, 0x09, 0x8f, 0x0e, 0x3c, 0xb6, 0xff, 0x8e, 0xae, 0xb6, 0xff, 0x8c, 0xab,
-  0x0e, 0x96, 0xd0, 0x18, 0xb6, 0x01, 0x20, 0x11, 0x26, 0x92, 0xaa, 0x18, 0x13,
-  0x25, 0xb6, 0xff, 0x8e, 0xa8, 0xda, 0x8b, 0xab, 0xdb, 0xe7, 0xe7, 0xb8, 0xff,
-  0x90, 0xab, 0xb4, 0xab, 0xce, 0xf0, 0xab, 0xac, 0x8f, 0xfb, 0x05, 0xbd, 0x7f,
-  0xfe, 0x94, 0x40, 0xa8, 0xac, 0xbd, 0x3f, 0xff, 0xb4, 0x01, 0x8a, 0x04, 0xab,
-  0xb2, 0x05, 0xe7, 0xe7, 0xab, 0xce, 0xf0, 0xab, 0xae, 0xf4, 0xab, 0xb0, 0xb3,
-  0xff, 0x82, 0xf0, 0xe7, 0x07, 0x28, 0x92, 0xba, 0x16, 0x24, 0x92, 0xaa, 0xa8,
-  0xb0, 0xbd, 0x7f, 0xff, 0xb4, 0x01, 0x9d, 0xbd, 0x07, 0xff, 0xb4, 0x01, 0xf0,
-  0x9d, 0x08, 0xb4, 0x02, 0xbf, 0xb4, 0x01, 0x06, 0xa8, 0xb2, 0xad, 0xb4, 0xab,
-  0x92, 0xaa, 0x90, 0x08, 0xdd, 0x96, 0xd0, 0x08, 0x95, 0x6f, 0x90, 0x08, 0x2d,
-  0x97, 0xfb, 0xd2, 0xb3, 0x10, 0x5e, 0xb2, 0x12, 0x0a, 0x00, 0xd5, 0x8b, 0xb6,
-  0x00, 0xc5, 0x96, 0xbe, 0x10, 0x5a, 0x8b, 0xb7, 0xb3, 0x18, 0x5e, 0xb2, 0x1a,
-  0x0a, 0x00, 0xd5, 0x8b, 0xb8, 0x00, 0xc5, 0xc5, 0x88, 0xb8, 0xd5, 0xb2, 0x12,
-  0x0a, 0xb3, 0x10, 0x5e, 0x88, 0xb7, 0xc5, 0x88, 0xb6, 0xd5, 0x92, 0xaa, 0x57,
-  0x90, 0x06, 0x2d, 0xb3, 0x20, 0x06, 0x00, 0xd5, 0xd5, 0x4d, 0x90, 0x07, 0x2d,
-  0xb3, 0x28, 0x06, 0x6a, 0x90, 0x05, 0x42, 0x90, 0x09, 0x2d, 0x1e, 0xa5, 0xff,
-  0x8c, 0xff, 0x8e, 0xab, 0x3c, 0xab, 0xca, 0xb9, 0x07, 0xff, 0xbd, 0x03, 0xff,
-  0x41, 0x5a, 0x92, 0xcb, 0x97, 0x7c, 0xc9, 0xe7, 0x11, 0x43, 0x10, 0x46, 0x3c,
-  0x10, 0x47, 0xad, 0xc8, 0xa9, 0xad, 0xc8, 0xa8, 0x50, 0xab, 0xcc, 0xe4, 0x05,
-  0xe6, 0x04, 0x49, 0x1e, 0x17, 0x42, 0x94, 0x59, 0x1f, 0x16, 0x67, 0x57, 0x92,
-  0xc9, 0xbd, 0x03, 0xff, 0x6d, 0xbd, 0x02, 0xdf, 0x94, 0x29, 0xe7, 0x12, 0x51,
-  0x11, 0x48, 0xe7, 0x11, 0x0b, 0x10, 0x0c, 0x0e, 0xc7, 0x53, 0xbd, 0x03, 0xbe,
-  0x53, 0xb8, 0xfa, 0x00, 0xb8, 0x14, 0x00, 0x10, 0x41, 0x46, 0x96, 0xc8, 0x17,
-  0xb8, 0x00, 0x80, 0x96, 0xaa, 0x08, 0x3c, 0xc7, 0xb8, 0x2e, 0x40, 0x68, 0x10,
-  0x55, 0x96, 0xc8, 0x14, 0x4d, 0xbd, 0x02, 0xe0, 0xb0, 0x34, 0x00, 0xbc, 0x02,
-  0xe0, 0xb0, 0x30, 0x00, 0x7b, 0xb8, 0xfd, 0xc9, 0x4a, 0x96, 0xc8, 0x17, 0x43,
-  0x99, 0x7f, 0x6b, 0xb8, 0x1c, 0x80, 0xe7, 0x3c, 0xa8, 0xae, 0x96, 0xc9, 0x17,
-  0x41, 0x3c, 0x2b, 0xab, 0xcc, 0xc4, 0x96, 0xaa, 0x10, 0x41, 0xe4, 0xae, 0xca,
-  0x88, 0xc9, 0xe7, 0x3b, 0x99, 0x0f, 0x96, 0xca, 0xf8, 0x3c, 0xcc, 0x09, 0x1c,
-  0x0d, 0x16, 0x38, 0x37, 0x4d, 0x63, 0x6e, 0xa1, 0xae, 0xff, 0xbe, 0xab, 0x2f,
-  0x17, 0x4a, 0x0f, 0xa5, 0xff, 0x8e, 0xff, 0x8a, 0xab, 0x44, 0x17, 0x41, 0x5d,
-  0x1f, 0x2a, 0xab, 0xcc, 0x99, 0x0f, 0x9d, 0x0b, 0x4a, 0x9c, 0x0b, 0xb6, 0xff,
-  0x8a, 0xa8, 0xb6, 0xff, 0x8e, 0xab, 0xa8, 0xcc, 0x82, 0x02, 0xb0, 0xdc, 0xb6,
-  0xff, 0xfc, 0xab, 0xb4, 0xfe, 0xbd, 0x2a, 0xae, 0xb2, 0x92, 0xaa, 0x15, 0x96,
-  0xc9, 0x0e, 0x96, 0xb0, 0x10, 0x0d, 0xaf, 0xc8, 0x96, 0xb3, 0x16, 0x41, 0x76,
-  0xa8, 0xb2, 0x2c, 0x3f, 0xc8, 0x92, 0xc9, 0x17, 0x4c, 0x16, 0x43, 0x96, 0xaa,
-  0x1d, 0x1e, 0xab, 0xb2, 0x95, 0x28, 0xe7, 0xe7, 0x92, 0xaa, 0xaf, 0xc8, 0x3c,
-  0x2a, 0x92, 0xc9, 0x1f, 0x16, 0x0f, 0xa0, 0xc8, 0xb2, 0xf8, 0x95, 0x3b, 0x88,
-  0xaf, 0x97, 0x7c, 0xc9, 0xe7, 0xad, 0xc8, 0xaa, 0xad, 0xc8, 0xa8, 0x9c, 0x00,
-  0x95, 0x4b, 0x94, 0x4a, 0x96, 0xb1, 0x16, 0x08, 0x2b, 0x92, 0xaa, 0xab, 0xce,
-  0x10, 0x41, 0xf4, 0xd4, 0x93, 0xb6, 0xf6, 0x88, 0xaf, 0x96, 0xb1, 0x16, 0x4a,
-  0x97, 0x7c, 0xc9, 0xe7, 0xad, 0xc8, 0xa8, 0x10, 0x99, 0xff, 0x8d, 0xb8, 0x00,
-  0xe6, 0x88, 0xb1, 0x3b, 0x99, 0x03, 0xcc, 0x04, 0x07, 0x0a, 0x0d, 0xf4, 0xfc,
-  0x4e, 0x50, 0xf4, 0xfd, 0x4a, 0x4c, 0xf4, 0xfd, 0x46, 0x6a, 0xf4, 0xf9, 0x9d,
-  0x00, 0x43, 0x96, 0xca, 0x0b, 0x88, 0xb1, 0x96, 0xca, 0xf9, 0x9c, 0x00, 0x4c,
-  0x88, 0xae, 0x96, 0xc8, 0x17, 0xba, 0xff, 0x00, 0xa0, 0xc8, 0xb2, 0xf8, 0xb4,
-  0xfe, 0x18, 0x2b, 0xab, 0xce, 0xab, 0xb6, 0x88, 0xb1, 0x9d, 0x77, 0x46, 0x92,
-  0xb8, 0xac, 0xae, 0xb8, 0x4f, 0x96, 0xaf, 0x17, 0x76, 0xa8, 0xae, 0xbd, 0x77,
-  0xff, 0x6f, 0x2b, 0xab, 0xcc, 0x88, 0xaf, 0xe7, 0x3b, 0x99, 0x0f, 0x96, 0xaa,
-  0x10, 0x96, 0xc8, 0x0c, 0x02, 0xcc, 0x4f, 0x1f, 0x20, 0x22, 0x24, 0x28, 0x2a,
-  0x2d, 0x2f, 0x31, 0x33, 0x36, 0x3a, 0x3c, 0x3e, 0x40, 0x77, 0x47, 0x48, 0x4a,
-  0x4c, 0x4e, 0x50, 0x53, 0x55, 0x59, 0x5b, 0x5e, 0x62, 0x64, 0x66, 0x68, 0xe4,
-  0x4d, 0xf4, 0xe5, 0x4a, 0xf4, 0xf8, 0x47, 0xf4, 0xf8, 0x00, 0xf7, 0x42, 0xf4,
-  0xeb, 0x58, 0xe4, 0x8f, 0xeb, 0x54, 0xf4, 0xfe, 0x5b, 0xf4, 0xfe, 0x49, 0xf4,
-  0xff, 0x55, 0xe4, 0x8f, 0xff, 0x51, 0xf4, 0xff, 0xa8, 0xce, 0x4c, 0xf4, 0xf9,
-  0x4c, 0xf4, 0xfa, 0x49, 0xf4, 0xfb, 0x46, 0xf4, 0x23, 0x43, 0xac, 0xb6, 0xce,
-  0xf6, 0x94, 0x36, 0xc4, 0x4b, 0xd4, 0xc5, 0x48, 0xd4, 0xd8, 0x45, 0xd4, 0xd8,
-  0x4c, 0xd4, 0xcb, 0x5a, 0xc4, 0x8f, 0xcb, 0x56, 0xd4, 0xde, 0x5d, 0xd4, 0xde,
-  0x88, 0xc9, 0x58, 0xd4, 0xdf, 0x55, 0xc4, 0x8f, 0xdf, 0x51, 0xd4, 0xdf, 0xa8,
-  0xce, 0x4c, 0xd4, 0xd9, 0x4c, 0xd4, 0xda, 0x49, 0xd4, 0xdb, 0x46, 0xd4, 0x23,
-  0x43, 0xac, 0xb6, 0xce, 0xd6, 0xb4, 0xfd, 0x5c, 0xae, 0xca, 0xc4, 0x99, 0x0f,
-  0xae, 0xca, 0x82, 0x00, 0xca, 0xfc, 0x3c, 0x14, 0x45, 0xe7, 0xaa, 0xca, 0x63,
-  0x3c, 0xc7, 0xaa, 0xca, 0x63, 0x3c, 0xbd, 0x03, 0xff, 0x5e, 0x92, 0xc9, 0xb3,
-  0x12, 0x10, 0x10, 0xb3, 0x1a, 0x10, 0x96, 0xc8, 0x17, 0x94, 0x72, 0xa8, 0xae,
-  0x17, 0x4c, 0x16, 0x94, 0x5e, 0x15, 0x94, 0x3f, 0x9c, 0x80, 0x94, 0x1f, 0x9d,
-  0x00, 0xb4, 0xfd, 0x1f, 0xa8, 0xce, 0xb8, 0xff, 0x2e, 0xab, 0xcc, 0x9a, 0x28,
-  0xab, 0xca, 0xb8, 0xfe, 0xf2, 0xab, 0xce, 0x00, 0xe1, 0x62, 0x00, 0xd6, 0x97,
-  0x38, 0xce, 0xd6, 0x7c, 0xa8, 0xce, 0xb8, 0xfe, 0x80, 0xab, 0xcc, 0x9a, 0x0c,
-  0xab, 0xca, 0x22, 0x97, 0xb0, 0xcc, 0x97, 0xfe, 0xca, 0x22, 0x74, 0x00, 0x96,
-  0xcc, 0x14, 0x05, 0xe1, 0x66, 0x3c, 0x04, 0x97, 0x7c, 0xc9, 0xe7, 0xab, 0xcc,
-  0x91, 0x04, 0xe2, 0xab, 0xb8, 0xe4, 0xab, 0xb6, 0x97, 0x04, 0xce, 0x00, 0xf1,
-  0x92, 0xb9, 0xc2, 0xd6, 0xaa, 0xca, 0x64, 0x4b, 0xac, 0xce, 0xcc, 0x97, 0x04,
-  0xce, 0x99, 0x1f, 0xd6, 0x18, 0x10, 0x5c, 0x62, 0x3b, 0x99, 0xf0, 0x8b, 0xb6,
-  0x2a, 0x96, 0xc9, 0x10, 0x96, 0xb6, 0x08, 0xac, 0xce, 0xcc, 0x97, 0x1a, 0xce,
-  0x11, 0x41, 0x62, 0xd6, 0xf3, 0x88, 0xb6, 0xd6, 0x19, 0xb4, 0xfc, 0xa2, 0x8d,
-  0xab, 0xb2, 0xc0, 0x3b, 0x3c, 0xe7, 0x07, 0x45, 0x82, 0x06, 0xb0, 0xfd, 0x3c,
-  0xe7, 0xf4, 0x07, 0x2c, 0xb6, 0xff, 0x86, 0xa8, 0xb9, 0x03, 0xff, 0xe7, 0xe7,
-  0xe7, 0xba, 0x60, 0x00, 0xab, 0xce, 0x29, 0x3b, 0x3b, 0x97, 0x80, 0xc8, 0xf1,
-  0xe0, 0x62, 0xb6, 0xff, 0x86, 0xa9, 0x3c, 0x20, 0x21, 0x27, 0x9c, 0xf6, 0x65,
-  0x92, 0xba, 0x9d, 0xef, 0x4f, 0x93, 0xbd, 0x9d, 0x2f, 0x9d, 0x3f, 0x42, 0x9a,
-  0xf0, 0xd3, 0x20, 0x21, 0xd5, 0x94, 0x69, 0xac, 0xbc, 0xce, 0x99, 0x0f, 0xcc,
-  0x44, 0x2a, 0x38, 0x33, 0x2e, 0x1c, 0x3e, 0x09, 0x12, 0x0f, 0x10, 0x0d, 0x30,
-  0x37, 0x36, 0x35, 0x0f, 0x1c, 0xa1, 0xce, 0xff, 0xbe, 0xab, 0x2f, 0x0d, 0x41,
-  0x1d, 0x0e, 0x96, 0xc8, 0x11, 0x41, 0x3c, 0x90, 0xf0, 0x96, 0xaa, 0x14, 0x4a,
-  0x96, 0xaa, 0x0b, 0x3c, 0x90, 0xf1, 0x20, 0x21, 0x8e, 0xbb, 0x55, 0x88, 0xbb,
-  0xd5, 0x51, 0x88, 0xbb, 0xd6, 0x4d, 0xd4, 0x4b, 0x1e, 0x14, 0x3f, 0xc8, 0x1c,
-  0x90, 0xfc, 0x43, 0x29, 0x92, 0xba, 0x5b, 0x1b, 0x0c, 0x90, 0x0a, 0xb6, 0xff,
-  0x8e, 0xae, 0xb6, 0xff, 0x88, 0xab, 0xa1, 0xbc, 0xff, 0xb8, 0xab, 0x2e, 0x1c,
-  0xa5, 0xff, 0x88, 0xff, 0x8e, 0xab, 0x90, 0xf5, 0xb6, 0x01, 0x20, 0x10, 0x41,
-  0x65, 0xb6, 0x01, 0x26, 0x8b, 0x3c, 0xb6, 0x01, 0x20, 0x11, 0x41, 0x65, 0xb6,
-  0x01, 0x24, 0x88, 0x3c, 0x15, 0x45, 0x82, 0x06, 0xb0, 0xfd, 0x3c, 0x0c, 0x90,
-  0x80, 0x20, 0x21, 0x9c, 0xff, 0x42, 0x26, 0x69, 0x1c, 0x29, 0x20, 0x21, 0xc0,
-  0x63, 0x3c, 0x40, 0x40, 0x40, 0x40, 0x3c, 0x40, 0x40, 0x40, 0x40, 0x3c, 0x3c,
-  0x3c, 0x91, 0x00, 0xb6, 0x12, 0x08, 0x88, 0x96, 0xc8, 0x13, 0x30, 0x55, 0x96,
-  0xc8, 0x14, 0x30, 0x41, 0x96, 0xc8, 0x16, 0x94, 0x2b, 0x96, 0xc8, 0x17, 0x5c,
-  0xa8, 0xca, 0x96, 0xc8, 0x13, 0x30, 0x2b, 0x00, 0xb6, 0x12, 0x08, 0x8b, 0xb6,
-  0x10, 0x5c, 0x88, 0x96, 0xc8, 0x10, 0x30, 0x5d, 0x82, 0x00, 0xca, 0xfc, 0x3c,
-  0x94, 0x77, 0x00, 0xb6, 0x12, 0x0e, 0x8b, 0x82, 0x08, 0xca, 0xfa, 0x95, 0x25,
-  0x00, 0xb6, 0x12, 0x16, 0x8b, 0x82, 0x08, 0xca, 0xfa, 0x95, 0x30, 0x00, 0xb6,
-  0x12, 0x0a, 0x8b, 0x3c, 0xae, 0xce, 0xb6, 0x12, 0x1c, 0x88, 0x99, 0x55, 0xb6,
-  0x12, 0x1c, 0x8b, 0xae, 0xce, 0x3c, 0xae, 0xce, 0xb6, 0x12, 0x28, 0x88, 0x96,
-  0xc8, 0x10, 0x54, 0x96, 0xc8, 0x14, 0x50, 0x96, 0xc8, 0x12, 0x4c, 0x83, 0x00,
-  0x12, 0x2a, 0x8b, 0x82, 0x08, 0xca, 0xfa, 0xae, 0xce, 0x3c, 0x99, 0xea, 0xb6,
-  0x12, 0x28, 0x8b, 0x82, 0x02, 0xca, 0xfa, 0xae, 0xce, 0x3c, 0xb6, 0x10, 0x1c,
-  0x88, 0xb6, 0xff, 0x0a, 0x8b, 0xb6, 0x10, 0x20, 0x88, 0x99, 0xfc, 0xb6, 0x10,
-  0x20, 0x8b, 0xb6, 0x10, 0x5c, 0x88, 0x99, 0xfe, 0xb6, 0x10, 0x5c, 0x8b, 0x82,
-  0x04, 0xca, 0xfa, 0x3c, 0xb3, 0xff, 0x50, 0xa2, 0x01, 0xce, 0x88, 0x9d, 0x00,
-  0x66, 0x90, 0x01, 0xd6, 0xa2, 0x01, 0xce, 0x88, 0x9d, 0x00, 0x5b, 0xb6, 0xff,
-  0x52, 0xa8, 0x96, 0xca, 0xfa, 0xb6, 0xff, 0x52, 0xab, 0xb6, 0xff, 0xfc, 0xa8,
-  0x83, 0x00, 0xff, 0x56, 0xfd, 0xb6, 0xff, 0xfc, 0xab, 0x00, 0xd6, 0x3c, 0x00,
-  0xd6, 0x95, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb4, 0xfe,
-  0x93, 0x40, 0xb4, 0xfe, 0x8e, 0x40, 0xb4, 0xfe, 0x8c, 0x40, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0xf9, 0x01,
-  0x12, 0x30, 0x1f, 0x8b, 0x11, 0x30, 0x1b, 0x8b, 0x0d, 0x30, 0x17, 0x8b, 0x0c,
-  0x82, 0x00, 0x11, 0xdc, 0x4a, 0x30, 0x0e, 0xad, 0x0c, 0x8b, 0xa9, 0x0c, 0x8a,
-  0x11, 0x69, 0x83, 0x00, 0xf9, 0x00, 0xab, 0x3c, 0xb6, 0xf9, 0x00, 0xa8, 0x96,
-  0xc8, 0x17, 0x41, 0x68, 0xad, 0x12, 0x88, 0xa9, 0x12, 0x3c, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 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, 0x5d, 0xf5, 0x68, 0xf5, 0x5c, 0xf4, 0xf1, 0xf3,
-  0x73, 0xf5, 0x42, 0xf5, 0xdc, 0xf4, 0x6e, 0xf5, 0xb1, 0xf4, 0xab, 0xf4, 0x37,
-  0xf2, 0xb2, 0xf1, 0xb7, 0xf2, 0xe2, 0xf0, 0xeb, 0xf0, 0x0a, 0xf0, 0x0a, 0xf0,
-  0xa7, 0xf1, 0xa4, 0xf1, 0x9d, 0xf1, 0x93, 0xf1, 0x5c, 0xf1, 0x00, 0x00, 0x00,
-  0xf0
-};
-
-/* This is the FDDI station management firmware. */
-const unsigned short smt_firmware_dev_addr     = 0x4000; /* Offset as seen by device. */
-const unsigned short smt_firmware_size         = 0x72b0; /* Size of SMT firmware.     */
-
-static unsigned char smt_firmware[] __initdata = {
-  0x94, 0xaa, 0x00, 0x00, 0x94, 0x5d, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0x94, 0x2c,
-  0x00, 0x00, 0xb4, 0x5d, 0xfa, 0x00, 0x94, 0xc4, 0x00, 0x00, 0x94, 0xc8, 0x00, 0x00,
-  0x94, 0xcc, 0x00, 0x00, 0xb4, 0x01, 0xbc, 0x00, 0x00, 0x00, 0xb2, 0xfe, 0x20, 0xc4,
-  0x96, 0xc8, 0x17, 0x41, 0x3c, 0xb5, 0x56, 0xa7, 0xb2, 0xfe, 0x20, 0x00, 0xe6, 0xb4,
-  0x04, 0x1a, 0x83, 0x00, 0xfe, 0x94, 0xab, 0xb2, 0xfe, 0x20, 0xe4, 0x96, 0xc8, 0x17,
-  0x41, 0x45, 0x99, 0x3f, 0x9c, 0x03, 0x46, 0x83, 0x00, 0xfe, 0x20, 0xab, 0x3c, 0x82,
-  0x02, 0xcc, 0xf8, 0xb3, 0xfe, 0x90, 0xb5, 0x3b, 0x12, 0x83, 0xe0, 0xfe, 0x94, 0xab,
-  0x75, 0xac, 0x74, 0xce, 0x92, 0x00, 0xb5, 0x35, 0xdf, 0x92, 0x0e, 0xb6, 0x10, 0x00,
-  0x88, 0x99, 0xfe, 0xb6, 0x10, 0x00, 0x8b, 0xb5, 0x35, 0xc3, 0x90, 0x01, 0xb5, 0x35,
-  0xd8, 0xb5, 0x35, 0x1e, 0xb6, 0x10, 0x00, 0x88, 0x9a, 0x01, 0xb6, 0x10, 0x00, 0x8b,
-  0x89, 0x7d, 0xac, 0x6e, 0x02, 0xac, 0x70, 0x04, 0xb7, 0x04, 0x00, 0x06, 0xac, 0x74,
-  0xcc, 0x82, 0x34, 0xcc, 0xf8, 0x00, 0xb5, 0x2c, 0xf0, 0x90, 0x01, 0xb5, 0x34, 0x80,
-  0xb5, 0x34, 0xf5, 0x3c, 0xa7, 0xb8, 0x00, 0xda, 0xda, 0x00, 0xe1, 0x62, 0x8d, 0x02,
-  0x80, 0x00, 0xe1, 0x62, 0xa8, 0xbe, 0x99, 0x0c, 0xc7, 0xc7, 0x04, 0x8b, 0x7e, 0xb7,
-  0xb8, 0x0c, 0x72, 0xb7, 0xb8, 0x44, 0x74, 0xb7, 0xb8, 0xa4, 0x76, 0xb7, 0xba, 0x8a,
-  0x78, 0xb5, 0x02, 0xf4, 0xb4, 0x03, 0x1b, 0x3c, 0xb5, 0x2e, 0xf4, 0xb4, 0x03, 0x74,
-  0x40, 0x40, 0xb7, 0x00, 0x00, 0x08, 0xb2, 0x20, 0x00, 0x4c, 0x82, 0x01, 0x7e, 0xdc,
-  0x3c, 0xb7, 0x00, 0x01, 0x08, 0xb2, 0x28, 0x00, 0xa2, 0x04, 0xcc, 0x88, 0xa2, 0x06,
-  0xcc, 0xd9, 0x8b, 0x0a, 0x99, 0x60, 0x9c, 0x00, 0x94, 0x56, 0xa8, 0x08, 0xb5, 0x33,
-  0x33, 0xab, 0xca, 0x99, 0x20, 0x9c, 0x00, 0x57, 0xb7, 0x02, 0x0a, 0x02, 0xac, 0xca,
-  0x04, 0xb7, 0x00, 0x00, 0x06, 0xa8, 0x08, 0xb5, 0x04, 0x98, 0x90, 0x20, 0x01, 0xa0,
-  0xc8, 0xca, 0xf9, 0xa8, 0xca, 0x99, 0x02, 0x9c, 0x00, 0x57, 0xa8, 0x08, 0xb5, 0x02,
-  0xed, 0xa2, 0x4e, 0x76, 0xa8, 0x9c, 0x03, 0x4b, 0xaf, 0xca, 0xa8, 0x08, 0x91, 0x02,
-  0xb5, 0x33, 0x86, 0x3f, 0xca, 0x82, 0x00, 0xca, 0xfc, 0x50, 0xb7, 0x02, 0x09, 0x02,
-  0xac, 0xca, 0x04, 0xb7, 0x00, 0x00, 0x06, 0xa8, 0x08, 0xb5, 0x04, 0x5e, 0x88, 0x0a,
-  0x99, 0x10, 0x9c, 0x00, 0x55, 0xa8, 0x08, 0x32, 0x11, 0xb7, 0x05, 0x05, 0x02, 0xb7,
-  0x00, 0x00, 0x04, 0xb7, 0x00, 0x00, 0x06, 0xa8, 0x08, 0xb5, 0x04, 0x42, 0x90, 0x80,
-  0xa2, 0x04, 0xcc, 0x8e, 0xb4, 0x02, 0xd3, 0x00, 0xb6, 0xff, 0x44, 0xa9, 0xb6, 0x12,
-  0x0e, 0x8b, 0x82, 0x08, 0xca, 0xfa, 0x94, 0x6d, 0x00, 0xb6, 0xff, 0x42, 0xa9, 0xb6,
-  0x12, 0x16, 0x8b, 0x82, 0x08, 0xca, 0xfa, 0x94, 0x5e, 0x00, 0xb6, 0x12, 0x0a, 0x8b,
-  0x3c, 0xae, 0xce, 0xb6, 0x12, 0x1c, 0x88, 0x99, 0x55, 0xb6, 0x12, 0x1c, 0x8b, 0xae,
-  0xce, 0x3c, 0xae, 0xce, 0xb6, 0x12, 0x28, 0x88, 0x96, 0xc8, 0x10, 0x54, 0x96, 0xc8,
-  0x14, 0x50, 0x96, 0xc8, 0x12, 0x4c, 0x83, 0x00, 0x12, 0x2a, 0x8b, 0x82, 0x08, 0xca,
-  0xfa, 0xae, 0xce, 0x3c, 0x99, 0xea, 0xb6, 0x12, 0x28, 0x8b, 0x82, 0x02, 0xca, 0xfa,
-  0xae, 0xce, 0x3c, 0xb7, 0x00, 0x00, 0x0c, 0x91, 0x00, 0xb6, 0x12, 0x08, 0x88, 0x96,
-  0xc8, 0x13, 0x34, 0x38, 0x96, 0xc8, 0x14, 0x34, 0x4c, 0x96, 0xc8, 0x16, 0x95, 0x66,
-  0x96, 0xc8, 0x17, 0x95, 0x7a, 0xa8, 0xca, 0x96, 0xc8, 0x13, 0x34, 0x63, 0x00, 0xb6,
-  0x12, 0x08, 0x8b, 0xac, 0xca, 0x0c, 0x97, 0x00, 0x09, 0xb6, 0x10, 0x5c, 0x88, 0xb6,
-  0x10, 0x5e, 0xd9, 0x8b, 0x0a, 0x99, 0x01, 0x9c, 0x00, 0x94, 0x7f, 0xb6, 0x10, 0x24,
-  0x88, 0x99, 0x23, 0x9c, 0x00, 0x94, 0x3f, 0xab, 0xca, 0x99, 0x20, 0x9c, 0x00, 0x46,
-  0x97, 0x01, 0x09, 0x97, 0x20, 0x08, 0xa8, 0xca, 0x99, 0x02, 0x9c, 0x00, 0x47, 0x82,
-  0x02, 0x09, 0xda, 0x97, 0x02, 0x08, 0xa8, 0xca, 0x99, 0x01, 0x9c, 0x00, 0x48, 0x82,
-  0x04, 0x09, 0xda, 0x82, 0x01, 0x08, 0xda, 0xa8, 0xca, 0x01, 0xab, 0xca, 0xb6, 0x10,
-  0x26, 0x88, 0x96, 0xca, 0xf9, 0xb6, 0x10, 0x26, 0x8b, 0x00, 0xb6, 0x10, 0x24, 0x8b,
-  0xb6, 0x10, 0x20, 0x88, 0x99, 0x03, 0x9c, 0x00, 0x94, 0x2c, 0xb6, 0x10, 0x1c, 0x88,
-  0x99, 0x80, 0x9c, 0x00, 0x48, 0x90, 0x40, 0xb5, 0x5b, 0x18, 0x90, 0x80, 0x41, 0x00,
-  0xb6, 0xff, 0x0a, 0x8b, 0x82, 0x04, 0x0c, 0xfa, 0xb7, 0x04, 0x03, 0x02, 0xab, 0x04,
-  0xb7, 0x00, 0x00, 0x06, 0x00, 0xb6, 0x10, 0x20, 0x8b, 0xb5, 0x03, 0x1c, 0x88, 0x0a,
-  0x99, 0x02, 0x9c, 0x00, 0x94, 0x3f, 0xb6, 0x10, 0x28, 0x88, 0x99, 0x10, 0x9c, 0x00,
-  0x5a, 0x82, 0x08, 0x09, 0xda, 0x90, 0x10, 0x01, 0xab, 0xca, 0xb6, 0x10, 0x2a, 0x88,
-  0x96, 0xca, 0xf9, 0xb6, 0x10, 0x2a, 0x8b, 0x00, 0xb6, 0x10, 0x28, 0x8b, 0x40, 0xb6,
-  0x10, 0x28, 0x88, 0x99, 0x40, 0x9c, 0x00, 0x53, 0xb5, 0x33, 0x96, 0x90, 0x40, 0x01,
-  0xab, 0xca, 0xb6, 0x10, 0x2a, 0x88, 0x96, 0xca, 0xf9, 0xb6, 0x10, 0x2a, 0x8b, 0x88,
-  0x0a, 0x99, 0x08, 0x9c, 0x00, 0x47, 0x30, 0x40, 0x00, 0xb6, 0x10, 0x38, 0x8b, 0x00,
-  0xb6, 0x10, 0x5c, 0x8e, 0x82, 0x00, 0x09, 0xdc, 0x50, 0xb7, 0x04, 0x04, 0x02, 0x80,
-  0x09, 0x04, 0xab, 0xb7, 0x00, 0x00, 0x06, 0x00, 0xb5, 0x02, 0xad, 0x82, 0x00, 0x0c,
-  0xfc, 0xb4, 0x01, 0x40, 0xac, 0x0c, 0xca, 0xb5, 0xb3, 0x29, 0xb4, 0x01, 0x37, 0x88,
-  0x09, 0x9a, 0x20, 0x8b, 0x09, 0xb6, 0x10, 0x20, 0x88, 0x99, 0xbf, 0xb6, 0x10, 0x20,
-  0x8b, 0x3c, 0xb2, 0x10, 0x38, 0x00, 0xc5, 0xab, 0xca, 0x93, 0x5a, 0x96, 0xca, 0x10,
-  0x30, 0x36, 0x82, 0x02, 0xce, 0xf8, 0x96, 0xca, 0x11, 0x30, 0x2d, 0x82, 0x02, 0xce,
-  0xf8, 0x96, 0xca, 0x12, 0x30, 0x24, 0x82, 0x02, 0xce, 0xf8, 0x96, 0xca, 0x13, 0x30,
-  0x1b, 0x82, 0x02, 0xce, 0xf8, 0x96, 0xca, 0x14, 0x30, 0x12, 0x82, 0x02, 0xce, 0xf8,
-  0x96, 0xca, 0x15, 0x30, 0x09, 0x82, 0x02, 0xce, 0xf8, 0x96, 0xca, 0x16, 0x30, 0x00,
-  0xf4, 0xb8, 0x00, 0x10, 0xf6, 0x3c, 0xb2, 0x28, 0x00, 0x9c, 0x00, 0xb2, 0x20, 0x00,
-  0xe7, 0x99, 0x02, 0x93, 0x54, 0xa0, 0xc8, 0xce, 0xf8, 0xf4, 0x9c, 0x00, 0x4f, 0x9d,
-  0xff, 0x90, 0xff, 0x02, 0xf5, 0x8f, 0xeb, 0xf5, 0xa2, 0x2a, 0xcc, 0x8e, 0x00, 0x3c,
-  0x90, 0x64, 0xa2, 0x2a, 0xcc, 0x8e, 0x90, 0x01, 0x3c, 0xff, 0xff, 0xff, 0xff, 0xff,
-  0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x80,
-  0x01, 0x43, 0x00, 0x80, 0x00, 0x80, 0x01, 0x43, 0x00, 0x80, 0x08, 0x80, 0x01, 0x43,
-  0x00, 0x80, 0x0c, 0x00, 0xb5, 0x00, 0x7d, 0xb5, 0x00, 0x80, 0xb7, 0x00, 0x01, 0x02,
-  0x82, 0x00, 0x02, 0xfc, 0x4b, 0xa8, 0x02, 0xb5, 0x28, 0x06, 0xae, 0x02, 0x05, 0xae,
-  0x02, 0x6f, 0xb5, 0x5a, 0x0d, 0xb5, 0x01, 0x16, 0xb5, 0x29, 0x45, 0x3c, 0x90, 0x00,
-  0xb6, 0xb8, 0x00, 0xab, 0xb5, 0x01, 0x33, 0xb5, 0x59, 0xfa, 0xb5, 0x00, 0x53, 0xb5,
-  0x29, 0x51, 0xb5, 0x27, 0xe1, 0xb5, 0x59, 0x84, 0x30, 0x04, 0xb5, 0xfc, 0xce, 0x3c,
-  0x3c, 0x40, 0x96, 0x7a, 0xdc, 0x3c, 0x8b, 0x7a, 0xb7, 0xb8, 0x44, 0x74, 0x04, 0xaa,
-  0xc8, 0x41, 0x3c, 0x82, 0x60, 0x74, 0xf8, 0x68, 0x96, 0x7b, 0xdc, 0x3c, 0x8b, 0x7b,
-  0xb7, 0xb8, 0xa4, 0x76, 0x04, 0xaa, 0xc8, 0x41, 0x3c, 0x82, 0xa2, 0x76, 0xf8, 0x68,
-  0x96, 0x7c, 0xdc, 0x3c, 0x8b, 0x7c, 0xb7, 0xba, 0x8a, 0x78, 0x04, 0xaa, 0xc8, 0x41,
-  0x3c, 0x82, 0x16, 0x78, 0xf8, 0x68, 0xb7, 0xb8, 0x0c, 0x72, 0x3c, 0x00, 0x97, 0x00,
-  0x43, 0x3c, 0x82, 0x00, 0x43, 0xdd, 0x3c, 0xa2, 0x0e, 0x72, 0x88, 0x9c, 0x00, 0x94,
-  0x4f, 0x97, 0x01, 0x43, 0x56, 0x88, 0xd2, 0x96, 0xc8, 0x12, 0x94, 0x4c, 0x96, 0xc8,
-  0x15, 0x94, 0x65, 0x96, 0xc8, 0x13, 0x94, 0x68, 0x96, 0xc8, 0x14, 0x94, 0x74, 0xb5,
-  0x00, 0xe4, 0xbc, 0x03, 0x01, 0x94, 0x29, 0xb0, 0x44, 0x65, 0xaf, 0xc8, 0xa8, 0x44,
-  0xb9, 0xff, 0x00, 0xbc, 0x01, 0x00, 0xb4, 0x0d, 0x5a, 0xbc, 0x02, 0x00, 0xb4, 0x60,
-  0xbb, 0xbc, 0x04, 0x00, 0xb4, 0x3d, 0x1a, 0xbc, 0x03, 0x00, 0xb4, 0x23, 0xc1, 0xbc,
-  0x05, 0x00, 0xb4, 0x06, 0x02, 0x3c, 0x97, 0x00, 0x43, 0x3c, 0xb5, 0x00, 0xaf, 0xbc,
-  0x03, 0x01, 0x6a, 0x67, 0xb5, 0xfb, 0x65, 0x97, 0xfb, 0xd2, 0x00, 0xb6, 0x12, 0x0a,
-  0x8e, 0xab, 0xca, 0x00, 0xb6, 0x10, 0x5e, 0x8e, 0xb6, 0x10, 0x5e, 0x8e, 0xae, 0xca,
-  0xb6, 0x12, 0x0a, 0x8e, 0x95, 0x6f, 0x97, 0xdf, 0xd2, 0xb5, 0xfb, 0x38, 0x95, 0x77,
-  0xb5, 0xfb, 0x37, 0x97, 0xf7, 0xd2, 0x00, 0xb6, 0x20, 0x06, 0x8e, 0xb6, 0x20, 0x06,
-  0x8e, 0x95, 0x72, 0xb5, 0xfb, 0x2a, 0x97, 0xef, 0xd2, 0x00, 0xb6, 0x28, 0x06, 0x8e,
-  0xb6, 0x28, 0x06, 0x8e, 0x95, 0x83, 0x00, 0xab, 0x4e, 0xab, 0x50, 0xb1, 0x01, 0xf4,
-  0xb2, 0xba, 0xb6, 0x00, 0xe6, 0xa2, 0x02, 0xcc, 0xab, 0xa2, 0x04, 0xcc, 0xab, 0xa2,
-  0x06, 0xcc, 0xab, 0xa2, 0x08, 0xcc, 0xab, 0xae, 0xca, 0xaa, 0xc8, 0x41, 0x3c, 0xae,
-  0xca, 0x82, 0x0a, 0xcc, 0xf8, 0x7d, 0xb1, 0x01, 0xf4, 0xb2, 0xba, 0xb6, 0x00, 0xa1,
-  0x08, 0xb8, 0x00, 0xfc, 0x41, 0x51, 0xe6, 0xa2, 0x02, 0xcc, 0xab, 0xa2, 0x04, 0xcc,
-  0xab, 0xa2, 0x06, 0xcc, 0xab, 0xa2, 0x08, 0xcc, 0xab, 0xae, 0xca, 0xaa, 0xc8, 0x41,
-  0x3c, 0xae, 0xca, 0x82, 0x0a, 0xcc, 0xf8, 0x95, 0x24, 0xa8, 0x4e, 0x96, 0x50, 0xfc,
-  0x42, 0x00, 0x3c, 0x90, 0x01, 0x63, 0x34, 0x0b, 0x9c, 0x00, 0x44, 0xb0, 0x03, 0x01,
-  0x3c, 0xa8, 0xc4, 0xb6, 0xff, 0x38, 0xab, 0xb2, 0xba, 0xb6, 0xa0, 0x4e, 0xcc, 0xf8,
-  0xe4, 0xab, 0x44, 0xb6, 0xff, 0x32, 0xab, 0xa2, 0x02, 0xcc, 0xa8, 0xab, 0x46, 0xb6,
-  0xff, 0x34, 0xab, 0xa2, 0x04, 0xcc, 0xa8, 0xab, 0x48, 0xb6, 0xff, 0x36, 0xab, 0xa2,
-  0x06, 0xcc, 0xa8, 0xab, 0x4a, 0xa2, 0x08, 0xcc, 0xa8, 0xab, 0x4c, 0xa8, 0x4e, 0xb6,
-  0xff, 0x30, 0xab, 0xbc, 0x13, 0x7e, 0x47, 0xb8, 0x00, 0x0a, 0xab, 0x4e, 0x00, 0x3c,
-  0xb7, 0x00, 0x00, 0x4e, 0x66, 0x83, 0x00, 0xb8, 0x00, 0xab, 0xac, 0xcc, 0x28, 0xac,
-  0xca, 0x2a, 0xab, 0xca, 0xa8, 0x50, 0xb8, 0x00, 0x0a, 0x96, 0x4e, 0xfc, 0x94, 0x2e,
-  0xb2, 0xba, 0xb6, 0xa0, 0x50, 0xcc, 0xf8, 0xa8, 0x02, 0xe6, 0xa8, 0xca, 0xa2, 0x02,
-  0xcc, 0xab, 0xa8, 0x04, 0xa2, 0x04, 0xcc, 0xab, 0xa8, 0x06, 0xa2, 0x06, 0xcc, 0xab,
-  0xa8, 0x50, 0xb8, 0x00, 0x0a, 0xbc, 0x13, 0x7e, 0x00, 0xab, 0x50, 0xac, 0x28, 0xcc,
-  0xac, 0x2a, 0xca, 0x3c, 0xb6, 0xff, 0x06, 0xa9, 0x6b, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x5c, 0xc5, 0x2f, 0x14, 0x2b, 0x02, 0x45, 0x00, 0x0e, 0x00,
-  0x06, 0x00, 0x06, 0x00, 0x05, 0x00, 0x05, 0x00, 0x05, 0x00, 0x05, 0x00, 0x05, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x50, 0x00,
-  0x00, 0x00, 0x20, 0x03, 0x00, 0x00, 0x40, 0x1f, 0x00, 0x00, 0x80, 0x38, 0x01, 0x00,
-  0x00, 0x35, 0x0c, 0x00, 0x00, 0x12, 0x7a, 0x00, 0x00, 0xb4, 0xc4, 0x04, 0x00, 0x08,
-  0xaf, 0x2f, 0x0a, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0xe8, 0x03, 0x00, 0x00,
-  0x10, 0x27, 0x00, 0x00, 0xa0, 0x86, 0x01, 0x00, 0x40, 0x42, 0x0f, 0x00, 0x80, 0x96,
-  0x98, 0x00, 0x00, 0xe1, 0xf5, 0x05, 0x00, 0xca, 0x9a, 0x3b, 0xff, 0xff, 0xff, 0xff,
-  0xff, 0xff, 0xff, 0xff, 0xaf, 0x02, 0xb7, 0x00, 0x00, 0x02, 0x82, 0x0b, 0x02, 0xfc,
-  0x94, 0x20, 0xae, 0xca, 0xa2, 0x02, 0xcc, 0xfc, 0x53, 0xa2, 0x02, 0xcc, 0xfd, 0x41,
-  0x53, 0xae, 0xca, 0xa9, 0x02, 0xa9, 0xcc, 0xa9, 0xcc, 0xa9, 0xcc, 0xa9, 0xcc, 0x7f,
-  0xae, 0xca, 0xfc, 0x6e, 0xfd, 0x70, 0xa8, 0x02, 0x3f, 0x02, 0x3c, 0x90, 0x00, 0xa2,
-  0x76, 0xce, 0xab, 0x90, 0x00, 0xb5, 0x32, 0x51, 0xb7, 0x00, 0x00, 0x02, 0xb7, 0x00,
-  0x00, 0x04, 0xb7, 0x00, 0x00, 0x06, 0x00, 0xac, 0xce, 0xcc, 0x82, 0x70, 0xcc, 0xf8,
-  0xb4, 0x26, 0xc8, 0xb7, 0x00, 0x00, 0x02, 0xac, 0xce, 0xcc, 0x82, 0x7a, 0xcc, 0xf8,
-  0x82, 0x05, 0x02, 0xfc, 0x55, 0x00, 0xe6, 0xa2, 0x02, 0xcc, 0xab, 0xa2, 0x04, 0xcc,
-  0xab, 0xa2, 0x06, 0xcc, 0xab, 0xa9, 0x02, 0x82, 0x08, 0xcc, 0xf8, 0x79, 0x00, 0xa2,
-  0x78, 0xce, 0x8b, 0x90, 0x01, 0xa2, 0x76, 0xce, 0xab, 0xa2, 0x10, 0xce, 0x88, 0xe7,
-  0xb8, 0x46, 0x00, 0xad, 0xc8, 0xa8, 0xa2, 0x72, 0xce, 0xab, 0xb5, 0x31, 0x9c, 0x90,
-  0x01, 0xb5, 0x31, 0xf3, 0xb7, 0x5e, 0x10, 0x02, 0xb7, 0x00, 0x5f, 0x04, 0xb7, 0x05,
-  0x00, 0x06, 0xac, 0xce, 0xcc, 0x82, 0x70, 0xcc, 0xf8, 0xa2, 0x22, 0xce, 0x88, 0xb4,
-  0x26, 0x67, 0xb5, 0x31, 0xb1, 0xab, 0x02, 0xb7, 0x00, 0x00, 0x04, 0xa2, 0x72, 0xce,
-  0xa8, 0x02, 0x96, 0x02, 0xeb, 0xab, 0x02, 0x90, 0x00, 0x96, 0x04, 0xeb, 0xab, 0x04,
-  0xa2, 0x10, 0xce, 0x88, 0xe7, 0xb8, 0x46, 0x00, 0xad, 0xc8, 0xa8, 0xa2, 0x72, 0xce,
-  0xab, 0xb5, 0x31, 0x51, 0xaf, 0x02, 0xaf, 0x04, 0xb7, 0x5e, 0x10, 0x02, 0xb7, 0x00,
-  0x5f, 0x04, 0xb7, 0x05, 0x00, 0x06, 0xac, 0xce, 0xcc, 0x82, 0x70, 0xcc, 0xf8, 0xa2,
-  0x22, 0xce, 0x88, 0xb5, 0x26, 0x1d, 0x3f, 0x04, 0x3f, 0x02, 0xac, 0x76, 0xce, 0xb7,
-  0x00, 0x00, 0x06, 0xb7, 0x00, 0x00, 0x08, 0xb7, 0x00, 0x00, 0x0a, 0xb7, 0x00, 0x00,
-  0x0c, 0xb7, 0x00, 0x00, 0x0e, 0xac, 0xce, 0xcc, 0x82, 0x7a, 0xcc, 0xf8, 0x82, 0x05,
-  0x0e, 0xfc, 0x94, 0x2b, 0xe4, 0x03, 0x96, 0x06, 0xf8, 0xab, 0x06, 0xa2, 0x02, 0xcc,
-  0xa8, 0x96, 0x08, 0xe8, 0xab, 0x08, 0xa2, 0x04, 0xcc, 0xa8, 0x03, 0x96, 0x0a, 0xf8,
-  0xab, 0x0a, 0xa2, 0x06, 0xcc, 0xa8, 0x96, 0x0c, 0xe8, 0xab, 0x0c, 0xa9, 0x0e, 0x82,
-  0x08, 0xcc, 0xf8, 0x95, 0x2f, 0xa2, 0x78, 0xce, 0x88, 0xac, 0xce, 0xcc, 0x9e, 0x08,
-  0xac, 0xcc, 0xce, 0xa0, 0xc8, 0xcc, 0xf8, 0x82, 0x7a, 0xcc, 0xf8, 0xe4, 0xa2, 0x02,
-  0xcc, 0xf8, 0x9d, 0x00, 0x94, 0x88, 0xa2, 0x06, 0xcc, 0xa8, 0x9d, 0x1e, 0x94, 0x53,
-  0x9c, 0x1e, 0x94, 0x41, 0xe4, 0xa2, 0x02, 0xcc, 0xfa, 0x9d, 0x00, 0x94, 0x73, 0xa8,
-  0x02, 0x96, 0x04, 0xfa, 0x9c, 0x00, 0x94, 0x6a, 0x96, 0xc9, 0x17, 0x94, 0x65, 0xa2,
-  0x06, 0xcc, 0xa8, 0x9d, 0x00, 0x94, 0x30, 0x9c, 0x00, 0x41, 0x4c, 0xa2, 0x04, 0xcc,
-  0xa8, 0x9c, 0x40, 0x94, 0x24, 0x9d, 0x40, 0x94, 0x20, 0xa8, 0x0c, 0x9d, 0x00, 0x5b,
-  0x9c, 0x00, 0x42, 0x94, 0x43, 0xa8, 0x0a, 0xbd, 0x02, 0x00, 0x50, 0x94, 0x3b, 0xa2,
-  0x04, 0xcc, 0xa8, 0xbc, 0x84, 0x80, 0x46, 0xbd, 0x84, 0x80, 0x42, 0x95, 0x4d, 0xa2,
-  0x78, 0xce, 0x88, 0x04, 0x9c, 0x05, 0x00, 0x9d, 0x05, 0x00, 0xa2, 0x78, 0xce, 0x8b,
-  0xac, 0xce, 0xcc, 0x9e, 0x08, 0xac, 0xcc, 0xce, 0xa0, 0xc8, 0xcc, 0xf8, 0x82, 0x7a,
-  0xcc, 0xf8, 0x00, 0xa2, 0x04, 0xcc, 0xab, 0xa2, 0x06, 0xcc, 0xab, 0xe6, 0xa2, 0x02,
-  0xcc, 0xab, 0xe4, 0x03, 0x96, 0x02, 0xf8, 0xe6, 0xa2, 0x02, 0xcc, 0xa8, 0x96, 0x04,
-  0xe8, 0xa2, 0x02, 0xcc, 0xab, 0xa2, 0x04, 0xcc, 0xa8, 0x03, 0xb8, 0x00, 0x04, 0xa2,
-  0x04, 0xcc, 0xab, 0xa2, 0x06, 0xcc, 0xa8, 0x82, 0x00, 0xc8, 0xe8, 0xa2, 0x06, 0xcc,
-  0xab, 0xa8, 0x06, 0x03, 0x96, 0x02, 0xf8, 0xab, 0x06, 0xa8, 0x08, 0x96, 0x04, 0xe8,
-  0xab, 0x08, 0xa8, 0x0a, 0x03, 0xb8, 0x00, 0x04, 0xab, 0x0a, 0xa8, 0x0c, 0x82, 0x00,
-  0xc8, 0xe8, 0xab, 0x0c, 0xa2, 0x74, 0xce, 0x88, 0xab, 0x0e, 0xa8, 0x06, 0xac, 0x08,
-  0xca, 0xb2, 0x46, 0x4c, 0x36, 0x4c, 0xab, 0x10, 0xa8, 0x0a, 0xac, 0x0c, 0xca, 0xb2,
-  0x46, 0x20, 0x36, 0x58, 0xab, 0x12, 0x02, 0x96, 0x10, 0xeb, 0xb8, 0x00, 0x06, 0xa2,
-  0x74, 0xce, 0x8b, 0xa2, 0x11, 0xce, 0x88, 0xa2, 0x74, 0xce, 0xdd, 0x94, 0xe9, 0xa2,
-  0x74, 0xce, 0xdc, 0x94, 0xe3, 0xa8, 0x02, 0x96, 0x04, 0xfa, 0x9c, 0x00, 0x94, 0x23,
-  0xa2, 0x6c, 0xce, 0xa8, 0x03, 0x96, 0x02, 0xf8, 0xa2, 0x6c, 0xce, 0xab, 0xa2, 0x6e,
-  0xce, 0xa8, 0x96, 0x04, 0xe8, 0xa2, 0x6e, 0xce, 0xab, 0xa2, 0x22, 0xce, 0x88, 0xab,
-  0x18, 0xb0, 0x40, 0x35, 0xb5, 0x40, 0x59, 0xa8, 0x0e, 0xa2, 0x74, 0xce, 0xdc, 0x4c,
-  0xa2, 0x22, 0xce, 0x88, 0xab, 0x18, 0xb0, 0x40, 0x33, 0xb5, 0x40, 0x46, 0xa2, 0x10,
-  0xce, 0x88, 0xa2, 0x74, 0xce, 0xdd, 0x94, 0x46, 0xa2, 0x74, 0xce, 0xdc, 0x94, 0x40,
-  0xa2, 0x11, 0xce, 0x88, 0xa2, 0x74, 0xce, 0xdd, 0x5e, 0xa2, 0x74, 0xce, 0xdc, 0x59,
-  0xa2, 0x12, 0xce, 0x88, 0x9c, 0x00, 0x3c, 0x90, 0x00, 0xa2, 0x12, 0xce, 0x8b, 0xa2,
-  0x22, 0xce, 0x88, 0xab, 0x18, 0xb0, 0x40, 0x40, 0xb4, 0x40, 0x0f, 0xa2, 0x12, 0xce,
-  0x88, 0x9d, 0x00, 0x7f, 0x90, 0x01, 0xa2, 0x12, 0xce, 0x8b, 0xa2, 0x22, 0xce, 0x88,
-  0xab, 0x18, 0xb0, 0x40, 0x40, 0xb4, 0x3f, 0xf6, 0x90, 0x01, 0xa2, 0x40, 0xce, 0x8b,
-  0xb6, 0xff, 0x08, 0xa9, 0xa2, 0x68, 0xce, 0xa8, 0x03, 0xb8, 0x00, 0x01, 0xa2, 0x68,
-  0xce, 0xab, 0xa2, 0x6a, 0xce, 0xa8, 0x82, 0x00, 0xc8, 0xe8, 0xa2, 0x6a, 0xce, 0xab,
-  0xb7, 0x05, 0x02, 0x02, 0xb7, 0x00, 0x00, 0x04, 0xb7, 0x00, 0x00, 0x06, 0xa2, 0x22,
-  0xce, 0x88, 0xb5, 0xfc, 0x07, 0xb7, 0x02, 0x11, 0x02, 0xb7, 0x00, 0x00, 0x04, 0xb7,
-  0x00, 0x00, 0x06, 0xa2, 0x22, 0xce, 0x88, 0xb5, 0xfb, 0xf4, 0xa2, 0x22, 0xce, 0x88,
-  0xab, 0x18, 0xb0, 0x40, 0x34, 0xb4, 0x3f, 0xa2, 0x90, 0x00, 0x96, 0x08, 0xfd, 0x4e,
-  0x96, 0x08, 0xfc, 0x42, 0x95, 0xed, 0x90, 0x05, 0x96, 0x06, 0xfd, 0x42, 0x95, 0xf5,
-  0x90, 0x0f, 0xa2, 0x11, 0xce, 0xdd, 0x47, 0xa2, 0x74, 0xce, 0x8b, 0xb4, 0xfe, 0xfb,
-  0xa2, 0x11, 0xce, 0x88, 0x04, 0x6c, 0xa2, 0x6c, 0x76, 0xa8, 0x03, 0xa2, 0x72, 0x76,
-  0xf8, 0xa2, 0x6c, 0x76, 0xab, 0xa2, 0x6e, 0x76, 0xa8, 0x82, 0x00, 0xc8, 0xe8, 0xa2,
-  0x6e, 0x76, 0xab, 0xa2, 0x10, 0x76, 0x88, 0xa2, 0x74, 0x76, 0x8b, 0xa2, 0x22, 0x76,
-  0x88, 0xab, 0x18, 0xb0, 0x40, 0x35, 0xb5, 0x3f, 0x4d, 0xa2, 0x22, 0x76, 0x88, 0xab,
-  0x18, 0xb0, 0x40, 0x33, 0xb5, 0x3f, 0x41, 0x90, 0x01, 0xa2, 0x40, 0x76, 0x8b, 0xa2,
-  0x68, 0x76, 0xa8, 0x03, 0xb8, 0x00, 0x01, 0xa2, 0x68, 0x76, 0xab, 0xa2, 0x6a, 0x76,
-  0xa8, 0x82, 0x00, 0xc8, 0xe8, 0xa2, 0x6a, 0x76, 0xab, 0xb7, 0x05, 0x02, 0x02, 0xb7,
-  0x00, 0x00, 0x04, 0xb7, 0x00, 0x00, 0x06, 0xa2, 0x22, 0x76, 0x88, 0xb5, 0xfb, 0x56,
-  0xb7, 0x02, 0x11, 0x02, 0xb7, 0x00, 0x00, 0x04, 0xb7, 0x00, 0x00, 0x06, 0xa2, 0x22,
-  0x76, 0x88, 0xb5, 0xfb, 0x43, 0xa2, 0x22, 0x76, 0x88, 0xab, 0x18, 0xb0, 0x40, 0x34,
-  0xb4, 0x3e, 0xf1, 0x90, 0x03, 0xb5, 0x2e, 0x21, 0x90, 0x01, 0xb5, 0x2e, 0x78, 0xa2,
-  0x0c, 0x76, 0x88, 0x99, 0x01, 0x9c, 0x00, 0x4a, 0xa2, 0x0f, 0x72, 0x88, 0x9c, 0x00,
-  0x43, 0xb5, 0x2e, 0xab, 0x90, 0x02, 0xa2, 0x76, 0x76, 0xab, 0x90, 0x01, 0xa2, 0x42,
-  0x76, 0x8b, 0x3c, 0xa8, 0x46, 0xb5, 0xf9, 0x70, 0xa8, 0x44, 0xbc, 0x05, 0xff, 0x53,
-  0xac, 0x76, 0xce, 0xa2, 0x76, 0x76, 0xa8, 0x9c, 0x00, 0x59, 0x9c, 0x01, 0x94, 0x23,
-  0x9c, 0x02, 0x94, 0x33, 0x3c, 0xa2, 0x70, 0x76, 0xa8, 0x96, 0x48, 0xfc, 0x41, 0x3c,
-  0x00, 0xa2, 0x70, 0x76, 0xab, 0x95, 0x21, 0xa8, 0x44, 0xbc, 0x05, 0x01, 0xb4, 0xfb,
-  0xe8, 0xbc, 0x05, 0x03, 0x95, 0x63, 0x3c, 0xa8, 0x44, 0xbc, 0x05, 0x02, 0xb4, 0xfb,
-  0xb8, 0xbc, 0x05, 0x05, 0x95, 0xfa, 0xbc, 0x05, 0xff, 0xb4, 0xfc, 0x30, 0x3c, 0xa8,
-  0x44, 0xbc, 0x05, 0x05, 0x49, 0xbc, 0x05, 0x02, 0x50, 0xbc, 0x05, 0x04, 0x4c, 0x3c,
-  0x90, 0x00, 0xa2, 0x42, 0x76, 0x8b, 0x90, 0x00, 0xb4, 0x2d, 0xee, 0xb5, 0xfb, 0x8f,
-  0xa2, 0x0c, 0x76, 0x88, 0x99, 0x01, 0x9c, 0x00, 0x4a, 0xa2, 0x0f, 0x72, 0x88, 0x9c,
-  0x00, 0x43, 0xb5, 0x2e, 0x1f, 0xa8, 0x44, 0xbc, 0x05, 0x04, 0x41, 0x3c, 0xa2, 0x42,
-  0x76, 0x88, 0x9c, 0x00, 0x4e, 0x00, 0xa2, 0x40, 0x76, 0x8b, 0xa2, 0x30, 0x76, 0xab,
-  0xa2, 0x32, 0x76, 0xab, 0x3c, 0xa2, 0x30, 0x76, 0xa8, 0x03, 0xb8, 0x00, 0x01, 0xa2,
-  0x30, 0x76, 0xab, 0xa2, 0x32, 0x76, 0xa8, 0x82, 0x00, 0xc8, 0xe8, 0xa2, 0x32, 0x76,
-  0xab, 0xa2, 0x22, 0x76, 0x88, 0xab, 0x18, 0xb0, 0x40, 0x2a, 0xb4, 0x3e, 0x07, 0x00,
-  0xab, 0xca, 0xa2, 0x15, 0x72, 0x88, 0x9c, 0x00, 0x3c, 0xa8, 0xca, 0xa2, 0x14, 0x72,
-  0x8b, 0xb7, 0x00, 0x00, 0x18, 0xb0, 0x10, 0x2b, 0xb5, 0x3d, 0xed, 0xb7, 0x02, 0x12,
-  0x02, 0xb7, 0x00, 0x00, 0x04, 0xb7, 0x00, 0x00, 0x06, 0xa2, 0x10, 0x72, 0x88, 0xb5,
-  0xfa, 0x20, 0xb7, 0x02, 0x12, 0x02, 0xb7, 0x00, 0x00, 0x04, 0xb7, 0x00, 0x00, 0x06,
-  0xa2, 0x11, 0x72, 0x88, 0xb5, 0xfa, 0x0d, 0xb7, 0x00, 0x00, 0x08, 0x82, 0x01, 0x08,
-  0xfc, 0x3c, 0xa8, 0x08, 0xb5, 0xf8, 0x53, 0xa2, 0x00, 0x74, 0xa8, 0x9c, 0x00, 0x51,
-  0xb7, 0x04, 0x0c, 0x02, 0xb7, 0x00, 0x00, 0x04, 0xb7, 0x00, 0x00, 0x06, 0xa8, 0x08,
-  0xb5, 0xf9, 0xe7, 0xa9, 0x08, 0x95, 0x24, 0xac, 0x02, 0x0a, 0xac, 0x04, 0x0c, 0xb7,
-  0x00, 0x00, 0x10, 0xa8, 0x02, 0xb5, 0xf8, 0x28, 0xa8, 0x04, 0x9c, 0x02, 0x94, 0x40,
-  0xa8, 0x0a, 0xb5, 0xf8, 0x31, 0xa2, 0x66, 0x76, 0xa8, 0x9c, 0x00, 0x52, 0x9c, 0x04,
-  0x55, 0x9c, 0x02, 0x5a, 0x9c, 0x01, 0x5d, 0x9c, 0x05, 0x94, 0x1f, 0x9c, 0x03, 0x5c,
-  0x94, 0x49, 0xb7, 0x00, 0x01, 0x10, 0x94, 0x43, 0xa2, 0x0a, 0x76, 0xa8, 0xab, 0x0e,
-  0x94, 0x3b, 0xb7, 0x00, 0x02, 0x0e, 0x94, 0x35, 0xb7, 0x00, 0x01, 0x0e, 0x94, 0x2f,
-  0xa2, 0x06, 0x76, 0xa8, 0x9c, 0x00, 0x72, 0x6d, 0xa2, 0x56, 0x74, 0xa8, 0x9c, 0x00,
-  0x5b, 0x9c, 0x04, 0x51, 0x9c, 0x02, 0x49, 0x9c, 0x01, 0x41, 0x56, 0xb7, 0x00, 0x01,
-  0x0e, 0x51, 0xb7, 0x00, 0x02, 0x0e, 0x4c, 0xa2, 0x06, 0x74, 0xa8, 0xab, 0x0e, 0x45,
-  0xb7, 0x00, 0x01, 0x10, 0x40, 0x82, 0x00, 0x10, 0xfd, 0x94, 0xf1, 0xa8, 0x0e, 0x05,
-  0xab, 0x12, 0x82, 0x02, 0x0c, 0xfc, 0x5c, 0xa8, 0x12, 0x9e, 0x04, 0xac, 0x76, 0xcc,
-  0x82, 0x1a, 0xcc, 0xf8, 0xa0, 0xc8, 0xcc, 0xf8, 0xa2, 0x02, 0xcc, 0x88, 0xab, 0x0a,
-  0xa2, 0x03, 0xcc, 0x88, 0xab, 0x0c, 0x5b, 0xa8, 0x12, 0x9e, 0x04, 0xac, 0x74, 0xcc,
-  0x82, 0x58, 0xcc, 0xf8, 0xa0, 0xc8, 0xcc, 0xf8, 0xa2, 0x02, 0xcc, 0x88, 0xab, 0x0a,
-  0xa2, 0x03, 0xcc, 0x88, 0xab, 0x0c, 0x82, 0x02, 0x0c, 0xfc, 0x94, 0x71, 0xa8, 0x0a,
-  0xb5, 0xf7, 0x7d, 0xa2, 0x66, 0x76, 0xa8, 0x9c, 0x00, 0x5a, 0x9c, 0x04, 0x51, 0x9c,
-  0x02, 0x5a, 0x9c, 0x01, 0x94, 0x20, 0x9c, 0x05, 0x94, 0x26, 0x9c, 0x03, 0x94, 0x45,
-  0x95, 0x6b, 0xa8, 0x0e, 0xa2, 0x0a, 0x76, 0xfc, 0xb7, 0x00, 0x01, 0x10, 0x95, 0x77,
-  0x82, 0x02, 0x0e, 0xfc, 0xb7, 0x00, 0x01, 0x10, 0x95, 0x81, 0x82, 0x01, 0x0e, 0xfc,
-  0xb7, 0x00, 0x01, 0x10, 0x95, 0x8b, 0xa2, 0x06, 0x76, 0xa8, 0x9c, 0x00, 0x4b, 0x82,
-  0x02, 0x0e, 0xfc, 0x51, 0xb7, 0x00, 0x02, 0x0e, 0x95, 0x9d, 0x82, 0x01, 0x0e, 0xfc,
-  0x46, 0xb7, 0x00, 0x01, 0x0e, 0x95, 0xa8, 0xb7, 0x00, 0x01, 0x10, 0x95, 0xae, 0x90,
-  0x03, 0x02, 0x96, 0x0e, 0xeb, 0x9d, 0x00, 0xb7, 0x00, 0x01, 0x10, 0x95, 0xbc, 0xa8,
-  0x0a, 0xb5, 0xf6, 0xf8, 0xa2, 0x56, 0x74, 0xa8, 0x9c, 0x00, 0x95, 0xc9, 0x9c, 0x04,
-  0x48, 0x9c, 0x02, 0x52, 0x9c, 0x01, 0x59, 0x95, 0xd4, 0xa2, 0x06, 0x74, 0xa8, 0x96,
-  0x0e, 0xfc, 0xb7, 0x00, 0x01, 0x10, 0x95, 0xe1, 0x82, 0x02, 0x0e, 0xfc, 0xb7, 0x00,
-  0x01, 0x10, 0x95, 0xeb, 0x82, 0x01, 0x0e, 0xfc, 0xb7, 0x00, 0x01, 0x10, 0x95, 0xf5,
-  0xac, 0x0a, 0x06, 0xac, 0x0c, 0x08, 0x3c, 0xab, 0x22, 0xb5, 0xf6, 0xcc, 0xa2, 0x54,
-  0x76, 0x88, 0x9c, 0x00, 0x5e, 0xa2, 0x32, 0x72, 0xa8, 0x05, 0xa2, 0x32, 0x72, 0xab,
-  0x90, 0x00, 0xa2, 0x54, 0x76, 0x8b, 0xb7, 0x00, 0x00, 0x06, 0xac, 0x76, 0xcc, 0x82,
-  0x52, 0xcc, 0xf8, 0x00, 0xb5, 0x20, 0x10, 0xa2, 0x30, 0x72, 0xa8, 0x02, 0xa2, 0x32,
-  0x72, 0xeb, 0x9c, 0x00, 0x3c, 0x96, 0xc9, 0x17, 0x3c, 0xab, 0x0a, 0xa8, 0x22, 0x96,
-  0x7e, 0xdd, 0xb0, 0xff, 0xff, 0x04, 0xab, 0x0c, 0xb7, 0x00, 0x00, 0x0e, 0x80, 0x7e,
-  0x0e, 0xfc, 0x3c, 0x82, 0x00, 0x0a, 0xfc, 0x3c, 0xa8, 0x0c, 0xb5, 0xf6, 0x77, 0xa2,
-  0x0e, 0x76, 0xa8, 0x9c, 0x00, 0x94, 0x2c, 0xa2, 0x55, 0x76, 0x88, 0x9c, 0x00, 0x94,
-  0x24, 0xa2, 0x06, 0x76, 0xa8, 0x9c, 0x03, 0x41, 0x5c, 0x90, 0x00, 0xa2, 0x55, 0x76,
-  0x8b, 0xb7, 0x02, 0x14, 0x02, 0xb7, 0x00, 0x00, 0x04, 0xb7, 0x00, 0x00, 0x06, 0xa8,
-  0x0c, 0xb5, 0xf7, 0xe0, 0xa8, 0x0a, 0x05, 0xab, 0x0a, 0xa8, 0x0c, 0x96, 0x7e, 0xdd,
-  0xb0, 0xff, 0xff, 0x04, 0xab, 0x0c, 0x95, 0x4e, 0xa2, 0x1e, 0x72, 0x88, 0x9c, 0x02,
-  0x94, 0x44, 0xa2, 0x20, 0x72, 0xa8, 0x9c, 0x04, 0x94, 0x3c, 0xb5, 0x23, 0x0b, 0x9c,
-  0x00, 0x94, 0x2f, 0x90, 0x02, 0xa2, 0x1e, 0x72, 0x8b, 0x00, 0x96, 0x7e, 0xdc, 0x94,
-  0x29, 0xab, 0x0a, 0xb5, 0xf6, 0x22, 0xa2, 0x12, 0x78, 0xa8, 0x9c, 0x00, 0x52, 0x90,
-  0x00, 0xa2, 0x12, 0x78, 0xab, 0xb0, 0x32, 0x0e, 0xa2, 0x10, 0x78, 0x88, 0xab, 0x18,
-  0xb5, 0x3b, 0x47, 0xa8, 0x0a, 0x04, 0x95, 0x26, 0x90, 0x03, 0xa2, 0x1e, 0x72, 0x8b,
-  0x90, 0x00, 0xa2, 0x20, 0x72, 0xab, 0xb0, 0x10, 0x29, 0xb7, 0x00, 0x00, 0x18, 0xb4,
-  0x3b, 0x2c, 0x90, 0x01, 0xa2, 0x20, 0x72, 0xab, 0xb0, 0x10, 0x29, 0xb7, 0x00, 0x00,
-  0x18, 0xb5, 0x3b, 0x1c, 0x90, 0x01, 0x36, 0xec, 0xb7, 0x00, 0x00, 0x0a, 0x82, 0x01,
-  0x0a, 0xfc, 0x94, 0x2b, 0xa8, 0x0a, 0xb5, 0xf5, 0xa3, 0xa2, 0x00, 0x74, 0xa8, 0x9c,
-  0x00, 0x5b, 0xb7, 0x04, 0x0e, 0x02, 0xb7, 0x00, 0x01, 0x04, 0xb7, 0x00, 0x00, 0x06,
-  0xa8, 0x0a, 0xb5, 0xf7, 0x37, 0xaf, 0x0a, 0xac, 0x74, 0xce, 0xb5, 0x18, 0xa3, 0x3f,
-  0x0a, 0xa9, 0x0a, 0x95, 0x2f, 0xb7, 0x00, 0x00, 0x0a, 0x80, 0x7e, 0x0a, 0xfc, 0x3c,
-  0xa8, 0x0a, 0xb5, 0xf5, 0x83, 0xa2, 0x0e, 0x76, 0xa8, 0x9c, 0x00, 0x51, 0xb7, 0x02,
-  0x01, 0x02, 0xb7, 0x00, 0x00, 0x04, 0xb7, 0x00, 0x00, 0x06, 0xa8, 0x0a, 0xb5, 0xf7,
-  0x03, 0xa9, 0x0a, 0x95, 0x24, 0x90, 0x02, 0xa2, 0x20, 0x72, 0xab, 0xb0, 0x10, 0x29,
-  0xb7, 0x00, 0x00, 0x18, 0xb5, 0x3a, 0xa9, 0xa2, 0x02, 0x72, 0xa8, 0xab, 0x02, 0xa2,
-  0x04, 0x72, 0xa8, 0xab, 0x04, 0xb7, 0x01, 0x00, 0x06, 0xac, 0x72, 0xcc, 0x82, 0x18,
-  0xcc, 0xf8, 0x00, 0xb4, 0x1e, 0xad, 0x90, 0x03, 0xa2, 0x20, 0x72, 0xab, 0xb0, 0x10,
-  0x29, 0xb7, 0x00, 0x00, 0x18, 0xb5, 0x3a, 0x7e, 0xb7, 0x00, 0x00, 0x0a, 0x80, 0x7e,
-  0x0a, 0xfc, 0x94, 0x21, 0xa8, 0x0a, 0xb5, 0xf5, 0x1d, 0xa2, 0x0e, 0x76, 0xa8, 0x9c,
-  0x00, 0x51, 0xb7, 0x02, 0x04, 0x02, 0xb7, 0x00, 0x00, 0x04, 0xb7, 0x00, 0x00, 0x06,
-  0xa8, 0x0a, 0xb5, 0xf6, 0x9d, 0xa9, 0x0a, 0x95, 0x25, 0xb7, 0x00, 0x00, 0x0a, 0x82,
-  0x01, 0x0a, 0xfc, 0x94, 0x21, 0xa8, 0x0a, 0xb5, 0xf4, 0xde, 0xa2, 0x00, 0x74, 0xa8,
-  0x9c, 0x00, 0x51, 0xb7, 0x04, 0x0e, 0x02, 0xb7, 0x00, 0x00, 0x04, 0xb7, 0x00, 0x00,
-  0x06, 0xa8, 0x0a, 0xb5, 0xf6, 0x72, 0xa9, 0x0a, 0x95, 0x25, 0xb7, 0x1e, 0x84, 0x02,
-  0xb7, 0x00, 0x00, 0x04, 0xb7, 0x01, 0x00, 0x06, 0xac, 0x72, 0xcc, 0x82, 0x18, 0xcc,
-  0xf8, 0x00, 0xb4, 0x1e, 0x30, 0x90, 0x04, 0xa2, 0x20, 0x72, 0xab, 0xb0, 0x10, 0x29,
-  0xb7, 0x00, 0x00, 0x18, 0xb5, 0x3a, 0x01, 0x90, 0x01, 0xa2, 0x1e, 0x72, 0x8b, 0xb5,
-  0x21, 0x8e, 0x9c, 0x00, 0x94, 0x3b, 0xb7, 0x01, 0x04, 0x02, 0xb7, 0x00, 0x02, 0x04,
-  0xb7, 0x00, 0x00, 0x06, 0x00, 0xb5, 0xf6, 0x2a, 0xb7, 0x00, 0x00, 0x0a, 0x80, 0x7e,
-  0x0a, 0xfc, 0x3c, 0xa8, 0x0a, 0xb5, 0xf4, 0x98, 0xa2, 0x12, 0x78, 0xa8, 0x9c, 0x00,
-  0x52, 0x90, 0x00, 0xa2, 0x12, 0x78, 0xab, 0xb0, 0x32, 0x0e, 0xa2, 0x10, 0x78, 0x88,
-  0xab, 0x18, 0xb5, 0x39, 0xbd, 0xa9, 0x0a, 0x95, 0x25, 0xb7, 0x01, 0x04, 0x02, 0xb7,
-  0x00, 0x03, 0x04, 0xb7, 0x00, 0x00, 0x06, 0x00, 0xb4, 0xf5, 0xef, 0x90, 0x05, 0xa2,
-  0x20, 0x72, 0xab, 0xb0, 0x10, 0x29, 0xb7, 0x00, 0x00, 0x18, 0xb5, 0x39, 0x99, 0x90,
-  0x00, 0xb5, 0x22, 0xc4, 0xb7, 0xf4, 0x24, 0x02, 0xb7, 0x00, 0x00, 0x04, 0xb7, 0x01,
-  0x00, 0x06, 0xac, 0x72, 0xcc, 0x82, 0x18, 0xcc, 0xf8, 0x00, 0xb4, 0x1d, 0x9c, 0xa2,
-  0x1e, 0x72, 0x88, 0x9c, 0x02, 0x42, 0x95, 0x9b, 0xa2, 0x0a, 0x72, 0x88, 0x9c, 0x02,
-  0x49, 0x90, 0x00, 0xa2, 0x16, 0x72, 0x8b, 0xb4, 0xfe, 0x38, 0x90, 0x06, 0xa2, 0x2e,
-  0xce, 0xf9, 0x9d, 0x00, 0x94, 0x33, 0xa2, 0x16, 0x72, 0x88, 0x9c, 0x00, 0x3c, 0x90,
-  0x41, 0xa2, 0x2e, 0xce, 0xf9, 0x9c, 0x00, 0x50, 0x90, 0x02, 0xa2, 0x2e, 0xcc, 0xf9,
-  0x9c, 0x00, 0x47, 0x90, 0x01, 0xa2, 0x16, 0x72, 0x8b, 0x3c, 0x90, 0x02, 0xa2, 0x2e,
-  0xce, 0xf9, 0x9c, 0x00, 0x3c, 0x90, 0x41, 0xa2, 0x2e, 0xcc, 0xf9, 0x9c, 0x00, 0x3c,
-  0x79, 0x90, 0x06, 0xa2, 0x2e, 0xcc, 0xf9, 0x9c, 0x00, 0x95, 0x3b, 0x90, 0x00, 0xa2,
-  0x16, 0x72, 0x8b, 0xb4, 0xfd, 0xe8, 0xa2, 0x20, 0x72, 0xa8, 0x9c, 0x06, 0x50, 0x90,
-  0x06, 0xa2, 0x20, 0x72, 0xab, 0xb0, 0x10, 0x29, 0xb7, 0x00, 0x00, 0x18, 0xb5, 0x38,
-  0xfd, 0xa2, 0x10, 0x72, 0x88, 0xb5, 0xf3, 0xa4, 0xac, 0x76, 0x24, 0xa2, 0x11, 0x72,
-  0x88, 0xb5, 0xf3, 0x9a, 0xac, 0x76, 0x26, 0xa2, 0x0e, 0x24, 0xa8, 0x9c, 0x00, 0x57,
-  0xa2, 0x22, 0x24, 0x88, 0xb5, 0x23, 0xa5, 0xa2, 0x2e, 0x24, 0xab, 0xa2, 0x22, 0x24,
-  0x88, 0xb5, 0x23, 0x9a, 0xa2, 0x2e, 0x24, 0xab, 0x46, 0x90, 0x02, 0xa2, 0x2e, 0x24,
-  0xab, 0xa2, 0x0e, 0x26, 0xa8, 0x9c, 0x00, 0x56, 0xa2, 0x22, 0x26, 0x88, 0xb5, 0x23,
-  0x81, 0xa2, 0x2e, 0x26, 0xab, 0xa2, 0x22, 0x26, 0x88, 0xb5, 0x23, 0x76, 0xa2, 0x2e,
-  0x26, 0xab, 0x90, 0x02, 0xa2, 0x2e, 0x26, 0xab, 0xac, 0x24, 0xce, 0xac, 0x26, 0xcc,
-  0x34, 0xe1, 0xa2, 0x16, 0x72, 0x88, 0x9c, 0x00, 0x3c, 0xb7, 0xc4, 0xb4, 0x02, 0xb7,
-  0x00, 0x04, 0x04, 0xb7, 0x01, 0x00, 0x06, 0xac, 0x72, 0xcc, 0x82, 0x18, 0xcc, 0xf8,
-  0x00, 0xb4, 0x1c, 0x9b, 0x90, 0x07, 0xa2, 0x20, 0x72, 0xab, 0xb0, 0x10, 0x29, 0xb7,
-  0x00, 0x00, 0x18, 0xb5, 0x38, 0x6c, 0x90, 0x01, 0xb5, 0x21, 0x97, 0xb7, 0x98, 0x96,
-  0x02, 0xb7, 0x00, 0x00, 0x04, 0xb7, 0x01, 0x00, 0x06, 0xac, 0x72, 0xcc, 0x82, 0x18,
-  0xcc, 0xf8, 0x00, 0xb4, 0x1c, 0x6f, 0x82, 0x02, 0x04, 0xfc, 0x42, 0x94, 0x22, 0xa8,
-  0x02, 0xb5, 0xf2, 0xde, 0xa2, 0x54, 0x74, 0xa8, 0xaf, 0xc8, 0xb5, 0xf2, 0xfd, 0xa2,
-  0x12, 0x78, 0xa8, 0x9a, 0x01, 0xa2, 0x12, 0x78, 0xab, 0x3f, 0xc8, 0xab, 0x18, 0xb0,
-  0x32, 0x0e, 0xb5, 0x38, 0x27, 0xb5, 0xfa, 0x87, 0x82, 0x02, 0x08, 0xfc, 0x94, 0x32,
-  0xa8, 0x06, 0xb5, 0xf2, 0xc7, 0xa2, 0x64, 0x76, 0xa8, 0xaf, 0xc8, 0xb5, 0xf2, 0xd2,
-  0xa2, 0x12, 0x78, 0xa8, 0x9a, 0x02, 0xa2, 0x12, 0x78, 0xab, 0x3f, 0xc8, 0xab, 0x18,
-  0xb0, 0x32, 0x0e, 0xb5, 0x37, 0xfc, 0xb7, 0x02, 0x03, 0x02, 0xac, 0x08, 0x04, 0xa8,
-  0x06, 0xb7, 0x00, 0x00, 0x06, 0xb4, 0xf4, 0x32, 0xa8, 0x06, 0xb5, 0xf2, 0x81, 0xa2,
-  0x54, 0x74, 0xa8, 0xaf, 0xc8, 0xb5, 0xf2, 0xa0, 0xa2, 0x12, 0x78, 0xa8, 0x9a, 0x04,
-  0xa2, 0x12, 0x78, 0xab, 0x3f, 0xc8, 0xab, 0x18, 0xb0, 0x32, 0x0e, 0xb5, 0x37, 0xca,
-  0xb7, 0x01, 0x04, 0x02, 0xb7, 0x00, 0x04, 0x04, 0xb7, 0x00, 0x00, 0x06, 0x00, 0xb4,
-  0xf4, 0x00, 0x36, 0xd4, 0xb7, 0x00, 0x00, 0x0a, 0x80, 0x7e, 0x0a, 0xfc, 0x3c, 0xa8,
-  0x0a, 0xb5, 0xf2, 0x6c, 0x90, 0x03, 0xa2, 0x12, 0x78, 0xf9, 0x9d, 0x00, 0x43, 0xa9,
-  0x0a, 0x75, 0xa2, 0x12, 0x78, 0xa8, 0x9a, 0x08, 0xa2, 0x12, 0x78, 0xab, 0xa2, 0x10,
-  0x78, 0x88, 0xab, 0x18, 0xb0, 0x32, 0x0e, 0xb5, 0x37, 0x88, 0x79, 0xa8, 0x44, 0xbc,
-  0x01, 0x04, 0xb4, 0x01, 0xd8, 0xa8, 0x44, 0xbc, 0x01, 0xff, 0xb4, 0x01, 0xc0, 0xa2,
-  0x20, 0x72, 0xa8, 0x9c, 0x00, 0xb4, 0x01, 0x8e, 0x9c, 0x01, 0xb4, 0x01, 0x0a, 0x9c,
-  0x02, 0x94, 0xc3, 0x9c, 0x03, 0x51, 0x9c, 0x04, 0x94, 0x98, 0x9c, 0x05, 0x94, 0x6e,
-  0x9c, 0x06, 0x94, 0x43, 0x9c, 0x07, 0x94, 0x75, 0x3c, 0xa8, 0x44, 0xbc, 0x01, 0xff,
-  0x4a, 0xbc, 0x01, 0x01, 0x5b, 0xbc, 0x01, 0x02, 0x94, 0x20, 0x3c, 0xa2, 0x1e, 0x72,
-  0x88, 0x9c, 0x04, 0xb4, 0xfd, 0x27, 0xa2, 0x00, 0x72, 0x88, 0x9c, 0x00, 0xb4, 0xfb,
-  0xa7, 0xb4, 0xfe, 0xb0, 0xa2, 0x1e, 0x72, 0x88, 0x9c, 0x02, 0xb4, 0xfb, 0xf7, 0x3c,
-  0xa2, 0x1e, 0x72, 0x88, 0x9c, 0x04, 0x41, 0x3c, 0x90, 0x05, 0xa2, 0x1e, 0x72, 0x8b,
-  0x3c, 0xa8, 0x44, 0xbc, 0x01, 0xff, 0xb4, 0xfd, 0xf7, 0xbc, 0x01, 0x02, 0xb4, 0xfe,
-  0x89, 0x3c, 0xa2, 0x10, 0x72, 0x88, 0xb5, 0xf1, 0xab, 0xaf, 0x76, 0xa2, 0x11, 0x72,
-  0x88, 0xb5, 0xf1, 0xa2, 0xac, 0x76, 0xcc, 0x3f, 0xce, 0xb4, 0xfd, 0x6f, 0xa8, 0x44,
-  0xbc, 0x01, 0xff, 0xb4, 0xfd, 0xd0, 0xbc, 0x01, 0x02, 0xb4, 0xfe, 0x62, 0x3c, 0xa8,
-  0x44, 0xbc, 0x01, 0xff, 0xb4, 0xfb, 0x4d, 0xbc, 0x01, 0x01, 0x41, 0x3c, 0xa2, 0x1e,
-  0x72, 0x88, 0x9c, 0x02, 0xb4, 0xfd, 0x1e, 0x3c, 0xa8, 0x44, 0xbc, 0x01, 0x04, 0x45,
-  0xbc, 0x01, 0x02, 0x4e, 0x3c, 0xa2, 0x1e, 0x72, 0x88, 0x9c, 0x03, 0x46, 0x9c, 0x02,
-  0xb4, 0xfb, 0x83, 0x3c, 0xa2, 0x00, 0x72, 0x88, 0x9d, 0x00, 0xb4, 0xfe, 0x29, 0xb4,
-  0xfb, 0x1a, 0xa8, 0x44, 0xbc, 0x01, 0x03, 0x53, 0xbc, 0x01, 0x02, 0x58, 0xbc, 0x01,
-  0x04, 0x5d, 0xbc, 0x01, 0xff, 0x94, 0x22, 0xbc, 0x01, 0x07, 0x94, 0x26, 0x3c, 0xac,
-  0x46, 0x02, 0xac, 0x48, 0x04, 0xb4, 0xfe, 0x30, 0x90, 0x05, 0xa2, 0x1e, 0x72, 0x8b,
-  0xb4, 0xfb, 0xe9, 0xa2, 0x1e, 0x72, 0x88, 0x9c, 0x04, 0xb4, 0xfb, 0xe0, 0x3c, 0x90,
-  0x04, 0xa2, 0x1e, 0x72, 0x8b, 0xb4, 0xfe, 0xaa, 0xa8, 0x46, 0xb4, 0xfa, 0x3c, 0xa8,
-  0x44, 0xbc, 0x01, 0x06, 0x94, 0x26, 0xbc, 0x01, 0x03, 0x57, 0xbc, 0x01, 0x02, 0x50,
-  0xbc, 0x01, 0x07, 0x47, 0xbc, 0x01, 0x04, 0xb4, 0xfb, 0xb8, 0x3c, 0xa8, 0x46, 0xb4,
-  0xfa, 0x1d, 0xb4, 0xfb, 0xaf, 0xac, 0x46, 0x02, 0xac, 0x48, 0x04, 0x36, 0x19, 0xb4,
-  0xfb, 0x79, 0xa2, 0x14, 0x72, 0x88, 0x9c, 0x00, 0x5d, 0xa2, 0x15, 0x72, 0x88, 0x9c,
-  0x00, 0x56, 0xa2, 0x1a, 0x72, 0x88, 0x9d, 0x00, 0x4f, 0xa2, 0x1c, 0x72, 0x88, 0x9d,
-  0x00, 0x48, 0xa2, 0x22, 0x72, 0xa8, 0x9c, 0x0c, 0x94, 0x29, 0xa2, 0x14, 0x72, 0x88,
-  0x9d, 0x00, 0x3c, 0xa2, 0x15, 0x72, 0x88, 0x9c, 0x00, 0x4e, 0xa2, 0x1a, 0x72, 0x88,
-  0x9c, 0x00, 0x4c, 0xa2, 0x1c, 0x72, 0x88, 0x9c, 0x00, 0x45, 0x90, 0x01, 0xb4, 0xf7,
-  0xe7, 0xa2, 0x22, 0x72, 0xa8, 0x9c, 0x0c, 0x3c, 0x6c, 0x90, 0x00, 0xb4, 0xf7, 0xda,
-  0xa8, 0x44, 0xbc, 0x01, 0x01, 0x4f, 0xbc, 0x01, 0x04, 0x41, 0x3c, 0xa2, 0x1e, 0x72,
-  0x88, 0x9c, 0x04, 0xb4, 0xfa, 0x44, 0x3c, 0xa2, 0x1e, 0x72, 0x88, 0x9c, 0x02, 0x41,
-  0x3c, 0xa2, 0x00, 0x72, 0x88, 0x9c, 0x00, 0xb4, 0xfa, 0x8e, 0xb4, 0xfc, 0x0e, 0xa8,
-  0x48, 0xa2, 0x18, 0x72, 0xfc, 0x41, 0x3c, 0x00, 0xa2, 0x18, 0x72, 0xab, 0xb4, 0xfe,
-  0x30, 0xa8, 0x48, 0xa2, 0x1e, 0x72, 0x8b, 0xb4, 0xfe, 0x1f, 0xaf, 0xce, 0xac, 0x74,
-  0xce, 0xb6, 0xb8, 0x02, 0x88, 0x99, 0x05, 0x9c, 0x00, 0x5a, 0xa2, 0x52, 0xce, 0xa8,
-  0x9c, 0x03, 0x41, 0x52, 0xa2, 0x22, 0xce, 0x88, 0xb5, 0x21, 0xbd, 0x90, 0x05, 0x01,
-  0xb6, 0xb8, 0x02, 0xd9, 0xb6, 0xb8, 0x02, 0x8b, 0xb6, 0xb8, 0x02, 0x88, 0x99, 0x06,
-  0x9c, 0x00, 0x5a, 0xa2, 0x52, 0xce, 0xa8, 0x9c, 0x02, 0x41, 0x52, 0xa2, 0x22, 0xce,
-  0x88, 0xb5, 0x21, 0x9a, 0x90, 0x06, 0x01, 0xb6, 0xb8, 0x02, 0xd9, 0xb6, 0xb8, 0x02,
-  0x8b, 0xb6, 0xb8, 0x02, 0x88, 0x99, 0x08, 0x9c, 0x00, 0x94, 0x1f, 0xa2, 0x52, 0xce,
-  0xa8, 0x9c, 0x01, 0x41, 0x57, 0xa2, 0x22, 0xce, 0x88, 0xb5, 0x21, 0x76, 0x90, 0x08,
-  0x01, 0xb6, 0xb8, 0x02, 0xd9, 0xb6, 0xb8, 0x02, 0x8b, 0x00, 0xb6, 0xb8, 0x04, 0xab,
-  0x3f, 0xce, 0x3c, 0x00, 0x00, 0x08, 0x00, 0x00, 0x04, 0x0b, 0x00, 0x00, 0x05, 0x00,
-  0x01, 0x09, 0x06, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x02, 0x00, 0x05, 0x00, 0x03, 0x09, 0x0a, 0x00,
-  0x00, 0x00, 0x0a, 0x00, 0xb7, 0x00, 0x00, 0x0a, 0x80, 0x7e, 0x0a, 0xfc, 0x3c, 0xa8,
-  0x0a, 0xb5, 0xef, 0xb0, 0xa2, 0x14, 0x78, 0x88, 0x9c, 0x00, 0x4b, 0x90, 0x00, 0xa2,
-  0x14, 0x78, 0x8b, 0xa8, 0x0a, 0xb5, 0x24, 0xb5, 0xa9, 0x0a, 0x7e, 0x90, 0x00, 0xa2,
-  0x66, 0xce, 0xab, 0x90, 0x00, 0xa2, 0x62, 0xce, 0xab, 0xa2, 0x22, 0xce, 0x88, 0xab,
-  0x18, 0xb0, 0x40, 0x10, 0xb5, 0x34, 0xc1, 0x90, 0x04, 0xa2, 0x28, 0xce, 0x8b, 0xa2,
-  0x22, 0xce, 0x88, 0xab, 0x18, 0xb0, 0x40, 0x0d, 0xb4, 0x34, 0xaf, 0x90, 0x01, 0xa2,
-  0x66, 0xce, 0xab, 0x90, 0x03, 0xa2, 0x62, 0xce, 0xab, 0x90, 0x00, 0xa2, 0x64, 0xce,
-  0xab, 0xa2, 0x22, 0xce, 0x88, 0xab, 0x18, 0xb0, 0x40, 0x10, 0xb5, 0x34, 0x91, 0xa2,
-  0x06, 0xce, 0xa8, 0x9c, 0x03, 0x41, 0x3c, 0xa2, 0x28, 0x72, 0xa8, 0xa2, 0x28, 0x72,
-  0xa9, 0x9c, 0x01, 0xb4, 0x13, 0x33, 0x3c, 0x90, 0x02, 0xa2, 0x66, 0xce, 0xab, 0x90,
-  0x02, 0xa2, 0x62, 0xce, 0xab, 0x90, 0x01, 0xa2, 0x64, 0xce, 0xab, 0xa2, 0x22, 0xce,
-  0x88, 0xab, 0x18, 0xb0, 0x40, 0x10, 0xb5, 0x34, 0x5d, 0xa2, 0x06, 0xce, 0xa8, 0x9c,
-  0x03, 0x41, 0x3c, 0xa2, 0x2a, 0x72, 0xa8, 0xa2, 0x2a, 0x72, 0xa9, 0x9c, 0x01, 0xb4,
-  0x12, 0xff, 0x3c, 0x90, 0x03, 0xa2, 0x66, 0xce, 0xab, 0x90, 0x05, 0xa2, 0x62, 0xce,
-  0xab, 0xa2, 0x06, 0xce, 0xa8, 0x9c, 0x00, 0x52, 0x90, 0x00, 0xa2, 0x64, 0xce, 0xab,
-  0xa2, 0x22, 0xce, 0x88, 0xab, 0x18, 0xb0, 0x40, 0x10, 0xb4, 0x34, 0x22, 0x90, 0x01,
-  0x72, 0x90, 0x04, 0xa2, 0x66, 0xce, 0xab, 0x90, 0x01, 0xa2, 0x62, 0xce, 0xab, 0xa2,
-  0x0a, 0xce, 0xa8, 0x05, 0xa2, 0x64, 0xce, 0xab, 0xa2, 0x22, 0xce, 0x88, 0xab, 0x18,
-  0xb0, 0x40, 0x10, 0xb4, 0x33, 0xfe, 0x90, 0x05, 0xa2, 0x66, 0xce, 0xab, 0x90, 0x04,
-  0xa2, 0x62, 0xce, 0xab, 0xa2, 0x06, 0xce, 0xa8, 0x9c, 0x00, 0x52, 0x90, 0x00, 0xa2,
-  0x64, 0xce, 0xab, 0xa2, 0x22, 0xce, 0x88, 0xab, 0x18, 0xb0, 0x40, 0x10, 0xb4, 0x33,
-  0xd9, 0x90, 0x01, 0x72, 0xa2, 0x54, 0xce, 0xa8, 0xb5, 0xee, 0x91, 0xa2, 0x0c, 0x78,
-  0xa8, 0xa2, 0x42, 0x74, 0xab, 0xa2, 0x0e, 0x78, 0xa8, 0xa2, 0x44, 0x74, 0xab, 0xa2,
-  0x08, 0x78, 0xa8, 0xa2, 0x3e, 0x74, 0xab, 0xa2, 0x0a, 0x78, 0xa8, 0xa2, 0x40, 0x74,
-  0xab, 0xa2, 0x04, 0x78, 0xa8, 0xa2, 0x46, 0x74, 0xab, 0xa2, 0x06, 0x78, 0xa8, 0xa2,
-  0x48, 0x74, 0xab, 0xa2, 0x10, 0xce, 0xa8, 0xa2, 0x44, 0xce, 0xfd, 0x94, 0x52, 0xa2,
-  0x44, 0xce, 0xfc, 0x94, 0x2f, 0xa2, 0x0c, 0xce, 0xa8, 0xa2, 0x40, 0xce, 0xfd, 0x94,
-  0x3b, 0xa2, 0x40, 0xce, 0xfc, 0x94, 0x2a, 0xa2, 0x24, 0xce, 0xa8, 0xab, 0xca, 0x90,
-  0x00, 0xa2, 0x24, 0xce, 0xab, 0x96, 0xca, 0xfc, 0x94, 0x31, 0xa2, 0x22, 0xce, 0x88,
-  0xab, 0x18, 0xb0, 0x2f, 0x07, 0xb5, 0x33, 0x62, 0x94, 0x23, 0xa2, 0x0e, 0xce, 0xa8,
-  0xa2, 0x42, 0xce, 0xfd, 0x54, 0x95, 0x38, 0xa2, 0x0a, 0xce, 0xa8, 0xa2, 0x3e, 0xce,
-  0xfd, 0x42, 0x95, 0x33, 0x90, 0x02, 0xa2, 0x24, 0xce, 0xab, 0x46, 0x90, 0x01, 0xa2,
-  0x24, 0xce, 0xab, 0xa2, 0x24, 0xce, 0xa8, 0x9c, 0x00, 0x3c, 0xb7, 0x04, 0x02, 0x02,
-  0xb7, 0x00, 0x00, 0x04, 0xb7, 0x00, 0x00, 0x06, 0xa2, 0x22, 0xce, 0x88, 0xb5, 0xef,
-  0x69, 0xb7, 0x04, 0x01, 0x02, 0xb7, 0x00, 0x00, 0x04, 0xb7, 0x00, 0x00, 0x06, 0xa2,
-  0x22, 0xce, 0x88, 0xb5, 0xef, 0x56, 0x90, 0x00, 0xa2, 0x56, 0xce, 0xab, 0x90, 0x00,
-  0xa2, 0x52, 0xce, 0xab, 0xa2, 0x22, 0xce, 0x88, 0xab, 0x18, 0xb0, 0x2f, 0x07, 0xb4,
-  0x32, 0xf8, 0xb7, 0x04, 0x02, 0x02, 0xb7, 0x00, 0x00, 0x04, 0xb7, 0x00, 0x00, 0x06,
-  0xa2, 0x22, 0xce, 0x88, 0xb5, 0xef, 0x2b, 0xb7, 0x04, 0x01, 0x02, 0xb7, 0x00, 0x00,
-  0x04, 0xb7, 0x00, 0x00, 0x06, 0xa2, 0x22, 0xce, 0x88, 0xb5, 0xef, 0x18, 0x90, 0x00,
-  0xa2, 0x56, 0xce, 0xab, 0x90, 0x00, 0xa2, 0x52, 0xce, 0xab, 0xa2, 0x24, 0xce, 0xa8,
-  0x9c, 0x00, 0x52, 0x90, 0x00, 0xa2, 0x24, 0xce, 0xab, 0xa2, 0x22, 0xce, 0x88, 0xab,
-  0x18, 0xb0, 0x2f, 0x07, 0xb5, 0x32, 0xad, 0xa2, 0x22, 0xce, 0x88, 0xab, 0x18, 0xb0,
-  0x20, 0x17, 0xb4, 0x32, 0xa1, 0x90, 0x01, 0xa2, 0x56, 0xce, 0xab, 0x90, 0x03, 0xa2,
-  0x52, 0xce, 0xab, 0x90, 0x00, 0xa2, 0x54, 0xce, 0xab, 0x35, 0x47, 0xa2, 0x22, 0xce,
-  0x88, 0xab, 0x18, 0xb0, 0x20, 0x17, 0xb5, 0x32, 0x81, 0xa2, 0x52, 0xce, 0xa8, 0x9c,
-  0x03, 0x41, 0x3c, 0xb7, 0x04, 0x02, 0x02, 0xb7, 0x00, 0x01, 0x04, 0xb7, 0x00, 0x00,
-  0x06, 0xa2, 0x22, 0xce, 0x88, 0xb5, 0xee, 0xac, 0xa2, 0x2c, 0x72, 0xa8, 0xa2, 0x2c,
-  0x72, 0xa9, 0x9c, 0x01, 0xb4, 0x11, 0x10, 0x3c, 0x90, 0x02, 0xa2, 0x56, 0xce, 0xab,
-  0x90, 0x02, 0xa2, 0x52, 0xce, 0xab, 0x90, 0x01, 0xa2, 0x54, 0xce, 0xab, 0x35, 0x90,
-  0xa2, 0x22, 0xce, 0x88, 0xab, 0x18, 0xb0, 0x20, 0x17, 0xb5, 0x32, 0x38, 0xa2, 0x52,
-  0xce, 0xa8, 0x9c, 0x02, 0x41, 0x3c, 0xb7, 0x04, 0x02, 0x02, 0xb7, 0x00, 0x01, 0x04,
-  0xb7, 0x00, 0x00, 0x06, 0xa2, 0x22, 0xce, 0x88, 0xb5, 0xee, 0x63, 0xa2, 0x2e, 0x72,
-  0xa8, 0xa2, 0x2e, 0x72, 0xa9, 0x9c, 0x01, 0xb4, 0x10, 0xc7, 0x3c, 0x90, 0x04, 0xa2,
-  0x56, 0xce, 0xab, 0x90, 0x01, 0xa2, 0x52, 0xce, 0xab, 0xa2, 0x06, 0xce, 0xa8, 0x05,
-  0xa2, 0x54, 0xce, 0xab, 0x35, 0xdc, 0xa2, 0x22, 0xce, 0x88, 0xab, 0x18, 0xb0, 0x20,
-  0x17, 0xb5, 0x31, 0xec, 0xa2, 0x52, 0xce, 0xa8, 0x9c, 0x01, 0x41, 0x3c, 0xb7, 0x04,
-  0x01, 0x02, 0xb7, 0x00, 0x01, 0x04, 0xb7, 0x00, 0x00, 0x06, 0xa2, 0x22, 0xce, 0x88,
-  0xb4, 0xee, 0x17, 0xa2, 0x66, 0xcc, 0xa8, 0xaf, 0xce, 0x9e, 0x06, 0x3f, 0xce, 0xab,
-  0xca, 0xa2, 0x66, 0xce, 0xa8, 0x96, 0xca, 0xf8, 0xb8, 0x54, 0x54, 0xad, 0xc8, 0x88,
-  0xab, 0x0c, 0xa2, 0x22, 0x72, 0xab, 0xb7, 0x00, 0x00, 0x18, 0xb0, 0x10, 0x2a, 0xb5,
-  0x31, 0xa8, 0xb7, 0x00, 0x00, 0x0a, 0xa2, 0x29, 0xce, 0x88, 0x9c, 0x02, 0x42, 0x94,
-  0x25, 0x82, 0x05, 0x0c, 0xfc, 0x4b, 0x82, 0x09, 0x0c, 0xfc, 0x46, 0x82, 0x07, 0x0c,
-  0xfc, 0x41, 0x55, 0xb7, 0x00, 0x01, 0x0a, 0x57, 0x82, 0x06, 0x0c, 0xfc, 0x69, 0x82,
-  0x0a, 0x0c, 0xfc, 0x6e, 0x82, 0x07, 0x0c, 0xfc, 0x73, 0x47, 0xa2, 0x29, 0xcc, 0x88,
-  0x9c, 0x02, 0x76, 0xa2, 0x27, 0x72, 0x88, 0xa0, 0xc8, 0x0a, 0xfc, 0x50, 0xa8, 0x0a,
-  0xa2, 0x27, 0x72, 0x8b, 0xb7, 0x00, 0x00, 0x18, 0xb0, 0x10, 0x2e, 0xb5, 0x31, 0x56,
-  0xa2, 0x15, 0x72, 0x88, 0x9c, 0x00, 0x3c, 0xb7, 0x01, 0x06, 0x02, 0xb7, 0x00, 0x00,
-  0x04, 0xb7, 0x00, 0x00, 0x06, 0x00, 0xb4, 0xed, 0x85, 0xa2, 0x66, 0xce, 0xa8, 0xb8,
-  0x54, 0x4e, 0xad, 0xc8, 0x88, 0xa2, 0x22, 0x72, 0xab, 0xab, 0x0a, 0xb7, 0x00, 0x00,
-  0x18, 0xb0, 0x10, 0x2a, 0xb5, 0x31, 0x25, 0xb7, 0x00, 0x00, 0x0c, 0xa2, 0x29, 0xce,
-  0x88, 0x9c, 0x02, 0x57, 0xa2, 0x27, 0x72, 0x88, 0x9c, 0x0c, 0x3c, 0xa8, 0x0c, 0xa2,
-  0x27, 0x72, 0x8b, 0xb7, 0x00, 0x00, 0x18, 0xb0, 0x10, 0x2e, 0xb4, 0x31, 0x03, 0xa2,
-  0x28, 0xce, 0x88, 0x9c, 0x02, 0x7d, 0x82, 0x08, 0x0a, 0xfc, 0x47, 0x82, 0x0b, 0x0a,
-  0xfc, 0x42, 0x95, 0x28, 0xb7, 0x00, 0x01, 0x0c, 0x95, 0x2e, 0xa2, 0x66, 0xce, 0xa8,
-  0x9c, 0x00, 0x56, 0x9c, 0x02, 0x94, 0xaa, 0x9c, 0x03, 0xb4, 0x01, 0x0c, 0x9c, 0x04,
-  0xb4, 0x01, 0x66, 0x9c, 0x05, 0xb4, 0x01, 0x8d, 0xb4, 0x01, 0xf4, 0xa2, 0x3a, 0xce,
-  0x88, 0x9c, 0x00, 0x56, 0xa2, 0x57, 0xce, 0x88, 0x9c, 0x00, 0x4f, 0x37, 0xbc, 0xb6,
-  0xb8, 0x02, 0x88, 0x9a, 0x02, 0xb6, 0xb8, 0x02, 0x8b, 0xb4, 0x01, 0xd7, 0xa2, 0x3a,
-  0xce, 0x88, 0x9c, 0x00, 0x5d, 0xa2, 0x56, 0xce, 0x88, 0x9c, 0x00, 0x56, 0xa2, 0x3a,
-  0xcc, 0x88, 0x9c, 0x00, 0x4f, 0x37, 0xac, 0xb6, 0xb8, 0x02, 0x88, 0x9a, 0x02, 0xb6,
-  0xb8, 0x02, 0x8b, 0xb4, 0x01, 0xb3, 0xa2, 0x39, 0xce, 0x88, 0x9c, 0x00, 0x5e, 0xa2,
-  0x5e, 0xce, 0x88, 0x9c, 0x00, 0x57, 0x37, 0xa1, 0xb6, 0xb8, 0x02, 0x88, 0x9a, 0x08,
-  0xb6, 0xb8, 0x02, 0x8b, 0xa2, 0x0a, 0xce, 0xa8, 0xb6, 0xb8, 0x04, 0xab, 0xb4, 0x01,
-  0x8e, 0xa2, 0x3a, 0xce, 0x88, 0x9c, 0x00, 0xb4, 0x01, 0x85, 0xa2, 0x58, 0xce, 0x88,
-  0x9c, 0x00, 0xb4, 0x01, 0x7c, 0x37, 0xa9, 0xb6, 0xb8, 0x02, 0x88, 0x9a, 0x04, 0xb6,
-  0xb8, 0x02, 0x8b, 0xb4, 0x01, 0x6d, 0x90, 0x01, 0xb5, 0xeb, 0x03, 0x90, 0x01, 0xa2,
-  0x14, 0x78, 0x8b, 0xb5, 0xfb, 0x5f, 0xb4, 0x01, 0x5c, 0xa2, 0x3a, 0xce, 0x88, 0x9c,
-  0x00, 0x77, 0xa2, 0x3c, 0xce, 0x88, 0x9d, 0x00, 0x7e, 0xa2, 0x3a, 0xce, 0x88, 0x9c,
-  0x00, 0x94, 0x1f, 0xa2, 0x56, 0xce, 0x88, 0x9c, 0x00, 0x58, 0xa2, 0x3a, 0xcc, 0x88,
-  0x9c, 0x00, 0x51, 0x90, 0x01, 0xb5, 0xea, 0xce, 0x90, 0x01, 0xa2, 0x14, 0x78, 0x8b,
-  0xb5, 0xfb, 0xbc, 0xb4, 0x01, 0x27, 0xa2, 0x3a, 0xce, 0x88, 0x9c, 0x00, 0xb4, 0x01,
-  0x1e, 0xa2, 0x58, 0xce, 0x88, 0x9c, 0x00, 0xb4, 0x01, 0x15, 0xb5, 0xfb, 0xed, 0xb6,
-  0xb8, 0x02, 0x88, 0x9a, 0x04, 0xb6, 0xb8, 0x02, 0x8b, 0xb4, 0x01, 0x05, 0x90, 0x01,
-  0xb5, 0xea, 0x9b, 0x90, 0x01, 0xa2, 0x14, 0x78, 0x8b, 0xb5, 0xfa, 0xf7, 0x94, 0xf5,
-  0xa2, 0x3a, 0xce, 0x88, 0x9c, 0x00, 0x76, 0xa2, 0x3c, 0xce, 0x88, 0x9d, 0x00, 0x7d,
-  0xa2, 0x3a, 0xce, 0x88, 0x9c, 0x00, 0x57, 0xa2, 0x57, 0xce, 0x88, 0x9c, 0x00, 0x50,
-  0x90, 0x01, 0xb5, 0xea, 0x6f, 0x90, 0x01, 0xa2, 0x14, 0x78, 0x8b, 0xb5, 0xfb, 0x29,
-  0x94, 0xc9, 0xa2, 0x3a, 0xce, 0x88, 0x9c, 0x00, 0x94, 0xc1, 0xa2, 0x58, 0xce, 0x88,
-  0x9c, 0x00, 0x94, 0xb9, 0x90, 0x01, 0xb5, 0xea, 0x4f, 0x90, 0x01, 0xa2, 0x14, 0x78,
-  0x8b, 0xb5, 0xfb, 0x86, 0x94, 0xa9, 0xa2, 0x0a, 0xce, 0xa8, 0x05, 0xb5, 0xea, 0x3c,
-  0x90, 0x01, 0xa2, 0x14, 0x78, 0x8b, 0xb5, 0xfa, 0x98, 0x94, 0x96, 0xa2, 0x39, 0xce,
-  0x88, 0x9c, 0x00, 0x79, 0xa2, 0x5e, 0xce, 0x88, 0x9c, 0x00, 0x95, 0x20, 0x94, 0x85,
-  0x90, 0x00, 0xb5, 0xea, 0x1b, 0x90, 0x01, 0xa2, 0x14, 0x78, 0x8b, 0x90, 0x01, 0xb5,
-  0xea, 0x10, 0x90, 0x01, 0xa2, 0x14, 0x78, 0x8b, 0xb5, 0xfa, 0x6c, 0x94, 0x6a, 0xa2,
-  0x3a, 0xce, 0x88, 0x9c, 0x00, 0x95, 0x21, 0xa2, 0x3c, 0xce, 0x88, 0x9d, 0x00, 0x95,
-  0x29, 0xa2, 0x3a, 0xce, 0x88, 0x9c, 0x00, 0x94, 0x22, 0xa2, 0x57, 0xce, 0x88, 0x9c,
-  0x00, 0x5b, 0x90, 0x00, 0xb5, 0xe9, 0xe1, 0x90, 0x01, 0xa2, 0x14, 0x78, 0x8b, 0x90,
-  0x01, 0xb5, 0xe9, 0xd6, 0x90, 0x01, 0xa2, 0x14, 0x78, 0x8b, 0xb5, 0xfa, 0x90, 0x94,
-  0x30, 0xa2, 0x3a, 0xce, 0x88, 0x9c, 0x00, 0x94, 0x28, 0xa2, 0x56, 0xce, 0x88, 0x9c,
-  0x00, 0x94, 0x20, 0xa2, 0x3a, 0xcc, 0x88, 0x9c, 0x00, 0x59, 0x90, 0x00, 0xb5, 0xe9,
-  0xaf, 0x90, 0x01, 0xa2, 0x14, 0x78, 0x8b, 0x90, 0x01, 0xb5, 0xe9, 0xa4, 0x90, 0x01,
-  0xa2, 0x14, 0x78, 0x8b, 0xb5, 0xfa, 0x92, 0xa2, 0x66, 0xcc, 0xa8, 0x9c, 0x00, 0x54,
-  0x9c, 0x01, 0x94, 0xae, 0x9c, 0x03, 0xb4, 0x01, 0x0e, 0x9c, 0x04, 0xb4, 0x01, 0x69,
-  0x9c, 0x05, 0xb4, 0x01, 0x90, 0x3c, 0xa2, 0x3a, 0xcc, 0x88, 0x9c, 0x00, 0x58, 0xa2,
-  0x57, 0xcc, 0x88, 0x9c, 0x00, 0x51, 0xac, 0xcc, 0xce, 0xb5, 0xf9, 0xfb, 0xb6, 0xb8,
-  0x02, 0x88, 0x9a, 0x01, 0xb6, 0xb8, 0x02, 0x8b, 0x3c, 0xa2, 0x3a, 0xcc, 0x88, 0x9c,
-  0x00, 0x94, 0x1f, 0xa2, 0x56, 0xcc, 0x88, 0x9c, 0x00, 0x58, 0xa2, 0x3a, 0xce, 0x88,
-  0x9c, 0x00, 0x51, 0xac, 0xcc, 0xce, 0xb5, 0xfa, 0x3c, 0xb6, 0xb8, 0x02, 0x88, 0x9a,
-  0x01, 0xb6, 0xb8, 0x02, 0x8b, 0x3c, 0xa2, 0x39, 0xcc, 0x88, 0x9c, 0x00, 0x94, 0x20,
-  0xa2, 0x5e, 0xcc, 0x88, 0x9c, 0x00, 0x59, 0xac, 0xcc, 0xce, 0xb5, 0xfa, 0x44, 0xb6,
-  0xb8, 0x02, 0x88, 0x9a, 0x08, 0xb6, 0xb8, 0x02, 0x8b, 0xa2, 0x0a, 0xcc, 0xa8, 0xb6,
-  0xb8, 0x04, 0xab, 0x3c, 0xa2, 0x3a, 0xcc, 0x88, 0x9c, 0x00, 0x3c, 0xa2, 0x58, 0xcc,
-  0x88, 0x9c, 0x00, 0x3c, 0xac, 0xcc, 0xce, 0xb5, 0xfa, 0x3e, 0xb6, 0xb8, 0x02, 0x88,
-  0x9a, 0x04, 0xb6, 0xb8, 0x02, 0x8b, 0x3c, 0x90, 0x00, 0xb5, 0xe8, 0xee, 0x90, 0x01,
-  0xa2, 0x14, 0x78, 0x8b, 0xac, 0xcc, 0xce, 0xb4, 0xf9, 0x47, 0xa2, 0x3a, 0xcc, 0x88,
-  0x9c, 0x00, 0x77, 0xa2, 0x3c, 0xcc, 0x88, 0x9d, 0x00, 0x7e, 0xa2, 0x3a, 0xcc, 0x88,
-  0x9c, 0x00, 0x94, 0x1f, 0xa2, 0x56, 0xcc, 0x88, 0x9c, 0x00, 0x58, 0xa2, 0x3a, 0xce,
-  0x88, 0x9c, 0x00, 0x51, 0x90, 0x00, 0xb5, 0xe8, 0xb9, 0x90, 0x01, 0xa2, 0x14, 0x78,
-  0x8b, 0xac, 0xcc, 0xce, 0xb4, 0xf9, 0xa4, 0xa2, 0x3a, 0xcc, 0x88, 0x9c, 0x00, 0x3c,
-  0xa2, 0x58, 0xcc, 0x88, 0x9c, 0x00, 0x3c, 0xac, 0xcc, 0xce, 0xb5, 0xf9, 0xd9, 0xb6,
-  0xb8, 0x02, 0x88, 0x9a, 0x04, 0xb6, 0xb8, 0x02, 0x8b, 0x3c, 0x90, 0x00, 0xb5, 0xe8,
-  0x89, 0x90, 0x01, 0xa2, 0x14, 0x78, 0x8b, 0xac, 0xcc, 0xce, 0xb4, 0xf8, 0xe2, 0xa2,
-  0x3a, 0xcc, 0x88, 0x9c, 0x00, 0x77, 0xa2, 0x3c, 0xcc, 0x88, 0x9d, 0x00, 0x7e, 0xa2,
-  0x3a, 0xcc, 0x88, 0x9c, 0x00, 0x58, 0xa2, 0x57, 0xcc, 0x88, 0x9c, 0x00, 0x51, 0x90,
-  0x00, 0xb5, 0xe8, 0x5c, 0x90, 0x01, 0xa2, 0x14, 0x78, 0x8b, 0xac, 0xcc, 0xce, 0xb4,
-  0xf8, 0xdf, 0xa2, 0x3a, 0xcc, 0x88, 0x9c, 0x00, 0x3c, 0xa2, 0x58, 0xcc, 0x88, 0x9c,
-  0x00, 0x3c, 0x90, 0x00, 0xb5, 0xe8, 0x3d, 0x90, 0x01, 0xa2, 0x14, 0x78, 0x8b, 0xac,
-  0xcc, 0xce, 0xb4, 0xf9, 0x71, 0xa2, 0x0a, 0xcc, 0xa8, 0x05, 0xb5, 0xe8, 0x29, 0x90,
-  0x01, 0xa2, 0x14, 0x78, 0x8b, 0xac, 0xcc, 0xce, 0xb4, 0xf8, 0x82, 0xa2, 0x39, 0xcc,
-  0x88, 0x9c, 0x00, 0x7a, 0xa2, 0x5e, 0xcc, 0x88, 0x9c, 0x00, 0x95, 0x21, 0x3c, 0x90,
-  0x00, 0xb5, 0xe8, 0x08, 0x90, 0x01, 0xa2, 0x14, 0x78, 0x8b, 0x90, 0x01, 0xb5, 0xe7,
-  0xfd, 0x90, 0x01, 0xa2, 0x14, 0x78, 0x8b, 0xac, 0xcc, 0xce, 0xb4, 0xf8, 0x56, 0xa2,
-  0x3a, 0xcc, 0x88, 0x9c, 0x00, 0x95, 0x22, 0xa2, 0x3c, 0xcc, 0x88, 0x9d, 0x00, 0x95,
-  0x2a, 0xa2, 0x3a, 0xcc, 0x88, 0x9c, 0x00, 0x94, 0x23, 0xa2, 0x57, 0xcc, 0x88, 0x9c,
-  0x00, 0x5c, 0x90, 0x00, 0xb5, 0xe7, 0xcd, 0x90, 0x01, 0xa2, 0x14, 0x78, 0x8b, 0x90,
-  0x01, 0xb5, 0xe7, 0xc2, 0x90, 0x01, 0xa2, 0x14, 0x78, 0x8b, 0xac, 0xcc, 0xce, 0xb4,
-  0xf8, 0x45, 0xa2, 0x3a, 0xcc, 0x88, 0x9c, 0x00, 0x3c, 0xa2, 0x56, 0xcc, 0x88, 0x9c,
-  0x00, 0x3c, 0xa2, 0x3a, 0xce, 0x88, 0x9c, 0x00, 0x3c, 0x90, 0x00, 0xb5, 0xe7, 0x9c,
-  0x90, 0x01, 0xa2, 0x14, 0x78, 0x8b, 0x90, 0x01, 0xb5, 0xe7, 0x91, 0x90, 0x01, 0xa2,
-  0x14, 0x78, 0x8b, 0xac, 0xcc, 0xce, 0xb4, 0xf8, 0x7c, 0xa2, 0x66, 0xce, 0xa8, 0x9c,
-  0x00, 0x4e, 0x9c, 0x01, 0x94, 0x84, 0x9c, 0x02, 0x94, 0xd9, 0x9c, 0x04, 0xb4, 0x01,
-  0x1a, 0x3c, 0xa2, 0x3a, 0xce, 0x88, 0x9c, 0x00, 0x55, 0xa2, 0x59, 0xce, 0x88, 0x9c,
-  0x00, 0x4e, 0xb5, 0xf7, 0xee, 0xb6, 0xb8, 0x02, 0x88, 0x9a, 0x01, 0xb6, 0xb8, 0x02,
-  0x8b, 0x3c, 0xa2, 0x3a, 0xce, 0x88, 0x9c, 0x00, 0x55, 0xa2, 0x5a, 0xce, 0x88, 0x9c,
-  0x00, 0x4e, 0xb5, 0xf8, 0x06, 0xb6, 0xb8, 0x02, 0x88, 0x9a, 0x02, 0xb6, 0xb8, 0x02,
-  0x8b, 0x3c, 0xa2, 0x39, 0xce, 0x88, 0x9c, 0x00, 0x3c, 0xa2, 0x5e, 0xce, 0x88, 0x9c,
-  0x00, 0x3c, 0xb5, 0xf8, 0x46, 0xb6, 0xb8, 0x02, 0x88, 0x9a, 0x08, 0xb6, 0xb8, 0x02,
-  0x8b, 0xa2, 0x0a, 0xce, 0xa8, 0xb6, 0xb8, 0x04, 0xab, 0x3c, 0x90, 0x00, 0xb5, 0xe7,
-  0x0f, 0x90, 0x01, 0xa2, 0x14, 0x78, 0x8b, 0xb5, 0xf7, 0x6b, 0xa2, 0x28, 0x72, 0xa8,
-  0x05, 0xa2, 0x28, 0x72, 0xab, 0x04, 0x9c, 0x00, 0xb4, 0x0a, 0xec, 0x3c, 0xa2, 0x3a,
-  0xce, 0x88, 0x9c, 0x00, 0x95, 0x24, 0xa2, 0x3c, 0xce, 0x88, 0x9d, 0x00, 0x95, 0x2c,
-  0xa2, 0x3a, 0xce, 0x88, 0x9c, 0x00, 0x3c, 0xa2, 0x5a, 0xce, 0x88, 0x9c, 0x00, 0x3c,
-  0xb5, 0xf7, 0x98, 0xb6, 0xb8, 0x02, 0x88, 0x9a, 0x02, 0xb6, 0xb8, 0x02, 0x8b, 0xa2,
-  0x28, 0x72, 0xa8, 0x05, 0xa2, 0x28, 0x72, 0xab, 0x04, 0x9c, 0x00, 0xb4, 0x0a, 0xb1,
-  0x3c, 0x90, 0x01, 0xb5, 0xe6, 0xb6, 0x90, 0x01, 0xa2, 0x14, 0x78, 0x8b, 0xb5, 0xf7,
-  0x12, 0xa2, 0x2a, 0x72, 0xa8, 0x05, 0xa2, 0x2a, 0x72, 0xab, 0x04, 0x9c, 0x00, 0xb4,
-  0x0a, 0x93, 0x3c, 0xa2, 0x3a, 0xce, 0x88, 0x9c, 0x00, 0x95, 0x24, 0xa2, 0x3c, 0xce,
-  0x88, 0x9d, 0x00, 0x95, 0x2c, 0xa2, 0x3a, 0xce, 0x88, 0x9c, 0x00, 0x3c, 0xa2, 0x59,
-  0xce, 0x88, 0x9c, 0x00, 0x3c, 0x90, 0x01, 0xb5, 0xe6, 0x7a, 0x90, 0x01, 0xa2, 0x14,
-  0x78, 0x8b, 0xb5, 0xf7, 0x00, 0xb6, 0xb8, 0x02, 0x88, 0x9a, 0x01, 0xb6, 0xb8, 0x02,
-  0x8b, 0xa2, 0x2a, 0x72, 0xa8, 0x05, 0xa2, 0x2a, 0x72, 0xab, 0x04, 0x9c, 0x00, 0xb4,
-  0x0a, 0x4d, 0x3c, 0xa2, 0x39, 0xce, 0x88, 0x9c, 0x00, 0x48, 0xa2, 0x5e, 0xce, 0x88,
-  0x9c, 0x00, 0x41, 0x3c, 0xa2, 0x0a, 0xce, 0xa8, 0x05, 0xb5, 0xe6, 0x40, 0x90, 0x01,
-  0xa2, 0x14, 0x78, 0x8b, 0xb4, 0xf6, 0x9c, 0xa2, 0x66, 0xce, 0xa8, 0x9c, 0x00, 0x4d,
-  0x9c, 0x01, 0x94, 0x73, 0x9c, 0x04, 0x94, 0x99, 0x9c, 0x05, 0x94, 0xce, 0x3c, 0xa2,
-  0x3a, 0xce, 0x88, 0x9c, 0x00, 0x55, 0xa2, 0x57, 0xce, 0x88, 0x9c, 0x00, 0x4e, 0xb5,
-  0xf6, 0xa1, 0xb6, 0xb8, 0x02, 0x88, 0x9a, 0x01, 0xb6, 0xb8, 0x02, 0x8b, 0x3c, 0xa2,
-  0x39, 0xce, 0x88, 0x9c, 0x00, 0x5d, 0xa2, 0x5e, 0xce, 0x88, 0x9c, 0x00, 0x56, 0xb5,
-  0xf7, 0x15, 0xb6, 0xb8, 0x02, 0x88, 0x9a, 0x08, 0xb6, 0xb8, 0x02, 0x8b, 0xa2, 0x0a,
-  0xce, 0xa8, 0xb6, 0xb8, 0x04, 0xab, 0x3c, 0xa2, 0x3a, 0xce, 0x88, 0x9c, 0x00, 0x3c,
-  0xa2, 0x58, 0xce, 0x88, 0x9c, 0x00, 0x3c, 0xb5, 0xf7, 0x12, 0xb6, 0xb8, 0x02, 0x88,
-  0x9a, 0x04, 0xb6, 0xb8, 0x02, 0x8b, 0x3c, 0x90, 0x00, 0xb5, 0xe5, 0xc2, 0x90, 0x01,
-  0xa2, 0x14, 0x78, 0x8b, 0xb4, 0xf6, 0x1e, 0xa2, 0x3a, 0xce, 0x88, 0x9c, 0x00, 0x74,
-  0xa2, 0x3c, 0xce, 0x88, 0x9d, 0x00, 0x7b, 0xa2, 0x3a, 0xce, 0x88, 0x9c, 0x00, 0x3c,
-  0xa2, 0x58, 0xce, 0x88, 0x9c, 0x00, 0x3c, 0xb5, 0xf6, 0xda, 0xb6, 0xb8, 0x02, 0x88,
-  0x9a, 0x01, 0xb6, 0xb8, 0x02, 0x8b, 0x3c, 0xa2, 0x39, 0xce, 0x88, 0x9c, 0x00, 0x48,
-  0xa2, 0x5e, 0xce, 0x88, 0x9c, 0x00, 0x41, 0x3c, 0xa2, 0x0a, 0xce, 0xa8, 0x05, 0xb5,
-  0xe5, 0x78, 0x90, 0x01, 0xa2, 0x14, 0x78, 0x8b, 0xb4, 0xf5, 0xd4, 0x90, 0x00, 0xb5,
-  0xe5, 0x6a, 0x90, 0x01, 0xa2, 0x14, 0x78, 0x8b, 0x90, 0x01, 0xb5, 0xe5, 0x5f, 0x90,
-  0x01, 0xa2, 0x14, 0x78, 0x8b, 0xb4, 0xf5, 0xbb, 0xa2, 0x3a, 0xce, 0x88, 0x9c, 0x00,
-  0x7f, 0xa2, 0x3c, 0xce, 0x88, 0x9d, 0x00, 0x95, 0x26, 0xa2, 0x3a, 0xce, 0x88, 0x9c,
-  0x00, 0x3c, 0xa2, 0x57, 0xce, 0x88, 0x9c, 0x00, 0x3c, 0x90, 0x00, 0xb5, 0xe5, 0x34,
-  0x90, 0x01, 0xa2, 0x14, 0x78, 0x8b, 0x90, 0x01, 0xb5, 0xe5, 0x29, 0x90, 0x01, 0xa2,
-  0x14, 0x78, 0x8b, 0xb4, 0xf5, 0xaf, 0xa2, 0x56, 0xce, 0xa8, 0x9c, 0x00, 0x4e, 0x9c,
-  0x01, 0x94, 0x28, 0x9c, 0x02, 0xb4, 0x01, 0x19, 0x9c, 0x04, 0x94, 0x9a, 0x3c, 0xa2,
-  0x4a, 0xce, 0x88, 0x9c, 0x00, 0x43, 0xb4, 0xf7, 0x9e, 0xa2, 0x4b, 0xce, 0x88, 0x9c,
-  0x00, 0x43, 0xb4, 0xf7, 0xdd, 0xa2, 0x4c, 0xce, 0x88, 0x9c, 0x00, 0x3c, 0xb4, 0xf8,
-  0x1c, 0xa2, 0x4a, 0xce, 0x88, 0xa2, 0x4b, 0xce, 0xda, 0x9c, 0x00, 0x94, 0x51, 0xa2,
-  0x4b, 0xce, 0x88, 0x9c, 0x00, 0x3c, 0xb7, 0x04, 0x02, 0x02, 0xb7, 0x00, 0x00, 0x04,
-  0xb7, 0x00, 0x00, 0x06, 0xa2, 0x22, 0xce, 0x88, 0xb5, 0xe6, 0x4b, 0x90, 0x00, 0xb5,
-  0xe4, 0xc2, 0x90, 0x01, 0xa2, 0x14, 0x78, 0x8b, 0xb5, 0xf7, 0x9f, 0xa2, 0x2c, 0x72,
-  0xa8, 0x05, 0xa2, 0x2c, 0x72, 0xab, 0x04, 0x9c, 0x00, 0xb5, 0x08, 0x9f, 0xa2, 0x2f,
-  0xce, 0x88, 0x9c, 0x00, 0x3c, 0xa2, 0x1a, 0x72, 0xa8, 0x05, 0xa2, 0x1a, 0x72, 0xab,
-  0xa2, 0x1c, 0x72, 0xa8, 0x04, 0xa2, 0x1c, 0x72, 0xab, 0x3c, 0x90, 0x00, 0xb5, 0xe4,
-  0x8b, 0x90, 0x01, 0xa2, 0x14, 0x78, 0x8b, 0xb5, 0xf6, 0xc8, 0xa2, 0x2c, 0x72, 0xa8,
-  0x05, 0xa2, 0x2c, 0x72, 0xab, 0x04, 0x9c, 0x00, 0xb4, 0x08, 0x68, 0x3c, 0xa2, 0x4a,
-  0xce, 0x88, 0xa2, 0x4b, 0xce, 0xda, 0x9c, 0x00, 0x94, 0x51, 0xa2, 0x4a, 0xce, 0x88,
-  0x9c, 0x00, 0x3c, 0xb7, 0x04, 0x02, 0x02, 0xb7, 0x00, 0x00, 0x04, 0xb7, 0x00, 0x00,
-  0x06, 0xa2, 0x22, 0xce, 0x88, 0xb5, 0xe5, 0xd0, 0x90, 0x01, 0xb5, 0xe4, 0x47, 0x90,
-  0x01, 0xa2, 0x14, 0x78, 0x8b, 0xb5, 0xf6, 0xdb, 0xa2, 0x2e, 0x72, 0xa8, 0x05, 0xa2,
-  0x2e, 0x72, 0xab, 0x04, 0x9c, 0x00, 0xb5, 0x08, 0x24, 0xa2, 0x2f, 0xce, 0x88, 0x9c,
-  0x00, 0x3c, 0xa2, 0x1a, 0x72, 0xa8, 0x04, 0xa2, 0x1a, 0x72, 0xab, 0xa2, 0x1c, 0x72,
-  0xa8, 0x05, 0xa2, 0x1c, 0x72, 0xab, 0x3c, 0x90, 0x01, 0xb5, 0xe4, 0x10, 0x90, 0x01,
-  0xa2, 0x14, 0x78, 0x8b, 0xb5, 0xf6, 0xed, 0xa2, 0x2e, 0x72, 0xa8, 0x05, 0xa2, 0x2e,
-  0x72, 0xab, 0x04, 0x9c, 0x00, 0xb4, 0x07, 0xed, 0x3c, 0xa2, 0x4c, 0xce, 0x88, 0x9d,
-  0x00, 0x3c, 0xa2, 0x06, 0xce, 0xa8, 0x05, 0xb5, 0xe3, 0xe8, 0x90, 0x01, 0xa2, 0x14,
-  0x78, 0x8b, 0xb4, 0xf6, 0x25, 0x00, 0xb6, 0xb8, 0x02, 0x8b, 0xb6, 0xb8, 0x04, 0xab,
-  0xa2, 0x06, 0xce, 0xa8, 0x9c, 0x00, 0xb4, 0x05, 0x1e, 0x9c, 0x01, 0xb4, 0x05, 0x19,
-  0x9c, 0x02, 0xb4, 0x03, 0x4d, 0x9c, 0x03, 0xb4, 0x06, 0x18, 0xa2, 0x06, 0xce, 0xa8,
-  0x9c, 0x00, 0x4e, 0x9c, 0x01, 0x4b, 0x9c, 0x02, 0xb4, 0x02, 0x1a, 0x9c, 0x03, 0xb4,
-  0x02, 0xa1, 0x3c, 0xa2, 0x26, 0x72, 0x88, 0x9c, 0x00, 0x59, 0xa2, 0x3a, 0x0c, 0x88,
-  0x9c, 0x00, 0x52, 0x90, 0x01, 0xa2, 0x56, 0x0a, 0x8b, 0x90, 0x00, 0xa2, 0x58, 0x0a,
-  0x8b, 0xa2, 0x57, 0x0a, 0x8b, 0x94, 0xa2, 0xa2, 0x5b, 0x0c, 0x88, 0x9c, 0x00, 0x5b,
-  0xa2, 0x3a, 0x0c, 0x88, 0x9c, 0x00, 0x54, 0x94, 0x2f, 0x90, 0x00, 0xa2, 0x56, 0x0a,
-  0x8b, 0xa2, 0x57, 0x0a, 0x8b, 0x90, 0x01, 0xa2, 0x58, 0x0a, 0x8b, 0x94, 0x80, 0xa2,
-  0x5b, 0x0a, 0x88, 0x9d, 0x00, 0x78, 0xa2, 0x5f, 0x0a, 0x88, 0x9c, 0x00, 0x4f, 0xa2,
-  0x5f, 0x0c, 0x88, 0x9c, 0x00, 0x94, 0x20, 0xa2, 0x3a, 0x0c, 0x88, 0x9c, 0x00, 0x59,
-  0xa2, 0x5b, 0x0c, 0x88, 0x9c, 0x00, 0x48, 0xa2, 0x3a, 0x0c, 0x88, 0x9c, 0x00, 0x41,
-  0x5c, 0xa2, 0x5d, 0x0a, 0x88, 0x9d, 0x00, 0x94, 0x3b, 0x94, 0x22, 0xa2, 0x5c, 0x0c,
-  0x88, 0x9c, 0x00, 0x95, 0x4e, 0xa2, 0x3a, 0x0c, 0x88, 0x9c, 0x00, 0x95, 0x56, 0x95,
-  0x29, 0x90, 0x00, 0xa2, 0x56, 0x0a, 0x8b, 0xa2, 0x58, 0x0a, 0x8b, 0xa2, 0x57, 0x0a,
-  0x8b, 0x94, 0x28, 0xa2, 0x61, 0x0a, 0x88, 0x9c, 0x00, 0x76, 0xa2, 0x5f, 0x0c, 0x88,
-  0x9c, 0x00, 0x49, 0xa2, 0x3a, 0x0c, 0x88, 0x9c, 0x00, 0x42, 0x95, 0x25, 0x90, 0x00,
-  0xa2, 0x56, 0x0a, 0x8b, 0xa2, 0x58, 0x0a, 0x8b, 0x90, 0x01, 0xa2, 0x57, 0x0a, 0x8b,
-  0x40, 0xa2, 0x3c, 0x0a, 0x88, 0xab, 0x0e, 0xa2, 0x56, 0x0a, 0x88, 0xa2, 0x57, 0x0a,
-  0xda, 0xa2, 0x58, 0x0a, 0xda, 0x9c, 0x00, 0x94, 0x3b, 0x90, 0x00, 0xa2, 0x3c, 0x0a,
-  0x8b, 0x96, 0x0e, 0xfc, 0x51, 0xb7, 0x02, 0x13, 0x02, 0xab, 0x04, 0xb7, 0x00, 0x00,
-  0x06, 0xa2, 0x22, 0x0a, 0x88, 0xb5, 0xe4, 0x3a, 0xa2, 0x26, 0x72, 0x88, 0x9c, 0x00,
-  0x5d, 0xa2, 0x3a, 0x0a, 0x88, 0x9c, 0x00, 0x56, 0x90, 0x01, 0xa2, 0x56, 0x0c, 0x8b,
-  0x90, 0x00, 0xa2, 0x58, 0x0c, 0x8b, 0xa2, 0x57, 0x0c, 0x8b, 0x94, 0x90, 0x90, 0x01,
-  0x95, 0x3b, 0xa2, 0x5b, 0x0c, 0x88, 0x9d, 0x00, 0x58, 0xa2, 0x5f, 0x0c, 0x88, 0x9c,
-  0x00, 0x94, 0x30, 0xa2, 0x5b, 0x0a, 0x88, 0x9c, 0x00, 0x5b, 0xa2, 0x3a, 0x0a, 0x88,
-  0x9c, 0x00, 0x54, 0x94, 0x20, 0x90, 0x00, 0xa2, 0x56, 0x0c, 0x8b, 0xa2, 0x57, 0x0c,
-  0x8b, 0x90, 0x01, 0xa2, 0x58, 0x0c, 0x8b, 0x94, 0x5b, 0xa2, 0x5d, 0x0a, 0x88, 0x9c,
-  0x00, 0x78, 0xa2, 0x3a, 0x0a, 0x88, 0x9c, 0x00, 0x7f, 0xa2, 0x3a, 0x0a, 0x88, 0x9c,
-  0x00, 0x48, 0xa2, 0x5b, 0x0a, 0x88, 0x9c, 0x00, 0x41, 0x5e, 0xa2, 0x5c, 0x0c, 0x88,
-  0x9d, 0x00, 0x94, 0x25, 0xa2, 0x60, 0x0c, 0x88, 0x9c, 0x00, 0x4f, 0xa2, 0x5f, 0x0a,
-  0x88, 0x9c, 0x00, 0x57, 0xa2, 0x3a, 0x0a, 0x88, 0x9c, 0x00, 0x50, 0x40, 0x90, 0x00,
-  0xa2, 0x56, 0x0c, 0x8b, 0xa2, 0x58, 0x0c, 0x8b, 0xa2, 0x57, 0x0c, 0x8b, 0x51, 0x90,
-  0x00, 0xa2, 0x56, 0x0c, 0x8b, 0xa2, 0x58, 0x0c, 0x8b, 0x90, 0x01, 0xa2, 0x57, 0x0c,
-  0x8b, 0x40, 0xa2, 0x3c, 0x0c, 0x88, 0xab, 0x0e, 0xa2, 0x56, 0x0c, 0x88, 0xa2, 0x57,
-  0x0c, 0xda, 0xa2, 0x58, 0x0c, 0xda, 0x9c, 0x00, 0x94, 0x57, 0x90, 0x00, 0xa2, 0x3c,
-  0x0c, 0x8b, 0x96, 0x0e, 0xfc, 0x51, 0xb7, 0x02, 0x13, 0x02, 0xab, 0x04, 0xb7, 0x00,
-  0x00, 0x06, 0xa2, 0x22, 0x0c, 0x88, 0xb5, 0xe3, 0x59, 0xa2, 0x66, 0x0a, 0xa8, 0xaf,
-  0xc8, 0xa2, 0x66, 0x0c, 0xa8, 0xaf, 0xc8, 0xac, 0x0a, 0xce, 0xac, 0x0c, 0xcc, 0xb5,
-  0xf6, 0x14, 0x3f, 0xc8, 0xa2, 0x66, 0x0c, 0xfc, 0x58, 0x3f, 0xc8, 0xac, 0x0a, 0xce,
-  0xac, 0x0c, 0xcc, 0xb5, 0xf5, 0x1b, 0xb5, 0xf1, 0xed, 0xa2, 0x22, 0x72, 0xa8, 0xb5,
-  0x10, 0x93, 0xb4, 0xf1, 0x41, 0x3f, 0xc8, 0xa2, 0x66, 0x0a, 0xfc, 0x3c, 0x7d, 0x90,
-  0x01, 0x95, 0x57, 0xa2, 0x5b, 0xce, 0x88, 0xa2, 0x5f, 0xce, 0xda, 0x9c, 0x00, 0x4e,
-  0x90, 0x01, 0xa2, 0x58, 0xce, 0x8b, 0x90, 0x00, 0xa2, 0x57, 0xce, 0x8b, 0x94, 0x22,
-  0xa2, 0x5c, 0xce, 0x88, 0xa2, 0x60, 0xce, 0xda, 0x9c, 0x00, 0x4d, 0x90, 0x00, 0xa2,
-  0x58, 0xce, 0x8b, 0x90, 0x01, 0xa2, 0x57, 0xce, 0x8b, 0x4a, 0x90, 0x00, 0xa2, 0x58,
-  0xce, 0x8b, 0xa2, 0x57, 0xce, 0x8b, 0xa2, 0x3c, 0xce, 0x88, 0xab, 0x0e, 0xa2, 0x57,
-  0xce, 0x88, 0xa2, 0x58, 0xce, 0xda, 0x9c, 0x00, 0x94, 0x3b, 0x90, 0x00, 0xa2, 0x3c,
-  0xce, 0x8b, 0x96, 0x0e, 0xfc, 0x51, 0xb7, 0x02, 0x13, 0x02, 0xab, 0x04, 0xb7, 0x00,
-  0x00, 0x06, 0xa2, 0x22, 0xce, 0x88, 0xb5, 0xe2, 0xb1, 0xa2, 0x66, 0xce, 0xa8, 0xaf,
-  0xc8, 0xb5, 0xfa, 0xed, 0x3f, 0xc8, 0xa2, 0x66, 0xce, 0xfc, 0x3c, 0xb5, 0xf5, 0x19,
-  0xb5, 0xf1, 0x59, 0xa2, 0x22, 0x72, 0xa8, 0xb5, 0x0f, 0xff, 0xb4, 0xf0, 0xad, 0x90,
-  0x01, 0x95, 0x3b, 0xa2, 0x5c, 0xce, 0x88, 0x9d, 0x00, 0x4e, 0xa2, 0x60, 0xce, 0x88,
-  0x9c, 0x00, 0x55, 0xa2, 0x5d, 0xce, 0x88, 0x9d, 0x00, 0x4e, 0x90, 0x01, 0xa2, 0x59,
-  0xce, 0x8b, 0x90, 0x00, 0xa2, 0x5a, 0xce, 0x8b, 0x94, 0x22, 0xa2, 0x5d, 0xce, 0x88,
-  0xa2, 0x61, 0xce, 0xda, 0x9c, 0x00, 0x4d, 0x90, 0x00, 0xa2, 0x59, 0xce, 0x8b, 0x90,
-  0x01, 0xa2, 0x5a, 0xce, 0x8b, 0x4a, 0x90, 0x00, 0xa2, 0x59, 0xce, 0x8b, 0xa2, 0x5a,
-  0xce, 0x8b, 0xa2, 0x3c, 0xce, 0x88, 0xab, 0x0e, 0xa2, 0x59, 0xce, 0x88, 0xa2, 0x5a,
-  0xce, 0xda, 0x9c, 0x00, 0x94, 0x38, 0x90, 0x00, 0xa2, 0x3c, 0xce, 0x8b, 0x96, 0x0e,
-  0xfc, 0x51, 0xb7, 0x02, 0x13, 0x02, 0xab, 0x04, 0xb7, 0x00, 0x00, 0x06, 0xa2, 0x22,
-  0xce, 0x88, 0xb5, 0xe2, 0x1b, 0xa2, 0x66, 0xce, 0xa8, 0xaf, 0xc8, 0xb5, 0xf9, 0x09,
-  0x3f, 0xc8, 0xa2, 0x66, 0xce, 0xfc, 0x3c, 0xb5, 0xf0, 0xc6, 0xa2, 0x22, 0xce, 0x88,
-  0xb5, 0x05, 0x95, 0xb4, 0xf0, 0x1a, 0x90, 0x01, 0x95, 0x38, 0x90, 0x00, 0xa2, 0x26,
-  0x72, 0x8b, 0xa2, 0x2c, 0x72, 0xa8, 0x9c, 0x00, 0xb4, 0x01, 0x9c, 0x90, 0x00, 0xa2,
-  0x24, 0x72, 0x8b, 0xa2, 0x2e, 0x72, 0xa8, 0x9c, 0x00, 0xb4, 0x01, 0x9b, 0x90, 0x00,
-  0xa2, 0x25, 0x72, 0x8b, 0xa1, 0xce, 0xb8, 0x0a, 0xab, 0x30, 0x0b, 0x30, 0x4f, 0x30,
-  0x93, 0x30, 0xc5, 0x31, 0x5f, 0xb4, 0xfc, 0x82, 0xaf, 0xce, 0xa4, 0xb8, 0x0a, 0xce,
-  0xab, 0xa2, 0x17, 0xce, 0x88, 0x99, 0x01, 0x9c, 0x00, 0x94, 0x32, 0xa2, 0x17, 0xce,
-  0x88, 0x99, 0x02, 0x9c, 0x00, 0x94, 0x28, 0xa8, 0xce, 0xb8, 0x00, 0x13, 0xa2, 0x29,
-  0xce, 0xd8, 0xad, 0xc8, 0x88, 0x99, 0x40, 0x9c, 0x00, 0x57, 0xa2, 0x24, 0x72, 0x88,
-  0x9c, 0x00, 0x47, 0xa2, 0x25, 0x72, 0x88, 0x9d, 0x00, 0x49, 0x90, 0x01, 0xa2, 0x5b,
-  0xce, 0x8b, 0x3f, 0xce, 0x3c, 0x90, 0x00, 0x69, 0xaf, 0xce, 0xa4, 0xb8, 0x0a, 0xce,
-  0xab, 0xa2, 0x17, 0xce, 0x88, 0x99, 0x01, 0x9c, 0x00, 0x94, 0x32, 0xa2, 0x17, 0xce,
-  0x88, 0x99, 0x02, 0x9c, 0x00, 0x94, 0x28, 0xa8, 0xce, 0xb8, 0x00, 0x13, 0xa2, 0x29,
-  0xce, 0xd8, 0xad, 0xc8, 0x88, 0x99, 0x08, 0x9c, 0x00, 0x57, 0xa2, 0x24, 0x72, 0x88,
-  0x9c, 0x00, 0x47, 0xa2, 0x25, 0x72, 0x88, 0x9d, 0x00, 0x49, 0x90, 0x01, 0xa2, 0x5f,
-  0xce, 0x8b, 0x3f, 0xce, 0x3c, 0x90, 0x00, 0x69, 0xaf, 0xce, 0xa4, 0xb8, 0x0a, 0xce,
-  0xab, 0xa2, 0x17, 0xce, 0x88, 0x99, 0x01, 0x9c, 0x00, 0x5b, 0xa8, 0xce, 0xb8, 0x00,
-  0x13, 0xa2, 0x29, 0xce, 0xd8, 0xad, 0xc8, 0x88, 0x99, 0x20, 0x9c, 0x00, 0x4a, 0xa2,
-  0x24, 0x72, 0x88, 0x9d, 0x00, 0x43, 0x90, 0x01, 0x42, 0x90, 0x00, 0xa2, 0x5c, 0xce,
-  0x8b, 0x3f, 0xce, 0x3c, 0xaf, 0xce, 0xa4, 0xb8, 0x0a, 0xce, 0xab, 0xa2, 0x17, 0xce,
-  0x88, 0x99, 0x01, 0x9c, 0x00, 0x5b, 0xa8, 0xce, 0xb8, 0x00, 0x13, 0xa2, 0x29, 0xce,
-  0xd8, 0xad, 0xc8, 0x88, 0x99, 0x04, 0x9c, 0x00, 0x4a, 0xa2, 0x24, 0x72, 0x88, 0x9d,
-  0x00, 0x43, 0x90, 0x01, 0x42, 0x90, 0x00, 0xa2, 0x60, 0xce, 0x8b, 0x3f, 0xce, 0x3c,
-  0xaf, 0xce, 0xa4, 0xb8, 0x0a, 0xce, 0xab, 0xa2, 0x17, 0xce, 0x88, 0x99, 0x02, 0x9c,
-  0x00, 0x5b, 0xa8, 0xce, 0xb8, 0x00, 0x13, 0xa2, 0x29, 0xce, 0xd8, 0xad, 0xc8, 0x88,
-  0x99, 0x10, 0x9c, 0x00, 0x4a, 0xa2, 0x25, 0x72, 0x88, 0x9d, 0x00, 0x43, 0x90, 0x01,
-  0x42, 0x90, 0x00, 0xa2, 0x5d, 0xce, 0x8b, 0x3f, 0xce, 0x3c, 0xaf, 0xce, 0xa4, 0xb8,
-  0x0a, 0xce, 0xab, 0xa2, 0x17, 0xce, 0x88, 0x99, 0x02, 0x9c, 0x00, 0x5b, 0xa8, 0xce,
-  0xb8, 0x00, 0x13, 0xa2, 0x29, 0xce, 0xd8, 0xad, 0xc8, 0x88, 0x99, 0x02, 0x9c, 0x00,
-  0x4a, 0xa2, 0x25, 0x72, 0x88, 0x9d, 0x00, 0x43, 0x90, 0x01, 0x42, 0x90, 0x00, 0xa2,
-  0x61, 0xce, 0x8b, 0x3f, 0xce, 0x3c, 0xaf, 0xce, 0xa4, 0xb8, 0x0a, 0xce, 0xab, 0xa2,
-  0x17, 0xce, 0x88, 0x99, 0x04, 0x9c, 0x00, 0x42, 0x90, 0x01, 0xa2, 0x5e, 0xce, 0x8b,
-  0x3f, 0xce, 0x3c, 0xa2, 0x28, 0x72, 0xa8, 0x9d, 0x00, 0xb4, 0xfe, 0x5b, 0x90, 0x01,
-  0xb4, 0xfe, 0x58, 0xa2, 0x2a, 0x72, 0xa8, 0x9d, 0x00, 0xb4, 0xfe, 0x5c, 0x90, 0x01,
-  0xb4, 0xfe, 0x59, 0x9c, 0x00, 0x4e, 0xac, 0xce, 0x0c, 0xa2, 0x10, 0x72, 0x88, 0xb5,
-  0xde, 0x8e, 0xac, 0x76, 0x0a, 0x4d, 0xac, 0xce, 0x0a, 0xa2, 0x11, 0x72, 0x88, 0xb5,
-  0xde, 0x80, 0xac, 0x76, 0x0c, 0xa2, 0x10, 0x72, 0x88, 0xb5, 0xde, 0x76, 0xa8, 0x76,
-  0xb6, 0xb8, 0x06, 0xab, 0xa2, 0x11, 0x72, 0x88, 0xb5, 0xde, 0x69, 0xa8, 0x76, 0xb6,
-  0xb8, 0x08, 0xab, 0xa2, 0x17, 0x0a, 0x88, 0x99, 0x01, 0x9c, 0x00, 0x94, 0x53, 0xa2,
-  0x17, 0x0c, 0x88, 0x99, 0x01, 0x9c, 0x00, 0x94, 0x49, 0xa2, 0x17, 0x0a, 0x88, 0x99,
-  0x02, 0x9c, 0x00, 0x94, 0x3f, 0xa2, 0x17, 0x0c, 0x88, 0x99, 0x02, 0x9c, 0x00, 0x94,
-  0x35, 0xa2, 0x29, 0x0a, 0x88, 0x9c, 0x02, 0x42, 0x94, 0x2c, 0xa2, 0x29, 0x0c, 0x88,
-  0x9c, 0x02, 0x42, 0x94, 0x23, 0xa8, 0x0a, 0xb8, 0x00, 0x13, 0xb8, 0x00, 0x02, 0xad,
-  0xc8, 0x88, 0x99, 0x80, 0x9c, 0x00, 0x53, 0xa8, 0x0c, 0xb8, 0x00, 0x13, 0xb8, 0x00,
-  0x02, 0xad, 0xc8, 0x88, 0x99, 0x80, 0x9c, 0x00, 0x43, 0x90, 0x01, 0x42, 0x90, 0x00,
-  0xa2, 0x26, 0x72, 0x8b, 0x40, 0xa2, 0x2c, 0x72, 0xa8, 0x9c, 0x00, 0x43, 0x90, 0x00,
-  0x51, 0xa2, 0x28, 0x72, 0xa8, 0x9c, 0x00, 0x41, 0x6a, 0xa2, 0x26, 0x72, 0x88, 0x9d,
-  0x00, 0x71, 0x90, 0x01, 0xa2, 0x24, 0x72, 0x8b, 0xa2, 0x2e, 0x72, 0xa8, 0x9c, 0x00,
-  0x43, 0x90, 0x00, 0x51, 0xa2, 0x2a, 0x72, 0xa8, 0x9c, 0x00, 0x41, 0x6a, 0xa2, 0x26,
-  0x72, 0x88, 0x9d, 0x00, 0x71, 0x90, 0x01, 0xa2, 0x25, 0x72, 0x8b, 0xb6, 0xb8, 0x06,
-  0xa8, 0xb6, 0xb8, 0x0a, 0xab, 0x36, 0x73, 0x36, 0x2f, 0x35, 0xeb, 0x35, 0xb9, 0x35,
-  0x87, 0x35, 0x55, 0x35, 0x23, 0xb6, 0xb8, 0x08, 0xa8, 0xb6, 0xb8, 0x0a, 0xab, 0x36,
-  0x89, 0x36, 0x45, 0x36, 0x01, 0x35, 0xcf, 0x35, 0x9d, 0x35, 0x6b, 0x35, 0x39, 0xb4,
-  0xf9, 0xe8, 0xa2, 0x17, 0xce, 0x88, 0x99, 0x01, 0x9c, 0x00, 0x54, 0xa8, 0xce, 0xb8,
-  0x00, 0x13, 0xa2, 0x29, 0xce, 0xd8, 0xad, 0xc8, 0x88, 0x99, 0x20, 0x9c, 0x00, 0x43,
-  0x90, 0x01, 0x42, 0x90, 0x00, 0xa2, 0x5c, 0xce, 0x8b, 0xa2, 0x17, 0xce, 0x88, 0x99,
-  0x01, 0x9c, 0x00, 0x54, 0xa8, 0xce, 0xb8, 0x00, 0x13, 0xa2, 0x29, 0xce, 0xd8, 0xad,
-  0xc8, 0x88, 0x99, 0x04, 0x9c, 0x00, 0x43, 0x90, 0x01, 0x42, 0x90, 0x00, 0xa2, 0x60,
-  0xce, 0x8b, 0xa2, 0x17, 0xce, 0x88, 0x99, 0x02, 0x9c, 0x00, 0x54, 0xa8, 0xce, 0xb8,
-  0x00, 0x13, 0xa2, 0x29, 0xce, 0xd8, 0xad, 0xc8, 0x88, 0x99, 0x10, 0x9c, 0x00, 0x43,
-  0x90, 0x01, 0x42, 0x90, 0x00, 0xa2, 0x5d, 0xce, 0x8b, 0xa2, 0x17, 0xce, 0x88, 0x99,
-  0x02, 0x9c, 0x00, 0x54, 0xa8, 0xce, 0xb8, 0x00, 0x13, 0xa2, 0x29, 0xce, 0xd8, 0xad,
-  0xc8, 0x88, 0x99, 0x02, 0x9c, 0x00, 0x43, 0x90, 0x01, 0x42, 0x90, 0x00, 0xa2, 0x61,
-  0xce, 0x8b, 0xa2, 0x17, 0xce, 0x88, 0x99, 0x04, 0x9c, 0x00, 0x42, 0x90, 0x01, 0xa2,
-  0x5e, 0xce, 0x8b, 0xb4, 0xf9, 0x4a, 0xa2, 0x1e, 0xce, 0x88, 0x99, 0x01, 0x9c, 0x00,
-  0x4b, 0xa2, 0x08, 0xce, 0x88, 0x99, 0x20, 0x9c, 0x00, 0x42, 0x90, 0x01, 0xa2, 0x4d,
-  0xce, 0x8b, 0xa2, 0x1e, 0xce, 0x88, 0x99, 0x01, 0x9c, 0x00, 0x4b, 0xa2, 0x08, 0xce,
-  0x88, 0x99, 0x04, 0x9c, 0x00, 0x42, 0x90, 0x01, 0xa2, 0x50, 0xce, 0x8b, 0xa2, 0x1e,
-  0xce, 0x88, 0x99, 0x02, 0x9c, 0x00, 0x4b, 0xa2, 0x08, 0xce, 0x88, 0x99, 0x10, 0x9c,
-  0x00, 0x42, 0x90, 0x01, 0xa2, 0x4e, 0xce, 0x8b, 0xa2, 0x1e, 0xce, 0x88, 0x99, 0x02,
-  0x9c, 0x00, 0x4b, 0xa2, 0x08, 0xce, 0x88, 0x99, 0x02, 0x9c, 0x00, 0x42, 0x90, 0x01,
-  0xa2, 0x51, 0xce, 0x8b, 0xa2, 0x1e, 0xce, 0x88, 0x99, 0x04, 0x9c, 0x00, 0x4b, 0xa2,
-  0x08, 0xce, 0x88, 0x99, 0x01, 0x9c, 0x00, 0x42, 0x90, 0x01, 0xa2, 0x4f, 0xce, 0x8b,
-  0xa2, 0x28, 0xce, 0x88, 0x9c, 0x00, 0x57, 0xa2, 0x4d, 0xce, 0x88, 0x9d, 0x00, 0x94,
-  0x62, 0xa2, 0x50, 0xce, 0x88, 0x9c, 0x00, 0x48, 0xa2, 0x4e, 0xce, 0x88, 0x9c, 0x00,
-  0x94, 0x53, 0xa2, 0x28, 0xce, 0x88, 0x9c, 0x00, 0x5d, 0xa2, 0x4e, 0xce, 0x88, 0xa2,
-  0x51, 0xce, 0xda, 0x9c, 0x00, 0x52, 0x90, 0x01, 0xa2, 0x4b, 0xce, 0x8b, 0x90, 0x00,
-  0xa2, 0x4a, 0xce, 0x8b, 0xa2, 0x4c, 0xce, 0x8b, 0x94, 0x40, 0xa2, 0x28, 0xce, 0x88,
-  0x9c, 0x00, 0x59, 0xa2, 0x4f, 0xce, 0x88, 0x9c, 0x00, 0x52, 0x90, 0x00, 0xa2, 0x4a,
-  0xce, 0x8b, 0xa2, 0x4b, 0xce, 0x8b, 0x90, 0x01, 0xa2, 0x4c, 0xce, 0x8b, 0x94, 0x20,
-  0x90, 0x00, 0xa2, 0x4a, 0xce, 0x8b, 0xa2, 0x4b, 0xce, 0x8b, 0xa2, 0x4c, 0xce, 0x8b,
-  0x51, 0x90, 0x01, 0xa2, 0x4a, 0xce, 0x8b, 0x90, 0x00, 0xa2, 0x4b, 0xce, 0x8b, 0xa2,
-  0x4c, 0xce, 0x8b, 0x40, 0xb4, 0xf6, 0xeb, 0xa2, 0x0a, 0x72, 0x88, 0x9c, 0x01, 0x44,
-  0x9c, 0x02, 0x51, 0x3c, 0xa2, 0x12, 0x72, 0x88, 0x9c, 0x02, 0x3c, 0xb5, 0xdb, 0xe2,
-  0xac, 0x76, 0xce, 0xb4, 0xf8, 0x11, 0xa2, 0x10, 0x72, 0x88, 0x9c, 0x02, 0x49, 0xb5,
-  0xdb, 0xd2, 0xac, 0x76, 0xce, 0xb4, 0xf8, 0x01, 0xa2, 0x11, 0x72, 0x88, 0x9c, 0x02,
-  0x3c, 0xb5, 0xdb, 0xc2, 0xac, 0x76, 0xce, 0xb4, 0xf7, 0xf1, 0x00, 0xb6, 0xb8, 0x02,
-  0x8b, 0xb6, 0xb8, 0x04, 0xab, 0xa8, 0x46, 0xb5, 0xdb, 0xae, 0xa8, 0x44, 0xbc, 0x03,
-  0x02, 0x58, 0xbc, 0x03, 0x01, 0x5b, 0xa2, 0x06, 0x76, 0xa8, 0x9c, 0x03, 0x5c, 0x9c,
-  0x02, 0x94, 0x38, 0x9c, 0x00, 0x94, 0x57, 0x9c, 0x01, 0x94, 0x53, 0x3c, 0xa8, 0x48,
-  0xa2, 0x3a, 0x76, 0x8b, 0x7a, 0xa8, 0x48, 0xa2, 0x39, 0x76, 0x8b, 0x95, 0x21, 0xac,
-  0x76, 0xce, 0xa2, 0x66, 0xce, 0xa8, 0xaf, 0xc8, 0xb5, 0xf4, 0x04, 0x3f, 0xc8, 0xa2,
-  0x66, 0xce, 0xfc, 0x3c, 0xb5, 0xeb, 0xc1, 0xac, 0x76, 0xce, 0xa8, 0x46, 0x30, 0x90,
-  0xb4, 0xeb, 0x15, 0xac, 0x76, 0xce, 0xa2, 0x66, 0xce, 0xa8, 0xaf, 0xc8, 0xb5, 0xf5,
-  0x32, 0x3f, 0xc8, 0xa2, 0x66, 0xce, 0xfc, 0x3c, 0xb5, 0xef, 0x5e, 0xb5, 0xeb, 0x9e,
-  0xa2, 0x22, 0x72, 0xa8, 0xb5, 0x0a, 0x44, 0xb4, 0xea, 0xf2, 0xa8, 0x44, 0xbc, 0x03,
-  0x02, 0x94, 0x51, 0xa2, 0x06, 0x76, 0xa8, 0x9c, 0x00, 0x94, 0x4f, 0xac, 0x76, 0xcc,
-  0xa2, 0x10, 0x72, 0x88, 0xb5, 0xdb, 0x25, 0xac, 0x76, 0xce, 0x43, 0xac, 0x76, 0xcc,
-  0xa2, 0x66, 0xce, 0xa8, 0xaf, 0xc8, 0xa2, 0x66, 0xcc, 0xa8, 0xaf, 0xc8, 0xaf, 0xce,
-  0xaf, 0xcc, 0xb5, 0xef, 0x73, 0x3f, 0xcc, 0x3f, 0xce, 0x3f, 0xc8, 0xa2, 0x66, 0xce,
-  0xfc, 0x52, 0x3f, 0xc8, 0xb5, 0xee, 0x7c, 0xb5, 0xeb, 0x4e, 0xa2, 0x22, 0x72, 0xa8,
-  0xb5, 0x09, 0xf4, 0xb4, 0xea, 0xa2, 0x3f, 0xc8, 0xa2, 0x66, 0xcc, 0xfc, 0x3c, 0x77,
-  0xac, 0x76, 0xce, 0xb4, 0xf7, 0x15, 0xac, 0x76, 0xce, 0xa2, 0x11, 0x72, 0x88, 0xb5,
-  0xda, 0xd6, 0x95, 0x4b, 0xaf, 0xc8, 0xa2, 0x66, 0xce, 0xa8, 0xb5, 0x09, 0x9c, 0xa2,
-  0x30, 0x72, 0x88, 0x3f, 0xca, 0x9c, 0x00, 0x3c, 0xb7, 0x01, 0x07, 0x02, 0xb7, 0x00,
-  0x00, 0x04, 0xb7, 0x00, 0x00, 0x06, 0xa8, 0xca, 0xb4, 0xdc, 0x49, 0x00, 0x90, 0x00,
-  0xf6, 0x90, 0x00, 0xa2, 0x02, 0xce, 0x8b, 0xa2, 0x04, 0xce, 0xab, 0x90, 0x03, 0xa2,
-  0x06, 0xce, 0xab, 0x90, 0x00, 0xa2, 0x08, 0xce, 0x8b, 0x90, 0x04, 0xa2, 0x20, 0xce,
-  0xab, 0xb7, 0x00, 0x00, 0x0a, 0xac, 0xce, 0xcc, 0x82, 0x58, 0xcc, 0xf8, 0xa8, 0x0a,
-  0x96, 0x7e, 0xdc, 0x5a, 0xa2, 0x22, 0xce, 0x88, 0xc6, 0xa2, 0x02, 0xcc, 0x8b, 0x90,
-  0x02, 0xa2, 0x01, 0xcc, 0x8b, 0xa2, 0x03, 0xcc, 0x8b, 0x82, 0x04, 0xcc, 0xf8, 0xa9,
-  0x0a, 0x7f, 0x00, 0xa2, 0x26, 0xce, 0x8b, 0xa2, 0x27, 0xce, 0x8b, 0xa2, 0x28, 0xce,
-  0x8b, 0x90, 0x00, 0xa2, 0x3a, 0xce, 0xab, 0x90, 0x00, 0xa2, 0x24, 0xce, 0xab, 0x3c,
-  0x00, 0xa2, 0x0a, 0xce, 0xab, 0xa2, 0x0c, 0xce, 0xab, 0xa2, 0x0e, 0xce, 0xab, 0xa2,
-  0x10, 0xce, 0xab, 0xac, 0xce, 0xcc, 0x82, 0x12, 0xcc, 0xf8, 0xb1, 0x43, 0xb1, 0x33,
-  0x11, 0xac, 0xce, 0xcc, 0x82, 0x18, 0xcc, 0xf8, 0xb1, 0x43, 0xb1, 0x33, 0x05, 0x90,
-  0x00, 0xa2, 0x1e, 0xce, 0x8b, 0x00, 0xa2, 0x29, 0xce, 0x8b, 0xa2, 0x2a, 0xce, 0x8b,
-  0xa2, 0x2b, 0xce, 0x8b, 0xa2, 0x2c, 0xce, 0x8b, 0xa2, 0x2d, 0xce, 0x8b, 0xa2, 0x2e,
-  0xce, 0x8b, 0xa2, 0x30, 0xce, 0x8b, 0xa2, 0x31, 0xce, 0x8b, 0xa2, 0x32, 0xce, 0x8b,
-  0xa2, 0x33, 0xce, 0x8b, 0xa2, 0x34, 0xce, 0xab, 0xa2, 0x36, 0xce, 0xab, 0xa2, 0x38,
-  0xce, 0xab, 0x90, 0x01, 0xa2, 0x2f, 0xce, 0x8b, 0x00, 0xa2, 0x4a, 0xce, 0x8b, 0xa2,
-  0x4b, 0xce, 0x8b, 0xa2, 0x4c, 0xce, 0x8b, 0xa2, 0x4d, 0xce, 0x8b, 0xa2, 0x4e, 0xce,
-  0x8b, 0xa2, 0x4f, 0xce, 0x8b, 0xa2, 0x50, 0xce, 0x8b, 0xa2, 0x51, 0xce, 0x8b, 0xa2,
-  0x54, 0xce, 0xab, 0x90, 0x00, 0xa2, 0x52, 0xce, 0xab, 0x90, 0x00, 0xa2, 0x56, 0xce,
-  0xab, 0x3c, 0x00, 0xf6, 0xa2, 0x02, 0xce, 0xab, 0x90, 0x02, 0xa2, 0x04, 0xce, 0xab,
-  0x90, 0x04, 0xa2, 0x06, 0xce, 0xab, 0x00, 0xa2, 0x08, 0xce, 0xab, 0x90, 0x03, 0xa2,
-  0x0a, 0xce, 0xab, 0x90, 0x00, 0xa2, 0x0c, 0xce, 0x8b, 0x90, 0x00, 0xa2, 0x0e, 0xce,
-  0xab, 0x90, 0x07, 0xa2, 0x10, 0xce, 0x8b, 0x90, 0x08, 0xa2, 0x11, 0xce, 0x8b, 0xac,
-  0xce, 0xcc, 0x82, 0x13, 0xcc, 0xf8, 0x90, 0x00, 0xc6, 0xa2, 0x01, 0xcc, 0x8b, 0xa2,
-  0x02, 0xcc, 0x8b, 0xb7, 0x00, 0x00, 0x0a, 0xac, 0xce, 0xcc, 0x82, 0x1a, 0xcc, 0xf8,
-  0xa8, 0x0a, 0x96, 0x7e, 0xdc, 0x3c, 0xa2, 0x22, 0xce, 0x88, 0xc6, 0xa2, 0x02, 0xcc,
-  0x8b, 0x90, 0x04, 0xa2, 0x01, 0xcc, 0x8b, 0xa2, 0x03, 0xcc, 0x8b, 0x82, 0x04, 0xcc,
-  0xf8, 0xa9, 0x0a, 0x7f, 0x90, 0x00, 0xa2, 0x17, 0xce, 0x8b, 0x90, 0x00, 0xa2, 0x18,
-  0xce, 0x8b, 0x00, 0xa2, 0x24, 0xce, 0xab, 0xa2, 0x26, 0xce, 0xab, 0x90, 0x04, 0xa2,
-  0x28, 0xce, 0x8b, 0x90, 0x00, 0xa2, 0x29, 0xce, 0x8b, 0x90, 0x00, 0xa2, 0x2a, 0xce,
-  0x8b, 0x90, 0x00, 0xa2, 0x2c, 0xce, 0xab, 0x00, 0xa2, 0x2e, 0xce, 0xab, 0xa2, 0x30,
-  0xce, 0xab, 0xa2, 0x32, 0xce, 0xab, 0xa2, 0x34, 0xce, 0x8b, 0xa2, 0x35, 0xce, 0x8b,
-  0xa2, 0x36, 0xce, 0x8b, 0xa2, 0x37, 0xce, 0x8b, 0xa2, 0x38, 0xce, 0x8b, 0xa2, 0x39,
-  0xce, 0x8b, 0xa2, 0x3a, 0xce, 0x8b, 0xa2, 0x3b, 0xce, 0x8b, 0xa2, 0x3c, 0xce, 0x8b,
-  0xa2, 0x3d, 0xce, 0x8b, 0xa2, 0x3e, 0xce, 0x8b, 0xa2, 0x3f, 0xce, 0x8b, 0xa2, 0x40,
-  0xce, 0x8b, 0xa2, 0x41, 0xce, 0x8b, 0xa2, 0x42, 0xce, 0x8b, 0xa2, 0x44, 0xce, 0xab,
-  0xa2, 0x46, 0xce, 0xab, 0xa2, 0x48, 0xce, 0xab, 0xa2, 0x4a, 0xce, 0xab, 0xa2, 0x4c,
-  0xce, 0xab, 0x90, 0x00, 0xa2, 0x4e, 0xce, 0xab, 0x90, 0x00, 0xa2, 0x50, 0xce, 0xab,
-  0x90, 0x00, 0xa2, 0x54, 0xce, 0x8b, 0xa2, 0x55, 0xce, 0x8b, 0xa2, 0x57, 0xce, 0x8b,
-  0xa2, 0x58, 0xce, 0x8b, 0xa2, 0x59, 0xce, 0x8b, 0xa2, 0x5a, 0xce, 0x8b, 0xa2, 0x5b,
-  0xce, 0x8b, 0xa2, 0x5c, 0xce, 0x8b, 0xa2, 0x5d, 0xce, 0x8b, 0xa2, 0x5e, 0xce, 0x8b,
-  0xa2, 0x5f, 0xce, 0x8b, 0xa2, 0x60, 0xce, 0x8b, 0xa2, 0x61, 0xce, 0x8b, 0xa2, 0x64,
-  0xce, 0xab, 0x90, 0x00, 0xa2, 0x62, 0xce, 0xab, 0x90, 0x04, 0xa2, 0x66, 0xce, 0xab,
-  0x00, 0xa2, 0x68, 0xce, 0xab, 0xa2, 0x6a, 0xce, 0xab, 0xa2, 0x6c, 0xce, 0xab, 0xa2,
-  0x6e, 0xce, 0xab, 0xa2, 0x70, 0xce, 0xab, 0xa2, 0x72, 0xce, 0xab, 0xa2, 0x74, 0xce,
-  0x8b, 0x90, 0x00, 0xa2, 0x76, 0xce, 0xab, 0x3c, 0xb0, 0xe4, 0x9c, 0xa2, 0x02, 0x72,
-  0xab, 0x90, 0xa6, 0xa2, 0x04, 0x72, 0xab, 0x90, 0x00, 0xa2, 0x06, 0x72, 0xab, 0xb0,
-  0xff, 0xff, 0xa2, 0x08, 0x72, 0xab, 0xb0, 0xff, 0xff, 0xa2, 0x36, 0x72, 0xab, 0x00,
-  0xa2, 0x0a, 0x72, 0x8b, 0xa2, 0x0b, 0x72, 0x8b, 0xa2, 0x0c, 0x72, 0x8b, 0x90, 0x00,
-  0xa2, 0x0d, 0x72, 0x8b, 0x00, 0xa2, 0x0e, 0x72, 0x8b, 0xa2, 0x0f, 0x72, 0x8b, 0x90,
-  0x02, 0xa2, 0x10, 0x72, 0x8b, 0xa2, 0x11, 0x72, 0x8b, 0xa2, 0x12, 0x72, 0x8b, 0x90,
-  0x01, 0xa2, 0x14, 0x72, 0x8b, 0x90, 0x00, 0xa2, 0x00, 0x72, 0x8b, 0xa2, 0x15, 0x72,
-  0x8b, 0xa2, 0x16, 0x72, 0x8b, 0xa2, 0x18, 0x72, 0x8b, 0xa2, 0x1a, 0x72, 0x8b, 0xa2,
-  0x1c, 0x72, 0x8b, 0x90, 0x02, 0xa2, 0x1e, 0x72, 0x8b, 0x90, 0x00, 0xa2, 0x20, 0x72,
-  0xab, 0x90, 0x00, 0xa2, 0x22, 0x72, 0xab, 0x90, 0x01, 0xa2, 0x24, 0x72, 0x8b, 0xa2,
-  0x25, 0x72, 0x8b, 0x90, 0x00, 0xa2, 0x26, 0x72, 0x8b, 0xa2, 0x27, 0x72, 0x8b, 0xa2,
-  0x28, 0x72, 0xab, 0xa2, 0x2a, 0x72, 0xab, 0xa2, 0x2c, 0x72, 0xab, 0xa2, 0x2e, 0x72,
-  0xab, 0xb7, 0x00, 0x00, 0x0c, 0xa8, 0x0c, 0x9c, 0x01, 0x56, 0xb5, 0xd7, 0x7d, 0xa8,
-  0x0c, 0xa2, 0x22, 0x74, 0x8b, 0xac, 0x74, 0xce, 0x37, 0x28, 0xac, 0x74, 0xce, 0x36,
-  0xc9, 0xa9, 0x0c, 0x7a, 0xb7, 0x00, 0x00, 0x0c, 0xa8, 0x0c, 0x96, 0x7e, 0xdc, 0x94,
-  0x34, 0xb5, 0xd7, 0x84, 0xa8, 0x0c, 0xa2, 0x10, 0x78, 0xab, 0x00, 0xa2, 0x00, 0x78,
-  0xab, 0xa2, 0x02, 0x78, 0xab, 0xa2, 0x04, 0x78, 0xab, 0xa2, 0x06, 0x78, 0xab, 0xa2,
-  0x08, 0x78, 0xab, 0xa2, 0x0a, 0x78, 0xab, 0xa2, 0x0c, 0x78, 0xab, 0xa2, 0x0e, 0x78,
-  0xab, 0x90, 0x00, 0xa2, 0x12, 0x78, 0xab, 0xa9, 0x0c, 0x95, 0x39, 0xb7, 0x00, 0x00,
-  0x0c, 0xa8, 0x0c, 0x9c, 0x03, 0x56, 0xb5, 0xd7, 0x33, 0xa8, 0x0c, 0xa2, 0x22, 0x76,
-  0x8b, 0xac, 0x76, 0xce, 0x36, 0x86, 0xac, 0x76, 0xce, 0x36, 0x19, 0xa9, 0x0c, 0x7a,
-  0x00, 0x3c, 0xad, 0xca, 0x88, 0xc6, 0xa9, 0xca, 0xa9, 0xcc, 0xad, 0xca, 0x88, 0xc6,
-  0xa9, 0xca, 0xa9, 0xcc, 0xad, 0xca, 0x88, 0xc6, 0xa9, 0xca, 0xa9, 0xcc, 0xad, 0xca,
-  0x88, 0xc6, 0xa9, 0xca, 0xa9, 0xcc, 0xad, 0xca, 0x88, 0xc6, 0xa9, 0xca, 0xa9, 0xcc,
-  0xad, 0xca, 0x88, 0xc6, 0x3c, 0x00, 0xb7, 0x00, 0x00, 0x2e, 0xb7, 0x00, 0x00, 0x30,
-  0xb7, 0x00, 0x00, 0x2c, 0x91, 0x00, 0xb2, 0xce, 0x3e, 0x00, 0xe6, 0x82, 0x0e, 0xcc,
-  0xf8, 0xa9, 0xca, 0x82, 0x10, 0xca, 0xfc, 0x6b, 0x3c, 0x91, 0x00, 0xb2, 0xce, 0x3e,
-  0x00, 0xfc, 0xb6, 0xb8, 0x00, 0xa8, 0xa2, 0x0c, 0xcc, 0xfc, 0x4c, 0x82, 0x0e, 0xcc,
-  0xf8, 0xa9, 0xca, 0x82, 0x10, 0xca, 0xfc, 0x75, 0x3c, 0xa0, 0x30, 0xca, 0xfc, 0x4c,
-  0x00, 0xe6, 0xa2, 0x0c, 0xcc, 0xab, 0xa8, 0x2e, 0x05, 0xab, 0x2e, 0x7c, 0x00, 0xa2,
-  0x06, 0xcc, 0xab, 0x95, 0x22, 0x83, 0x00, 0xb8, 0x00, 0xab, 0x48, 0xb7, 0x00, 0x00,
-  0x02, 0xb7, 0x00, 0x00, 0x04, 0xab, 0x3c, 0xac, 0xce, 0x3e, 0xa8, 0xcc, 0xae, 0xce,
-  0xb7, 0xff, 0xff, 0x38, 0xb7, 0xff, 0xff, 0x3a, 0x82, 0x00, 0x2e, 0xfd, 0x5e, 0x32,
-  0x0f, 0x00, 0xab, 0x34, 0xab, 0x36, 0xb2, 0xce, 0x3e, 0xa0, 0x30, 0xcc, 0xf8, 0x94,
-  0x52, 0xa2, 0x02, 0xcc, 0xa8, 0xab, 0x34, 0xa2, 0x04, 0xcc, 0xa8, 0xab, 0x36, 0x94,
-  0x44, 0x31, 0xfe, 0xab, 0x34, 0xac, 0xcc, 0x36, 0x31, 0xea, 0xb2, 0xce, 0x3e, 0xa0,
-  0x30, 0xcc, 0xf8, 0xa8, 0x36, 0xa2, 0x04, 0xcc, 0xfd, 0x95, 0x24, 0xa2, 0x04, 0xcc,
-  0xfc, 0x41, 0x4e, 0xa8, 0x34, 0xa2, 0x02, 0xcc, 0xfd, 0x95, 0x32, 0xa2, 0x02, 0xcc,
-  0xfc, 0x95, 0x38, 0xa2, 0x02, 0xcc, 0xa8, 0x02, 0x96, 0x34, 0xeb, 0xab, 0x34, 0xa2,
-  0x04, 0xcc, 0xa8, 0x96, 0x36, 0xeb, 0xab, 0x36, 0x96, 0x37, 0x17, 0x95, 0x50, 0x97,
-  0x00, 0x42, 0xa8, 0x02, 0x96, 0x04, 0xfa, 0x9d, 0x00, 0x97, 0x01, 0x42, 0xa8, 0xcc,
-  0xae, 0xce, 0xab, 0xcc, 0x00, 0xe5, 0xab, 0x32, 0x82, 0x00, 0x42, 0xdd, 0x5d, 0xa8,
-  0xcc, 0xae, 0xce, 0xab, 0xcc, 0x91, 0x00, 0xb2, 0xce, 0x3e, 0xb7, 0x00, 0x00, 0x40,
-  0xa8, 0x32, 0x9c, 0x00, 0x94, 0x50, 0xa2, 0x0a, 0xcc, 0xfc, 0x94, 0x39, 0x94, 0x48,
-  0xa8, 0x04, 0x9d, 0x00, 0x95, 0x21, 0x9c, 0x00, 0x41, 0x46, 0xa8, 0x02, 0x9d, 0x00,
-  0x95, 0x2b, 0x90, 0x00, 0xaa, 0xc8, 0x62, 0xa8, 0x2c, 0x04, 0xbd, 0x7f, 0xff, 0x90,
-  0x01, 0xab, 0x2c, 0xab, 0x04, 0xe6, 0xac, 0x06, 0x02, 0x82, 0xff, 0x02, 0xfa, 0xa8,
-  0x3c, 0xb7, 0x00, 0x00, 0x06, 0xb5, 0xd7, 0x44, 0x97, 0x00, 0x42, 0x95, 0x52, 0xc4,
-  0x9c, 0x00, 0x4d, 0x00, 0xc6, 0xa2, 0x06, 0xcc, 0x8b, 0xab, 0x32, 0xa8, 0x2e, 0x05,
-  0xab, 0x2e, 0xc4, 0x9c, 0x00, 0x94, 0x9d, 0x02, 0xa2, 0x02, 0xcc, 0xa8, 0x96, 0x34,
-  0xeb, 0xa2, 0x02, 0xcc, 0xab, 0xa2, 0x04, 0xcc, 0xa8, 0x96, 0x36, 0xeb, 0xa2, 0x04,
-  0xcc, 0xab, 0xa2, 0x05, 0xcc, 0x17, 0x94, 0x38, 0xa2, 0x04, 0xcc, 0xa8, 0x9d, 0x00,
-  0x4e, 0x9c, 0x00, 0x42, 0x94, 0x2c, 0xa2, 0x02, 0xcc, 0xa8, 0x9d, 0x00, 0x42, 0x94,
-  0x23, 0x00, 0xdc, 0x4e, 0xa8, 0x3a, 0xa2, 0x04, 0xcc, 0xfd, 0x94, 0x4f, 0xa2, 0x04,
-  0xcc, 0xfc, 0x94, 0x40, 0xa9, 0xca, 0x82, 0x10, 0xca, 0xfc, 0x94, 0x95, 0x82, 0x0e,
-  0x40, 0xf8, 0x82, 0x0e, 0xcc, 0xf8, 0x95, 0xae, 0xa2, 0x0a, 0xcc, 0xa8, 0xaf, 0x04,
-  0xab, 0x04, 0xa2, 0x06, 0xcc, 0xa8, 0xaf, 0x02, 0x9a, 0xff, 0xab, 0x02, 0xaf, 0x06,
-  0xb7, 0x00, 0x00, 0x06, 0xa2, 0x08, 0xcc, 0xa8, 0xb5, 0xd6, 0xb5, 0x3f, 0x06, 0x3f,
-  0x02, 0x3f, 0x04, 0x00, 0xc6, 0xa8, 0x2e, 0x05, 0xab, 0x2e, 0x95, 0x4f, 0xa8, 0x38,
-  0xa2, 0x02, 0xcc, 0xfd, 0x42, 0x95, 0x47, 0xac, 0x40, 0x30, 0xa2, 0x02, 0xcc, 0xa8,
-  0xab, 0x38, 0xa2, 0x04, 0xcc, 0xa8, 0xab, 0x3a, 0x95, 0x58, 0x96, 0x42, 0xdc, 0x95,
-  0x6e, 0xa8, 0x02, 0xa2, 0x02, 0xcc, 0xab, 0xa8, 0x04, 0xa2, 0x04, 0xcc, 0xab, 0x90,
-  0x01, 0xc6, 0xa8, 0x06, 0xa2, 0x06, 0xcc, 0xab, 0xa8, 0x3c, 0xa2, 0x08, 0xcc, 0xab,
-  0xa8, 0x2c, 0x04, 0xbd, 0x7f, 0xff, 0x90, 0x01, 0xab, 0x2c, 0xa2, 0x0a, 0xcc, 0xab,
-  0xae, 0xce, 0xae, 0xcc, 0xae, 0xce, 0xe6, 0xae, 0xce, 0xab, 0xcc, 0xa8, 0x2e, 0x04,
-  0xab, 0x2e, 0x00, 0x8b, 0x42, 0x95, 0xac, 0xa8, 0x2e, 0x9c, 0x00, 0x4e, 0xa8, 0x38,
-  0x96, 0x3a, 0xfa, 0x9c, 0x00, 0x46, 0x30, 0x1c, 0xac, 0x3e, 0xce, 0x3c, 0xac, 0x3e,
-  0xce, 0x3c, 0x83, 0x44, 0x01, 0x91, 0x8b, 0x40, 0x40, 0x83, 0xcc, 0x01, 0x91, 0x8b,
-  0x40, 0x40, 0x83, 0x44, 0x01, 0x91, 0x8b, 0x3c, 0x34, 0x14, 0xa1, 0x38, 0x01, 0x8c,
-  0xab, 0xa1, 0x3a, 0x01, 0x88, 0xab, 0x87, 0xff, 0xff, 0x01, 0x8a, 0xab, 0x87, 0xff,
-  0xff, 0x01, 0x86, 0xab, 0x83, 0x01, 0x01, 0x91, 0x8b, 0x3c, 0x34, 0x32, 0x83, 0x00,
-  0x01, 0x88, 0xab, 0x83, 0x00, 0x01, 0x8c, 0xab, 0x3c, 0xb6, 0x01, 0x8c, 0xa8, 0xa4,
-  0x01, 0x88, 0xcc, 0xab, 0x3c, 0x82, 0x00, 0x2e, 0xfc, 0x94, 0xdc, 0xb2, 0xce, 0x3e,
-  0xa0, 0x30, 0xcc, 0xf8, 0xa2, 0x02, 0xcc, 0xa8, 0xab, 0x34, 0xa2, 0x04, 0xcc, 0xa8,
-  0xab, 0x36, 0xb7, 0xff, 0xff, 0x38, 0xb7, 0xff, 0xff, 0x3a, 0xb2, 0xce, 0x3e, 0x91,
-  0x00, 0xb7, 0x00, 0x00, 0x40, 0x00, 0xdc, 0x94, 0x93, 0xa8, 0x36, 0xa2, 0x04, 0xcc,
-  0xfd, 0x48, 0xa2, 0x04, 0xcc, 0xfc, 0x94, 0x37, 0x94, 0x43, 0xa2, 0x06, 0xcc, 0xa8,
-  0x9c, 0x00, 0x94, 0x23, 0xac, 0x02, 0x3c, 0xac, 0x04, 0x3e, 0xa8, 0x50, 0xa2, 0x06,
-  0xcc, 0xa8, 0x9a, 0xff, 0xab, 0x02, 0xa2, 0x0a, 0xcc, 0xa8, 0xab, 0x04, 0xa2, 0x08,
-  0xcc, 0xa8, 0xb5, 0xd5, 0x87, 0xac, 0x3c, 0x02, 0xac, 0x3e, 0x04, 0x90, 0x00, 0xc6,
-  0xa8, 0x2e, 0x05, 0xab, 0x2e, 0x94, 0x4f, 0xa8, 0x34, 0xa2, 0x02, 0xcc, 0xfd, 0x95,
-  0x3b, 0xa2, 0x02, 0xcc, 0xfc, 0x95, 0x41, 0x02, 0xa2, 0x02, 0xcc, 0xa8, 0x96, 0x34,
-  0xeb, 0xa2, 0x02, 0xcc, 0xab, 0xa2, 0x04, 0xcc, 0xa8, 0x96, 0x36, 0xeb, 0xa2, 0x04,
-  0xcc, 0xab, 0xa2, 0x05, 0xcc, 0x17, 0x95, 0x5e, 0xa8, 0x3a, 0xa2, 0x04, 0xcc, 0xfd,
-  0x4e, 0xa2, 0x04, 0xcc, 0xfc, 0x41, 0x57, 0xa8, 0x38, 0xa2, 0x02, 0xcc, 0xfd, 0x41,
-  0x4f, 0xac, 0x40, 0x30, 0xa2, 0x02, 0xcc, 0xa8, 0xab, 0x38, 0xa2, 0x04, 0xcc, 0xa8,
-  0xab, 0x3a, 0xa9, 0xca, 0x82, 0x10, 0xca, 0xfc, 0x4a, 0x82, 0x0e, 0x40, 0xf8, 0x82,
-  0x0e, 0xcc, 0xf8, 0x95, 0xa6, 0xa8, 0x2e, 0x9c, 0x00, 0x4b, 0xa8, 0x3a, 0x96, 0x38,
-  0xfa, 0x9c, 0x00, 0x43, 0x35, 0x14, 0x3c, 0x35, 0x2b, 0x3c, 0xb6, 0xf9, 0xfa, 0xa8,
-  0xb6, 0xf9, 0xfc, 0xfc, 0x5d, 0xb6, 0xf9, 0xfa, 0xa9, 0xb3, 0x01, 0x84, 0xf2, 0xf6,
-  0xb3, 0x01, 0x90, 0x90, 0x40, 0xd6, 0x40, 0x40, 0x90, 0xc8, 0xd6, 0x40, 0x40, 0x97,
-  0xdf, 0xd2, 0x90, 0x98, 0xd6, 0x3c, 0xb6, 0xf9, 0xfe, 0x88, 0x96, 0xc8, 0x10, 0x47,
-  0x30, 0x0a, 0x91, 0x01, 0xb4, 0x85, 0x58, 0x99, 0xfe, 0x9c, 0xa4, 0x51, 0xb3, 0x01,
-  0x90, 0x90, 0x40, 0xd6, 0x40, 0x40, 0x90, 0xc8, 0xd6, 0x40, 0x40, 0x97, 0xdf, 0xd2,
-  0x3c, 0x00, 0xb6, 0xf9, 0xfa, 0xab, 0x34, 0x43, 0x95, 0x22, 0xb6, 0xff, 0x20, 0xa9,
-  0x90, 0x01, 0xb6, 0x10, 0x00, 0x8e, 0x8b, 0x03, 0xaf, 0xcc, 0xaf, 0xce, 0xa2, 0x0a,
-  0x72, 0x88, 0x9d, 0x01, 0x53, 0xa2, 0x12, 0x72, 0x88, 0xb5, 0xd2, 0xfa, 0xac, 0x76,
-  0xce, 0xa2, 0x22, 0xce, 0x88, 0xb2, 0x20, 0x00, 0x94, 0x30, 0xa2, 0x10, 0x72, 0x88,
-  0xb5, 0xd2, 0xe7, 0xac, 0x76, 0xce, 0xa2, 0x22, 0xce, 0x88, 0xb2, 0x28, 0x00, 0x9c,
-  0x00, 0xb2, 0x20, 0x00, 0xaf, 0xcc, 0xa2, 0x11, 0x72, 0x88, 0xb5, 0xd2, 0xcf, 0xac,
-  0x76, 0xce, 0xa2, 0x22, 0xce, 0x88, 0xb3, 0x28, 0x00, 0x9c, 0x00, 0xb3, 0x20, 0x00,
-  0x3f, 0xcc, 0x90, 0x52, 0xa2, 0x02, 0xcc, 0x8e, 0x8b, 0x02, 0xa2, 0x0a, 0x72, 0x88,
-  0x9c, 0x01, 0x48, 0x90, 0x10, 0xa2, 0x02, 0xce, 0x8e, 0xab, 0x04, 0xc4, 0x9a, 0x04,
-  0xc6, 0x90, 0x00, 0xa2, 0x08, 0xcc, 0x8e, 0xab, 0x06, 0x31, 0x03, 0x9c, 0x00, 0x94,
-  0xa4, 0xa2, 0x0a, 0x72, 0x88, 0x9c, 0x01, 0x52, 0x90, 0xdb, 0xa2, 0x02, 0xcc, 0x8e,
-  0x90, 0x52, 0xa2, 0x02, 0xce, 0x8e, 0x30, 0xea, 0x9c, 0x00, 0x94, 0xac, 0x33, 0xf8,
-  0x90, 0x10, 0xb6, 0x10, 0x04, 0x8b, 0x91, 0x00, 0xb6, 0x10, 0x20, 0x88, 0x99, 0x08,
-  0x9c, 0x00, 0x94, 0x60, 0x91, 0x00, 0xb6, 0x10, 0x24, 0x88, 0x99, 0x20, 0x9c, 0x00,
-  0x94, 0x5a, 0x90, 0x08, 0xb6, 0x10, 0x04, 0x8b, 0x91, 0x00, 0xb6, 0x10, 0x20, 0x88,
-  0x99, 0x04, 0x9c, 0x00, 0x94, 0x3c, 0x91, 0x00, 0xb6, 0x10, 0x24, 0x88, 0x99, 0x02,
-  0x9c, 0x00, 0x94, 0x2a, 0xc4, 0x99, 0xfb, 0xc6, 0xa8, 0x06, 0xa2, 0x08, 0xcc, 0x8e,
-  0xa2, 0x0a, 0x72, 0x88, 0x9c, 0x01, 0x46, 0xa8, 0x04, 0xa2, 0x02, 0xce, 0x8e, 0x88,
-  0x02, 0xa2, 0x02, 0xcc, 0x8e, 0x88, 0x03, 0xb6, 0x10, 0x00, 0x8b, 0x90, 0x01, 0x3f,
-  0xce, 0x3f, 0xcc, 0x3c, 0x30, 0x16, 0x94, 0x4c, 0x95, 0x38, 0x30, 0x10, 0x94, 0x46,
-  0x95, 0x4a, 0x30, 0x0a, 0x94, 0x40, 0x95, 0x6e, 0x30, 0x04, 0x94, 0x3a, 0x95, 0x68,
-  0xae, 0xca, 0x05, 0xae, 0xca, 0x82, 0x00, 0xca, 0xfc, 0x3c, 0x3d, 0xa2, 0x0a, 0x72,
-  0x88, 0x9c, 0x01, 0x4d, 0xa2, 0x10, 0x72, 0x88, 0xb5, 0xd1, 0xe3, 0x00, 0xa2, 0x0e,
-  0x76, 0xab, 0x5e, 0xa2, 0x12, 0x72, 0x88, 0xb5, 0xd1, 0xd6, 0x00, 0xa2, 0x0e, 0x76,
-  0xab, 0x51, 0xa2, 0x11, 0x72, 0x88, 0xb5, 0xd1, 0xc9, 0x00, 0xa2, 0x0e, 0x76, 0xab,
-  0x00, 0xa2, 0x00, 0x74, 0xab, 0xc4, 0x99, 0xfb, 0xc6, 0xa8, 0x06, 0xa2, 0x08, 0xcc,
-  0x8e, 0xa2, 0x0a, 0x72, 0x88, 0x9c, 0x01, 0x46, 0xa8, 0x04, 0xa2, 0x02, 0xce, 0x8e,
-  0x88, 0x02, 0xa2, 0x02, 0xcc, 0x8e, 0x88, 0x03, 0xb6, 0x10, 0x00, 0x8b, 0x00, 0x3f,
-  0xce, 0x3f, 0xcc, 0x3c, 0x33, 0x12, 0x91, 0x00, 0xae, 0xca, 0xaa, 0xc8, 0x41, 0x3c,
-  0xae, 0xca, 0xb6, 0x10, 0x1c, 0x88, 0x96, 0xc8, 0x17, 0x41, 0x70, 0x9a, 0x01, 0x3c,
-  0xaf, 0xcc, 0x9c, 0x00, 0x94, 0x21, 0xb2, 0x20, 0x2e, 0x30, 0x0f, 0xa2, 0x0a, 0x72,
-  0x88, 0x9c, 0x01, 0x45, 0xb2, 0x28, 0x2e, 0x30, 0x03, 0x3f, 0xcc, 0x3c, 0x90, 0x40,
-  0x01, 0xd9, 0xc6, 0xa8, 0xe2, 0xba, 0x02, 0x00, 0xab, 0xe2, 0x3c, 0xb2, 0x20, 0x2e,
-  0x30, 0x0f, 0xa2, 0x0a, 0x72, 0x88, 0x9c, 0x01, 0x7b, 0xb2, 0x28, 0x2e, 0x30, 0x03,
-  0x3f, 0xcc, 0x3c, 0x90, 0x40, 0xda, 0xc6, 0xa8, 0xe2, 0xb9, 0xfd, 0xff, 0xab, 0xe2,
-  0x3c, 0xb2, 0x20, 0x2e, 0xc4, 0x01, 0x99, 0x01, 0x3c, 0xaf, 0xcc, 0xab, 0xca, 0xa2,
-  0x22, 0xce, 0x88, 0xb2, 0x28, 0x00, 0x9c, 0x00, 0xb2, 0x20, 0x00, 0x82, 0x02, 0xcc,
-  0xf8, 0x82, 0x00, 0xca, 0xfc, 0x50, 0x82, 0x01, 0xca, 0xfc, 0x4e, 0x82, 0x02, 0xca,
-  0xfc, 0x4c, 0x90, 0x00, 0xc5, 0x3f, 0xcc, 0x3c, 0x90, 0x53, 0x66, 0x90, 0x71, 0x69,
-  0x90, 0x71, 0x6c, 0xaf, 0xcc, 0xab, 0xca, 0xa2, 0x22, 0xce, 0x88, 0xb2, 0x28, 0x00,
-  0x9c, 0x00, 0xb2, 0x20, 0x00, 0x82, 0x02, 0xcc, 0xf8, 0xa2, 0x0a, 0x72, 0x88, 0x9d,
-  0x01, 0x55, 0x82, 0x00, 0xca, 0xfc, 0x4a, 0x82, 0x08, 0xca, 0xfc, 0x48, 0x41, 0xc5,
-  0x3f, 0xcc, 0x3c, 0x90, 0x5e, 0x66, 0x90, 0x61, 0x69, 0x82, 0x00, 0xca, 0xfc, 0x94,
-  0x26, 0x82, 0x05, 0xca, 0xfc, 0x94, 0x25, 0x82, 0x09, 0xca, 0xfc, 0x94, 0x24, 0x82,
-  0x06, 0xca, 0xfc, 0x94, 0x23, 0x82, 0x0a, 0xca, 0xfc, 0x5e, 0x82, 0x07, 0xca, 0xfc,
-  0x94, 0x22, 0x82, 0x0c, 0xca, 0xfc, 0x94, 0x21, 0x3f, 0xcc, 0x3c, 0x91, 0x52, 0x90,
-  0xdb, 0x5d, 0x90, 0x61, 0x91, 0x10, 0x58, 0x90, 0xf9, 0x91, 0x52, 0x53, 0x90, 0xdb,
-  0x91, 0x61, 0x4e, 0x90, 0xdb, 0x91, 0xed, 0x49, 0x90, 0xdb, 0x91, 0x61, 0x44, 0x90,
-  0xf9, 0x91, 0x61, 0xb2, 0x20, 0x02, 0xc5, 0xb2, 0x28, 0x02, 0xa8, 0xca, 0xc5, 0x3f,
-  0xcc, 0x3c, 0xab, 0xca, 0xaf, 0xcc, 0xa2, 0x22, 0xce, 0x88, 0xb2, 0x28, 0x00, 0x9c,
-  0x00, 0xb2, 0x20, 0x00, 0x82, 0x00, 0xcc, 0xf8, 0x82, 0x00, 0xca, 0xfc, 0x47, 0xc4,
-  0x9a, 0x20, 0xc6, 0x3f, 0xcc, 0x3c, 0x90, 0x20, 0x01, 0xd9, 0xc6, 0x3f, 0xcc, 0x3c,
-  0xab, 0xca, 0xaf, 0xcc, 0xa2, 0x22, 0xce, 0x88, 0xb2, 0x28, 0x00, 0x9c, 0x00, 0xb2,
-  0x20, 0x00, 0xa8, 0xca, 0x99, 0x08, 0x9c, 0x00, 0x4b, 0xa2, 0x18, 0xcc, 0x88, 0x9a,
-  0x40, 0xa2, 0x18, 0xcc, 0x8b, 0x4b, 0x90, 0x40, 0x01, 0xa2, 0x18, 0xcc, 0xd9, 0xa2,
-  0x18, 0xcc, 0x8b, 0x94, 0x30, 0xae, 0xca, 0x91, 0x00, 0xaf, 0xc8, 0x99, 0x01, 0x9d,
-  0x00, 0x82, 0x02, 0xca, 0xfa, 0x3f, 0xc8, 0xaf, 0xc8, 0x99, 0x02, 0x9d, 0x00, 0x82,
-  0x04, 0xca, 0xfa, 0x3f, 0xc8, 0xaf, 0xc8, 0x99, 0x04, 0x9d, 0x00, 0x82, 0x08, 0xca,
-  0xfa, 0x3f, 0xc8, 0x99, 0x10, 0x9d, 0x00, 0x82, 0x20, 0xca, 0xfa, 0xa2, 0x16, 0xcc,
-  0x88, 0x3f, 0xcc, 0x3c, 0xaf, 0xcc, 0xe7, 0xab, 0xca, 0x82, 0x68, 0xca, 0xf8, 0xb2,
-  0x28, 0x00, 0x9c, 0x00, 0xb2, 0x20, 0x00, 0x00, 0xa2, 0x12, 0xcc, 0x8e, 0x8b, 0x10,
-  0x00, 0xa2, 0x14, 0xcc, 0x8e, 0x8b, 0x11, 0x96, 0x10, 0x11, 0x96, 0x10, 0x0a, 0x82,
-  0x2e, 0x10, 0xd9, 0x82, 0x40, 0x11, 0xd9, 0x88, 0x10, 0x96, 0x11, 0xda, 0xad, 0xca,
-  0xfa, 0xab, 0x12, 0xa2, 0x10, 0xcc, 0x88, 0x99, 0x07, 0x9c, 0x01, 0xa2, 0x10, 0xcc,
-  0x88, 0x99, 0x07, 0x9c, 0x01, 0x4e, 0x9c, 0x02, 0x51, 0x9c, 0x06, 0x4e, 0x9c, 0x04,
-  0x48, 0x9c, 0x05, 0x4b, 0x00, 0x4f, 0x90, 0x40, 0x49, 0x90, 0x08, 0x46, 0x90, 0x02,
-  0x43, 0x90, 0x04, 0x40, 0xad, 0xca, 0xab, 0xa0, 0xc8, 0x12, 0xfa, 0xad, 0xca, 0xa8,
-  0x99, 0x02, 0x9c, 0x00, 0x55, 0x90, 0x03, 0x01, 0xab, 0xca, 0xa2, 0x16, 0xcc, 0x88,
-  0x96, 0xca, 0xf9, 0xa2, 0x16, 0xcc, 0x8b, 0x3f, 0xcc, 0xa8, 0x12, 0x3c, 0xa2, 0x16,
-  0xcc, 0x88, 0x9a, 0x03, 0x6f, 0xaf, 0xcc, 0xb2, 0x28, 0x00, 0x9c, 0x00, 0xb2, 0x20,
-  0x00, 0x82, 0x02, 0xca, 0xfc, 0x58, 0x82, 0x04, 0xca, 0xfc, 0x56, 0x82, 0x01, 0xca,
-  0xfc, 0x54, 0x82, 0x08, 0xca, 0xfc, 0x52, 0x86, 0x01, 0x00, 0xca, 0xfc, 0x4f, 0x3f,
-  0xcc, 0x3c, 0x90, 0x06, 0x4b, 0x90, 0x05, 0x48, 0x90, 0x01, 0x45, 0x90, 0x04, 0x42,
-  0x90, 0x00, 0xab, 0xca, 0x9c, 0x06, 0x30, 0x17, 0x90, 0x07, 0x01, 0xa2, 0x08, 0xcc,
-  0xd9, 0x96, 0xca, 0xfa, 0xa2, 0x08, 0xcc, 0x8b, 0x82, 0x06, 0xca, 0xfc, 0x30, 0x08,
-  0x3f, 0xcc, 0x3c, 0xc4, 0x9a, 0x40, 0xc6, 0x3c, 0x90, 0x40, 0x01, 0xd9, 0xc6, 0x3c,
-  0xaf, 0xcc, 0xb2, 0x10, 0x00, 0xab, 0xca, 0xa2, 0x22, 0xcc, 0x88, 0x8b, 0x12, 0xa2,
-  0x26, 0xcc, 0x88, 0x8b, 0x10, 0xa2, 0x2a, 0xcc, 0x88, 0x8b, 0x11, 0x82, 0x03, 0x12,
-  0xda, 0x90, 0x20, 0x01, 0xa0, 0xc8, 0x10, 0xd9, 0x82, 0x00, 0xca, 0xfd, 0x82, 0x20,
-  0x10, 0xda, 0x90, 0x02, 0x01, 0xa0, 0xc8, 0x10, 0xd9, 0x82, 0x00, 0xca, 0xfd, 0x82,
-  0x02, 0x10, 0xda, 0x90, 0x01, 0x01, 0xa0, 0xc8, 0x10, 0xd9, 0x82, 0x00, 0xca, 0xfd,
-  0x82, 0x01, 0x10, 0xda, 0x90, 0x10, 0x01, 0xa0, 0xc8, 0x11, 0xd9, 0x82, 0x00, 0xca,
-  0xfd, 0x82, 0x10, 0x11, 0xda, 0x00, 0xa2, 0x24, 0xcc, 0x8e, 0x00, 0xa2, 0x28, 0xcc,
-  0x8e, 0x88, 0x12, 0xa2, 0x22, 0xcc, 0x8b, 0x88, 0x10, 0xa2, 0x26, 0xcc, 0x8b, 0x88,
-  0x11, 0xa2, 0x2a, 0xcc, 0x8b, 0x3f, 0xcc, 0x3c, 0xaf, 0xcc, 0x90, 0x04, 0xb2, 0x10,
-  0x04, 0xc6, 0xc4, 0x96, 0xc8, 0x12, 0x64, 0x3f, 0xcc, 0x3c, 0xaf, 0xcc, 0x90, 0x04,
-  0xb2, 0x10, 0x04, 0xc6, 0xc4, 0x96, 0xc8, 0x12, 0x64, 0xb6, 0x10, 0x00, 0x88, 0x9a,
-  0x01, 0xb6, 0x10, 0x00, 0x8b, 0x90, 0x10, 0xc6, 0x3f, 0xcc, 0x3c, 0xc4, 0xa2, 0x01,
-  0xcc, 0xda, 0xa2, 0x02, 0xcc, 0xda, 0xa2, 0x03, 0xcc, 0xda, 0xa2, 0x04, 0xcc, 0xda,
-  0xa2, 0x05, 0xcc, 0xda, 0x9c, 0x00, 0x94, 0x85, 0xc4, 0xb6, 0xfe, 0xe0, 0x8b, 0xa2,
-  0x01, 0xcc, 0x88, 0xb6, 0xfe, 0xe1, 0x8b, 0xa2, 0x02, 0xcc, 0x88, 0xb6, 0xfe, 0xe2,
-  0x8b, 0xa2, 0x03, 0xcc, 0x88, 0xb6, 0xfe, 0xe3, 0x8b, 0xa2, 0x04, 0xcc, 0x88, 0xb6,
-  0xfe, 0xe4, 0x8b, 0xa2, 0x05, 0xcc, 0x88, 0xb6, 0xfe, 0xe5, 0x8b, 0xa8, 0x02, 0xb6,
-  0xfe, 0xe6, 0x8b, 0xa8, 0x0a, 0xb6, 0xfe, 0xe7, 0x8b, 0xa8, 0x04, 0xb6, 0xfe, 0xe8,
-  0xab, 0xa8, 0x06, 0xb6, 0xfe, 0xea, 0xab, 0xa8, 0x08, 0xb6, 0xfe, 0xec, 0xab, 0x3c,
-  0xab, 0x6e, 0xae, 0xca, 0xab, 0x70, 0x91, 0x10, 0xb4, 0x80, 0x06, 0xb6, 0x11, 0x26,
-  0x88, 0x8b, 0x6c, 0xa8, 0xcc, 0xb6, 0x11, 0x26, 0x8b, 0x3c, 0xb6, 0x10, 0x3a, 0x88,
-  0x8b, 0x6d, 0xa8, 0xcc, 0xb6, 0x10, 0x3a, 0x8b, 0x3c, 0xab, 0xca, 0x90, 0x08, 0x01,
-  0xb6, 0x10, 0x02, 0xd9, 0x82, 0x00, 0xca, 0xfd, 0x9a, 0x08, 0xb6, 0x10, 0x02, 0x8b,
-  0x3c, 0x82, 0x00, 0x7d, 0xdc, 0x3c, 0x00, 0x8b, 0x7d, 0x34, 0xd3, 0xb6, 0x10, 0x00,
-  0x88, 0x99, 0xfe, 0xb6, 0x10, 0x00, 0x8b, 0x00, 0x80, 0x6c, 0xcc, 0xab, 0x34, 0x47,
-  0x80, 0x6d, 0xcc, 0xab, 0x34, 0x40, 0x00, 0x34, 0x36, 0xb6, 0x10, 0x00, 0x88, 0x9a,
-  0x01, 0xb6, 0x10, 0x00, 0x8b, 0x34, 0xf9, 0xb7, 0x00, 0x00, 0x02, 0xb7, 0x00, 0x00,
-  0x04, 0xb7, 0x00, 0x00, 0x06, 0xac, 0x74, 0xcc, 0x82, 0x34, 0xcc, 0xf8, 0x00, 0xb5,
-  0xf6, 0xe1, 0x91, 0x20, 0xb4, 0x7f, 0x8c, 0x90, 0x04, 0x3c, 0xb6, 0x10, 0x00, 0x88,
-  0xb7, 0x00, 0x00, 0x12, 0x96, 0xc8, 0x10, 0x30, 0x40, 0xb1, 0x10, 0x80, 0xc4, 0xad,
-  0xca, 0x8b, 0xa2, 0x01, 0xcc, 0x88, 0xa2, 0x02, 0xca, 0x8b, 0xa2, 0x02, 0xcc, 0x88,
-  0xa2, 0x04, 0xca, 0x8b, 0xa2, 0x03, 0xcc, 0x88, 0xa2, 0x06, 0xca, 0x8b, 0xa2, 0x04,
-  0xcc, 0x88, 0xa2, 0x08, 0xca, 0x8b, 0xa2, 0x05, 0xcc, 0x88, 0xa2, 0x0a, 0xca, 0x8b,
-  0x82, 0x00, 0x12, 0xfc, 0x4a, 0xb6, 0x10, 0x00, 0x88, 0x9a, 0x01, 0xb6, 0x10, 0x00,
-  0x8b, 0x00, 0x3c, 0xb6, 0x10, 0x00, 0x88, 0x99, 0xfe, 0xb6, 0x10, 0x00, 0x8b, 0xb7,
-  0x00, 0x01, 0x12, 0x3c, 0x3c, 0xaf, 0xcc, 0xb2, 0x10, 0x00, 0xc4, 0xab, 0xca, 0x82,
-  0x01, 0x02, 0xfc, 0x94, 0x25, 0x82, 0x00, 0x7d, 0xdd, 0x46, 0xa8, 0xca, 0xc6, 0x3f,
-  0xcc, 0x3c, 0xaf, 0xca, 0x34, 0xc7, 0x3f, 0xca, 0x90, 0x40, 0x01, 0xb6, 0x10, 0x2a,
-  0xd9, 0xb6, 0x10, 0x2a, 0x8b, 0x90, 0x01, 0x01, 0x96, 0xca, 0xf9, 0xab, 0xca, 0x7f,
-  0x00, 0xc5, 0x40, 0xad, 0x0a, 0xa8, 0xb6, 0xda, 0xd6, 0xab, 0xa2, 0xa6, 0xcc, 0x8b,
-  0x8c, 0xc9, 0xc8, 0xa2, 0xa4, 0xcc, 0x8b, 0xa2, 0x02, 0x0a, 0xa8, 0xb6, 0xda, 0xd8,
-  0xab, 0xa2, 0xa2, 0xcc, 0x8b, 0x8c, 0xc9, 0xc8, 0xa2, 0xa0, 0xcc, 0x8b, 0xb7, 0x02,
-  0x00, 0x02, 0xb7, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x2e, 0xcc, 0x88, 0x9c, 0x00, 0x4e,
-  0xae, 0x02, 0x03, 0xe7, 0xae, 0x02, 0xae, 0x04, 0xf7, 0xae, 0x04, 0xaa, 0xc8, 0x6d,
-  0xa8, 0x02, 0x01, 0x03, 0xb8, 0x00, 0x01, 0xab, 0x02, 0xa8, 0x04, 0x01, 0x82, 0x00,
-  0xc8, 0xe8, 0xab, 0x04, 0xa2, 0x02, 0x06, 0xfd, 0x94, 0x61, 0xa2, 0x02, 0x06, 0xfc,
-  0x94, 0x53, 0xad, 0x06, 0xa8, 0x01, 0x03, 0xb8, 0x00, 0x01, 0xab, 0x02, 0xa2, 0x02,
-  0x06, 0xa8, 0x01, 0x82, 0x00, 0xc8, 0xe8, 0xab, 0x04, 0xb7, 0x00, 0x00, 0x06, 0x82,
-  0x0f, 0x06, 0xfc, 0x94, 0x2c, 0xb7, 0x02, 0x00, 0x10, 0xb7, 0x00, 0x00, 0x12, 0xa8,
-  0x06, 0xae, 0x10, 0x03, 0xe7, 0xae, 0x10, 0xae, 0x12, 0xf7, 0xae, 0x12, 0xaa, 0xc8,
-  0x6d, 0xa0, 0x04, 0x12, 0xfd, 0x4f, 0xa0, 0x04, 0x12, 0xfc, 0x44, 0xa9, 0x06, 0x95,
-  0x2a, 0xa0, 0x02, 0x10, 0xfd, 0x41, 0x69, 0xa8, 0x06, 0xa6, 0x01, 0x2e, 0xcc, 0x8b,
-  0x48, 0xa8, 0x02, 0xad, 0x06, 0xfd, 0x42, 0x95, 0x59, 0xb7, 0x02, 0x00, 0x10, 0xb7,
-  0x00, 0x00, 0x12, 0xa6, 0x01, 0x26, 0xcc, 0x88, 0x9c, 0x00, 0x4e, 0xae, 0x10, 0x03,
-  0xe7, 0xae, 0x10, 0xae, 0x12, 0xf7, 0xae, 0x12, 0xaa, 0xc8, 0x6d, 0xa8, 0x10, 0x03,
-  0x01, 0xb8, 0x00, 0x01, 0xab, 0x10, 0xa8, 0x12, 0x01, 0x82, 0x00, 0xc8, 0xe8, 0xab,
-  0x12, 0xa2, 0x02, 0x08, 0xfd, 0x94, 0x58, 0xa2, 0x02, 0x08, 0xfc, 0x94, 0x59, 0xad,
-  0x08, 0xa8, 0x03, 0x01, 0xb8, 0x00, 0x01, 0xab, 0x02, 0xa2, 0x02, 0x08, 0xa8, 0x01,
-  0x82, 0x00, 0xc8, 0xe8, 0xab, 0x04, 0xb7, 0x00, 0x00, 0x0a, 0x82, 0x0f, 0x0a, 0xfc,
-  0x94, 0x2c, 0xb7, 0x02, 0x00, 0x06, 0xb7, 0x00, 0x00, 0x08, 0xa8, 0x0a, 0xae, 0x06,
-  0x03, 0xe7, 0xae, 0x06, 0xae, 0x08, 0xf7, 0xae, 0x08, 0xaa, 0xc8, 0x6d, 0xa0, 0x04,
-  0x08, 0xfd, 0x4f, 0xa0, 0x04, 0x08, 0xfc, 0x44, 0xa9, 0x0a, 0x95, 0x2a, 0xa0, 0x02,
-  0x06, 0xfd, 0x41, 0x69, 0xa8, 0x0a, 0xa6, 0x01, 0x26, 0xcc, 0x8b, 0x82, 0x01, 0xca,
-  0xfa, 0xb4, 0xfe, 0x8c, 0xa8, 0x10, 0xad, 0x08, 0xfd, 0x6c, 0x95, 0x5f, 0x90, 0x00,
-  0x3c, 0xaf, 0xcc, 0xab, 0xca, 0xa2, 0x22, 0xce, 0x88, 0xe7, 0xb8, 0x00, 0x54, 0xae,
-  0xca, 0xad, 0xca, 0xab, 0xa2, 0x22, 0xce, 0x88, 0xb2, 0x28, 0x00, 0x9c, 0x00, 0xb2,
-  0x20, 0x00, 0xad, 0xca, 0xa8, 0x9d, 0xff, 0x90, 0xff, 0xa2, 0x2a, 0xcc, 0x8b, 0xab,
-  0xcc, 0xad, 0xca, 0xa8, 0x02, 0x96, 0xcc, 0xeb, 0xad, 0xca, 0xab, 0x3f, 0xcc, 0x3c,
-  0xaf, 0xcc, 0xa2, 0x22, 0xce, 0x88, 0xb2, 0x28, 0x00, 0x9c, 0x00, 0xb2, 0x20, 0x00,
-  0xa2, 0x2c, 0xcc, 0x88, 0xab, 0xca, 0xa2, 0x22, 0xce, 0x88, 0xe7, 0xb8, 0x00, 0x54,
-  0xad, 0xc8, 0xa8, 0x96, 0xca, 0xf8, 0x3f, 0xcc, 0x3c, 0xaf, 0xcc, 0xab, 0xca, 0xa2,
-  0x22, 0xce, 0x88, 0xb2, 0x28, 0x00, 0x9c, 0x00, 0xb2, 0x20, 0x00, 0x82, 0x01, 0xca,
-  0xfc, 0x5c, 0x90, 0x10, 0x82, 0x00, 0xca, 0xfc, 0x4b, 0xa2, 0x06, 0xcc, 0xda, 0xa2,
-  0x06, 0xcc, 0x8b, 0x3f, 0xcc, 0x3c, 0x01, 0xa2, 0x06, 0xcc, 0xd9, 0xa2, 0x06, 0xcc,
-  0x8b, 0x6c, 0xa2, 0x2a, 0xcc, 0x88, 0xa2, 0x2a, 0xcc, 0x8b, 0x90, 0x10, 0x01, 0xa2,
-  0x04, 0xcc, 0xd9, 0xa2, 0x04, 0xcc, 0x8b, 0x95, 0x2f, 0x3c, 0x3c, 0xaf, 0xcc, 0xab,
-  0xca, 0xb7, 0x00, 0x00, 0x10, 0xb7, 0x00, 0x00, 0x12, 0x80, 0x7e, 0x12, 0xfc, 0x94,
-  0x4f, 0xa8, 0x12, 0xb5, 0xca, 0xbe, 0xa2, 0x4e, 0x76, 0xa8, 0x9c, 0x08, 0x43, 0xa9,
-  0x12, 0x74, 0xa2, 0x64, 0x76, 0xa8, 0x96, 0xca, 0xfc, 0x4f, 0x90, 0x02, 0x96, 0xca,
-  0xfd, 0x41, 0x71, 0xa2, 0x62, 0x76, 0xa8, 0x9c, 0x04, 0x41, 0x79, 0x91, 0x01, 0xa2,
-  0x22, 0x76, 0x88, 0xb5, 0xfb, 0x3d, 0xb7, 0x15, 0x5c, 0x02, 0xb7, 0x00, 0x00, 0x04,
-  0xb7, 0x02, 0x00, 0x06, 0xac, 0x76, 0xcc, 0x82, 0x4c, 0xcc, 0xf8, 0xa2, 0x22, 0x76,
-  0x88, 0xb5, 0xf3, 0xeb, 0xb7, 0x00, 0x01, 0x10, 0x95, 0x41, 0x82, 0x00, 0x10, 0xfd,
-  0x4c, 0x00, 0xb5, 0xca, 0x57, 0xa2, 0x54, 0x74, 0xa8, 0x96, 0xca, 0xfc, 0x43, 0x3f,
-  0xcc, 0x3c, 0xb5, 0xfb, 0xeb, 0x66, 0x97, 0x00, 0xd0, 0x83, 0x44, 0x01, 0x91, 0x8b,
-  0x40, 0x40, 0x83, 0xcc, 0x01, 0x91, 0x8b, 0x83, 0x00, 0x01, 0x86, 0xab, 0x83, 0x00,
-  0x01, 0x8a, 0xab, 0x83, 0x00, 0x01, 0x88, 0xab, 0x83, 0x00, 0x01, 0x8c, 0xab, 0x83,
-  0x44, 0x01, 0x91, 0x8b, 0x96, 0xd0, 0x0d, 0xa8, 0xbe, 0x99, 0x03, 0x9c, 0x00, 0x94,
-  0x4c, 0xb2, 0x10, 0x00, 0x00, 0xc5, 0xb2, 0x10, 0x04, 0x90, 0x04, 0xc6, 0xc4, 0x96,
-  0xc8, 0x12, 0x64, 0xb2, 0x10, 0x5e, 0x90, 0x0b, 0xc5, 0xb2, 0x10, 0x22, 0x90, 0x03,
-  0xc5, 0xb2, 0x10, 0x26, 0x90, 0x23, 0xc5, 0xb2, 0x10, 0x2a, 0x90, 0x10, 0xc5, 0xb2,
-  0x10, 0x3a, 0x90, 0x3f, 0xc5, 0xb2, 0x10, 0x32, 0x90, 0x20, 0xc5, 0x91, 0x20, 0xb2,
-  0x11, 0x7e, 0x00, 0xc5, 0x02, 0x82, 0x02, 0xcc, 0xeb, 0xaa, 0xca, 0x69, 0xb2, 0x10,
-  0x00, 0x90, 0x01, 0xc6, 0x96, 0xd0, 0x0a, 0xb0, 0x07, 0xef, 0x9e, 0x32, 0x03, 0xae,
-  0xce, 0xd7, 0xae, 0xce, 0xd7, 0x03, 0xae, 0xce, 0xd7, 0xae, 0xce, 0xd7, 0xab, 0x58,
-  0xa8, 0xbe, 0x99, 0x0c, 0xc7, 0xc7, 0x99, 0x03, 0x04, 0xab, 0xca, 0xb2, 0x20, 0x00,
-  0x96, 0xd0, 0x1b, 0x96, 0xd0, 0x1c, 0x97, 0xe7, 0xd2, 0xb7, 0x00, 0x00, 0x02, 0xac,
-  0xca, 0x04, 0xa8, 0xcc, 0x30, 0x51, 0xa9, 0x02, 0xb2, 0x28, 0x00, 0xac, 0x04, 0xca,
-  0xaa, 0xca, 0x71, 0x96, 0xd0, 0x0b, 0xa8, 0xbe, 0x99, 0x0c, 0x9d, 0x00, 0x96, 0xd0,
-  0x0c, 0xb0, 0x50, 0x06, 0xb6, 0xff, 0xa6, 0xab, 0x05, 0xb6, 0xff, 0xa4, 0xab, 0xb0,
-  0x50, 0x07, 0xb6, 0xff, 0xaa, 0xab, 0x05, 0xb6, 0xff, 0xa8, 0xab, 0xb0, 0x50, 0x08,
-  0xb6, 0xff, 0xae, 0xab, 0x05, 0xb6, 0xff, 0xac, 0xab, 0xb0, 0x50, 0x09, 0xb6, 0xff,
-  0xb2, 0xab, 0x05, 0xb6, 0xff, 0xb0, 0xab, 0x3c, 0xae, 0xca, 0x05, 0x9c, 0x00, 0x59,
-  0xae, 0xca, 0x4e, 0xab, 0xca, 0x00, 0xc5, 0xaf, 0xca, 0x91, 0xff, 0x90, 0x01, 0xa2,
-  0x3c, 0xcc, 0x8e, 0xa2, 0x3c, 0xcc, 0x88, 0x96, 0xc8, 0x10, 0x7e, 0x3f, 0xca, 0xac,
-  0xcc, 0xce, 0x82, 0x30, 0xce, 0xf8, 0x92, 0xce, 0xd4, 0x9d, 0x11, 0x4a, 0xc7, 0x0e,
-  0x90, 0x01, 0x06, 0xd6, 0x0b, 0x09, 0x8f, 0x0e, 0xac, 0xca, 0xcc, 0xb6, 0xff, 0x02,
-  0xa8, 0x9c, 0x02, 0x54, 0xa2, 0x78, 0xcc, 0x88, 0x9a, 0x08, 0xa2, 0x78, 0xcc, 0x8b,
-  0xa2, 0x76, 0xcc, 0x88, 0x9a, 0x08, 0xa2, 0x76, 0xcc, 0x8b, 0x00, 0xa2, 0x4c, 0xcc,
-  0x8b, 0x88, 0x59, 0x99, 0x7f, 0xa2, 0x1a, 0xcc, 0x8e, 0x90, 0xff, 0xa2, 0x1c, 0xcc,
-  0x8e, 0x88, 0x59, 0xa2, 0x22, 0xcc, 0x8e, 0x90, 0xff, 0xa2, 0x24, 0xcc, 0x8e, 0xa8,
-  0x02, 0xb5, 0xf9, 0x00, 0x90, 0x2f, 0xa2, 0x16, 0xcc, 0x8e, 0x00, 0xa2, 0x18, 0xcc,
-  0x8e, 0x00, 0xa2, 0x12, 0xcc, 0x8e, 0x00, 0xa2, 0x14, 0xcc, 0x8e, 0x00, 0xa2, 0x04,
-  0xcc, 0x8e, 0x90, 0x60, 0xa2, 0x06, 0xcc, 0x8e, 0x90, 0xa6, 0xa2, 0x08, 0xcc, 0x8e,
-  0x90, 0x98, 0xa2, 0x02, 0xcc, 0x8e, 0xc4, 0x9a, 0x21, 0xc5, 0x3c, 0xa2, 0x06, 0xcc,
-  0xa8, 0xb2, 0x10, 0x00, 0x91, 0x5a, 0xbc, 0x20, 0x33, 0xb4, 0x01, 0x28, 0xbc, 0x20,
-  0x35, 0xb4, 0x01, 0x30, 0xbc, 0x20, 0x48, 0x94, 0x69, 0xbc, 0x20, 0x47, 0x94, 0x47,
-  0xbc, 0x20, 0x34, 0x94, 0x20, 0xbc, 0x20, 0x36, 0xb4, 0x01, 0x22, 0xbc, 0x20, 0x49,
-  0x94, 0x72, 0xbc, 0x20, 0x4a, 0x94, 0x8b, 0xbc, 0x20, 0x51, 0x94, 0xa4, 0xbc, 0x20,
-  0x52, 0x94, 0xbd, 0xbc, 0x20, 0x54, 0x94, 0xd6, 0x3c, 0xa6, 0x01, 0x36, 0xcc, 0x88,
-  0xd6, 0xa6, 0x01, 0x34, 0xcc, 0x88, 0xa2, 0x01, 0xce, 0x8b, 0xa6, 0x01, 0x32, 0xcc,
-  0x88, 0xa2, 0x02, 0xce, 0x8b, 0xa6, 0x01, 0x30, 0xcc, 0x88, 0xa2, 0x03, 0xce, 0x8b,
-  0x3c, 0xa6, 0x01, 0x46, 0xcc, 0x88, 0xab, 0x02, 0xa6, 0x01, 0x44, 0xcc, 0x88, 0x8b,
-  0x03, 0xa8, 0x02, 0xf1, 0xa6, 0x01, 0x42, 0xcc, 0x88, 0x99, 0x0f, 0xad, 0xca, 0xfa,
-  0xf1, 0x3c, 0xa6, 0x01, 0x5e, 0xcc, 0x88, 0xab, 0x02, 0xa6, 0x01, 0x5c, 0xcc, 0x88,
-  0x8b, 0x03, 0xa8, 0x02, 0xf1, 0xa6, 0x01, 0x5a, 0xcc, 0x88, 0x99, 0x0f, 0xa2, 0x06,
-  0xca, 0xfa, 0xf1, 0x3c, 0xa6, 0x01, 0x6e, 0xcc, 0x88, 0xab, 0x02, 0xa6, 0x01, 0x6c,
-  0xcc, 0x88, 0x8b, 0x03, 0xa8, 0x02, 0xf1, 0xa6, 0x01, 0x6a, 0xcc, 0x88, 0x99, 0x0f,
-  0xa2, 0x0a, 0xca, 0xfa, 0xf1, 0x3c, 0xa6, 0x01, 0x76, 0xcc, 0x88, 0xab, 0x02, 0xa6,
-  0x01, 0x74, 0xcc, 0x88, 0x8b, 0x03, 0xa8, 0x02, 0xf1, 0xa6, 0x01, 0x72, 0xcc, 0x88,
-  0x99, 0x0f, 0xa2, 0x0c, 0xca, 0xfa, 0xf1, 0x3c, 0xa6, 0x01, 0x4e, 0xcc, 0x88, 0xab,
-  0x02, 0xa6, 0x01, 0x4c, 0xcc, 0x88, 0x8b, 0x03, 0xa8, 0x02, 0xf1, 0xa6, 0x01, 0x4a,
-  0xcc, 0x88, 0x99, 0x0f, 0xa2, 0x02, 0xca, 0xfa, 0xf1, 0x3c, 0xa6, 0x01, 0x56, 0xcc,
-  0x88, 0xab, 0x02, 0xa6, 0x01, 0x54, 0xcc, 0x88, 0x8b, 0x03, 0xa8, 0x02, 0xf1, 0xa6,
-  0x01, 0x52, 0xcc, 0x88, 0x99, 0x0f, 0xa2, 0x04, 0xca, 0xfa, 0xf1, 0x3c, 0xa6, 0x01,
-  0x66, 0xcc, 0x88, 0xab, 0x02, 0xa6, 0x01, 0x64, 0xcc, 0x88, 0x8b, 0x03, 0xa8, 0x02,
-  0xf1, 0xa6, 0x01, 0x62, 0xcc, 0x88, 0x99, 0x0f, 0xa2, 0x08, 0xca, 0xfa, 0xf1, 0x3c,
-  0xb6, 0xda, 0xd6, 0xa8, 0xb9, 0xff, 0x00, 0xf1, 0xb6, 0xda, 0xd8, 0xa8, 0xf1, 0x3c,
-  0xa6, 0x01, 0x26, 0xcc, 0x88, 0xf1, 0x3c, 0xa6, 0x01, 0x2e, 0xcc, 0x88, 0xf1, 0x3c,
-  0xb7, 0x02, 0x00, 0x02, 0xb7, 0x00, 0x00, 0x04, 0x9c, 0x00, 0x4e, 0xae, 0x02, 0x03,
-  0xe7, 0xae, 0x02, 0xae, 0x04, 0xf7, 0xae, 0x04, 0xaa, 0xc8, 0x6d, 0xa8, 0x02, 0x01,
-  0x03, 0xb8, 0x00, 0x01, 0xab, 0x02, 0xa8, 0x04, 0x01, 0x82, 0x00, 0xc8, 0xe8, 0xab,
-  0x04, 0x3c, 0xa2, 0x2f, 0xce, 0xdc, 0x3c, 0xa2, 0x2f, 0xce, 0x8b, 0xab, 0xca, 0xa2,
-  0x54, 0xce, 0xa8, 0x9c, 0x00, 0x94, 0x26, 0x9c, 0x01, 0x41, 0x3c, 0xa2, 0x1c, 0x72,
-  0xa8, 0x82, 0x00, 0xca, 0xfd, 0x04, 0x82, 0x00, 0xca, 0xfc, 0x05, 0xa2, 0x1c, 0x72,
-  0xab, 0xb7, 0x01, 0x06, 0x02, 0xb7, 0x00, 0x00, 0x04, 0xb7, 0x00, 0x00, 0x06, 0x00,
-  0xb4, 0xc8, 0x93, 0xa2, 0x1a, 0x72, 0xa8, 0x82, 0x00, 0xca, 0xfd, 0x04, 0x82, 0x00,
-  0xca, 0xfc, 0x05, 0xa2, 0x1a, 0x72, 0xab, 0xb7, 0x01, 0x06, 0x02, 0xb7, 0x00, 0x00,
-  0x04, 0xb7, 0x00, 0x00, 0x06, 0x00, 0xb4, 0xc8, 0x71, 0xa2, 0x15, 0x72, 0x88, 0x9c,
-  0x00, 0x4d, 0xa2, 0x2f, 0xce, 0x88, 0x9d, 0x00, 0x46, 0x90, 0x01, 0xb5, 0xf7, 0xcc,
-  0x45, 0x90, 0x00, 0xb5, 0xf7, 0xc6, 0xb7, 0x62, 0x5a, 0x02, 0xb7, 0x00, 0x02, 0x04,
-  0xb7, 0x04, 0x00, 0x06, 0xac, 0xce, 0xcc, 0x82, 0x34, 0xcc, 0xf8, 0xa2, 0x22, 0xce,
-  0x88, 0xb4, 0xf0, 0x17, 0xa2, 0x32, 0xce, 0x88, 0x9c, 0x00, 0x94, 0x25, 0xa2, 0x54,
-  0xce, 0xa8, 0xb5, 0xc6, 0xab, 0xa2, 0x00, 0x78, 0xa8, 0xab, 0x02, 0xa2, 0x02, 0x78,
-  0xa8, 0xab, 0x04, 0xb7, 0x04, 0x00, 0x06, 0xac, 0xce, 0xcc, 0x82, 0x34, 0xcc, 0xf8,
-  0xa2, 0x22, 0xce, 0x88, 0xb4, 0xef, 0xea, 0xb7, 0x00, 0x00, 0x02, 0xb7, 0x00, 0x00,
-  0x04, 0xb7, 0x04, 0x00, 0x06, 0xac, 0xce, 0xcc, 0x82, 0x34, 0xcc, 0xf8, 0xa2, 0x22,
-  0xce, 0x88, 0xb4, 0xef, 0xd0, 0xa2, 0x2d, 0xce, 0x88, 0x9c, 0x00, 0x94, 0x1f, 0xb7,
-  0xbc, 0x20, 0x02, 0xb7, 0x00, 0xbe, 0x04, 0xb7, 0x04, 0x00, 0x06, 0xac, 0xce, 0xcc,
-  0x82, 0x34, 0xcc, 0xf8, 0xa2, 0x22, 0xce, 0x88, 0xb5, 0xef, 0xae, 0x90, 0x01, 0xb4,
-  0xf7, 0x3e, 0xb7, 0x00, 0x00, 0x02, 0xb7, 0x00, 0x00, 0x04, 0xb7, 0x04, 0x00, 0x06,
-  0xac, 0xce, 0xcc, 0x82, 0x34, 0xcc, 0xf8, 0xa2, 0x22, 0xce, 0x88, 0xb5, 0xef, 0x8f,
-  0x7f, 0xa2, 0x2d, 0xce, 0x88, 0x9c, 0x00, 0x94, 0x1f, 0xb7, 0xbc, 0x20, 0x02, 0xb7,
-  0x00, 0xbe, 0x04, 0xb7, 0x04, 0x00, 0x06, 0xac, 0xce, 0xcc, 0x82, 0x34, 0xcc, 0xf8,
-  0xa2, 0x22, 0xce, 0x88, 0xb5, 0xef, 0x6c, 0x90, 0x01, 0xb4, 0xf6, 0xfc, 0xb7, 0x9a,
-  0xca, 0x02, 0xb7, 0x00, 0x3b, 0x04, 0xb7, 0x04, 0x00, 0x06, 0xac, 0xce, 0xcc, 0x82,
-  0x34, 0xcc, 0xf8, 0xa2, 0x22, 0xce, 0x88, 0xb5, 0xef, 0x4d, 0x7f, 0x90, 0x00, 0xb5,
-  0xf8, 0xca, 0xb7, 0x00, 0x00, 0x02, 0xac, 0xce, 0xcc, 0x82, 0x12, 0xcc, 0xf8, 0xb7,
-  0x00, 0x00, 0x04, 0xb7, 0x00, 0x00, 0x06, 0xb7, 0x00, 0x00, 0x08, 0xb7, 0x00, 0x00,
-  0x0a, 0xa2, 0x22, 0xce, 0x88, 0xb5, 0xf7, 0x5f, 0x90, 0x29, 0xa2, 0x3a, 0xce, 0xab,
-  0xb0, 0xd2, 0x4d, 0x91, 0x08, 0xb5, 0xf7, 0xb6, 0x3c, 0xb7, 0x00, 0x00, 0x02, 0xac,
-  0xce, 0xcc, 0x82, 0x12, 0xcc, 0xf8, 0xb7, 0x00, 0x00, 0x04, 0xb7, 0x00, 0x00, 0x06,
-  0xb7, 0x00, 0x00, 0x08, 0xb7, 0x00, 0x00, 0x0a, 0xa2, 0x22, 0xce, 0x88, 0xb5, 0xf7,
-  0x2e, 0x90, 0x2a, 0xa2, 0x3a, 0xce, 0xab, 0xb0, 0xf4, 0x7d, 0x91, 0x01, 0xb5, 0xf7,
-  0x85, 0x3c, 0xaf, 0xc8, 0xb7, 0x00, 0x01, 0x02, 0xa2, 0x54, 0xce, 0xa8, 0xab, 0x04,
-  0xac, 0xce, 0x06, 0x82, 0x42, 0x06, 0xf8, 0xac, 0xce, 0x08, 0x82, 0x3e, 0x08, 0xf8,
-  0xac, 0xce, 0x0a, 0x82, 0x3e, 0x0a, 0xf8, 0xa2, 0x22, 0xce, 0x88, 0xb5, 0xf8, 0x41,
-  0x90, 0x01, 0xa2, 0x2b, 0xce, 0x8b, 0x3f, 0xc8, 0x9c, 0x02, 0x95, 0x99, 0x95, 0x65,
-  0xb7, 0x01, 0x02, 0x02, 0xb7, 0x00, 0x00, 0x04, 0xb7, 0x00, 0x00, 0x06, 0x00, 0xb4,
-  0xc6, 0xc6, 0xac, 0xce, 0xcc, 0x82, 0x12, 0xcc, 0xf8, 0xb5, 0xf7, 0xb9, 0x9d, 0x00,
-  0x94, 0x2c, 0xa2, 0x54, 0xce, 0xa8, 0xb5, 0xfa, 0x44, 0xa2, 0x2c, 0xce, 0x88, 0x9c,
-  0x00, 0x52, 0x90, 0x00, 0xa2, 0x2c, 0xce, 0x8b, 0xa2, 0x22, 0xce, 0x88, 0xab, 0x18,
-  0xb0, 0x20, 0x70, 0xb5, 0x0a, 0x52, 0xa2, 0x22, 0xce, 0x88, 0xab, 0x18, 0xb0, 0x20,
-  0x29, 0xb4, 0x0a, 0x46, 0x9c, 0x02, 0x95, 0x82, 0x9c, 0x03, 0x95, 0x86, 0x95, 0x52,
-  0xb7, 0x00, 0x00, 0x02, 0xb7, 0x00, 0x00, 0x04, 0xac, 0xce, 0x06, 0x82, 0x0e, 0x06,
-  0xf8, 0xac, 0xce, 0x08, 0x82, 0x0a, 0x08, 0xf8, 0xac, 0xce, 0x0a, 0x82, 0x0a, 0x0a,
-  0xf8, 0xa2, 0x22, 0xce, 0x88, 0xb5, 0xf7, 0xbb, 0x90, 0x00, 0xa2, 0x27, 0xce, 0x8b,
-  0xa2, 0x22, 0xce, 0x88, 0xab, 0x18, 0xb0, 0x20, 0x74, 0xb5, 0x0a, 0x06, 0x90, 0x00,
-  0xa2, 0x26, 0xce, 0x8b, 0xa2, 0x2c, 0xce, 0x8b, 0xa2, 0x33, 0xce, 0x8b, 0xa2, 0x22,
-  0xce, 0x88, 0xab, 0x18, 0xb0, 0x2f, 0x05, 0xb5, 0x09, 0xec, 0x90, 0x01, 0x36, 0x9c,
-  0x90, 0x00, 0xa2, 0x3a, 0xce, 0xab, 0xa2, 0x22, 0xce, 0x88, 0xab, 0x18, 0xb0, 0x20,
-  0x6f, 0xb5, 0x09, 0xd6, 0x90, 0x00, 0xb4, 0xf5, 0x85, 0xb7, 0x00, 0x01, 0x02, 0xa2,
-  0x54, 0xce, 0xa8, 0xab, 0x04, 0xac, 0xce, 0x06, 0x82, 0x42, 0x06, 0xf8, 0xac, 0xce,
-  0x08, 0x82, 0x3e, 0x08, 0xf8, 0xac, 0xce, 0x0a, 0x82, 0x46, 0x0a, 0xf8, 0xa2, 0x22,
-  0xce, 0x88, 0xb5, 0xf7, 0x4e, 0xa2, 0x22, 0xce, 0x88, 0xb5, 0xf5, 0xd0, 0xb4, 0xf5,
-  0xdd, 0x90, 0x00, 0xa2, 0x27, 0xce, 0x8b, 0xa2, 0x26, 0xce, 0x8b, 0xa2, 0x33, 0xce,
-  0x8b, 0xa2, 0x22, 0xce, 0x88, 0xab, 0x18, 0xb0, 0x20, 0x74, 0xb5, 0x09, 0x87, 0xa2,
-  0x22, 0xce, 0x88, 0xab, 0x18, 0xb0, 0x2f, 0x05, 0xb5, 0x09, 0x7b, 0x90, 0x01, 0xa2,
-  0x3a, 0xce, 0xab, 0xa2, 0x22, 0xce, 0x88, 0xab, 0x18, 0xb0, 0x20, 0x6f, 0xb5, 0x09,
-  0x69, 0xa2, 0x2e, 0xce, 0x88, 0x9c, 0x00, 0xb4, 0xfd, 0x35, 0x40, 0x90, 0x00, 0x37,
-  0x29, 0xa2, 0x29, 0xce, 0x88, 0x9c, 0x00, 0x46, 0x90, 0x01, 0xa2, 0x26, 0xce, 0x8b,
-  0xa2, 0x2a, 0xce, 0x88, 0x9c, 0x00, 0x94, 0x26, 0x90, 0x01, 0xa2, 0x33, 0xce, 0x8b,
-  0xa2, 0x22, 0xce, 0x88, 0xab, 0x18, 0xb0, 0x2f, 0x05, 0xb5, 0x09, 0x34, 0xa2, 0x02,
-  0xce, 0x88, 0xa2, 0x27, 0xce, 0x8b, 0xa2, 0x22, 0xce, 0x88, 0xab, 0x18, 0xb0, 0x20,
-  0x74, 0xb5, 0x09, 0x20, 0x90, 0x02, 0xa2, 0x3a, 0xce, 0xab, 0xa2, 0x22, 0xce, 0x88,
-  0xab, 0x18, 0xb0, 0x20, 0x6f, 0xb5, 0x09, 0x0e, 0x90, 0x00, 0xb5, 0xf4, 0xbd, 0xa2,
-  0x22, 0xce, 0x88, 0xb5, 0xf8, 0x34, 0xa2, 0x32, 0xce, 0x8b, 0xb4, 0xfd, 0x03, 0x90,
-  0x03, 0xa2, 0x3a, 0xce, 0xab, 0xa2, 0x22, 0xce, 0x88, 0xab, 0x18, 0xb0, 0x20, 0x6f,
-  0xb5, 0x08, 0xe9, 0xa2, 0x2e, 0xce, 0x88, 0x9c, 0x00, 0xb4, 0xfd, 0x2f, 0x95, 0x7f,
-  0xa2, 0x2c, 0xce, 0x88, 0x9d, 0x00, 0x52, 0x90, 0x01, 0xa2, 0x2c, 0xce, 0x8b, 0xa2,
-  0x22, 0xce, 0x88, 0xab, 0x18, 0xb0, 0x20, 0x70, 0xb5, 0x08, 0xc5, 0x90, 0x00, 0xa2,
-  0x2d, 0xce, 0x8b, 0xa2, 0x2b, 0xce, 0x8b, 0xa2, 0x20, 0xce, 0xa8, 0x9c, 0x01, 0xb4,
-  0xfe, 0x32, 0x9c, 0x04, 0xb4, 0xfe, 0x1d, 0xb4, 0xfd, 0xe4, 0xa2, 0x2b, 0xce, 0x88,
-  0x9c, 0x00, 0x4c, 0xa2, 0x20, 0xce, 0xa8, 0x9c, 0x02, 0xb4, 0xfd, 0x6d, 0xb4, 0xfd,
-  0xa0, 0x90, 0x01, 0x37, 0xf1, 0xa2, 0x20, 0xce, 0xa8, 0x9c, 0x01, 0xb4, 0xfe, 0x0a,
-  0x9c, 0x04, 0xb4, 0xfd, 0xf5, 0xb4, 0xfd, 0xbc, 0x90, 0x04, 0xa2, 0x3a, 0xce, 0xab,
-  0xa2, 0x22, 0xce, 0x88, 0xab, 0x18, 0xb0, 0x20, 0x6f, 0xb5, 0x08, 0x70, 0xa2, 0x2e,
-  0xce, 0x88, 0x9d, 0x00, 0x95, 0xf5, 0xb4, 0xfc, 0xf6, 0x90, 0x05, 0xa2, 0x3a, 0xce,
-  0xab, 0xa2, 0x22, 0xce, 0x88, 0xab, 0x18, 0xb0, 0x20, 0x6f, 0xb5, 0x08, 0x53, 0x90,
-  0x00, 0xb5, 0xf4, 0x02, 0xb5, 0xf7, 0x7d, 0xa2, 0x32, 0xce, 0x8b, 0xb4, 0xfc, 0x4c,
-  0xb7, 0x00, 0x01, 0x02, 0xb2, 0x43, 0xb7, 0xa2, 0x18, 0xce, 0xa8, 0xab, 0x04, 0xa2,
-  0x1a, 0xce, 0xa8, 0xab, 0x06, 0xa2, 0x1c, 0xce, 0xa8, 0xab, 0x08, 0xb7, 0x00, 0x06,
-  0x0a, 0xa2, 0x22, 0xce, 0x88, 0xb5, 0xf4, 0x79, 0x90, 0x06, 0xa2, 0x3a, 0xce, 0xab,
-  0xa2, 0x22, 0xce, 0x88, 0xab, 0x18, 0xb0, 0x20, 0x6f, 0xb5, 0x08, 0x0e, 0xb0, 0xd2,
-  0x4d, 0x91, 0x08, 0xb5, 0xf4, 0xc4, 0x3c, 0xb7, 0x00, 0x00, 0x02, 0xb7, 0x00, 0x00,
-  0x04, 0xb7, 0x04, 0x00, 0x06, 0xac, 0xce, 0xcc, 0x82, 0x34, 0xcc, 0xf8, 0xa2, 0x22,
-  0xce, 0x88, 0xb5, 0xec, 0x0a, 0x90, 0x07, 0xa2, 0x3a, 0xce, 0xab, 0xa2, 0x22, 0xce,
-  0x88, 0xab, 0x18, 0xb0, 0x20, 0x6f, 0xb5, 0x07, 0xd9, 0x90, 0x00, 0xb5, 0xf3, 0x88,
-  0xb7, 0x01, 0x03, 0x02, 0xb7, 0x00, 0x02, 0x04, 0xb7, 0x00, 0x00, 0x06, 0xa2, 0x22,
-  0xce, 0x88, 0xb4, 0xc4, 0x07, 0xb5, 0xf3, 0xea, 0xb4, 0xf3, 0xf7, 0xa8, 0x46, 0xb5,
-  0xc2, 0x50, 0xa2, 0x00, 0x74, 0xa8, 0x9c, 0x00, 0x3c, 0xa8, 0x44, 0xbc, 0x04, 0x01,
-  0x94, 0xbf, 0xbc, 0x04, 0x02, 0x94, 0xc2, 0xbc, 0x04, 0x0e, 0x94, 0xc5, 0xa2, 0x3a,
-  0x74, 0xa8, 0x9c, 0x00, 0x54, 0xa2, 0x29, 0x74, 0x88, 0x9d, 0x00, 0x4d, 0xa2, 0x2a,
-  0x74, 0x88, 0x9d, 0x00, 0x46, 0xac, 0x74, 0xce, 0xb4, 0xfd, 0x47, 0xa8, 0x44, 0xbc,
-  0x04, 0x03, 0x94, 0xaf, 0xbc, 0x04, 0xff, 0x94, 0x3a, 0xa2, 0x3a, 0x74, 0xa8, 0x9c,
-  0x00, 0x94, 0xae, 0x9c, 0x01, 0x94, 0xcb, 0x9c, 0x02, 0xb4, 0x01, 0x67, 0x9c, 0x03,
-  0xb4, 0x02, 0x1a, 0x9c, 0x04, 0xb4, 0x02, 0xec, 0x9c, 0x05, 0xb4, 0x03, 0x96, 0x9c,
-  0x06, 0xb4, 0x04, 0x40, 0x9c, 0x07, 0xb4, 0x04, 0x8f, 0x9c, 0x29, 0xb4, 0x04, 0x8b,
-  0x9c, 0x2a, 0xb4, 0x04, 0xa0, 0x9c, 0x2b, 0xb4, 0x04, 0xd6, 0x3c, 0xa2, 0x3a, 0x74,
-  0xa8, 0x9c, 0x03, 0x50, 0xa2, 0x34, 0x74, 0xa8, 0x96, 0x48, 0xfc, 0x41, 0x3c, 0x00,
-  0xa2, 0x34, 0x74, 0xab, 0x95, 0x4f, 0xa2, 0x36, 0x74, 0xa8, 0x96, 0x48, 0xfc, 0x94,
-  0x23, 0xa2, 0x38, 0x74, 0xa8, 0x96, 0x48, 0xfc, 0x42, 0x95, 0x21, 0xa2, 0x2d, 0x74,
-  0x88, 0x9d, 0x00, 0x95, 0x6a, 0x90, 0x01, 0xa2, 0x31, 0x74, 0x8b, 0x00, 0xa2, 0x38,
-  0x74, 0xab, 0xac, 0x74, 0xce, 0xb4, 0xfb, 0x49, 0x90, 0x01, 0xa2, 0x30, 0x74, 0x8b,
-  0x00, 0xa2, 0x36, 0x74, 0x8b, 0xac, 0x74, 0xce, 0xb4, 0xfb, 0x38, 0xa8, 0x48, 0xa2,
-  0x29, 0x74, 0x8b, 0x95, 0xbb, 0xa8, 0x48, 0xa2, 0x2a, 0x74, 0x8b, 0x95, 0xc3, 0xa8,
-  0x48, 0xa2, 0x28, 0x74, 0x8b, 0xac, 0x74, 0xce, 0xb4, 0xe4, 0x87, 0xa8, 0x48, 0x9d,
-  0x00, 0x90, 0x01, 0xa2, 0x2e, 0x74, 0x8b, 0x95, 0xb4, 0xa8, 0x44, 0xbc, 0x04, 0x01,
-  0x45, 0xbc, 0x04, 0x02, 0x41, 0x3c, 0xa2, 0x29, 0x74, 0x88, 0x9d, 0x00, 0x47, 0xa2,
-  0x2a, 0x74, 0x88, 0x9c, 0x00, 0x3c, 0xac, 0x74, 0xce, 0x37, 0x2c, 0xb4, 0xfc, 0xff,
-  0xa8, 0x44, 0xbc, 0x04, 0x03, 0x4a, 0xbc, 0x04, 0xff, 0x53, 0xbc, 0x04, 0x04, 0x94,
-  0x79, 0x3c, 0xa2, 0x2e, 0x74, 0x88, 0x9c, 0x00, 0x3c, 0xac, 0x74, 0xce, 0x36, 0xd9,
-  0x3c, 0x90, 0x00, 0xa2, 0x27, 0x74, 0x8b, 0xa2, 0x26, 0x74, 0x8b, 0xa2, 0x33, 0x74,
-  0x8b, 0xa2, 0x2d, 0x74, 0x8b, 0xa2, 0x30, 0x74, 0x8b, 0xa2, 0x31, 0x74, 0x8b, 0xa2,
-  0x22, 0x74, 0x88, 0xab, 0x18, 0xb0, 0x20, 0x74, 0xb5, 0x06, 0x5d, 0xa2, 0x22, 0x74,
-  0x88, 0xab, 0x18, 0xb0, 0x2f, 0x05, 0xb5, 0x06, 0x51, 0xb7, 0x00, 0x00, 0x02, 0xb7,
-  0x00, 0x00, 0x04, 0xb7, 0x00, 0x00, 0x06, 0xac, 0x74, 0xcc, 0x82, 0x36, 0xcc, 0xf8,
-  0x00, 0xb5, 0xea, 0x59, 0xb7, 0x00, 0x00, 0x02, 0xb7, 0x00, 0x00, 0x04, 0xb7, 0x00,
-  0x00, 0x06, 0xac, 0x74, 0xcc, 0x82, 0x38, 0xcc, 0xf8, 0x00, 0xb5, 0xea, 0x42, 0x90,
-  0x01, 0xac, 0x74, 0xce, 0xb5, 0xf9, 0x95, 0xb4, 0xfd, 0x1d, 0xa2, 0x2f, 0x74, 0x88,
-  0x9d, 0x00, 0x3c, 0xa8, 0x48, 0x99, 0x0e, 0x9c, 0x00, 0x3c, 0x90, 0x01, 0xac, 0x74,
-  0xce, 0xb5, 0xf9, 0x7c, 0xb4, 0xf9, 0xd4, 0xa8, 0x44, 0xbc, 0x04, 0x03, 0x54, 0xbc,
-  0x04, 0x06, 0x5e, 0xbc, 0x04, 0x04, 0x94, 0x54, 0xbc, 0x04, 0xff, 0x94, 0x82, 0xbc,
-  0x04, 0x0d, 0x94, 0x93, 0x3c, 0xa2, 0x2e, 0x74, 0x88, 0x9d, 0x00, 0x46, 0xac, 0x74,
-  0xce, 0xb4, 0xfc, 0x37, 0x3c, 0xa8, 0x48, 0x9c, 0x02, 0x41, 0x3c, 0x90, 0x00, 0xa2,
-  0x27, 0x74, 0x8b, 0xa2, 0x26, 0x74, 0x8b, 0xa2, 0x22, 0x74, 0x88, 0xab, 0x18, 0xb0,
-  0x20, 0x74, 0xb5, 0x05, 0xbb, 0xa2, 0x2c, 0x74, 0x88, 0x9d, 0x00, 0x52, 0x90, 0x01,
-  0xa2, 0x2c, 0x74, 0x8b, 0xa2, 0x22, 0x74, 0x88, 0xab, 0x18, 0xb0, 0x20, 0x70, 0xb5,
-  0x05, 0xa2, 0xac, 0x74, 0xce, 0xb4, 0xfd, 0x37, 0xa8, 0x48, 0x99, 0x10, 0x9c, 0x00,
-  0x3c, 0xa2, 0x54, 0x74, 0xa8, 0xb5, 0xc0, 0x50, 0xa2, 0x00, 0x78, 0xa8, 0xa2, 0x02,
-  0x78, 0xfa, 0x9c, 0x00, 0x4c, 0x90, 0x01, 0xa2, 0x32, 0x74, 0x8b, 0xac, 0x74, 0xce,
-  0xb4, 0xf9, 0x7f, 0x90, 0x00, 0xa2, 0x32, 0x74, 0x8b, 0xac, 0x74, 0xce, 0x36, 0x53,
-  0xb4, 0xfb, 0xc8, 0x90, 0x00, 0xa2, 0x32, 0x74, 0x8b, 0xa8, 0x46, 0xb5, 0xf4, 0x90,
-  0x9c, 0x00, 0x3c, 0xac, 0x74, 0xce, 0x36, 0x69, 0xb4, 0xfb, 0xb2, 0xa8, 0x48, 0xa2,
-  0x02, 0x74, 0x8b, 0xac, 0x74, 0xce, 0xb4, 0xfb, 0xe8, 0xa8, 0x44, 0xbc, 0x04, 0x03,
-  0x4a, 0xbc, 0x04, 0x04, 0x54, 0xbc, 0x04, 0xff, 0x94, 0xb4, 0x3c, 0xa2, 0x2e, 0x74,
-  0x88, 0x9c, 0x00, 0x3c, 0xac, 0x74, 0xce, 0xb5, 0xfb, 0xcb, 0x3c, 0xa8, 0x48, 0x99,
-  0x01, 0x9c, 0x00, 0x48, 0xa2, 0x30, 0x74, 0x88, 0x9d, 0x00, 0x94, 0x4b, 0xa8, 0x48,
-  0x99, 0x02, 0x9c, 0x00, 0x48, 0xa2, 0x31, 0x74, 0x88, 0x9d, 0x00, 0x94, 0x3c, 0xa8,
-  0x48, 0x99, 0x20, 0x9d, 0x00, 0x94, 0x34, 0xa8, 0x48, 0x99, 0x03, 0x9c, 0x00, 0x94,
-  0x35, 0xa2, 0x2d, 0x74, 0x88, 0x9c, 0x00, 0x94, 0x2d, 0x90, 0x00, 0xa2, 0x2d, 0x74,
-  0x8b, 0xb7, 0x15, 0xa4, 0x02, 0xb7, 0x00, 0x00, 0x04, 0xb7, 0x04, 0x00, 0x06, 0xac,
-  0x74, 0xcc, 0x82, 0x38, 0xcc, 0xf8, 0xa8, 0x46, 0xb5, 0xe8, 0xf4, 0xac, 0x74, 0xce,
-  0xb4, 0xf9, 0x1e, 0xac, 0x74, 0xce, 0xb5, 0xfb, 0xeb, 0xb4, 0xfc, 0x44, 0xa8, 0x48,
-  0x99, 0x08, 0x9c, 0x00, 0x94, 0x32, 0xa2, 0x2d, 0x74, 0x88, 0x9d, 0x00, 0x94, 0x2a,
-  0xb7, 0x15, 0xa4, 0x02, 0xb7, 0x00, 0x00, 0x04, 0xb7, 0x04, 0x00, 0x06, 0xac, 0x74,
-  0xcc, 0x82, 0x36, 0xcc, 0xf8, 0xa8, 0x46, 0xb5, 0xe8, 0xbd, 0x90, 0x01, 0xa2, 0x2d,
-  0x74, 0x8b, 0x90, 0x00, 0xa2, 0x31, 0x74, 0x8b, 0xac, 0x74, 0xce, 0xb4, 0xf8, 0xdb,
-  0x90, 0x00, 0xac, 0x74, 0xce, 0xb4, 0xf0, 0x38, 0xa2, 0x2a, 0x74, 0x88, 0x9c, 0x00,
-  0x3c, 0xa2, 0x2d, 0x74, 0x88, 0x9c, 0x00, 0x3c, 0xac, 0x74, 0xce, 0xb4, 0xfc, 0x2c,
-  0xa8, 0x44, 0xbc, 0x04, 0x0b, 0x50, 0xbc, 0x04, 0x04, 0x94, 0x2f, 0xbc, 0x04, 0x03,
-  0x94, 0x5e, 0xbc, 0x04, 0xff, 0x94, 0x7d, 0x3c, 0xa8, 0x48, 0xa2, 0x2c, 0x74, 0xdc,
-  0x50, 0xa2, 0x2c, 0x74, 0x8b, 0xa2, 0x22, 0x74, 0x88, 0xab, 0x18, 0xb0, 0x20, 0x70,
-  0xb5, 0x04, 0x43, 0xa2, 0x2c, 0x74, 0x88, 0x9d, 0x00, 0x3c, 0xac, 0x74, 0xce, 0xb4,
-  0xfa, 0x95, 0xa8, 0x48, 0x99, 0x06, 0x9c, 0x00, 0x53, 0xa2, 0x2d, 0x74, 0x88, 0x9c,
-  0x00, 0x4c, 0x90, 0x00, 0xa2, 0x2d, 0x74, 0x8b, 0xac, 0x74, 0xce, 0xb4, 0xf8, 0xad,
-  0xa8, 0x48, 0x99, 0x08, 0x9c, 0x00, 0x3c, 0xa2, 0x2d, 0x74, 0x88, 0x9d, 0x00, 0x3c,
-  0x90, 0x01, 0xa2, 0x2d, 0x74, 0x8b, 0xac, 0x74, 0xce, 0xb4, 0xf8, 0x93, 0xa2, 0x2e,
-  0x74, 0x88, 0x9c, 0x00, 0x3c, 0x90, 0x00, 0xac, 0x74, 0xce, 0xb5, 0xf7, 0x6d, 0x90,
-  0x01, 0xa2, 0x33, 0x74, 0x8b, 0xa2, 0x22, 0x74, 0x88, 0xab, 0x18, 0xb0, 0x2f, 0x05,
-  0xb5, 0x03, 0xe1, 0xb4, 0xfb, 0x79, 0xa2, 0x2d, 0x74, 0x88, 0x9d, 0x00, 0x49, 0xac,
-  0x74, 0xce, 0xb5, 0xfb, 0x27, 0xb4, 0xf8, 0x5f, 0xa2, 0x2a, 0x74, 0x88, 0x9c, 0x00,
-  0x3c, 0xac, 0x74, 0xce, 0xb4, 0xfb, 0x7d, 0xa8, 0x44, 0xbc, 0x04, 0x06, 0x50, 0xbc,
-  0x04, 0x03, 0x94, 0x32, 0xbc, 0x04, 0x04, 0x94, 0x54, 0xbc, 0x04, 0xff, 0x94, 0x83,
-  0x3c, 0xa8, 0x48, 0x9c, 0x01, 0x41, 0x3c, 0xac, 0x74, 0xce, 0xa2, 0x2c, 0x74, 0x88,
-  0x9d, 0x00, 0x30, 0x04, 0xb5, 0xfa, 0x38, 0x3c, 0x90, 0x00, 0xa2, 0x2c, 0x74, 0x8b,
-  0xa2, 0x22, 0x74, 0x88, 0xab, 0x18, 0xb0, 0x20, 0x70, 0xb4, 0x03, 0x84, 0xa2, 0x2e,
-  0x74, 0x88, 0x9d, 0x00, 0x3c, 0x90, 0x00, 0xa2, 0x2b, 0x74, 0x8b, 0xa2, 0x2d, 0x74,
-  0x8b, 0xa2, 0x33, 0x74, 0x8b, 0xa2, 0x22, 0x74, 0x88, 0xab, 0x18, 0xb0, 0x2f, 0x05,
-  0xb5, 0x03, 0x63, 0xac, 0x74, 0xce, 0xb4, 0xfa, 0xdb, 0xa8, 0x48, 0x99, 0x10, 0x9c,
-  0x00, 0x3c, 0xa2, 0x54, 0x74, 0xa8, 0xb5, 0xbe, 0x11, 0xa2, 0x00, 0x74, 0xa8, 0xa2,
-  0x00, 0x74, 0xfa, 0x9c, 0x00, 0x4c, 0x90, 0x01, 0xa2, 0x32, 0x74, 0x8b, 0xac, 0x74,
-  0xce, 0xb4, 0xf7, 0x40, 0x90, 0x00, 0xa2, 0x32, 0x74, 0x8b, 0xac, 0x74, 0xce, 0xb5,
-  0xfb, 0x6b, 0xb4, 0xfa, 0xa7, 0x90, 0x00, 0xa2, 0x32, 0x74, 0x8b, 0xa8, 0x46, 0xb5,
-  0xf2, 0x50, 0x9c, 0x00, 0x3c, 0xac, 0x74, 0xce, 0xb5, 0xfb, 0x54, 0xb4, 0xfa, 0x90,
-  0xa8, 0x44, 0xbc, 0x04, 0x04, 0x4b, 0xbc, 0x04, 0x0c, 0x94, 0x32, 0xbc, 0x04, 0xff,
-  0x94, 0x2d, 0x3c, 0xa8, 0x48, 0x99, 0x06, 0x9c, 0x00, 0x3c, 0xa2, 0x2c, 0x74, 0x88,
-  0x9d, 0x00, 0x4f, 0xb5, 0xef, 0xe7, 0x90, 0x00, 0xa2, 0x2d, 0x74, 0x8b, 0xac, 0x74,
-  0xce, 0xb4, 0xf9, 0xe9, 0xb5, 0xef, 0xd8, 0x90, 0x00, 0xa2, 0x2d, 0x74, 0x8b, 0xac,
-  0x74, 0xce, 0xb4, 0xfa, 0x53, 0xb5, 0xef, 0xc9, 0xa2, 0x14, 0x72, 0x88, 0x9c, 0x00,
-  0x3c, 0xa2, 0x34, 0x74, 0xa8, 0x9d, 0x00, 0x3c, 0xac, 0x74, 0xce, 0xb4, 0xfa, 0xb9,
-  0x3c, 0xa8, 0x44, 0xbc, 0x04, 0xff, 0x41, 0x3c, 0x90, 0x01, 0xac, 0x74, 0xce, 0xb5,
-  0xf0, 0x50, 0xb5, 0xef, 0xa2, 0xa8, 0x46, 0xb5, 0xee, 0xd2, 0xb4, 0xfa, 0x21, 0xa8,
-  0x44, 0xbc, 0x04, 0xff, 0x41, 0x3c, 0xb5, 0xef, 0x90, 0xb7, 0x00, 0x00, 0x02, 0xac,
-  0xce, 0xcc, 0x82, 0x12, 0xcc, 0xf8, 0xb7, 0x00, 0x00, 0x04, 0xb7, 0x00, 0x00, 0x06,
-  0xb7, 0x00, 0x00, 0x08, 0xb7, 0x00, 0x00, 0x0a, 0xa2, 0x22, 0xce, 0x88, 0xb5, 0xee,
-  0xd0, 0xb0, 0xd2, 0x4d, 0x91, 0x08, 0xb5, 0xef, 0x2d, 0x90, 0x2b, 0xa2, 0x3a, 0x74,
-  0xab, 0x3c, 0xa8, 0x44, 0xbc, 0x04, 0xff, 0x41, 0x3c, 0xb5, 0xef, 0x55, 0xac, 0x74,
-  0xce, 0xb4, 0xf9, 0xd6, 0xa2, 0x28, 0xce, 0x88, 0xab, 0xca, 0x90, 0x01, 0x82, 0x00,
-  0xca, 0xfc, 0x44, 0xe7, 0xaa, 0xca, 0x63, 0xab, 0x02, 0xa2, 0x06, 0xce, 0xa8, 0xe7,
-  0xe7, 0xab, 0xca, 0xa8, 0x02, 0x82, 0x00, 0xca, 0xfc, 0x44, 0xe7, 0xaa, 0xca, 0x63,
-  0xab, 0x02, 0xa2, 0x08, 0x72, 0xa8, 0x96, 0x02, 0xf9, 0x9c, 0x00, 0x42, 0x00, 0x3c,
-  0x90, 0x01, 0x3c, 0xab, 0xca, 0x9c, 0x03, 0xb4, 0x01, 0x80, 0x05, 0xab, 0x02, 0xb7,
-  0x00, 0x04, 0x04, 0x92, 0x00, 0xb7, 0x00, 0x00, 0x06, 0x82, 0x00, 0x06, 0xfd, 0xb4,
-  0x01, 0x69, 0x82, 0x04, 0x04, 0xfc, 0xb4, 0x01, 0x46, 0xaf, 0xcc, 0xa8, 0x02, 0xe7,
-  0xe7, 0xa0, 0xc8, 0xcc, 0xf8, 0x82, 0x58, 0xcc, 0xf8, 0xa2, 0x01, 0xcc, 0x88, 0xab,
-  0x04, 0xc4, 0xab, 0x08, 0x3f, 0xcc, 0x82, 0x04, 0x04, 0xfc, 0x94, 0x41, 0xa8, 0x08,
-  0xb5, 0xbc, 0x75, 0xac, 0x74, 0xcc, 0x82, 0x01, 0xca, 0xfc, 0x4c, 0x82, 0x02, 0xca,
-  0xfc, 0x54, 0x82, 0x03, 0xca, 0xfc, 0x57, 0x95, 0x44, 0xa2, 0x4a, 0xcc, 0x88, 0x9c,
-  0x00, 0x72, 0xb7, 0x00, 0x02, 0x06, 0x95, 0x51, 0xa2, 0x4b, 0xcc, 0x88, 0x9c, 0x00,
-  0x7a, 0x6d, 0xa2, 0x4c, 0xcc, 0x88, 0x9c, 0x00, 0x95, 0x61, 0xa2, 0x06, 0xcc, 0xa8,
-  0x05, 0x96, 0x02, 0xfc, 0x7e, 0x95, 0x6c, 0xa8, 0x08, 0xb5, 0xbc, 0x48, 0xac, 0x76,
-  0xce, 0x82, 0x01, 0xca, 0xfc, 0x4e, 0x82, 0x02, 0xca, 0xfc, 0x94, 0x5d, 0x82, 0x03,
-  0xca, 0xfc, 0x94, 0x76, 0x95, 0x87, 0xa2, 0x06, 0xce, 0xa8, 0x9c, 0x00, 0x4d, 0x9c,
-  0x01, 0x58, 0x9c, 0x02, 0x94, 0x2b, 0x9c, 0x03, 0x94, 0x39, 0x95, 0x9b, 0xa2, 0x56,
-  0xce, 0x88, 0x9c, 0x00, 0x95, 0xa3, 0xb7, 0x00, 0x04, 0x06, 0x95, 0xa9, 0xa2, 0x57,
-  0xce, 0x88, 0x9d, 0x00, 0x6c, 0xa2, 0x58, 0xce, 0x88, 0x9d, 0x00, 0x73, 0xa2, 0x56,
-  0xce, 0x88, 0x9d, 0x00, 0x7a, 0x95, 0xc0, 0xa2, 0x57, 0xce, 0x88, 0x9d, 0x00, 0x95,
-  0x23, 0xa2, 0x58, 0xce, 0x88, 0x9d, 0x00, 0x95, 0x2b, 0x95, 0xd2, 0xa2, 0x59, 0xce,
-  0x88, 0x9c, 0x00, 0x95, 0xda, 0x95, 0x37, 0xa2, 0x06, 0xce, 0xa8, 0x9c, 0x00, 0x95,
-  0x39, 0x9c, 0x01, 0x95, 0x2f, 0x9c, 0x02, 0x95, 0x22, 0x9c, 0x03, 0x42, 0x95, 0xf1,
-  0xa2, 0x5a, 0xce, 0x88, 0x9c, 0x00, 0x95, 0xf9, 0x95, 0x56, 0xa2, 0x0a, 0xce, 0xa8,
-  0x05, 0x96, 0x02, 0xfc, 0x43, 0xb4, 0xfe, 0xf7, 0xa2, 0x06, 0xce, 0xa8, 0x9c, 0x03,
-  0x94, 0x26, 0xa2, 0x5e, 0xce, 0x88, 0x9c, 0x00, 0xb4, 0xfe, 0xe6, 0xa2, 0x56, 0xce,
-  0x88, 0x9d, 0x00, 0xb4, 0xfe, 0xdd, 0xa2, 0x57, 0xce, 0x88, 0x9d, 0x00, 0xb4, 0xfe,
-  0xd4, 0xa2, 0x58, 0xce, 0x88, 0x9d, 0x00, 0xb4, 0xfe, 0xcb, 0x95, 0x90, 0xa2, 0x5e,
-  0xce, 0x88, 0x9c, 0x00, 0xb4, 0xfe, 0xc0, 0xa2, 0x59, 0xce, 0x88, 0x9d, 0x00, 0xb4,
-  0xfe, 0xb7, 0xa2, 0x5a, 0xce, 0x88, 0x9d, 0x00, 0xb4, 0xfe, 0xae, 0x95, 0xad, 0xaf,
-  0xce, 0xa8, 0x02, 0xe7, 0xe7, 0xa0, 0xc8, 0xce, 0xf8, 0x82, 0x1a, 0xce, 0xf8, 0xa2,
-  0x01, 0xce, 0x88, 0xab, 0x04, 0xd4, 0xab, 0x08, 0x3f, 0xce, 0xb4, 0xfe, 0xb7, 0xa8,
-  0x06, 0x3c, 0xa2, 0x0a, 0xce, 0xa8, 0x05, 0xab, 0x02, 0xb4, 0xfe, 0x79, 0xb7, 0x00,
-  0x01, 0x02, 0xb7, 0x00, 0x00, 0x04, 0xa2, 0x06, 0xce, 0xa8, 0x9c, 0x00, 0x94, 0x24,
-  0x9c, 0x01, 0x94, 0x47, 0x9c, 0x02, 0x94, 0x43, 0x9c, 0x03, 0x94, 0x59, 0x82, 0x00,
-  0x04, 0xfc, 0x50, 0xaf, 0xce, 0xa8, 0x04, 0x35, 0xb6, 0x3f, 0xce, 0x9c, 0x02, 0x42,
-  0x00, 0x3c, 0x90, 0x01, 0x3c, 0xa8, 0x02, 0x3c, 0xa2, 0x5b, 0xce, 0x88, 0xa2, 0x5f,
-  0xce, 0xda, 0xa2, 0x5d, 0xce, 0xda, 0xa2, 0x61, 0xce, 0xda, 0x9c, 0x00, 0x46, 0xb7,
-  0x00, 0x02, 0x04, 0x95, 0x2f, 0xa2, 0x5e, 0xce, 0x88, 0x9c, 0x00, 0x95, 0x37, 0xb7,
-  0x00, 0x03, 0x04, 0x95, 0x3d, 0xa2, 0x5b, 0xce, 0x88, 0xa2, 0x5f, 0xce, 0xda, 0xa2,
-  0x5c, 0xce, 0xda, 0xa2, 0x60, 0xce, 0xda, 0x9c, 0x00, 0x95, 0x20, 0xb7, 0x00, 0x01,
-  0x04, 0x95, 0x57, 0xa2, 0x59, 0xce, 0x88, 0x9c, 0x00, 0x46, 0xb7, 0x00, 0x01, 0x04,
-  0x95, 0x64, 0xa2, 0x5a, 0xce, 0x88, 0x9c, 0x00, 0x95, 0x3b, 0xb7, 0x00, 0x02, 0x04,
-  0x95, 0x72, 0xab, 0x1a, 0xbc, 0x10, 0x29, 0x94, 0x80, 0xbc, 0x10, 0x2a, 0x94, 0x86,
-  0xbc, 0x10, 0x2b, 0x94, 0x86, 0xbc, 0x10, 0x2e, 0x94, 0xad, 0xbc, 0x20, 0x17, 0x94,
-  0xae, 0xbc, 0x20, 0x6f, 0x94, 0xb4, 0xbc, 0x20, 0x70, 0x94, 0xba, 0xbc, 0x20, 0x74,
-  0x94, 0xc5, 0xbc, 0x20, 0x29, 0x94, 0xca, 0xbc, 0x2f, 0x07, 0x94, 0xe3, 0xbc, 0x2f,
-  0x05, 0x94, 0xe9, 0xbc, 0x32, 0x0e, 0x94, 0xef, 0xbc, 0x40, 0x0d, 0xb4, 0x01, 0x00,
-  0xbc, 0x40, 0x0f, 0xb4, 0x01, 0x11, 0xbc, 0x40, 0x10, 0xb4, 0x01, 0x4f, 0xbc, 0x40,
-  0x21, 0xb4, 0x01, 0x61, 0xbc, 0x40, 0x2a, 0xb4, 0x01, 0x72, 0xbc, 0x40, 0x33, 0xb4,
-  0x01, 0x8d, 0xbc, 0x40, 0x40, 0xb4, 0x01, 0x9f, 0xbc, 0x40, 0x34, 0xb4, 0x01, 0xb1,
-  0xbc, 0x40, 0x35, 0xb4, 0x01, 0xcc, 0xbc, 0x40, 0x3d, 0xb4, 0x01, 0xe7, 0xbc, 0x40,
-  0x3e, 0xb4, 0x01, 0xf9, 0xbc, 0x40, 0x3f, 0xb4, 0x02, 0x0b, 0x3c, 0xa2, 0x20, 0x72,
-  0xa8, 0xab, 0x1c, 0x90, 0x02, 0xb4, 0x02, 0x17, 0xa2, 0x22, 0x72, 0xa8, 0x6b, 0xa2,
-  0x14, 0x72, 0x88, 0x9c, 0x00, 0x43, 0x90, 0x00, 0x75, 0xb7, 0x00, 0x00, 0x1c, 0xa2,
-  0x1a, 0x72, 0xa8, 0x9c, 0x00, 0x46, 0x90, 0x01, 0xa0, 0xc8, 0x1c, 0xfa, 0xa2, 0x1c,
-  0x72, 0xa8, 0x9c, 0x00, 0x46, 0x90, 0x02, 0xa0, 0xc8, 0x1c, 0xfa, 0xa8, 0x1c, 0x95,
-  0x36, 0xa2, 0x27, 0x72, 0x88, 0x94, 0x1f, 0xa8, 0x18, 0xb5, 0xb9, 0xcc, 0xa2, 0x52,
-  0x74, 0xa8, 0x95, 0x47, 0xa8, 0x18, 0xb5, 0xb9, 0xc1, 0xa2, 0x3a, 0x74, 0xa8, 0x95,
-  0x52, 0xa8, 0x18, 0xb5, 0xb9, 0xb6, 0xa2, 0x2c, 0x74, 0x88, 0xab, 0x1c, 0x90, 0x01,
-  0xb4, 0x01, 0xba, 0xa8, 0x18, 0xb5, 0xb9, 0xa6, 0xa2, 0x27, 0x74, 0x88, 0x70, 0xa8,
-  0x18, 0xb5, 0xb9, 0x9c, 0xaf, 0xcc, 0xaf, 0xca, 0xac, 0x74, 0xca, 0x82, 0x12, 0xca,
-  0xf8, 0x92, 0x1c, 0xb5, 0xe2, 0x82, 0x3f, 0xca, 0x3f, 0xcc, 0x90, 0x06, 0xb4, 0x01,
-  0x92, 0xa8, 0x18, 0xb5, 0xb9, 0x7e, 0xa2, 0x24, 0x74, 0xa8, 0x95, 0x95, 0xa8, 0x18,
-  0xb5, 0xb9, 0x73, 0xa2, 0x33, 0x74, 0x88, 0x95, 0x43, 0x8c, 0x7c, 0x3c, 0xac, 0x78,
-  0x3e, 0xa8, 0x18, 0xb5, 0xb9, 0x8a, 0xa2, 0x12, 0x78, 0xa8, 0x8c, 0x3c, 0x7c, 0xac,
-  0x3e, 0x78, 0x95, 0xb7, 0x8c, 0x7b, 0x3c, 0xac, 0x76, 0x3e, 0xa8, 0x18, 0xb5, 0xb9,
-  0x5f, 0xa2, 0x28, 0x76, 0x88, 0x8c, 0x3c, 0x7b, 0xac, 0x3e, 0x76, 0x95, 0xce, 0x8c,
-  0x7b, 0x3c, 0xac, 0x76, 0x3e, 0xa8, 0x18, 0xb5, 0xb9, 0x48, 0xaf, 0xcc, 0xaf, 0xce,
-  0xac, 0x76, 0xcc, 0x82, 0x46, 0xcc, 0xf8, 0x90, 0x09, 0xb5, 0x21, 0xe6, 0x94, 0x20,
-  0x00, 0xab, 0x1c, 0xac, 0x76, 0xcc, 0x82, 0x44, 0xcc, 0xf8, 0x90, 0x09, 0xb5, 0x21,
-  0xd5, 0x54, 0x00, 0x96, 0x1c, 0xfa, 0x3f, 0xce, 0x3f, 0xcc, 0x8c, 0x3c, 0x7b, 0xac,
-  0x3e, 0x76, 0x95, 0xae, 0x90, 0x02, 0x95, 0x21, 0x90, 0x01, 0x75, 0x8c, 0x7b, 0x3c,
-  0xac, 0x76, 0x3e, 0xa8, 0x18, 0xb5, 0xb9, 0x04, 0xa2, 0x62, 0x76, 0xa8, 0x8c, 0x3c,
-  0x7b, 0xac, 0x3e, 0x76, 0xb4, 0xfe, 0xd4, 0x8c, 0x7b, 0x3c, 0xac, 0x76, 0x3e, 0xa8,
-  0x18, 0xb5, 0xb8, 0xec, 0xa2, 0x3f, 0x76, 0x88, 0x8c, 0x3c, 0x7b, 0xac, 0x3e, 0x76,
-  0x95, 0xe4, 0x8c, 0x7b, 0x3c, 0xac, 0x76, 0x3e, 0xa8, 0x18, 0xb5, 0xb8, 0xd5, 0xa2,
-  0x30, 0x76, 0xa8, 0xab, 0x1c, 0xa2, 0x32, 0x76, 0xa8, 0xab, 0x1e, 0x8c, 0x3c, 0x7b,
-  0xac, 0x3e, 0x76, 0x90, 0x04, 0x94, 0xba, 0x8c, 0x7b, 0x3c, 0xac, 0x76, 0x3e, 0xa8,
-  0x18, 0xb5, 0xb8, 0xb4, 0xa2, 0x74, 0x76, 0x88, 0x8c, 0x3c, 0x7b, 0xac, 0x3e, 0x76,
-  0xb4, 0xfe, 0xe1, 0x8c, 0x7b, 0x3c, 0xac, 0x76, 0x3e, 0xa8, 0x18, 0xb5, 0xb8, 0x9c,
-  0xa2, 0x12, 0x76, 0x88, 0x8c, 0x3c, 0x7b, 0xac, 0x3e, 0x76, 0xb4, 0xfe, 0xc9, 0x8c,
-  0x7b, 0x3c, 0xac, 0x76, 0x3e, 0xa8, 0x18, 0xb5, 0xb8, 0x84, 0xa2, 0x68, 0x76, 0xa8,
-  0xab, 0x1c, 0xa2, 0x6a, 0x76, 0xa8, 0xab, 0x1e, 0x8c, 0x3c, 0x7b, 0xac, 0x3e, 0x76,
-  0x90, 0x04, 0x94, 0x69, 0x8c, 0x7b, 0x3c, 0xac, 0x76, 0x3e, 0xa8, 0x18, 0xb5, 0xb8,
-  0x63, 0xa2, 0x6c, 0x76, 0xa8, 0xab, 0x1c, 0xa2, 0x6e, 0x76, 0xa8, 0xab, 0x1e, 0x8c,
-  0x3c, 0x7b, 0xac, 0x3e, 0x76, 0x90, 0x04, 0x94, 0x48, 0x8c, 0x7b, 0x3c, 0xac, 0x76,
-  0x3e, 0xa8, 0x18, 0xb5, 0xb8, 0x42, 0xa2, 0x2c, 0x76, 0xa8, 0x8c, 0x3c, 0x7b, 0xac,
-  0x3e, 0x76, 0xb4, 0xfe, 0x12, 0x8c, 0x7b, 0x3c, 0xac, 0x76, 0x3e, 0xa8, 0x18, 0xb5,
-  0xb8, 0x2a, 0xa2, 0x4e, 0x76, 0xa8, 0x8c, 0x3c, 0x7b, 0xac, 0x3e, 0x76, 0xb4, 0xfd,
-  0xfa, 0x8c, 0x7b, 0x3c, 0xac, 0x76, 0x3e, 0xa8, 0x18, 0xb5, 0xb8, 0x12, 0xa2, 0x2a,
-  0x76, 0x88, 0x8c, 0x3c, 0x7b, 0xac, 0x3e, 0x76, 0xb4, 0xfd, 0xe2, 0x9a, 0x20, 0xb4,
-  0x11, 0x76, 0xa2, 0x06, 0xcc, 0xa8, 0xbc, 0x10, 0x1a, 0x94, 0x8b, 0xbc, 0x10, 0x1b,
-  0x94, 0xa9, 0xbc, 0x10, 0x1f, 0x94, 0xed, 0xbc, 0x1f, 0x07, 0xb4, 0x00, 0xff, 0xbc,
-  0x1f, 0x08, 0xb4, 0x01, 0x02, 0xbc, 0x20, 0x20, 0xb4, 0x01, 0x05, 0xbc, 0x20, 0x76,
-  0xb4, 0x01, 0x47, 0xbc, 0x20, 0x18, 0xb4, 0x01, 0x56, 0xbc, 0x20, 0x1d, 0xb4, 0x01,
-  0x6d, 0xbc, 0x2f, 0x01, 0xb4, 0x01, 0x7c, 0xbc, 0x2f, 0x03, 0xb4, 0x01, 0x86, 0xbc,
-  0x32, 0x15, 0xb4, 0x01, 0xba, 0xbc, 0x32, 0x16, 0xb4, 0x01, 0xb4, 0xbc, 0x32, 0x17,
-  0xb4, 0x01, 0xae, 0xbc, 0x32, 0x13, 0xb4, 0x02, 0x21, 0xbc, 0x40, 0x0e, 0xb4, 0x02,
-  0x3a, 0xbc, 0x40, 0x11, 0xb4, 0x02, 0x44, 0xbc, 0x40, 0x3a, 0xb4, 0x02, 0x69, 0xbc,
-  0x40, 0x3b, 0xb4, 0x02, 0x73, 0xbc, 0x40, 0x15, 0xb4, 0x02, 0x7d, 0xbc, 0x40, 0x1f,
-  0xb4, 0x02, 0x96, 0xbc, 0x4f, 0x02, 0xb4, 0x02, 0xca, 0xbc, 0x60, 0x00, 0x41, 0x3c,
-  0xb5, 0xed, 0x17, 0x90, 0x01, 0xa2, 0x0e, 0x72, 0x8b, 0x3c, 0xa2, 0x0e, 0xcc, 0xa8,
-  0x99, 0x01, 0xa2, 0x15, 0x72, 0x8b, 0xb7, 0x01, 0x06, 0x02, 0xb7, 0x00, 0x00, 0x04,
-  0xb7, 0x00, 0x00, 0x06, 0x00, 0xb5, 0xb8, 0xea, 0xa2, 0x0e, 0xcc, 0xa8, 0xa2, 0x06,
-  0x72, 0xab, 0x3c, 0xa2, 0x0e, 0xcc, 0xa8, 0xa2, 0x08, 0x72, 0xab, 0xb7, 0x00, 0x00,
-  0x0a, 0x80, 0x7e, 0x0a, 0xfc, 0x3c, 0xa8, 0x0a, 0xb5, 0xb7, 0x33, 0xa2, 0x4e, 0x76,
-  0xa8, 0x9c, 0x00, 0x4d, 0x9c, 0x01, 0x4a, 0x9c, 0x02, 0x47, 0x9c, 0x03, 0x44, 0x9c,
-  0x09, 0x41, 0x44, 0xa9, 0x0a, 0x95, 0x20, 0xac, 0x76, 0xce, 0xb5, 0xfa, 0x0f, 0x9d,
-  0x00, 0x6c, 0xb7, 0x02, 0x01, 0x02, 0xb7, 0x00, 0x00, 0x04, 0xb7, 0x00, 0x00, 0x06,
-  0xa8, 0x0a, 0xb5, 0xb8, 0x99, 0x7e, 0xa2, 0x10, 0xcc, 0xa8, 0xab, 0xca, 0xa2, 0x0e,
-  0xcc, 0xa8, 0xb5, 0x10, 0x45, 0xa2, 0x02, 0x72, 0xab, 0xa8, 0xca, 0xa2, 0x04, 0x72,
-  0xab, 0x3c, 0xa2, 0x0e, 0xcc, 0xa8, 0xa2, 0x34, 0x72, 0xab, 0x3c, 0xa2, 0x0e, 0xcc,
-  0x88, 0xa2, 0x30, 0x72, 0xab, 0x3c, 0xa2, 0x0a, 0xcc, 0xa8, 0xb5, 0xb6, 0xbb, 0xa2,
-  0x0e, 0xcc, 0x88, 0xa2, 0x08, 0x74, 0x8b, 0xac, 0x74, 0xce, 0xb5, 0xd9, 0xcd, 0xa2,
-  0x12, 0x72, 0x88, 0x9c, 0x02, 0x4a, 0xb5, 0xb6, 0xb7, 0xac, 0x76, 0xce, 0xb5, 0xd2,
-  0xe6, 0x3c, 0xa2, 0x10, 0x72, 0x88, 0x9c, 0x02, 0x4a, 0xb5, 0xb6, 0xa6, 0xac, 0x76,
-  0xce, 0xb5, 0xd2, 0xd5, 0x3c, 0xa2, 0x11, 0x72, 0x88, 0x9c, 0x02, 0x3c, 0xb5, 0xb6,
-  0x95, 0xac, 0x76, 0xce, 0xb5, 0xd2, 0xc4, 0x3c, 0xb7, 0x04, 0x0d, 0x02, 0xa2, 0x0e,
-  0xcc, 0x88, 0xab, 0x04, 0xb7, 0x00, 0x00, 0x06, 0xa2, 0x0a, 0xcc, 0xa8, 0xb4, 0xb8,
-  0x11, 0xa2, 0x0a, 0xcc, 0xa8, 0xb5, 0xb6, 0x5e, 0xac, 0xcc, 0xca, 0xaf, 0xcc, 0xac,
-  0x74, 0xcc, 0x82, 0x18, 0xcc, 0xf8, 0x82, 0x0e, 0xca, 0xf8, 0xb5, 0xdf, 0x41, 0x3f,
-  0xcc, 0x3c, 0xb7, 0x04, 0x06, 0x02, 0xa2, 0x0e, 0xcc, 0xa8, 0xab, 0x04, 0xb7, 0x00,
-  0x00, 0x06, 0xa2, 0x0a, 0xcc, 0xa8, 0xb4, 0xb7, 0xdf, 0xa2, 0x0a, 0xcc, 0xa8, 0xb5,
-  0xb6, 0x2c, 0xa2, 0x0e, 0xcc, 0xa8, 0xa2, 0x20, 0x74, 0xab, 0x3c, 0xa2, 0x0a, 0xcc,
-  0xa8, 0xb5, 0xb6, 0x1c, 0xa2, 0x06, 0x74, 0xa8, 0xa2, 0x0e, 0xcc, 0xfc, 0x3c, 0xa2,
-  0x06, 0x74, 0xab, 0xa2, 0x52, 0x74, 0xa8, 0x9c, 0x03, 0x44, 0x9d, 0x03, 0x41, 0x3c,
-  0xa2, 0x1e, 0x74, 0xa8, 0xaf, 0xc8, 0x90, 0x00, 0xa2, 0x1e, 0x74, 0xab, 0xac, 0x74,
-  0xce, 0xb5, 0xd9, 0x12, 0x3f, 0xc8, 0xa2, 0x1e, 0x74, 0xab, 0xb4, 0xd9, 0x09, 0xa2,
-  0x0a, 0xcc, 0xa8, 0xb5, 0xb6, 0x0a, 0xb7, 0x00, 0x00, 0x0c, 0x82, 0x01, 0x0c, 0xfc,
-  0x3c, 0xa8, 0x0c, 0xb5, 0xb5, 0xd4, 0xa2, 0x54, 0x74, 0xa8, 0xa2, 0x0a, 0xcc, 0xfc,
-  0x43, 0xa9, 0x0c, 0x75, 0xa2, 0x0c, 0x78, 0xa8, 0xa2, 0x42, 0x74, 0xab, 0xa2, 0x0e,
-  0x78, 0xa8, 0xa2, 0x44, 0x74, 0xab, 0xa2, 0x08, 0x78, 0xa8, 0xa2, 0x3e, 0x74, 0xab,
-  0xa2, 0x0a, 0x78, 0xa8, 0xa2, 0x40, 0x74, 0xab, 0xa2, 0x04, 0x78, 0xa8, 0xa2, 0x46,
-  0x74, 0xab, 0xa2, 0x04, 0x78, 0xa8, 0xa2, 0x46, 0x74, 0xab, 0x90, 0x01, 0xab, 0x02,
-  0xa2, 0x54, 0x74, 0xa8, 0xab, 0x04, 0xac, 0x74, 0x06, 0x82, 0x42, 0x06, 0xf8, 0xac,
-  0x74, 0x08, 0x82, 0x3e, 0x08, 0xf8, 0xac, 0x74, 0x0a, 0x82, 0x46, 0x0a, 0xf8, 0xa2,
-  0x22, 0x74, 0x88, 0xb5, 0xe8, 0x7b, 0x95, 0x59, 0xa2, 0x0a, 0xcc, 0xa8, 0xb5, 0xb5,
-  0x91, 0xa2, 0x10, 0xcc, 0xa8, 0xab, 0xca, 0xa2, 0x0e, 0xcc, 0xa8, 0xb5, 0x0e, 0xc2,
-  0xa2, 0x00, 0x78, 0xab, 0xa8, 0xca, 0xa2, 0x02, 0x78, 0xab, 0x3c, 0xa2, 0x0a, 0xcc,
-  0xa8, 0xb5, 0xb5, 0x5e, 0xa2, 0x0e, 0xcc, 0x88, 0xa2, 0x0c, 0x76, 0xab, 0x3c, 0xa2,
-  0x0a, 0xcc, 0xa8, 0xb5, 0xb5, 0x4e, 0xac, 0xcc, 0xce, 0x82, 0x0e, 0xce, 0xf8, 0xa9,
-  0xce, 0xd4, 0xa2, 0x13, 0x76, 0x8b, 0xa2, 0x01, 0xce, 0x88, 0xa2, 0x14, 0x76, 0x8b,
-  0xa2, 0x02, 0xce, 0x88, 0xa2, 0x15, 0x76, 0x8b, 0xac, 0x76, 0xce, 0xb4, 0xd1, 0x5f,
-  0xa2, 0x0a, 0xcc, 0xa8, 0xb5, 0xb5, 0x23, 0xa2, 0x0e, 0xcc, 0x88, 0xa2, 0x10, 0x76,
-  0x8b, 0x3c, 0xa2, 0x0a, 0xcc, 0xa8, 0xb5, 0xb5, 0x13, 0xa2, 0x0e, 0xcc, 0x88, 0xa2,
-  0x11, 0x76, 0x8b, 0x3c, 0xa2, 0x0a, 0xcc, 0xa8, 0xb5, 0xb5, 0x03, 0xa2, 0x10, 0xcc,
-  0xa8, 0xab, 0xca, 0xa2, 0x0e, 0xcc, 0xa8, 0xb5, 0x0e, 0x48, 0xa2, 0x00, 0x76, 0xab,
-  0xa8, 0xca, 0xa2, 0x02, 0x76, 0xab, 0x3c, 0xa2, 0x0a, 0xcc, 0xa8, 0xb5, 0xb4, 0xe4,
-  0xa2, 0x0e, 0xcc, 0x88, 0x91, 0x00, 0x9c, 0x00, 0x91, 0x02, 0x9c, 0x01, 0x91, 0x01,
-  0x9c, 0x02, 0x91, 0x08, 0x9c, 0x03, 0x91, 0x04, 0x9c, 0x04, 0xb1, 0x01, 0x00, 0xa8,
-  0xca, 0xa2, 0x04, 0x76, 0xab, 0xb7, 0x02, 0x02, 0x02, 0xac, 0xca, 0x04, 0xb7, 0x00,
-  0x00, 0x06, 0xa2, 0x0a, 0xcc, 0xa8, 0xb4, 0xb6, 0x49, 0xa2, 0x0a, 0xcc, 0xa8, 0xb5,
-  0xb4, 0xaa, 0xa2, 0x0a, 0x76, 0xa8, 0xa2, 0x0e, 0xcc, 0xfc, 0x3c, 0xa2, 0x0e, 0xcc,
-  0xa8, 0xa2, 0x0a, 0x76, 0xab, 0xa2, 0x62, 0x76, 0xa8, 0x9d, 0x03, 0x44, 0x9c, 0x03,
-  0x41, 0x3c, 0xa2, 0x17, 0x76, 0xa8, 0xaf, 0xc8, 0x90, 0x00, 0xa2, 0x17, 0x76, 0xab,
-  0xac, 0x76, 0xce, 0xb5, 0xd0, 0xb1, 0x3f, 0xc8, 0xa2, 0x17, 0x76, 0xab, 0xb4, 0xd0,
-  0xa8, 0xa2, 0x0c, 0xcc, 0xa8, 0xb6, 0xb8, 0x00, 0xab, 0xa2, 0x0a, 0xcc, 0xa8, 0xb5,
-  0xb4, 0x50, 0xa2, 0x04, 0xcc, 0xa8, 0xbc, 0x13, 0x13, 0x53, 0xbc, 0x13, 0x14, 0xb4,
-  0x01, 0x5c, 0xbc, 0x13, 0x15, 0xb4, 0x01, 0xc3, 0xbc, 0x13, 0x16, 0xb4, 0x02, 0xf5,
-  0x3c, 0xac, 0xcc, 0xce, 0x82, 0x16, 0xce, 0xf8, 0xa2, 0x04, 0x74, 0xa8, 0x9d, 0x00,
-  0x3c, 0xd4, 0xa2, 0x08, 0x74, 0x8b, 0xa2, 0x02, 0xce, 0x88, 0xab, 0xca, 0xa2, 0x01,
-  0xce, 0x88, 0x8c, 0xca, 0xc9, 0xa2, 0x04, 0x74, 0xab, 0xa2, 0x03, 0xce, 0x88, 0xa2,
-  0x02, 0x74, 0x8b, 0xa2, 0x04, 0xce, 0xa8, 0xa2, 0x20, 0x74, 0xab, 0xa2, 0x06, 0xce,
-  0xa8, 0xa2, 0x06, 0x74, 0xab, 0xb7, 0x00, 0x00, 0x02, 0xaf, 0xcc, 0xaf, 0xce, 0xac,
-  0x74, 0xcc, 0x82, 0x58, 0xcc, 0xf8, 0x82, 0x08, 0xce, 0xf8, 0x80, 0x7e, 0x02, 0xfc,
-  0x94, 0xf1, 0xd4, 0xc6, 0xa2, 0x01, 0xce, 0x88, 0xa2, 0x01, 0xcc, 0x8b, 0xa2, 0x02,
-  0xce, 0x88, 0xa2, 0x02, 0xcc, 0x8b, 0xa2, 0x03, 0xce, 0x88, 0xa2, 0x03, 0xcc, 0x8b,
-  0xa2, 0x01, 0xcc, 0x88, 0xa2, 0x22, 0x74, 0xdc, 0x94, 0x74, 0xa2, 0x01, 0xcc, 0x88,
-  0x9c, 0x02, 0x94, 0xa0, 0xaf, 0x76, 0x88, 0x7b, 0xaf, 0xc8, 0xc4, 0xb5, 0xb3, 0xbe,
-  0xac, 0x76, 0xca, 0x82, 0x1a, 0xca, 0xf8, 0xa8, 0x02, 0x9c, 0x00, 0x47, 0x82, 0x04,
-  0xca, 0xf8, 0xaa, 0xc8, 0x66, 0x3f, 0xc8, 0x8b, 0x7b, 0x3f, 0x76, 0xa2, 0x22, 0x74,
-  0x88, 0xa2, 0x02, 0xca, 0x8b, 0x90, 0x02, 0xa2, 0x03, 0xca, 0x8b, 0xa2, 0x03, 0xcc,
-  0x88, 0x9c, 0x02, 0x94, 0x3f, 0xaf, 0x76, 0x88, 0x7b, 0xaf, 0xc8, 0xa2, 0x02, 0xcc,
-  0x88, 0xb5, 0xb3, 0x82, 0xac, 0x76, 0xca, 0x82, 0x1a, 0xca, 0xf8, 0xa8, 0x02, 0x9c,
-  0x00, 0x47, 0x82, 0x04, 0xca, 0xf8, 0xaa, 0xc8, 0x66, 0x3f, 0xc8, 0x8b, 0x7b, 0x3f,
-  0x76, 0xa2, 0x22, 0x74, 0x88, 0xad, 0xca, 0x8b, 0x90, 0x02, 0xa2, 0x01, 0xca, 0x8b,
-  0xa9, 0x02, 0x82, 0x04, 0xcc, 0xf8, 0x82, 0x04, 0xce, 0xf8, 0x95, 0xa8, 0xaf, 0x74,
-  0x88, 0x7a, 0xaf, 0xc8, 0xa2, 0x02, 0xcc, 0x88, 0xb5, 0xb3, 0x2f, 0xac, 0x74, 0xca,
-  0x82, 0x58, 0xca, 0xf8, 0xa8, 0x02, 0x9c, 0x00, 0x47, 0x82, 0x04, 0xca, 0xf8, 0xaa,
-  0xc8, 0x66, 0x3f, 0xc8, 0x8b, 0x7a, 0x3f, 0x74, 0x95, 0x3f, 0xaf, 0x74, 0x88, 0x7a,
-  0xaf, 0xc8, 0xc4, 0xb5, 0xb3, 0x0a, 0xac, 0x74, 0xca, 0x82, 0x58, 0xca, 0xf8, 0xa8,
-  0x02, 0x9c, 0x00, 0x47, 0x82, 0x04, 0xca, 0xf8, 0xaa, 0xc8, 0x66, 0x3f, 0xc8, 0x8b,
-  0x7a, 0x3f, 0x74, 0x95, 0xa0, 0x3f, 0xce, 0x3f, 0xcc, 0xa2, 0x0c, 0x72, 0x89, 0x3c,
-  0xac, 0xcc, 0xce, 0x82, 0x16, 0xce, 0xf8, 0xa2, 0x04, 0x74, 0xa8, 0x9c, 0x00, 0x3c,
-  0x90, 0x01, 0xa2, 0x00, 0x74, 0x8b, 0xf4, 0xa2, 0x0a, 0x74, 0xab, 0xa2, 0x02, 0xce,
-  0xa8, 0xa2, 0x0c, 0x74, 0xab, 0xa2, 0x04, 0xce, 0xa8, 0xa2, 0x0e, 0x74, 0xab, 0xa2,
-  0x06, 0xce, 0xa8, 0xa2, 0x10, 0x74, 0xab, 0xa2, 0x08, 0xce, 0x88, 0xa2, 0x1e, 0x74,
-  0x8b, 0xac, 0xce, 0xca, 0x82, 0x09, 0xca, 0xf8, 0xaf, 0xcc, 0xac, 0x74, 0xcc, 0x82,
-  0x12, 0xcc, 0xf8, 0xb5, 0xdb, 0x90, 0xa2, 0x20, 0x72, 0xa8, 0x9c, 0x01, 0x41, 0x3c,
-  0xb7, 0x04, 0x0e, 0x02, 0xb7, 0x00, 0x01, 0x04, 0xb7, 0x00, 0x00, 0x06, 0xa2, 0x22,
-  0x74, 0x88, 0xb5, 0xb4, 0x2b, 0xac, 0x74, 0xce, 0xb4, 0xd5, 0x99, 0x90, 0x01, 0xa2,
-  0x00, 0x74, 0xab, 0xa2, 0x52, 0x74, 0xa8, 0x9c, 0x03, 0xb4, 0x00, 0xff, 0x9c, 0x02,
-  0xb4, 0x01, 0x0f, 0xb7, 0x00, 0x00, 0x02, 0xaf, 0xcc, 0xac, 0xcc, 0xce, 0x82, 0x16,
-  0xcc, 0xf8, 0xac, 0x74, 0xcc, 0x82, 0x58, 0xcc, 0xf8, 0x82, 0x08, 0xce, 0xf8, 0x80,
-  0x7e, 0x02, 0xfc, 0x94, 0xd4, 0xa2, 0x01, 0xcc, 0x88, 0xa2, 0x22, 0x74, 0xdc, 0x94,
-  0x71, 0x9c, 0x02, 0x94, 0xa1, 0xaf, 0x76, 0x88, 0x7b, 0xaf, 0xc8, 0xc4, 0xb5, 0xb2,
-  0x43, 0xac, 0x76, 0xca, 0x82, 0x1a, 0xca, 0xf8, 0xa8, 0x02, 0x9c, 0x00, 0x47, 0x82,
-  0x04, 0xca, 0xf8, 0xaa, 0xc8, 0x66, 0x3f, 0xc8, 0x8b, 0x7b, 0x3f, 0x76, 0xa2, 0x02,
-  0xcc, 0x88, 0xa2, 0x02, 0xca, 0x8b, 0xa2, 0x03, 0xcc, 0x88, 0xa2, 0x03, 0xca, 0x8b,
-  0xa2, 0x03, 0xcc, 0x88, 0x9c, 0x02, 0x94, 0x3e, 0xaf, 0x76, 0x88, 0x7b, 0xaf, 0xc8,
-  0xa2, 0x02, 0xcc, 0x88, 0xb5, 0xb2, 0x05, 0xac, 0x76, 0xca, 0x82, 0x1a, 0xca, 0xf8,
-  0xa8, 0x02, 0x9c, 0x00, 0x47, 0x82, 0x04, 0xca, 0xf8, 0xaa, 0xc8, 0x66, 0x3f, 0xc8,
-  0x8b, 0x7b, 0x3f, 0x76, 0xc4, 0xad, 0xca, 0x8b, 0xa2, 0x01, 0xcc, 0x88, 0xa2, 0x01,
-  0xca, 0x8b, 0xa9, 0x02, 0x82, 0x04, 0xcc, 0xf8, 0x82, 0x04, 0xce, 0xf8, 0x95, 0x8b,
-  0xaf, 0x74, 0x88, 0x7a, 0xaf, 0xc8, 0xa2, 0x02, 0xcc, 0x88, 0xb5, 0xb1, 0xb3, 0xac,
-  0x74, 0xca, 0x82, 0x58, 0xca, 0xf8, 0xa8, 0x02, 0x9c, 0x00, 0x47, 0x82, 0x04, 0xca,
-  0xf8, 0xaa, 0xc8, 0x66, 0x3f, 0xc8, 0x8b, 0x7a, 0x3f, 0x74, 0x95, 0x3e, 0xaf, 0x74,
-  0x88, 0x7a, 0xaf, 0xc8, 0xc4, 0xb5, 0xb1, 0x8e, 0xac, 0x74, 0xca, 0x82, 0x58, 0xca,
-  0xf8, 0xa8, 0x02, 0x9c, 0x00, 0x47, 0x82, 0x04, 0xca, 0xf8, 0xaa, 0xc8, 0x66, 0x3f,
-  0xc8, 0x8b, 0x7a, 0x3f, 0x74, 0x95, 0xa1, 0x3f, 0xcc, 0xac, 0x74, 0xce, 0xb4, 0xd7,
-  0x33, 0xa2, 0x2c, 0x72, 0xa8, 0x05, 0xa2, 0x2c, 0x72, 0xab, 0x04, 0x9d, 0x00, 0xb4,
-  0xfe, 0xf7, 0xb5, 0xd5, 0x76, 0xb4, 0xfe, 0xf1, 0xa2, 0x2e, 0x72, 0xa8, 0x05, 0xa2,
-  0x2e, 0x72, 0xab, 0x04, 0x9d, 0x00, 0xb4, 0xfe, 0xe2, 0xb5, 0xd5, 0x61, 0xb4, 0xfe,
-  0xdc, 0xac, 0x74, 0xce, 0xb5, 0xd6, 0x9f, 0xa2, 0x0c, 0x72, 0x88, 0x05, 0xa2, 0x0c,
-  0x72, 0x8b, 0x3c, 0xa2, 0x0c, 0xcc, 0xa8, 0xb6, 0xb8, 0x00, 0xab, 0xa2, 0x0a, 0xcc,
-  0xa8, 0xb5, 0xb1, 0x36, 0xa2, 0x04, 0xcc, 0xa8, 0xbc, 0x13, 0x17, 0x53, 0xbc, 0x13,
-  0x18, 0xb4, 0x02, 0x2c, 0xbc, 0x13, 0x19, 0xb4, 0x02, 0x48, 0xbc, 0x13, 0x1a, 0xb4,
-  0x02, 0x85, 0x3c, 0xac, 0xcc, 0xce, 0x82, 0x16, 0xce, 0xf8, 0xa2, 0x08, 0x76, 0xa8,
-  0x9d, 0x00, 0x3c, 0xf4, 0xa2, 0x06, 0x76, 0xab, 0x9c, 0x00, 0x4e, 0x9c, 0x01, 0x94,
-  0x3c, 0x9c, 0x02, 0x94, 0x6a, 0x9c, 0x03, 0x94, 0x98, 0x94, 0xb6, 0xaf, 0xcc, 0xac,
-  0x76, 0xcc, 0xa2, 0x03, 0xce, 0x88, 0x99, 0x01, 0xa2, 0x13, 0xcc, 0x8b, 0xa2, 0x04,
-  0xce, 0x88, 0x99, 0x5b, 0xa2, 0x14, 0xcc, 0x8b, 0xa2, 0x05, 0xce, 0x88, 0x99, 0xdb,
-  0xa2, 0x15, 0xcc, 0x8b, 0xa2, 0x0a, 0x72, 0x89, 0xa2, 0x22, 0x76, 0x88, 0xa2, 0x10,
-  0x72, 0x8b, 0x3f, 0xcc, 0x3c, 0xaf, 0xcc, 0xac, 0x76, 0xcc, 0xa2, 0x03, 0xce, 0x88,
-  0x99, 0x01, 0xa2, 0x13, 0xcc, 0x8b, 0xa2, 0x04, 0xce, 0x88, 0x99, 0x6d, 0xa2, 0x14,
-  0xcc, 0x8b, 0xa2, 0x05, 0xce, 0x88, 0x99, 0xed, 0xa2, 0x15, 0xcc, 0x8b, 0xa2, 0x0a,
-  0x72, 0x89, 0xa2, 0x22, 0x76, 0x88, 0xa2, 0x11, 0x72, 0x8b, 0x3f, 0xcc, 0x3c, 0xaf,
-  0xcc, 0xac, 0x76, 0xcc, 0xa2, 0x03, 0xce, 0x88, 0x99, 0x01, 0xa2, 0x13, 0xcc, 0x8b,
-  0xa2, 0x04, 0xce, 0x88, 0x99, 0x6d, 0xa2, 0x14, 0xcc, 0x8b, 0xa2, 0x05, 0xce, 0x88,
-  0x99, 0x6d, 0xa2, 0x15, 0xcc, 0x8b, 0xa2, 0x0a, 0x72, 0x89, 0xa2, 0x22, 0x76, 0x88,
-  0xa2, 0x12, 0x72, 0x8b, 0x3f, 0xcc, 0x3c, 0xaf, 0xcc, 0xac, 0x76, 0xcc, 0xa2, 0x03,
-  0xce, 0x88, 0x99, 0x01, 0xa2, 0x13, 0xcc, 0x8b, 0xa2, 0x04, 0xce, 0x88, 0x99, 0x37,
-  0xa2, 0x14, 0xcc, 0x8b, 0xa2, 0x0b, 0x72, 0x89, 0x3f, 0xcc, 0x3c, 0xa2, 0x06, 0xce,
-  0xa8, 0xa2, 0x08, 0x76, 0xab, 0xa2, 0x08, 0xce, 0x88, 0xa2, 0x10, 0x76, 0x8b, 0xa2,
-  0x09, 0xce, 0x88, 0xa2, 0x11, 0x76, 0x8b, 0xa2, 0x0a, 0xce, 0xa8, 0xa2, 0x0a, 0x76,
-  0xab, 0xb7, 0x00, 0x00, 0x02, 0xaf, 0xcc, 0xaf, 0xce, 0xac, 0x76, 0xcc, 0x82, 0x1a,
-  0xcc, 0xf8, 0x82, 0x0c, 0xce, 0xf8, 0x80, 0x7e, 0x02, 0xfc, 0x94, 0xef, 0xd4, 0xc6,
-  0xa2, 0x01, 0xce, 0x88, 0xa2, 0x01, 0xcc, 0x8b, 0xa2, 0x02, 0xce, 0x88, 0xa2, 0x02,
-  0xcc, 0x8b, 0xa2, 0x03, 0xce, 0x88, 0xa2, 0x03, 0xcc, 0x8b, 0xa2, 0x01, 0xcc, 0x88,
-  0xa2, 0x22, 0x76, 0xdc, 0x94, 0xbf, 0x9c, 0x02, 0x94, 0x96, 0xaf, 0x76, 0x88, 0x7b,
-  0xaf, 0xc8, 0xc4, 0xb5, 0xaf, 0xd6, 0xac, 0x76, 0xca, 0x82, 0x1a, 0xca, 0xf8, 0xa8,
-  0x02, 0x9c, 0x00, 0x47, 0x82, 0x04, 0xca, 0xf8, 0xaa, 0xc8, 0x66, 0x3f, 0xc8, 0x8b,
-  0x7b, 0x3f, 0x76, 0xa2, 0x22, 0x76, 0x88, 0xa2, 0x02, 0xca, 0x8b, 0x90, 0x04, 0xa2,
-  0x03, 0xca, 0x8b, 0xa2, 0x03, 0xcc, 0x88, 0x9c, 0x02, 0x94, 0x35, 0xaf, 0x76, 0x88,
-  0x7b, 0xaf, 0xc8, 0xa2, 0x02, 0xcc, 0x88, 0xb5, 0xaf, 0x9a, 0xac, 0x76, 0xca, 0x82,
-  0x1a, 0xca, 0xf8, 0xa8, 0x02, 0x9c, 0x00, 0x47, 0x82, 0x04, 0xca, 0xf8, 0xaa, 0xc8,
-  0x66, 0x3f, 0xc8, 0x8b, 0x7b, 0x3f, 0x76, 0xa2, 0x22, 0x76, 0x88, 0xad, 0xca, 0x8b,
-  0x90, 0x04, 0xa2, 0x01, 0xca, 0x8b, 0x94, 0x4d, 0xaf, 0x74, 0x88, 0x7a, 0xaf, 0xc8,
-  0xa2, 0x02, 0xcc, 0x88, 0xb5, 0xaf, 0x51, 0xac, 0x74, 0xca, 0x82, 0x58, 0xca, 0xf8,
-  0xa8, 0x02, 0x9c, 0x00, 0x47, 0x82, 0x04, 0xca, 0xf8, 0xaa, 0xc8, 0x66, 0x3f, 0xc8,
-  0x8b, 0x7a, 0x3f, 0x74, 0x95, 0x35, 0xaf, 0x74, 0x88, 0x7a, 0xaf, 0xc8, 0xc4, 0xb5,
-  0xaf, 0x2c, 0xac, 0x74, 0xca, 0x82, 0x58, 0xca, 0xf8, 0xa8, 0x02, 0x9c, 0x00, 0x47,
-  0x82, 0x04, 0xca, 0xf8, 0xaa, 0xc8, 0x66, 0x3f, 0xc8, 0x8b, 0x7a, 0x3f, 0x74, 0x95,
-  0x96, 0xa9, 0x02, 0x82, 0x04, 0xcc, 0xf8, 0x82, 0x04, 0xce, 0xf8, 0x95, 0xf3, 0x3f,
-  0xce, 0x3f, 0xcc, 0xa2, 0x14, 0xce, 0xa8, 0xa2, 0x00, 0x76, 0xab, 0xa2, 0x16, 0xce,
-  0xa8, 0xa2, 0x02, 0x76, 0xab, 0xa2, 0x18, 0xce, 0xa8, 0xa2, 0x04, 0x76, 0xab, 0x3c,
-  0xac, 0xcc, 0xce, 0x82, 0x16, 0xce, 0xf8, 0xa2, 0x08, 0x76, 0xa8, 0x9c, 0x00, 0x3c,
-  0x90, 0x01, 0xa2, 0x0e, 0x76, 0xab, 0xd4, 0xa2, 0x17, 0x76, 0x8b, 0xa2, 0x01, 0xce,
-  0x88, 0xa2, 0x18, 0x76, 0x8b, 0x3c, 0x90, 0x00, 0xa2, 0x0e, 0x76, 0xab, 0xa2, 0x06,
-  0x76, 0xa8, 0x9c, 0x03, 0x46, 0xac, 0x76, 0xce, 0xb4, 0xd5, 0x89, 0xa2, 0x62, 0x76,
-  0xa8, 0x9c, 0x03, 0x44, 0x9c, 0x02, 0x53, 0x70, 0xa2, 0x28, 0x72, 0xa8, 0x05, 0xa2,
-  0x28, 0x72, 0xab, 0x04, 0x9d, 0x00, 0x7d, 0xb5, 0xd2, 0xb5, 0x95, 0x21, 0xa2, 0x2a,
-  0x72, 0xa8, 0x05, 0xa2, 0x2a, 0x72, 0xab, 0x04, 0x9d, 0x00, 0x95, 0x2f, 0xb5, 0xd2,
-  0xa2, 0x95, 0x34, 0xac, 0xcc, 0xce, 0x82, 0x16, 0xce, 0xf8, 0xa2, 0x06, 0x76, 0xa8,
-  0x9c, 0x00, 0x4d, 0x9c, 0x01, 0x5b, 0x9c, 0x02, 0x94, 0x27, 0x9c, 0x03, 0x94, 0x33,
-  0x94, 0x3a, 0x88, 0x7e, 0xa2, 0x10, 0x72, 0x8b, 0xa2, 0x0a, 0x72, 0x88, 0x05, 0xa2,
-  0x0a, 0x72, 0x8b, 0x94, 0x29, 0x88, 0x7e, 0xa2, 0x11, 0x72, 0x8b, 0xa2, 0x0a, 0x72,
-  0x88, 0x05, 0xa2, 0x0a, 0x72, 0x8b, 0x59, 0x88, 0x7e, 0xa2, 0x12, 0x72, 0x8b, 0xa2,
-  0x0a, 0x72, 0x88, 0x05, 0xa2, 0x0a, 0x72, 0x8b, 0x49, 0xa2, 0x0b, 0x72, 0x88, 0x05,
-  0xa2, 0x0b, 0x72, 0x8b, 0xb7, 0x00, 0x00, 0x02, 0xaf, 0xcc, 0xaf, 0xce, 0xac, 0x76,
-  0xcc, 0x82, 0x1a, 0xcc, 0xf8, 0x82, 0x0c, 0xce, 0xf8, 0x80, 0x7e, 0x02, 0xfc, 0x94,
-  0xd6, 0xa2, 0x01, 0xcc, 0x88, 0xa2, 0x22, 0x76, 0xdc, 0x94, 0xc0, 0x9c, 0x02, 0x94,
-  0x97, 0xaf, 0x76, 0x88, 0x7b, 0xaf, 0xc8, 0xc4, 0xb5, 0xae, 0x11, 0xac, 0x76, 0xca,
-  0x82, 0x1a, 0xca, 0xf8, 0xa8, 0x02, 0x9c, 0x00, 0x47, 0x82, 0x04, 0xca, 0xf8, 0xaa,
-  0xc8, 0x66, 0x3f, 0xc8, 0x8b, 0x7b, 0x3f, 0x76, 0xa2, 0x02, 0xcc, 0x88, 0xa2, 0x02,
-  0xca, 0x8b, 0xa2, 0x03, 0xcc, 0x88, 0xa2, 0x03, 0xca, 0x8b, 0xa2, 0x03, 0xcc, 0x88,
-  0x9c, 0x02, 0x94, 0x34, 0xaf, 0x76, 0x88, 0x7b, 0xaf, 0xc8, 0xa2, 0x02, 0xcc, 0x88,
-  0xb5, 0xad, 0xd3, 0xac, 0x76, 0xca, 0x82, 0x1a, 0xca, 0xf8, 0xa8, 0x02, 0x9c, 0x00,
-  0x47, 0x82, 0x04, 0xca, 0xf8, 0xaa, 0xc8, 0x66, 0x3f, 0xc8, 0x8b, 0x7b, 0x3f, 0x76,
-  0xc4, 0xad, 0xca, 0x8b, 0xa2, 0x01, 0xcc, 0x88, 0xa2, 0x01, 0xca, 0x8b, 0x94, 0x4d,
-  0xaf, 0x74, 0x88, 0x7a, 0xaf, 0xc8, 0xa2, 0x02, 0xcc, 0x88, 0xb5, 0xad, 0x8b, 0xac,
-  0x74, 0xca, 0x82, 0x58, 0xca, 0xf8, 0xa8, 0x02, 0x9c, 0x00, 0x47, 0x82, 0x04, 0xca,
-  0xf8, 0xaa, 0xc8, 0x66, 0x3f, 0xc8, 0x8b, 0x7a, 0x3f, 0x74, 0x95, 0x34, 0xaf, 0x74,
-  0x88, 0x7a, 0xaf, 0xc8, 0xc4, 0xb5, 0xad, 0x66, 0xac, 0x74, 0xca, 0x82, 0x58, 0xca,
-  0xf8, 0xa8, 0x02, 0x9c, 0x00, 0x47, 0x82, 0x04, 0xca, 0xf8, 0xaa, 0xc8, 0x66, 0x3f,
-  0xc8, 0x8b, 0x7a, 0x3f, 0x74, 0x95, 0x97, 0xa9, 0x02, 0x82, 0x04, 0xcc, 0xf8, 0x82,
-  0x04, 0xce, 0xf8, 0x95, 0xda, 0x3f, 0xce, 0x3f, 0xcc, 0xac, 0x76, 0xce, 0xb4, 0xd3,
-  0x99, 0xa2, 0x0c, 0xcc, 0xa8, 0xb6, 0xb8, 0x00, 0xab, 0x91, 0x00, 0xe4, 0x99, 0x3f,
-  0x82, 0x02, 0xcc, 0xf8, 0x9c, 0x01, 0xb4, 0x01, 0xe0, 0xa2, 0x04, 0xcc, 0xa8, 0xbc,
-  0x13, 0x11, 0x94, 0x35, 0xbc, 0x13, 0x13, 0x94, 0x33, 0xbc, 0x13, 0x14, 0x94, 0x2e,
-  0xbc, 0x13, 0x15, 0x94, 0x29, 0xbc, 0x13, 0x16, 0x94, 0x24, 0xbc, 0x13, 0x17, 0x94,
-  0x22, 0xbc, 0x13, 0x18, 0x5e, 0xbc, 0x13, 0x19, 0x5a, 0xbc, 0x13, 0x1a, 0x56, 0xbc,
-  0x24, 0x11, 0x55, 0xbc, 0x24, 0x12, 0x3c, 0xbc, 0x24, 0x13, 0x94, 0xb6, 0xb4, 0x01,
-  0xa1, 0xb4, 0xf4, 0xf2, 0xb4, 0xf8, 0x7c, 0xb4, 0xfb, 0xa7, 0xa2, 0x06, 0xcc, 0xa8,
-  0x9c, 0x00, 0x55, 0x9c, 0x01, 0x94, 0x21, 0x9c, 0x02, 0x94, 0x2d, 0x9c, 0x04, 0x94,
-  0x39, 0x9c, 0x05, 0x94, 0x57, 0x9c, 0x06, 0x94, 0x65, 0x3c, 0xb7, 0x01, 0x01, 0x02,
-  0xb7, 0x00, 0x00, 0x04, 0xb7, 0x00, 0x00, 0x06, 0x00, 0xb4, 0xae, 0x58, 0xb7, 0x01,
-  0x02, 0x02, 0xb7, 0x00, 0x00, 0x04, 0xb7, 0x00, 0x00, 0x06, 0x00, 0xb4, 0xae, 0x48,
-  0xb7, 0x01, 0x04, 0x02, 0xb7, 0x00, 0x04, 0x04, 0xb7, 0x00, 0x00, 0x06, 0x00, 0xb4,
-  0xae, 0x38, 0xa2, 0x10, 0x72, 0x88, 0xab, 0xca, 0xb5, 0xac, 0x97, 0xa2, 0x29, 0x76,
-  0x88, 0x9c, 0x02, 0x41, 0x3c, 0xb7, 0x02, 0x10, 0x02, 0xb7, 0x00, 0x00, 0x04, 0xb7,
-  0x00, 0x00, 0x06, 0xa8, 0xca, 0xb4, 0xae, 0x16, 0xa2, 0x11, 0x72, 0x88, 0xab, 0xca,
-  0xb5, 0xac, 0x75, 0xa2, 0x29, 0x76, 0x88, 0x9c, 0x02, 0x95, 0x20, 0x3c, 0xb7, 0x00,
-  0x00, 0x02, 0x80, 0x7e, 0x02, 0xfc, 0x3c, 0xa8, 0x02, 0xb5, 0xac, 0x5e, 0xa2, 0x06,
-  0x76, 0xa8, 0x9c, 0x03, 0x43, 0xa9, 0x02, 0x73, 0xb7, 0x02, 0x10, 0x02, 0xb7, 0x00,
-  0x00, 0x04, 0xb7, 0x00, 0x00, 0x06, 0xa8, 0x02, 0xb5, 0xad, 0xdb, 0x74, 0xa2, 0x06,
-  0xcc, 0xa8, 0x9c, 0x00, 0x51, 0x9c, 0x01, 0x94, 0x7e, 0x9c, 0x02, 0x94, 0x8d, 0x9c,
-  0x03, 0x94, 0x9c, 0x9c, 0x04, 0x94, 0xb3, 0x3c, 0xa2, 0x0e, 0xcc, 0x88, 0x9c, 0x00,
-  0x51, 0x9c, 0x01, 0x5d, 0x9c, 0x02, 0x94, 0x28, 0x9c, 0x03, 0x94, 0x32, 0x9c, 0x04,
-  0x94, 0x3c, 0x94, 0x48, 0xa2, 0x0a, 0xcc, 0xa8, 0xb5, 0xac, 0x0b, 0x90, 0x02, 0xa2,
-  0x04, 0x76, 0xab, 0x94, 0x39, 0xa2, 0x0a, 0xcc, 0xa8, 0xb5, 0xab, 0xfc, 0x90, 0x01,
-  0xa2, 0x04, 0x76, 0xab, 0x94, 0x2a, 0xa2, 0x0a, 0xcc, 0xa8, 0xb5, 0xab, 0xed, 0x90,
-  0x08, 0xa2, 0x04, 0x76, 0xab, 0x5c, 0xa2, 0x0a, 0xcc, 0xa8, 0xb5, 0xab, 0xdf, 0x90,
-  0x04, 0xa2, 0x04, 0x76, 0xab, 0x4e, 0xa2, 0x0a, 0xcc, 0xa8, 0xb5, 0xab, 0xd1, 0xb0,
-  0x01, 0x00, 0xa2, 0x04, 0x76, 0xab, 0xab, 0x04, 0xb7, 0x00, 0x00, 0x06, 0xb7, 0x02,
-  0x02, 0x02, 0xa2, 0x0a, 0xcc, 0xa8, 0xb4, 0xad, 0x51, 0xb7, 0x00, 0x00, 0x04, 0xb7,
-  0x00, 0x00, 0x06, 0xb7, 0x02, 0x0f, 0x02, 0xa2, 0x0a, 0xcc, 0xa8, 0xb4, 0xad, 0x3e,
-  0xb7, 0x00, 0x00, 0x04, 0xb7, 0x00, 0x00, 0x06, 0xb7, 0x02, 0x10, 0x02, 0xa2, 0x0a,
-  0xcc, 0xa8, 0xb4, 0xad, 0x2b, 0xa2, 0x20, 0x72, 0xa8, 0x9c, 0x01, 0x41, 0x3c, 0xb7,
-  0x00, 0x00, 0x04, 0xb7, 0x00, 0x00, 0x06, 0xb7, 0x02, 0x01, 0x02, 0xa2, 0x0a, 0xcc,
-  0xa8, 0xb4, 0xad, 0x10, 0xa2, 0x20, 0x72, 0xa8, 0x9c, 0x01, 0x41, 0x3c, 0xb7, 0x00,
-  0x00, 0x04, 0xb7, 0x00, 0x00, 0x06, 0xb7, 0x02, 0x04, 0x02, 0xa2, 0x0a, 0xcc, 0xa8,
-  0xb4, 0xac, 0xf5, 0x90, 0x00, 0xa2, 0x0c, 0xcc, 0xab, 0xb4, 0xfe, 0x0b, 0x3c, 0xa2,
-  0x02, 0xcc, 0xa8, 0xbc, 0x10, 0x15, 0xb4, 0x01, 0x40, 0xbc, 0x10, 0x16, 0xb4, 0x01,
-  0x43, 0xbc, 0x10, 0x17, 0xb4, 0x01, 0x46, 0xbc, 0x10, 0x18, 0xb4, 0x01, 0x49, 0xbc,
-  0x10, 0x1a, 0xb4, 0x01, 0x4c, 0xbc, 0x10, 0x1b, 0xb4, 0x01, 0x4f, 0xbc, 0x10, 0x22,
-  0xb4, 0x01, 0x52, 0xbc, 0x10, 0x1f, 0xb4, 0x01, 0x5e, 0xbc, 0xf4, 0x07, 0xb4, 0x01,
-  0x70, 0xbc, 0xf4, 0x08, 0xb4, 0x01, 0x73, 0xbc, 0x20, 0x20, 0xb4, 0x01, 0x7c, 0xbc,
-  0x20, 0x22, 0xb4, 0x01, 0x88, 0xbc, 0x20, 0x75, 0xb4, 0x01, 0x92, 0xbc, 0x20, 0x76,
-  0xb4, 0x01, 0x9c, 0xbc, 0xf4, 0x01, 0x94, 0x83, 0xbc, 0xf4, 0x04, 0xb4, 0x03, 0xd6,
-  0xbc, 0x20, 0x0d, 0xb4, 0x01, 0x9b, 0xbc, 0x20, 0x0e, 0xb4, 0x01, 0xad, 0xbc, 0x20,
-  0x16, 0xb4, 0x01, 0xbf, 0xbc, 0x20, 0x29, 0x94, 0x86, 0xbc, 0x32, 0x15, 0xb4, 0x01,
-  0xe1, 0xbc, 0x32, 0x16, 0xb4, 0x01, 0xf3, 0xbc, 0x32, 0x17, 0xb4, 0x02, 0x05, 0xbc,
-  0x32, 0x13, 0xb4, 0x02, 0x17, 0xbc, 0x40, 0x0c, 0xb4, 0x02, 0x29, 0xbc, 0x40, 0x0e,
-  0xb4, 0x02, 0x33, 0xbc, 0x40, 0x11, 0xb4, 0x02, 0x3d, 0xbc, 0x40, 0x1d, 0xb4, 0x02,
-  0xdc, 0xbc, 0x40, 0x3a, 0xb4, 0x02, 0xe6, 0xbc, 0x40, 0x3b, 0xb4, 0x02, 0xf0, 0xbc,
-  0x40, 0x41, 0xb4, 0x02, 0xfa, 0xbc, 0x40, 0x15, 0xb4, 0x03, 0x04, 0xbc, 0xf4, 0x02,
-  0x94, 0x29, 0xbc, 0x40, 0x1f, 0xb4, 0x03, 0x23, 0xbc, 0x40, 0x13, 0xb4, 0x03, 0x46,
-  0xbc, 0x40, 0x17, 0xb4, 0x03, 0x50, 0xbc, 0xf4, 0x03, 0xb4, 0x03, 0x90, 0x3c, 0xa2,
-  0x0a, 0xcc, 0xa8, 0xb5, 0xaa, 0x58, 0xa2, 0x0e, 0xcc, 0x88, 0xa2, 0x20, 0x74, 0x8b,
-  0x3c, 0xa2, 0x0a, 0xcc, 0xa8, 0xb5, 0xaa, 0x5c, 0xa2, 0x0e, 0xcc, 0xa8, 0xa2, 0x0a,
-  0x76, 0xab, 0x3c, 0xa2, 0x0a, 0xcc, 0xa8, 0xb5, 0xaa, 0x38, 0xaf, 0xcc, 0xac, 0xcc,
-  0xca, 0x82, 0x0e, 0xca, 0xf8, 0xac, 0x74, 0xcc, 0x82, 0x12, 0xcc, 0xf8, 0xb5, 0xd3,
-  0x1b, 0xac, 0x74, 0xcc, 0x82, 0x12, 0xcc, 0xf8, 0xac, 0x74, 0xce, 0xb5, 0xdc, 0xc4,
-  0xb2, 0x12, 0x10, 0xa8, 0xcc, 0xb8, 0xfe, 0x80, 0xab, 0xcc, 0x9a, 0x0c, 0xab, 0xca,
-  0x30, 0x0b, 0x97, 0xb0, 0xcc, 0x97, 0xfe, 0xca, 0x30, 0x03, 0x3f, 0xcc, 0x3c, 0x00,
-  0x96, 0xcc, 0x14, 0x05, 0xe1, 0x66, 0x3c, 0xa2, 0x0e, 0xcc, 0x88, 0xa2, 0x0c, 0x72,
-  0x8b, 0x3c, 0xa2, 0x0e, 0xcc, 0x88, 0xa2, 0x0a, 0x72, 0x8b, 0x3c, 0xa2, 0x0e, 0xcc,
-  0x88, 0xa2, 0x0b, 0x72, 0x8b, 0x3c, 0xa2, 0x0e, 0xcc, 0x88, 0xa2, 0x0d, 0x72, 0x8b,
-  0x3c, 0xa2, 0x0e, 0xcc, 0xa8, 0xa2, 0x06, 0x72, 0xab, 0x3c, 0xa2, 0x0e, 0xcc, 0xa8,
-  0xa2, 0x08, 0x72, 0xab, 0x3c, 0xa2, 0x0e, 0xcc, 0x88, 0xa2, 0x00, 0x72, 0x8b, 0x9d,
-  0x00, 0xb5, 0xd8, 0x8f, 0xa2, 0x00, 0x72, 0x8b, 0x3c, 0xa2, 0x10, 0xcc, 0xa8, 0xab,
-  0xca, 0xa2, 0x0e, 0xcc, 0xa8, 0xb5, 0x03, 0x06, 0xa2, 0x02, 0x72, 0xab, 0xa8, 0xca,
-  0xa2, 0x04, 0x72, 0xab, 0x3c, 0xa2, 0x0e, 0xcc, 0x88, 0xa2, 0x34, 0x72, 0x8b, 0x3c,
-  0xa2, 0x0e, 0xcc, 0xa8, 0xa2, 0x30, 0x72, 0xab, 0x90, 0x00, 0xa2, 0x0f, 0x72, 0x8b,
-  0x3c, 0xa2, 0x0a, 0xcc, 0xa8, 0xb5, 0xa9, 0x76, 0xa2, 0x0e, 0xcc, 0x88, 0x99, 0x37,
-  0xa2, 0x08, 0x74, 0x8b, 0x3c, 0xa2, 0x0a, 0xcc, 0xa8, 0xb5, 0xa9, 0x64, 0xa2, 0x0e,
-  0xcc, 0xa8, 0xa2, 0x04, 0x74, 0xab, 0x3c, 0xa2, 0x0a, 0xcc, 0xa8, 0xb5, 0xa9, 0x54,
-  0xa2, 0x0e, 0xcc, 0xa8, 0xa2, 0x00, 0x74, 0xab, 0x3c, 0xa2, 0x0a, 0xcc, 0xa8, 0xb5,
-  0xa9, 0x44, 0xa2, 0x0e, 0xcc, 0x88, 0xa2, 0x02, 0x74, 0x8b, 0x3c, 0xa2, 0x0a, 0xcc,
-  0xa8, 0xb5, 0xa9, 0x34, 0xa2, 0x0e, 0xcc, 0xa8, 0xa2, 0x0a, 0x74, 0xab, 0xa2, 0x10,
-  0xcc, 0xa8, 0xa2, 0x0c, 0x74, 0xab, 0x3c, 0xa2, 0x0a, 0xcc, 0xa8, 0xb5, 0xa9, 0x1c,
-  0xa2, 0x0e, 0xcc, 0xa8, 0xa2, 0x0e, 0x74, 0xab, 0xa2, 0x10, 0xcc, 0xa8, 0xa2, 0x10,
-  0x74, 0xab, 0x3c, 0xa2, 0x0a, 0xcc, 0xa8, 0xb5, 0xa9, 0x04, 0xa2, 0x0e, 0xcc, 0x88,
-  0xa2, 0x1e, 0x74, 0x8b, 0x3c, 0xa2, 0x0a, 0xcc, 0xa8, 0xb5, 0xa8, 0xf4, 0xaf, 0xcc,
-  0xac, 0xcc, 0xca, 0x82, 0x0e, 0xcc, 0xf8, 0xac, 0x74, 0xca, 0x82, 0x12, 0xca, 0xf8,
-  0xb5, 0xd1, 0xd7, 0x3f, 0xcc, 0x3c, 0xa2, 0x0a, 0xcc, 0xa8, 0xb5, 0xa8, 0xff, 0xa2,
-  0x0e, 0xcc, 0xa8, 0xa2, 0x0c, 0x78, 0xab, 0xa2, 0x10, 0xcc, 0xa8, 0xa2, 0x0e, 0x78,
-  0xab, 0x3c, 0xa2, 0x0a, 0xcc, 0xa8, 0xb5, 0xa8, 0xe7, 0xa2, 0x0e, 0xcc, 0xa8, 0xa2,
-  0x08, 0x78, 0xab, 0xa2, 0x10, 0xcc, 0xa8, 0xa2, 0x0a, 0x78, 0xab, 0x3c, 0xa2, 0x0a,
-  0xcc, 0xa8, 0xb5, 0xa8, 0xcf, 0xa2, 0x0e, 0xcc, 0xa8, 0xa2, 0x04, 0x78, 0xab, 0xa2,
-  0x10, 0xcc, 0xa8, 0xa2, 0x06, 0x78, 0xab, 0x3c, 0xa2, 0x0a, 0xcc, 0xa8, 0xb5, 0xa8,
-  0xb7, 0xa2, 0x0e, 0xcc, 0xa8, 0xa2, 0x00, 0x78, 0xab, 0xa2, 0x10, 0xcc, 0xa8, 0xa2,
-  0x02, 0x78, 0xab, 0x3c, 0xa2, 0x0a, 0xcc, 0xa8, 0xb5, 0xa8, 0x8b, 0xa2, 0x0e, 0xcc,
-  0xa8, 0xa2, 0x06, 0x76, 0xab, 0x3c, 0xa2, 0x0a, 0xcc, 0xa8, 0xb5, 0xa8, 0x7b, 0xa2,
-  0x0e, 0xcc, 0x88, 0xa2, 0x0c, 0x76, 0x8b, 0x3c, 0xa2, 0x0a, 0xcc, 0xa8, 0xb5, 0xa8,
-  0x6b, 0xa2, 0x06, 0x76, 0xa8, 0x9c, 0x00, 0x4d, 0x9c, 0x01, 0x94, 0x30, 0x9c, 0x02,
-  0x94, 0x53, 0x9c, 0x03, 0x94, 0x76, 0x3c, 0xa2, 0x0f, 0xcc, 0x88, 0x99, 0x01, 0xa2,
-  0x13, 0x76, 0x8b, 0xa2, 0x10, 0xcc, 0x88, 0x99, 0x5b, 0xa2, 0x14, 0x76, 0x8b, 0xa2,
-  0x11, 0xcc, 0x88, 0x99, 0xdb, 0xa2, 0x15, 0x76, 0x8b, 0xa2, 0x22, 0x76, 0x88, 0xa2,
-  0x10, 0x72, 0x8b, 0x3c, 0xa2, 0x0f, 0xcc, 0x88, 0x99, 0x01, 0xa2, 0x13, 0x76, 0x8b,
-  0xa2, 0x10, 0xcc, 0x88, 0x99, 0x6d, 0xa2, 0x14, 0x76, 0x8b, 0xa2, 0x11, 0xcc, 0x88,
-  0x99, 0xed, 0xa2, 0x15, 0x76, 0x8b, 0xa2, 0x22, 0x76, 0x88, 0xa2, 0x11, 0x72, 0x8b,
-  0x3c, 0xa2, 0x0f, 0xcc, 0x88, 0x99, 0x01, 0xa2, 0x13, 0x76, 0x8b, 0xa2, 0x10, 0xcc,
-  0x88, 0x99, 0x6d, 0xa2, 0x14, 0x76, 0x8b, 0xa2, 0x11, 0xcc, 0x88, 0x99, 0x6d, 0xa2,
-  0x15, 0x76, 0x8b, 0xa2, 0x22, 0x76, 0x88, 0xa2, 0x12, 0x72, 0x8b, 0x3c, 0xa2, 0x0f,
-  0xcc, 0x88, 0x99, 0x01, 0xa2, 0x13, 0x76, 0x8b, 0xa2, 0x10, 0xcc, 0x88, 0x99, 0x37,
-  0xa2, 0x14, 0x76, 0x8b, 0x3c, 0xa2, 0x0a, 0xcc, 0xa8, 0xb5, 0xa7, 0xc6, 0xa2, 0x0e,
-  0xcc, 0xa8, 0xa2, 0x08, 0x76, 0xab, 0x3c, 0xa2, 0x0a, 0xcc, 0xa8, 0xb5, 0xa7, 0xb6,
-  0xa2, 0x0e, 0xcc, 0x88, 0xa2, 0x10, 0x76, 0x8b, 0x3c, 0xa2, 0x0a, 0xcc, 0xa8, 0xb5,
-  0xa7, 0xa6, 0xa2, 0x0e, 0xcc, 0x88, 0xa2, 0x11, 0x76, 0x8b, 0x3c, 0xa2, 0x0a, 0xcc,
-  0xa8, 0xb5, 0xa7, 0x96, 0xa2, 0x0e, 0xcc, 0xa8, 0xa2, 0x0e, 0x76, 0xab, 0x3c, 0xa2,
-  0x0a, 0xcc, 0xa8, 0xb5, 0xa7, 0x86, 0xa2, 0x0e, 0xcc, 0xa8, 0xa2, 0x00, 0x76, 0xab,
-  0xa2, 0x10, 0xcc, 0xa8, 0xa2, 0x02, 0x76, 0xab, 0xa2, 0x0e, 0xcc, 0xfa, 0x9d, 0x00,
-  0x3c, 0x90, 0x02, 0x01, 0xa2, 0x0c, 0x76, 0xd9, 0xa2, 0x0c, 0x76, 0x8b, 0x3c, 0xa2,
-  0x0a, 0xcc, 0xa8, 0xb5, 0xa7, 0x5c, 0x91, 0x02, 0xa2, 0x0e, 0xcc, 0x88, 0x9c, 0x00,
-  0x91, 0x02, 0x9c, 0x01, 0x91, 0x01, 0x9c, 0x02, 0x91, 0x08, 0x9c, 0x03, 0x91, 0x04,
-  0x9c, 0x04, 0xb1, 0x01, 0x00, 0xa8, 0xca, 0xa2, 0x04, 0x76, 0xab, 0x3c, 0xa2, 0x0a,
-  0xcc, 0xa8, 0xb5, 0xa7, 0x33, 0xa2, 0x0e, 0xcc, 0x88, 0xa2, 0x17, 0x76, 0x8b, 0x3c,
-  0xa2, 0x0a, 0xcc, 0xa8, 0xb5, 0xa7, 0x23, 0xa2, 0x0e, 0xcc, 0x88, 0xa2, 0x18, 0x76,
-  0x8b, 0x3c, 0xa2, 0x0a, 0xcc, 0xa8, 0xb5, 0xa6, 0xff, 0xac, 0x74, 0xce, 0x82, 0x58,
-  0xce, 0xf8, 0xa2, 0x12, 0xcc, 0x88, 0xe7, 0xe7, 0xa0, 0xc8, 0xce, 0xf8, 0xa2, 0x0e,
-  0xcc, 0x88, 0xd6, 0xa2, 0x0f, 0xcc, 0x88, 0xa2, 0x01, 0xce, 0x8b, 0xa2, 0x10, 0xcc,
-  0x88, 0xa2, 0x02, 0xce, 0x8b, 0xa2, 0x11, 0xcc, 0x88, 0xa2, 0x03, 0xce, 0x8b, 0x3c,
-  0xa2, 0x0a, 0xcc, 0xa8, 0xb5, 0xa6, 0xdd, 0xac, 0x76, 0xce, 0x82, 0x1a, 0xce, 0xf8,
-  0xa2, 0x12, 0xcc, 0x88, 0xe7, 0xe7, 0xa0, 0xc8, 0xce, 0xf8, 0xa2, 0x0e, 0xcc, 0x88,
-  0xd6, 0xa2, 0x0f, 0xcc, 0x88, 0xa2, 0x01, 0xce, 0x8b, 0xa2, 0x10, 0xcc, 0x88, 0xa2,
-  0x02, 0xce, 0x8b, 0xa2, 0x11, 0xcc, 0x88, 0xa2, 0x03, 0xce, 0x8b, 0x3c, 0x03, 0xae,
-  0xca, 0xd7, 0xae, 0xca, 0xd7, 0x03, 0xae, 0xca, 0xd7, 0xae, 0xca, 0xd7, 0x03, 0xae,
-  0xca, 0xd7, 0xae, 0xca, 0xd7, 0x3c, 0x00, 0xb6, 0xfe, 0x20, 0xab, 0xb6, 0xfe, 0x00,
-  0xab, 0xb6, 0xfe, 0x90, 0xab, 0x3c, 0xac, 0xcc, 0x28, 0xac, 0xce, 0x2a, 0xab, 0xce,
-  0xa8, 0x16, 0xb8, 0x00, 0x0a, 0x96, 0x14, 0xfc, 0x94, 0x45, 0xb2, 0xcf, 0x1e, 0xa0,
-  0x16, 0xcc, 0xf8, 0xa8, 0x1a, 0xa2, 0x02, 0xcc, 0xab, 0xa8, 0x18, 0xa2, 0x01, 0xcc,
-  0x8b, 0xa8, 0xce, 0xc6, 0xa8, 0x1c, 0xa2, 0x04, 0xcc, 0xab, 0xa8, 0x1e, 0xa2, 0x06,
-  0xcc, 0xab, 0xa8, 0x20, 0xa2, 0x08, 0xcc, 0xab, 0xa8, 0x16, 0xb8, 0x00, 0x0a, 0xbc,
-  0x0b, 0xae, 0x00, 0xab, 0x16, 0xaf, 0xca, 0xb1, 0x04, 0x00, 0xb5, 0x58, 0x5e, 0x3f,
-  0xca, 0x00, 0xac, 0x28, 0xcc, 0xac, 0x2a, 0xce, 0x3c, 0xb6, 0xff, 0x04, 0xa9, 0x76,
-  0x00, 0xab, 0x14, 0xab, 0x16, 0xa7, 0xcf, 0x1e, 0xda, 0xd6, 0x00, 0xe1, 0x62, 0x3c,
-  0xa8, 0x14, 0x96, 0x16, 0xfc, 0x42, 0x00, 0x3c, 0x90, 0x01, 0x63, 0x34, 0x0b, 0x9c,
-  0x00, 0x44, 0xb0, 0xf0, 0x00, 0x3c, 0xb6, 0xfe, 0x00, 0x88, 0x96, 0xc8, 0x17, 0x94,
-  0x35, 0xaf, 0xce, 0xaf, 0xcc, 0xa7, 0xfe, 0x00, 0xfe, 0x0e, 0xb3, 0xcf, 0x1e, 0xa0,
-  0x14, 0xce, 0xf8, 0xf0, 0xb9, 0xff, 0x7f, 0xe1, 0xf0, 0xe1, 0xf0, 0xe1, 0xf0, 0xe1,
-  0xf0, 0xe1, 0xa8, 0x14, 0xb8, 0x00, 0x0a, 0xbc, 0x0b, 0xae, 0x00, 0xab, 0x14, 0xb3,
-  0xfe, 0x00, 0xd4, 0x9a, 0x80, 0xd6, 0x3f, 0xcc, 0x3f, 0xce, 0x00, 0x3c, 0xb0, 0xf0,
-  0x01, 0x3c, 0xb7, 0x00, 0x00, 0x02, 0xb7, 0x00, 0x00, 0x04, 0xac, 0xce, 0xcc, 0x82,
-  0x48, 0xcc, 0xf8, 0xb7, 0x00, 0x00, 0x06, 0x00, 0xb4, 0xcf, 0x24, 0xa2, 0x35, 0xce,
-  0x88, 0x9c, 0x00, 0x94, 0x22, 0xa2, 0x3f, 0xce, 0x88, 0x9c, 0x00, 0x94, 0x23, 0xb7,
-  0x00, 0x00, 0x02, 0xb7, 0x00, 0x00, 0x04, 0xac, 0xce, 0xcc, 0x82, 0x48, 0xcc, 0xf8,
-  0xb7, 0x02, 0x00, 0x06, 0xa2, 0x22, 0xce, 0x88, 0xb4, 0xce, 0xfa, 0xb7, 0x1e, 0x84,
-  0x02, 0xb7, 0x00, 0x00, 0x04, 0x7a, 0xb7, 0x31, 0x2d, 0x02, 0xb7, 0x00, 0x01, 0x04,
-  0x95, 0x23, 0xa2, 0x35, 0xce, 0x88, 0x9c, 0x00, 0x3c, 0xb7, 0x09, 0xc4, 0x02, 0xb7,
-  0x00, 0x00, 0x04, 0xac, 0xce, 0xcc, 0x82, 0x48, 0xcc, 0xf8, 0xb7, 0x02, 0x00, 0x06,
-  0xa2, 0x22, 0xce, 0x88, 0xb4, 0xce, 0xc6, 0xb7, 0x62, 0x5a, 0x08, 0xb7, 0x00, 0x02,
-  0x0a, 0xa2, 0x35, 0xce, 0x88, 0x9c, 0x00, 0x94, 0x35, 0xa2, 0x36, 0xce, 0x88, 0x9c,
-  0x00, 0x94, 0x77, 0xa2, 0x38, 0xce, 0x88, 0x9c, 0x00, 0x94, 0x25, 0xa2, 0x37, 0xce,
-  0x88, 0x9d, 0x00, 0x5e, 0xa2, 0x34, 0xce, 0x88, 0x9c, 0x07, 0x4a, 0xf4, 0xab, 0x08,
-  0xa2, 0x02, 0xce, 0xa8, 0xab, 0x0a, 0x4d, 0xa2, 0x24, 0xce, 0xa8, 0xab, 0x08, 0xa2,
-  0x26, 0xce, 0xa8, 0xab, 0x0a, 0x40, 0xa2, 0x54, 0xce, 0x88, 0x9c, 0x00, 0x47, 0xa2,
-  0x34, 0xce, 0x88, 0x9c, 0x07, 0x58, 0xac, 0x08, 0x02, 0xac, 0x0a, 0x04, 0xac, 0xce,
-  0xcc, 0x82, 0x48, 0xcc, 0xf8, 0xb7, 0x02, 0x00, 0x06, 0xa2, 0x22, 0xce, 0x88, 0xb4,
-  0xce, 0x5b, 0x86, 0x12, 0x60, 0x08, 0xfc, 0x41, 0x7e, 0x86, 0x04, 0xa8, 0x0a, 0xfc,
-  0x42, 0x95, 0x25, 0xb7, 0x01, 0x07, 0x02, 0xb7, 0x00, 0x00, 0x04, 0xb7, 0x00, 0x00,
-  0x06, 0xa2, 0x22, 0xce, 0x88, 0xb5, 0xa6, 0x60, 0x95, 0x3a, 0xb7, 0x00, 0x4e, 0x08,
-  0xb7, 0x00, 0x00, 0x0a, 0x95, 0x52, 0xa2, 0x35, 0xce, 0x88, 0x9c, 0x00, 0x5a, 0xb7,
-  0x00, 0x4e, 0x02, 0xb7, 0x00, 0x00, 0x04, 0xac, 0xce, 0xcc, 0x82, 0x48, 0xcc, 0xf8,
-  0xb7, 0x02, 0x00, 0x06, 0xa2, 0x22, 0xce, 0x88, 0xb4, 0xce, 0x0c, 0xb7, 0x62, 0x5a,
-  0x02, 0xb7, 0x00, 0x02, 0x04, 0x7a, 0x95, 0x2a, 0x95, 0x2c, 0xa2, 0x35, 0xce, 0x88,
-  0x9c, 0x00, 0x94, 0x21, 0xa2, 0x3a, 0xce, 0x88, 0x9d, 0x00, 0x5a, 0xb7, 0x00, 0x4e,
-  0x02, 0xb7, 0x00, 0x00, 0x04, 0xac, 0xce, 0xcc, 0x82, 0x48, 0xcc, 0xf8, 0xb7, 0x02,
-  0x00, 0x06, 0xa2, 0x22, 0xce, 0x88, 0xb4, 0xcd, 0xd6, 0xa2, 0x35, 0xce, 0x88, 0x9c,
-  0x00, 0x4a, 0xb7, 0x00, 0x00, 0x02, 0xb7, 0x00, 0x00, 0x04, 0x95, 0x21, 0xb7, 0x62,
-  0x5a, 0x02, 0xb7, 0x00, 0x02, 0x04, 0x95, 0x2b, 0x90, 0x00, 0xa2, 0x50, 0xce, 0xab,
-  0xb5, 0xd3, 0xf7, 0x90, 0x00, 0xb5, 0xd3, 0xca, 0x91, 0x02, 0xa2, 0x22, 0xce, 0x88,
-  0xb5, 0xd4, 0xdc, 0xb7, 0x03, 0x01, 0x02, 0xb7, 0x00, 0x00, 0x04, 0xb7, 0x00, 0x00,
-  0x06, 0xa2, 0x22, 0xce, 0x88, 0xb5, 0xa5, 0xb8, 0xb7, 0x03, 0x02, 0x02, 0xb7, 0x00,
-  0x00, 0x04, 0xb7, 0x00, 0x00, 0x06, 0xa2, 0x22, 0xce, 0x88, 0xb5, 0xa5, 0xa5, 0x90,
-  0x00, 0xa2, 0x3f, 0xce, 0x8b, 0xa2, 0x22, 0xce, 0x88, 0xab, 0x18, 0xb0, 0x40, 0x21,
-  0xb5, 0xe9, 0x4d, 0x90, 0x00, 0xa2, 0x2a, 0xce, 0x8b, 0xa2, 0x22, 0xce, 0x88, 0xab,
-  0x18, 0xb0, 0x40, 0x3f, 0xb5, 0xe9, 0x3b, 0x90, 0x00, 0xa2, 0x2c, 0xce, 0xab, 0xa2,
-  0x22, 0xce, 0x88, 0xab, 0x18, 0xb0, 0x40, 0x3d, 0xb5, 0xe9, 0x29, 0x90, 0x00, 0xa2,
-  0x4e, 0xce, 0xab, 0xa2, 0x22, 0xce, 0x88, 0xab, 0x18, 0xb0, 0x40, 0x3e, 0xb5, 0xe9,
-  0x17, 0xb7, 0x05, 0x02, 0x02, 0xb7, 0x00, 0x00, 0x04, 0xb7, 0x00, 0x00, 0x06, 0xa2,
-  0x22, 0xce, 0x88, 0xb5, 0xa5, 0x4a, 0xb7, 0x00, 0x00, 0x02, 0xb7, 0x00, 0x00, 0x04,
-  0xb7, 0x02, 0x00, 0x06, 0xa2, 0x22, 0xce, 0x88, 0xac, 0xce, 0xcc, 0x82, 0x4c, 0xcc,
-  0xf8, 0xb5, 0xcd, 0x09, 0xb4, 0xfd, 0xcb, 0x90, 0x00, 0xb5, 0xd3, 0x1e, 0x91, 0x02,
-  0xa2, 0x22, 0xce, 0x88, 0xb5, 0xd4, 0x30, 0x90, 0x07, 0xa2, 0x50, 0xce, 0xab, 0xb5,
-  0xd3, 0x34, 0xb7, 0x03, 0x01, 0x02, 0xb7, 0x00, 0x00, 0x04, 0xb7, 0x00, 0x00, 0x06,
-  0xa2, 0x22, 0xce, 0x88, 0xb5, 0xa5, 0x03, 0xb7, 0x03, 0x02, 0x02, 0xb7, 0x00, 0x00,
-  0x04, 0xb7, 0x00, 0x00, 0x06, 0xa2, 0x22, 0xce, 0x88, 0xb5, 0xa4, 0xf0, 0x90, 0x00,
-  0xa2, 0x3f, 0xce, 0x8b, 0xa2, 0x35, 0xce, 0x8b, 0xa2, 0x22, 0xce, 0x88, 0xab, 0x18,
-  0xb0, 0x40, 0x21, 0xb5, 0xe8, 0x94, 0x90, 0x00, 0xa2, 0x29, 0xce, 0x8b, 0xa2, 0x54,
-  0xce, 0x88, 0x9c, 0x00, 0x94, 0x1f, 0xa2, 0x34, 0x72, 0xa8, 0x9c, 0x01, 0x41, 0x44,
-  0xa2, 0x22, 0xce, 0x88, 0xb7, 0x01, 0x07, 0x02, 0xb7, 0x00, 0x00, 0x04, 0xb7, 0x00,
-  0x00, 0x06, 0xa2, 0x22, 0xce, 0x88, 0xb5, 0xa4, 0xad, 0xa2, 0x2a, 0xce, 0x88, 0x9c,
-  0x00, 0x94, 0x42, 0x90, 0x01, 0xa2, 0x4e, 0xce, 0xab, 0xa2, 0x22, 0xce, 0x88, 0xab,
-  0x18, 0xb0, 0x40, 0x3e, 0xb5, 0xe8, 0x4d, 0xb7, 0x05, 0x02, 0x02, 0xb7, 0x00, 0x00,
-  0x04, 0xb7, 0x00, 0x00, 0x06, 0xa2, 0x22, 0xce, 0x88, 0xb5, 0xa4, 0x80, 0xb7, 0x00,
-  0x00, 0x02, 0xb7, 0x00, 0x00, 0x04, 0xb7, 0x02, 0x00, 0x06, 0xa2, 0x22, 0xce, 0x88,
-  0xac, 0xce, 0xcc, 0x82, 0x4c, 0xcc, 0xf8, 0xb5, 0xcc, 0x3f, 0xb4, 0xfd, 0x18, 0xa2,
-  0x2c, 0xce, 0xa8, 0x9c, 0x01, 0x95, 0x48, 0x90, 0x01, 0xa2, 0x2c, 0xce, 0xab, 0xa2,
-  0x22, 0xce, 0x88, 0xab, 0x18, 0xb0, 0x40, 0x3d, 0xb5, 0xe8, 0x03, 0x95, 0x5c, 0xa2,
-  0x14, 0x72, 0x88, 0x9d, 0x00, 0x95, 0xec, 0x90, 0x01, 0xa2, 0x41, 0xce, 0x8b, 0x3c,
-  0x90, 0x30, 0x01, 0xab, 0xca, 0xa2, 0x50, 0xce, 0xa8, 0x96, 0xca, 0xf9, 0xa2, 0x50,
-  0xce, 0xab, 0xb5, 0xd2, 0x43, 0x00, 0xa2, 0x35, 0xce, 0x8b, 0x90, 0x02, 0xa2, 0x4e,
-  0xce, 0xab, 0xa2, 0x22, 0xce, 0x88, 0xab, 0x18, 0xb0, 0x40, 0x3e, 0xb5, 0xe7, 0xc8,
-  0xb7, 0x05, 0x02, 0x02, 0xb7, 0x00, 0x00, 0x04, 0xb7, 0x00, 0x00, 0x06, 0xa2, 0x22,
-  0xce, 0x88, 0xb5, 0xa3, 0xfb, 0xb7, 0x00, 0x00, 0x02, 0xb7, 0x00, 0x00, 0x04, 0xb7,
-  0x02, 0x00, 0x06, 0xa2, 0x22, 0xce, 0x88, 0xac, 0xce, 0xcc, 0x82, 0x4c, 0xcc, 0xf8,
-  0xb5, 0xcb, 0xba, 0xa2, 0x22, 0xce, 0x88, 0xb5, 0xd2, 0x5e, 0xa2, 0x2e, 0xce, 0xab,
-  0xab, 0xca, 0x99, 0x06, 0x9c, 0x00, 0x48, 0xa2, 0x1e, 0x72, 0x88, 0x9c, 0x02, 0x94,
-  0x2c, 0x82, 0x08, 0xca, 0xf9, 0x82, 0x00, 0xca, 0xfc, 0x94, 0x32, 0xa2, 0x3b, 0xce,
-  0x88, 0x9d, 0x00, 0x94, 0x2a, 0x90, 0x01, 0xa2, 0x35, 0xce, 0x8b, 0xb7, 0x01, 0x03,
-  0x02, 0xb7, 0x00, 0x04, 0x04, 0xb7, 0x00, 0x00, 0x06, 0xa2, 0x22, 0xce, 0x88, 0xb5,
-  0xa3, 0x9c, 0x50, 0xb7, 0x01, 0x04, 0x02, 0xb7, 0x00, 0x04, 0x04, 0xb7, 0x00, 0x00,
-  0x06, 0x00, 0xb5, 0xa3, 0x8b, 0x91, 0x08, 0xa2, 0x22, 0xce, 0x88, 0xb5, 0xd2, 0x93,
-  0x3c, 0x90, 0x00, 0xa2, 0x35, 0xce, 0x8b, 0xa2, 0x3f, 0xce, 0x8b, 0xa2, 0x22, 0xce,
-  0x88, 0xab, 0x18, 0xb0, 0x40, 0x21, 0xb5, 0xe7, 0x25, 0x90, 0x08, 0xa2, 0x50, 0xce,
-  0xfa, 0xa2, 0x50, 0xce, 0xab, 0xb5, 0xd1, 0x7c, 0x90, 0x03, 0xa2, 0x4e, 0xce, 0xab,
-  0xa2, 0x22, 0xce, 0x88, 0xab, 0x18, 0xb0, 0x40, 0x3e, 0xb5, 0xe7, 0x06, 0xa2, 0x22,
-  0xce, 0x88, 0xb5, 0xd1, 0xc9, 0xa2, 0x2e, 0xce, 0xab, 0xab, 0xca, 0x99, 0x04, 0x9d,
-  0x00, 0x5c, 0x82, 0x40, 0xca, 0xf9, 0x82, 0x00, 0xca, 0xfd, 0xb4, 0xfe, 0x02, 0x90,
-  0x01, 0xb5, 0xd1, 0x20, 0x91, 0x04, 0xa2, 0x22, 0xce, 0x88, 0xb5, 0xd2, 0x32, 0xb4,
-  0xfc, 0x10, 0x90, 0x01, 0xa2, 0x35, 0xce, 0x8b, 0x77, 0x00, 0xa2, 0x35, 0xce, 0x8b,
-  0xa2, 0x36, 0xce, 0x8b, 0xa2, 0x37, 0xce, 0x8b, 0xa2, 0x38, 0xce, 0x8b, 0x90, 0x04,
-  0xa2, 0x4e, 0xce, 0xab, 0xa2, 0x22, 0xce, 0x88, 0xab, 0x18, 0xb0, 0x40, 0x3e, 0xb5,
-  0xe6, 0xae, 0xa2, 0x22, 0xce, 0x88, 0xb5, 0xd1, 0x71, 0xa2, 0x2e, 0xce, 0xab, 0x99,
-  0x40, 0x9c, 0x00, 0x54, 0x90, 0x08, 0x01, 0xa2, 0x50, 0xce, 0xf9, 0xa2, 0x50, 0xce,
-  0xab, 0xb5, 0xd0, 0xf4, 0x90, 0x01, 0xa2, 0x35, 0xce, 0x8b, 0xa2, 0x22, 0xce, 0x88,
-  0xb5, 0xd1, 0x4d, 0xa2, 0x2e, 0xce, 0xab, 0x99, 0x02, 0x9d, 0x00, 0xb4, 0xfd, 0x91,
-  0xa2, 0x34, 0xce, 0x88, 0x9d, 0x04, 0x4c, 0x91, 0x01, 0xa2, 0x22, 0xce, 0x88, 0xb5,
-  0xd1, 0xbf, 0xb4, 0xfb, 0xbe, 0xa2, 0x3c, 0xce, 0x88, 0x9d, 0x00, 0x72, 0xac, 0xce,
-  0xcc, 0x82, 0x44, 0xcc, 0xf8, 0x90, 0x04, 0xb5, 0x09, 0xae, 0x42, 0x95, 0x20, 0x90,
-  0x05, 0xb5, 0x09, 0xa6, 0x42, 0x95, 0x28, 0x90, 0x03, 0xb5, 0x09, 0x9e, 0xb4, 0xfd,
-  0x58, 0x95, 0x32, 0x00, 0xa2, 0x35, 0xce, 0x8b, 0x90, 0x05, 0xa2, 0x4e, 0xce, 0xab,
-  0xa2, 0x22, 0xce, 0x88, 0xab, 0x18, 0xb0, 0x40, 0x3e, 0xb5, 0xe6, 0x26, 0xa2, 0x22,
-  0xce, 0x88, 0xb5, 0xd0, 0xe9, 0xa2, 0x2e, 0xce, 0xab, 0xab, 0xca, 0x99, 0x04, 0x9c,
-  0x00, 0x94, 0x40, 0x90, 0x01, 0xa2, 0x35, 0xce, 0x8b, 0xac, 0xce, 0xcc, 0x82, 0x46,
-  0xcc, 0xf8, 0xa2, 0x34, 0xce, 0x88, 0xb5, 0x09, 0x4b, 0xac, 0xce, 0xcc, 0x82, 0x44,
-  0xcc, 0xf8, 0xa2, 0x34, 0xce, 0x88, 0xb5, 0x09, 0x4d, 0x5a, 0x91, 0x08, 0xa2, 0x22,
-  0xce, 0x88, 0xb5, 0xd1, 0x3e, 0xb5, 0xfb, 0xd6, 0x90, 0x08, 0xa2, 0x50, 0xce, 0xfa,
-  0xa2, 0x50, 0xce, 0xab, 0xb5, 0xd0, 0x3b, 0x3c, 0x91, 0x04, 0x7a, 0x82, 0x08, 0xca,
-  0xf9, 0x82, 0x00, 0xca, 0xfc, 0x95, 0x34, 0x90, 0x01, 0xa2, 0x35, 0xce, 0x8b, 0xac,
-  0xce, 0xcc, 0x82, 0x46, 0xcc, 0xf8, 0xa2, 0x34, 0xce, 0x88, 0xb5, 0x09, 0x09, 0x95,
-  0x4a, 0xa2, 0x06, 0xce, 0xa8, 0x9c, 0x03, 0x42, 0x94, 0x3e, 0xa2, 0x30, 0x72, 0xa8,
-  0x9c, 0x00, 0x94, 0x36, 0xa2, 0x54, 0xce, 0x88, 0x9d, 0x00, 0x94, 0x2e, 0xa2, 0x24,
-  0xce, 0xa8, 0xbc, 0x12, 0x60, 0x42, 0x94, 0x24, 0xa2, 0x26, 0xce, 0xa8, 0xbc, 0x04,
-  0xa8, 0x41, 0x5b, 0xa2, 0x30, 0x72, 0xa8, 0xa2, 0x32, 0x72, 0xfd, 0x43, 0xb4, 0xfc,
-  0x94, 0xa2, 0x32, 0x72, 0xa8, 0x04, 0xa2, 0x32, 0x72, 0xab, 0x90, 0x01, 0xa2, 0x54,
-  0xce, 0x8b, 0x90, 0x00, 0xa2, 0x35, 0xce, 0x8b, 0x90, 0x06, 0xa2, 0x4e, 0xce, 0xab,
-  0xa2, 0x22, 0xce, 0x88, 0xab, 0x18, 0xb0, 0x40, 0x3e, 0xb5, 0xe5, 0x54, 0xa2, 0x22,
-  0xce, 0x88, 0xb5, 0xd0, 0x17, 0xa2, 0x2e, 0xce, 0xab, 0x99, 0x04, 0x9d, 0x00, 0x59,
-  0x90, 0x08, 0xa2, 0x50, 0xce, 0xfa, 0xa2, 0x50, 0xce, 0xab, 0xb5, 0xcf, 0x9b, 0x91,
-  0x04, 0xa2, 0x22, 0xce, 0x88, 0xb5, 0xd0, 0x85, 0xb4, 0xfb, 0x47, 0x90, 0x01, 0xa2,
-  0x35, 0xce, 0x8b, 0x7f, 0x00, 0xa2, 0x35, 0xce, 0x8b, 0x90, 0x07, 0xa2, 0x4e, 0xce,
-  0xab, 0xa2, 0x22, 0xce, 0x88, 0xab, 0x18, 0xb0, 0x40, 0x3e, 0xb5, 0xe5, 0x0d, 0xa2,
-  0x22, 0xce, 0x88, 0xb5, 0xcf, 0xd0, 0xa2, 0x2e, 0xce, 0xab, 0xab, 0xca, 0x99, 0x08,
-  0x9d, 0x00, 0x4c, 0x82, 0x40, 0xca, 0xf9, 0x82, 0x00, 0xca, 0xfc, 0x4a, 0xb4, 0xfc,
-  0x08, 0x90, 0x01, 0xa2, 0x35, 0xce, 0x8b, 0x40, 0x91, 0x08, 0xa2, 0x22, 0xce, 0x88,
-  0xb5, 0xd0, 0x36, 0xb4, 0xfa, 0xfa, 0x00, 0xa2, 0x35, 0xce, 0x8b, 0xa2, 0x3b, 0xce,
-  0x8b, 0x90, 0x03, 0xa2, 0x2c, 0xce, 0xab, 0xa2, 0x22, 0xce, 0x88, 0xab, 0x18, 0xb0,
-  0x40, 0x3d, 0xb5, 0xe4, 0xc1, 0x00, 0xa2, 0x41, 0xce, 0x8b, 0xa2, 0x4c, 0xce, 0xab,
-  0x90, 0x08, 0xa2, 0x4e, 0xce, 0xab, 0xa2, 0x22, 0xce, 0x88, 0xab, 0x18, 0xb0, 0x40,
-  0x3e, 0xb5, 0xe4, 0xa6, 0xa2, 0x22, 0xce, 0x88, 0xb5, 0xcf, 0x69, 0xa2, 0x2e, 0xce,
-  0xab, 0x99, 0x40, 0x9c, 0x00, 0x54, 0x90, 0x01, 0xa2, 0x35, 0xce, 0x8b, 0x90, 0x08,
-  0x01, 0xa2, 0x50, 0xce, 0xf9, 0xa2, 0x50, 0xce, 0xab, 0xb5, 0xce, 0xe6, 0x91, 0x01,
-  0xa2, 0x22, 0xce, 0x88, 0xb5, 0xcf, 0xd0, 0xb4, 0xfa, 0x96, 0x90, 0x00, 0xa2, 0x50,
-  0xce, 0xab, 0xb5, 0xce, 0xd1, 0x90, 0x09, 0xa2, 0x4e, 0xce, 0xab, 0xa2, 0x22, 0xce,
-  0x88, 0xab, 0x18, 0xb0, 0x40, 0x3e, 0xb5, 0xe4, 0x5b, 0xa2, 0x04, 0xce, 0xa8, 0x9c,
-  0x02, 0x94, 0x2c, 0x90, 0x01, 0xb5, 0xce, 0x8a, 0xb7, 0x00, 0x00, 0x02, 0xb7, 0x00,
-  0x00, 0x04, 0xb7, 0x02, 0x00, 0x06, 0xac, 0xce, 0xcc, 0x82, 0x4c, 0xcc, 0xf8, 0xa2,
-  0x22, 0xce, 0x88, 0xb5, 0xc8, 0x53, 0xa2, 0x04, 0xce, 0xa8, 0xab, 0xca, 0xa2, 0x22,
-  0xce, 0x88, 0xb4, 0xcf, 0x7e, 0x90, 0x00, 0xb5, 0xce, 0x5e, 0x95, 0x2c, 0xa8, 0x46,
-  0xb5, 0x9e, 0xc9, 0xa2, 0x0e, 0x76, 0xa8, 0x9c, 0x00, 0x3c, 0xa8, 0x44, 0xbc, 0x02,
-  0x09, 0x55, 0xbc, 0x02, 0xff, 0x59, 0xbc, 0x02, 0x01, 0x94, 0x46, 0xbc, 0x02, 0x04,
-  0x94, 0x4e, 0xbc, 0x02, 0x10, 0x94, 0x79, 0x94, 0xb2, 0xa8, 0x48, 0xa2, 0x2e, 0x76,
-  0xab, 0x94, 0xaa, 0xa8, 0x48, 0xa2, 0x48, 0x76, 0xfc, 0x94, 0x23, 0xa2, 0x4a, 0x76,
-  0xfc, 0x46, 0xa2, 0x4c, 0x76, 0xfc, 0x4d, 0x3c, 0xb0, 0x02, 0x0b, 0xab, 0x44, 0x00,
-  0xa2, 0x4a, 0x76, 0xab, 0x94, 0x8b, 0xb0, 0x02, 0x0d, 0xab, 0x44, 0x00, 0xa2, 0x4c,
-  0x76, 0xab, 0x94, 0x7f, 0x00, 0xa2, 0x48, 0x76, 0xab, 0x94, 0x78, 0xa2, 0x4e, 0x76,
-  0xa8, 0x9c, 0x09, 0x3c, 0xac, 0x76, 0xce, 0xb4, 0xfa, 0xcb, 0xa2, 0x4e, 0x76, 0xa8,
-  0x9c, 0x09, 0x3c, 0xac, 0x76, 0xce, 0xb5, 0xfa, 0x09, 0xa2, 0x54, 0x76, 0x88, 0x9c,
-  0x00, 0x3c, 0xa2, 0x34, 0x72, 0xa8, 0x9c, 0x01, 0x41, 0x43, 0xac, 0x76, 0xce, 0xb7,
-  0x01, 0x07, 0x02, 0xb7, 0x00, 0x00, 0x04, 0xb7, 0x00, 0x00, 0x06, 0xa8, 0x46, 0xb4,
-  0x9f, 0xc8, 0xac, 0x76, 0xce, 0xb5, 0xf9, 0xe0, 0xa2, 0x54, 0x76, 0x88, 0x9c, 0x00,
-  0x5c, 0xa2, 0x34, 0x72, 0xa8, 0x9c, 0x01, 0x41, 0x43, 0xac, 0x76, 0xce, 0xb7, 0x01,
-  0x07, 0x02, 0xb7, 0x00, 0x00, 0x04, 0xb7, 0x00, 0x00, 0x06, 0xa8, 0x46, 0xb5, 0x9f,
-  0x9f, 0x90, 0x09, 0xa2, 0x4e, 0x76, 0xab, 0xa2, 0x22, 0x76, 0x88, 0xab, 0x18, 0xb0,
-  0x40, 0x3e, 0xb4, 0xe3, 0x47, 0xa2, 0x4e, 0x76, 0xa8, 0x9c, 0x00, 0x94, 0x2b, 0x9c,
-  0x01, 0x94, 0x3a, 0x9c, 0x02, 0x94, 0x93, 0x9c, 0x03, 0x94, 0xec, 0x9c, 0x04, 0xb4,
-  0x01, 0x74, 0x9c, 0x05, 0xb4, 0x02, 0xad, 0x9c, 0x06, 0xb4, 0x03, 0x42, 0x9c, 0x07,
-  0xb4, 0x03, 0xba, 0x9c, 0x08, 0xb4, 0x04, 0x1f, 0x9c, 0x09, 0xb4, 0x06, 0x44, 0x3c,
-  0xa8, 0x44, 0xbc, 0x02, 0x02, 0x41, 0x3c, 0xa8, 0x48, 0xa2, 0x04, 0x76, 0xab, 0xac,
-  0x76, 0xce, 0xb4, 0xfe, 0x8b, 0xa8, 0x44, 0xbc, 0x02, 0xff, 0x46, 0xbc, 0x02, 0x09,
-  0x94, 0x35, 0x3c, 0xa2, 0x35, 0x76, 0x88, 0x9c, 0x00, 0x4f, 0x90, 0x01, 0xa2, 0x3f,
-  0x76, 0x8b, 0xac, 0x46, 0x18, 0xb0, 0x40, 0x21, 0xb4, 0xe2, 0xdf, 0x90, 0x01, 0xa2,
-  0x35, 0x76, 0x8b, 0xac, 0x76, 0xce, 0xa2, 0x22, 0xce, 0x88, 0xb5, 0xcd, 0x99, 0xa2,
-  0x2e, 0x76, 0xab, 0x99, 0x06, 0x9c, 0x00, 0xb4, 0xf7, 0xbf, 0xb4, 0xfb, 0x86, 0xa2,
-  0x35, 0x76, 0x88, 0x9c, 0x00, 0x3c, 0xac, 0x76, 0xce, 0xa2, 0x22, 0xce, 0x88, 0xb5,
-  0xcd, 0x7a, 0xa2, 0x2e, 0x76, 0xab, 0x99, 0x06, 0x9c, 0x00, 0x3c, 0xb4, 0xfb, 0x69,
-  0xa8, 0x44, 0xbc, 0x02, 0x09, 0x41, 0x3c, 0xa2, 0x2e, 0x76, 0xa8, 0x99, 0x06, 0x9c,
-  0x00, 0x4f, 0xa2, 0x35, 0x76, 0x88, 0x9d, 0x00, 0x48, 0xa2, 0x1e, 0x72, 0x88, 0x9c,
-  0x02, 0x94, 0x2e, 0xa2, 0x2e, 0x76, 0xa8, 0x99, 0x08, 0x9c, 0x00, 0x3c, 0xa2, 0x35,
-  0x76, 0x88, 0x9d, 0x00, 0x3c, 0xa2, 0x3b, 0x76, 0x88, 0x9d, 0x00, 0x3c, 0x90, 0x01,
-  0xa2, 0x35, 0x76, 0x8b, 0xb7, 0x01, 0x03, 0x02, 0xb7, 0x00, 0x04, 0x04, 0xb7, 0x00,
-  0x00, 0x06, 0xa8, 0x46, 0xb4, 0x9e, 0x9d, 0xb7, 0x01, 0x04, 0x02, 0xb7, 0x00, 0x04,
-  0x04, 0xb7, 0x00, 0x00, 0x06, 0x00, 0xb4, 0x9e, 0x8d, 0xa8, 0x44, 0xbc, 0x02, 0x09,
-  0x4b, 0xbc, 0x02, 0x14, 0x94, 0x31, 0xbc, 0x02, 0xff, 0x94, 0x33, 0x3c, 0xa2, 0x35,
-  0x76, 0x88, 0x9d, 0x00, 0x3c, 0xa2, 0x2e, 0x76, 0xa8, 0x99, 0x04, 0x9c, 0x00, 0x4c,
-  0x90, 0x01, 0xa2, 0x35, 0x76, 0x8b, 0xac, 0x76, 0xce, 0xb4, 0xf7, 0x52, 0xa2, 0x2e,
-  0x76, 0xa8, 0x99, 0x40, 0x9c, 0x00, 0x3c, 0xac, 0x76, 0xce, 0xb4, 0xf9, 0x24, 0xa2,
-  0x48, 0x76, 0xa8, 0x9d, 0x00, 0x3c, 0xa2, 0x35, 0x76, 0x88, 0x9c, 0x00, 0x3c, 0xa2,
-  0x06, 0x76, 0xa8, 0x9c, 0x03, 0x4b, 0x00, 0xa2, 0x34, 0x76, 0x8b, 0xac, 0x76, 0xce,
-  0xb4, 0xfb, 0x1a, 0xa2, 0x30, 0x72, 0x88, 0x9c, 0x00, 0x71, 0xa2, 0x30, 0x72, 0xa8,
-  0xa2, 0x32, 0x72, 0xfd, 0x47, 0x90, 0x01, 0xa2, 0x55, 0x76, 0x8b, 0x3c, 0xa2, 0x32,
-  0x72, 0xa8, 0x04, 0xa2, 0x32, 0x72, 0xab, 0x90, 0x01, 0xa2, 0x55, 0x76, 0x8b, 0x00,
-  0xa2, 0x34, 0x76, 0x8b, 0xac, 0x76, 0xce, 0xb4, 0xfa, 0xe9, 0xa8, 0x44, 0xbc, 0x02,
-  0x09, 0x94, 0x3c, 0xbc, 0x02, 0xff, 0x94, 0x92, 0xbc, 0x02, 0x06, 0x4e, 0xbc, 0x02,
-  0x05, 0x5a, 0xbc, 0x02, 0x07, 0x5c, 0xbc, 0x02, 0x13, 0x94, 0xf0, 0x3c, 0xb1, 0x01,
-  0x00, 0xac, 0x76, 0xce, 0xa2, 0x22, 0xce, 0x88, 0xb5, 0xcc, 0xe6, 0xb4, 0xf6, 0xe5,
-  0xac, 0x76, 0xce, 0xb4, 0xfb, 0x49, 0xac, 0x76, 0xce, 0xa2, 0x3c, 0x76, 0x88, 0x9d,
-  0x00, 0xb4, 0xf8, 0x93, 0xb4, 0xfb, 0xc4, 0xac, 0x76, 0xce, 0xa2, 0x2e, 0x76, 0xa8,
-  0x99, 0x02, 0x9d, 0x00, 0xb4, 0xf8, 0x82, 0xa2, 0x2e, 0x76, 0xa8, 0x99, 0x40, 0x9c,
-  0x00, 0x5e, 0xa2, 0x35, 0x76, 0x88, 0x9d, 0x00, 0x57, 0x90, 0x08, 0x01, 0xa2, 0x50,
-  0x76, 0xf9, 0xa2, 0x50, 0x76, 0xab, 0xb5, 0xcb, 0xaf, 0x90, 0x01, 0xa2, 0x35, 0x76,
-  0x8b, 0xb4, 0xf6, 0x9b, 0xa2, 0x2e, 0x76, 0xa8, 0x99, 0x0c, 0x9c, 0x00, 0x3c, 0xa2,
-  0x38, 0x76, 0x88, 0x9c, 0x00, 0x3c, 0xa2, 0x37, 0x76, 0x88, 0x9d, 0x00, 0x3c, 0x90,
-  0x01, 0xa2, 0x37, 0x76, 0x8b, 0xac, 0x76, 0xce, 0xb5, 0x04, 0x87, 0xb4, 0xf6, 0x75,
-  0xa2, 0x35, 0x76, 0x88, 0x9d, 0x00, 0x4d, 0xa2, 0x34, 0x76, 0x88, 0x9c, 0x00, 0x3c,
-  0xac, 0x76, 0xce, 0xb4, 0xf8, 0x21, 0xac, 0x76, 0xce, 0xa2, 0x36, 0xce, 0x88, 0x9d,
-  0x00, 0x94, 0x36, 0x90, 0x01, 0xa2, 0x36, 0xce, 0x8b, 0xb5, 0x07, 0x8e, 0xb5, 0xf6,
-  0x4a, 0xa2, 0x22, 0xce, 0x88, 0xb5, 0xcb, 0xb4, 0xa2, 0x2e, 0xce, 0xab, 0x99, 0x0c,
-  0x9c, 0x00, 0x3c, 0xa2, 0x38, 0xce, 0x88, 0x9c, 0x00, 0x3c, 0xa2, 0x37, 0xce, 0x88,
-  0x9d, 0x00, 0x3c, 0x90, 0x01, 0xa2, 0x37, 0xce, 0x8b, 0xb5, 0x04, 0x32, 0xb4, 0xf6,
-  0x20, 0xa2, 0x38, 0xce, 0x88, 0x9c, 0x00, 0x3c, 0xa2, 0x37, 0xce, 0x88, 0x9d, 0x00,
-  0x3c, 0x90, 0x01, 0xa2, 0x37, 0xce, 0x8b, 0xb5, 0x04, 0x18, 0xb4, 0xf6, 0x06, 0xa2,
-  0x34, 0x76, 0x88, 0x9d, 0x04, 0x41, 0x3c, 0xa2, 0x3c, 0x76, 0x88, 0x9d, 0x00, 0x3c,
-  0xac, 0x76, 0xcc, 0x82, 0x44, 0xcc, 0xf8, 0x90, 0x04, 0xb5, 0x03, 0xee, 0x41, 0x3c,
-  0x90, 0x05, 0xb5, 0x03, 0xe7, 0x41, 0x3c, 0x90, 0x03, 0xb5, 0x03, 0xe0, 0x41, 0x3c,
-  0xac, 0x76, 0xce, 0xb4, 0xf7, 0x95, 0xa8, 0x44, 0xbc, 0x02, 0x09, 0x46, 0xbc, 0x02,
-  0xff, 0x94, 0x77, 0x3c, 0xac, 0x76, 0xce, 0xa2, 0x2e, 0x76, 0xa8, 0x99, 0x02, 0x9d,
-  0x00, 0xb4, 0xf7, 0x7b, 0xa2, 0x35, 0x76, 0x88, 0x9d, 0x00, 0x3c, 0xa2, 0x2e, 0x76,
-  0xa8, 0x99, 0x04, 0x9c, 0x00, 0x94, 0x27, 0x90, 0x01, 0xa2, 0x35, 0x76, 0x8b, 0xa2,
-  0x34, 0x76, 0x88, 0xac, 0x76, 0xcc, 0x82, 0x46, 0xcc, 0xf8, 0xb5, 0x03, 0x89, 0xa2,
-  0x50, 0x76, 0xa8, 0x9a, 0x08, 0xa2, 0x50, 0x76, 0xab, 0xac, 0x76, 0xce, 0xb5, 0xca,
-  0x91, 0xb5, 0xf6, 0x1c, 0xa2, 0x2e, 0x76, 0xa8, 0x99, 0x08, 0x9c, 0x00, 0x3c, 0x90,
-  0x01, 0xa2, 0x35, 0x76, 0x8b, 0xa2, 0x34, 0x76, 0x88, 0xac, 0x76, 0xcc, 0x82, 0x46,
-  0xcc, 0xf8, 0xb5, 0x03, 0x61, 0xa2, 0x50, 0x76, 0xa8, 0x9a, 0x08, 0xa2, 0x50, 0x76,
-  0xab, 0xac, 0x76, 0xce, 0xb5, 0xca, 0x61, 0xb4, 0xf5, 0xec, 0xac, 0x76, 0xce, 0xa2,
-  0x35, 0x76, 0x88, 0x9c, 0x00, 0xb4, 0xf7, 0x07, 0xa2, 0x34, 0x76, 0x88, 0x04, 0xa2,
-  0x34, 0x76, 0x8b, 0xb4, 0xf9, 0x11, 0xa8, 0x44, 0xbc, 0x02, 0x09, 0x4b, 0xbc, 0x02,
-  0xff, 0x94, 0x4d, 0xbc, 0x02, 0x13, 0x94, 0x60, 0x3c, 0xac, 0x76, 0xce, 0xa2, 0x2e,
-  0x76, 0xa8, 0x99, 0x02, 0x9d, 0x00, 0xb4, 0xf6, 0xdc, 0xa2, 0x35, 0x76, 0x88, 0x9d,
-  0x00, 0x55, 0xa2, 0x2e, 0x76, 0xa8, 0x99, 0x04, 0x9c, 0x00, 0x4c, 0x90, 0x01, 0xa2,
-  0x35, 0x76, 0x8b, 0xac, 0x76, 0xce, 0xb4, 0xf5, 0xc3, 0xac, 0x76, 0xce, 0xa2, 0x22,
-  0xce, 0x88, 0xb5, 0xca, 0x67, 0xa2, 0x2e, 0x76, 0xab, 0x99, 0x40, 0x9c, 0x00, 0x3c,
-  0xa2, 0x35, 0x76, 0x88, 0x9c, 0x00, 0x3c, 0xb4, 0xf6, 0xa3, 0xac, 0x76, 0xce, 0xa2,
-  0x35, 0x76, 0x88, 0x9c, 0x00, 0xb4, 0xf6, 0x97, 0xa2, 0x3c, 0x76, 0x88, 0x9c, 0x00,
-  0xb4, 0xfa, 0x51, 0xb4, 0xf6, 0x8b, 0xa2, 0x3c, 0x76, 0x88, 0x9c, 0x00, 0x3c, 0xac,
-  0x76, 0xce, 0xb4, 0xf6, 0x7e, 0xa8, 0x44, 0xbc, 0x02, 0x09, 0x4b, 0xbc, 0x02, 0xff,
-  0x94, 0x3a, 0xbc, 0x02, 0x13, 0x94, 0x4d, 0x3c, 0xac, 0x76, 0xce, 0xa2, 0x2e, 0x76,
-  0xa8, 0x99, 0x02, 0x9c, 0x00, 0x43, 0xb4, 0xf6, 0x5e, 0xa2, 0x35, 0x76, 0x88, 0x9d,
-  0x00, 0x3c, 0xa2, 0x2e, 0x76, 0xa8, 0x99, 0x08, 0x9c, 0x00, 0x49, 0x90, 0x01, 0xa2,
-  0x35, 0x76, 0x8b, 0xb4, 0xf5, 0x4a, 0xa2, 0x2e, 0x76, 0xa8, 0x99, 0x40, 0x9c, 0x00,
-  0x3c, 0xb4, 0xf6, 0x39, 0xac, 0x76, 0xce, 0xa2, 0x35, 0x76, 0x88, 0x9c, 0x00, 0xb4,
-  0xf6, 0x2d, 0xa2, 0x3c, 0x76, 0x88, 0x9d, 0x00, 0xb4, 0xf6, 0x24, 0xb4, 0xfa, 0x2c,
-  0xa2, 0x3c, 0x76, 0x88, 0x9c, 0x00, 0x3c, 0xac, 0x76, 0xce, 0xb4, 0xf6, 0x14, 0xa8,
-  0x44, 0xbc, 0x02, 0xff, 0x94, 0x36, 0xbc, 0x02, 0x09, 0x94, 0x98, 0xbc, 0x02, 0x03,
-  0xb4, 0x01, 0x6e, 0xbc, 0x02, 0x0a, 0xb4, 0x01, 0x6e, 0xbc, 0x02, 0x0b, 0xb4, 0x01,
-  0x75, 0xbc, 0x02, 0x06, 0xb4, 0x01, 0x93, 0xbc, 0x02, 0x13, 0xb4, 0x01, 0xc2, 0xbc,
-  0x02, 0x0d, 0xb4, 0x01, 0xc9, 0xbc, 0x02, 0x11, 0xb4, 0x01, 0xda, 0xbc, 0x02, 0x12,
-  0xb4, 0x01, 0xe1, 0x3c, 0xa2, 0x35, 0x76, 0x88, 0x9d, 0x00, 0x4d, 0xa2, 0x3b, 0x76,
-  0x88, 0x9d, 0x00, 0x46, 0xac, 0x76, 0xce, 0xb4, 0xf6, 0xa9, 0xa2, 0x35, 0x76, 0x88,
-  0x9c, 0x00, 0x3c, 0xa2, 0x3a, 0x76, 0x88, 0x9d, 0x00, 0x3c, 0xac, 0x76, 0xce, 0xa2,
-  0x22, 0xce, 0x88, 0xb5, 0xc9, 0x5c, 0xa2, 0x2e, 0x76, 0xab, 0x99, 0x08, 0x9c, 0x00,
-  0x4d, 0xa2, 0x3b, 0x76, 0x88, 0x9d, 0x00, 0x46, 0xb5, 0xf5, 0x98, 0xb4, 0xf4, 0x9c,
-  0xb7, 0x03, 0x02, 0x02, 0xb7, 0x00, 0x01, 0x04, 0xb7, 0x00, 0x00, 0x06, 0xa8, 0x46,
-  0xb5, 0x9a, 0xb1, 0xb7, 0x02, 0x06, 0x02, 0xb7, 0x00, 0x00, 0x04, 0xb7, 0x00, 0x00,
-  0x06, 0xa8, 0x46, 0xb5, 0x9a, 0xa0, 0xb4, 0xf4, 0x77, 0xa2, 0x3b, 0x76, 0x88, 0x9d,
-  0x00, 0x51, 0xa2, 0x2e, 0x76, 0xa8, 0x99, 0x04, 0x9c, 0x00, 0x48, 0xac, 0x76, 0xce,
-  0xb5, 0xf5, 0x5a, 0x94, 0x50, 0xa2, 0x3b, 0x76, 0x88, 0x9d, 0x00, 0x51, 0xa2, 0x2e,
-  0x76, 0xa8, 0x99, 0x02, 0x9c, 0x00, 0x48, 0xac, 0x76, 0xce, 0xb5, 0xf6, 0x28, 0x94,
-  0x38, 0xa2, 0x3a, 0x76, 0x88, 0x9c, 0x00, 0x94, 0x58, 0xa2, 0x3b, 0x76, 0x88, 0x9d,
-  0x00, 0x94, 0x50, 0xa2, 0x2e, 0x76, 0xa8, 0x99, 0x08, 0x9c, 0x00, 0x94, 0x46, 0x90,
-  0x01, 0xa2, 0x3b, 0x76, 0x8b, 0xb7, 0x01, 0x03, 0x02, 0xb7, 0x00, 0x04, 0x04, 0xb7,
-  0x00, 0x00, 0x06, 0xa8, 0x46, 0xb5, 0x9a, 0x3c, 0xac, 0x76, 0xce, 0xb5, 0xf4, 0x10,
-  0x40, 0xa2, 0x2e, 0x76, 0xa8, 0x99, 0x20, 0x9c, 0x00, 0x3c, 0xa2, 0x4a, 0x76, 0xa8,
-  0x9d, 0x00, 0x3c, 0xb7, 0x07, 0xef, 0x02, 0xb7, 0x00, 0x00, 0x04, 0xb7, 0x02, 0x00,
-  0x06, 0xac, 0x76, 0xcc, 0x82, 0x4a, 0xcc, 0xf8, 0xa8, 0x46, 0xb4, 0xc1, 0xe6, 0xa2,
-  0x2e, 0x76, 0xa8, 0x99, 0x40, 0x9c, 0x00, 0x95, 0x30, 0xa2, 0x4a, 0x76, 0xa8, 0x9c,
-  0x00, 0x57, 0xb7, 0x00, 0x00, 0x02, 0xb7, 0x00, 0x00, 0x04, 0xb7, 0x00, 0x00, 0x06,
-  0xac, 0x76, 0xcc, 0x82, 0x4a, 0xcc, 0xf8, 0x00, 0xb5, 0xc1, 0xbe, 0xa2, 0x35, 0x76,
-  0x88, 0x9d, 0x00, 0x95, 0x56, 0x90, 0x01, 0xa2, 0x35, 0x76, 0x8b, 0x90, 0x08, 0x01,
-  0xa2, 0x50, 0x76, 0xf9, 0xa2, 0x50, 0x76, 0xab, 0xac, 0x76, 0xce, 0xb5, 0xc7, 0xe4,
-  0xb5, 0xf3, 0x9d, 0x95, 0x72, 0xac, 0x76, 0xce, 0xb4, 0xf5, 0x83, 0xa2, 0x3b, 0x76,
-  0x88, 0x9d, 0x00, 0x3c, 0xac, 0x76, 0xce, 0xb4, 0xf5, 0x67, 0xac, 0x76, 0xce, 0xa2,
-  0x22, 0xce, 0x88, 0xb5, 0xc8, 0x28, 0xa2, 0x2e, 0x76, 0xab, 0x99, 0x41, 0x9d, 0x00,
-  0x3c, 0xb7, 0x02, 0x0a, 0x02, 0xb7, 0x00, 0x00, 0x04, 0xb7, 0x00, 0x00, 0x06, 0xa8,
-  0x46, 0xb4, 0x99, 0x8a, 0xa2, 0x4c, 0x76, 0xa8, 0x9d, 0x00, 0x3c, 0xb1, 0x01, 0x00,
-  0xac, 0x76, 0xce, 0xa2, 0x22, 0xce, 0x88, 0xb5, 0xc8, 0x87, 0x90, 0x30, 0xa2, 0x50,
-  0x76, 0xfa, 0xa2, 0x50, 0x76, 0xab, 0xb5, 0xc7, 0x87, 0xb7, 0x05, 0x01, 0x02, 0xb7,
-  0x00, 0x00, 0x04, 0xb7, 0x00, 0x00, 0x06, 0xa8, 0x46, 0xb5, 0x99, 0x58, 0xb4, 0xf3,
-  0x2f, 0xa2, 0x3c, 0x76, 0x88, 0x9c, 0x00, 0x3c, 0xac, 0x76, 0xce, 0xb4, 0xf4, 0x1b,
-  0xb7, 0x02, 0x06, 0x02, 0xb7, 0x00, 0x00, 0x04, 0xb7, 0x00, 0x00, 0x06, 0xa8, 0x46,
-  0xb5, 0x99, 0x37, 0xac, 0x76, 0xce, 0xb4, 0xf3, 0x0b, 0xa2, 0x3b, 0x76, 0x88, 0x9d,
-  0x00, 0x3c, 0xac, 0x76, 0xce, 0xb4, 0xf4, 0xdd, 0xa2, 0x41, 0x76, 0x88, 0x9c, 0x00,
-  0x3c, 0xac, 0x76, 0xce, 0xb4, 0xf3, 0xea, 0xa8, 0x44, 0xbc, 0x02, 0x02, 0x45, 0xbc,
-  0x02, 0x0f, 0x4d, 0x3c, 0xa8, 0x48, 0xa2, 0x04, 0x76, 0xab, 0xac, 0x76, 0xce, 0xb4,
-  0xf8, 0x44, 0xac, 0x76, 0xce, 0xb4, 0xf3, 0x18, 0xaf, 0xce, 0xab, 0xce, 0x39, 0x3f,
-  0xce, 0x3c, 0xaf, 0xce, 0xab, 0xce, 0x38, 0x3f, 0xce, 0x3c, 0xaf, 0xce, 0xab, 0xce,
-  0x3a, 0x43, 0x3f, 0xce, 0x3d, 0x3f, 0xce, 0x3c, 0xa2, 0x34, 0xce, 0x88, 0x9c, 0x00,
-  0x94, 0x2a, 0x9c, 0x01, 0x94, 0x42, 0x9c, 0x02, 0x94, 0x79, 0x9c, 0x03, 0x94, 0xb0,
-  0x9c, 0x04, 0x94, 0xe2, 0x9c, 0x05, 0xb4, 0x01, 0x89, 0x9c, 0x06, 0xb4, 0x01, 0x97,
-  0x9c, 0x07, 0xb4, 0x01, 0xd0, 0x9c, 0x08, 0xb4, 0x02, 0x45, 0x9c, 0x09, 0xb4, 0x02,
-  0x81, 0x3c, 0xac, 0xce, 0xcc, 0x82, 0x44, 0xcc, 0xf8, 0x34, 0x4d, 0xb7, 0x02, 0x05,
-  0x02, 0xb7, 0x00, 0x00, 0x04, 0xb7, 0x00, 0x00, 0x06, 0xa2, 0x22, 0xce, 0x88, 0xb4,
-  0x98, 0x90, 0xa2, 0x06, 0xce, 0xa8, 0x9c, 0x02, 0x94, 0x24, 0x9c, 0x03, 0x94, 0x20,
-  0xa2, 0x34, 0xce, 0x88, 0xac, 0xce, 0xcc, 0x82, 0x44, 0xcc, 0xf8, 0x34, 0x79, 0xb7,
-  0x02, 0x05, 0x02, 0xb7, 0x00, 0x00, 0x04, 0xb7, 0x00, 0x00, 0x06, 0xa2, 0x22, 0xce,
-  0x88, 0xb4, 0x98, 0x64, 0xa2, 0x34, 0xce, 0x88, 0xac, 0xce, 0xcc, 0x82, 0x44, 0xcc,
-  0xf8, 0x34, 0xa1, 0x95, 0x20, 0xa2, 0x06, 0xce, 0xa8, 0x9c, 0x01, 0x94, 0x24, 0x9c,
-  0x03, 0x94, 0x20, 0xa2, 0x34, 0xce, 0x88, 0xac, 0xce, 0xcc, 0x82, 0x44, 0xcc, 0xf8,
-  0x34, 0xb4, 0xb7, 0x02, 0x05, 0x02, 0xb7, 0x00, 0x00, 0x04, 0xb7, 0x00, 0x00, 0x06,
-  0xa2, 0x22, 0xce, 0x88, 0xb4, 0x98, 0x29, 0xa2, 0x34, 0xce, 0x88, 0xac, 0xce, 0xcc,
-  0x82, 0x44, 0xcc, 0xf8, 0x34, 0xdc, 0x95, 0x20, 0xb5, 0xd9, 0x79, 0x9c, 0x00, 0x94,
-  0x20, 0xa2, 0x34, 0xce, 0x88, 0xac, 0xce, 0xcc, 0x82, 0x44, 0xcc, 0xf8, 0x34, 0xf2,
-  0xb7, 0x02, 0x05, 0x02, 0xb7, 0x00, 0x00, 0x04, 0xb7, 0x00, 0x00, 0x06, 0xa2, 0x22,
-  0xce, 0x88, 0xb4, 0x97, 0xf3, 0xa2, 0x34, 0xce, 0x88, 0xac, 0xce, 0xcc, 0x82, 0x44,
-  0xcc, 0xf8, 0x35, 0x0a, 0x95, 0x20, 0xa2, 0x2a, 0xce, 0x88, 0x9c, 0x00, 0x94, 0x44,
-  0xa2, 0x2c, 0xce, 0xa8, 0x9c, 0x02, 0x94, 0x26, 0x53, 0xb7, 0x02, 0x05, 0x02, 0xb7,
-  0x00, 0x00, 0x04, 0xb7, 0x00, 0x00, 0x06, 0xa2, 0x22, 0xce, 0x88, 0xb4, 0x97, 0xc0,
-  0x90, 0x02, 0xa2, 0x2c, 0xce, 0xab, 0xa2, 0x22, 0xce, 0x88, 0xab, 0x18, 0xb0, 0x40,
-  0x3d, 0xb5, 0xdb, 0x68, 0xac, 0xce, 0xcc, 0x82, 0x44, 0xcc, 0xf8, 0xa2, 0x34, 0xce,
-  0x88, 0x35, 0x57, 0xa2, 0x34, 0xce, 0x88, 0x04, 0x35, 0x5e, 0x95, 0x39, 0xa2, 0x2c,
-  0xce, 0xa8, 0x9c, 0x02, 0x52, 0x90, 0x01, 0xa2, 0x2c, 0xce, 0xab, 0xa2, 0x22, 0xce,
-  0x88, 0xab, 0x18, 0xb0, 0x40, 0x3d, 0xb5, 0xdb, 0x39, 0xa2, 0x40, 0xce, 0x88, 0x9c,
-  0x00, 0x56, 0xac, 0xce, 0xcc, 0x82, 0x44, 0xcc, 0xf8, 0xa2, 0x34, 0xce, 0x88, 0x35,
-  0x8d, 0xa2, 0x34, 0xce, 0x88, 0x04, 0x35, 0x8c, 0x95, 0x6f, 0xac, 0xce, 0xcc, 0x82,
-  0x44, 0xcc, 0xf8, 0xa2, 0x34, 0xce, 0x88, 0x35, 0x9b, 0xa2, 0x30, 0xce, 0xa8, 0xa2,
-  0x32, 0xce, 0xfa, 0x9c, 0x00, 0x49, 0xa2, 0x34, 0xce, 0x88, 0x04, 0x35, 0xb5, 0x95,
-  0x90, 0xa2, 0x34, 0xce, 0x88, 0x04, 0x35, 0xb6, 0x95, 0x99, 0xb7, 0x02, 0x05, 0x02,
-  0xb7, 0x00, 0x00, 0x04, 0xb7, 0x00, 0x00, 0x06, 0xa2, 0x22, 0xce, 0x88, 0xb4, 0x97,
-  0x25, 0xa2, 0x0c, 0xce, 0x88, 0x99, 0x01, 0x9c, 0x00, 0x55, 0xa2, 0x0f, 0x72, 0x88,
-  0x9c, 0x00, 0x4e, 0xac, 0xce, 0xcc, 0x82, 0x44, 0xcc, 0xf8, 0xa2, 0x34, 0xce, 0x88,
-  0x35, 0xf0, 0x4d, 0xac, 0xce, 0xcc, 0x82, 0x44, 0xcc, 0xf8, 0xa2, 0x34, 0xce, 0x88,
-  0x35, 0xf6, 0xb7, 0x02, 0x05, 0x02, 0xb7, 0x00, 0x00, 0x04, 0xb7, 0x00, 0x00, 0x06,
-  0xa2, 0x22, 0xce, 0x88, 0xb4, 0x96, 0xe7, 0xaf, 0xce, 0xb7, 0x05, 0x04, 0x44, 0xb7,
-  0x00, 0x00, 0x48, 0xb7, 0x00, 0x00, 0x4a, 0xa2, 0x22, 0xce, 0x88, 0xab, 0x46, 0xb5,
-  0x9b, 0xc3, 0x3f, 0xce, 0x90, 0x20, 0x01, 0xab, 0xca, 0xa2, 0x50, 0xce, 0xa8, 0x96,
-  0xca, 0xf9, 0xa2, 0x50, 0xce, 0xab, 0xb5, 0xc4, 0xd9, 0xb7, 0x03, 0x01, 0x02, 0xb7,
-  0x00, 0x00, 0x04, 0xb7, 0x00, 0x00, 0x06, 0xa2, 0x22, 0xce, 0x88, 0xb5, 0x96, 0xa8,
-  0xa2, 0x30, 0xce, 0xa8, 0xa2, 0x32, 0xce, 0xfa, 0x9c, 0x00, 0x94, 0x20, 0xac, 0xce,
-  0xcc, 0x82, 0x44, 0xcc, 0xf8, 0xa2, 0x34, 0xce, 0x88, 0x36, 0x69, 0xb7, 0x02, 0x05,
-  0x02, 0xb7, 0x00, 0x00, 0x04, 0xb7, 0x00, 0x00, 0x06, 0xa2, 0x22, 0xce, 0x88, 0xb4,
-  0x96, 0x7c, 0xac, 0xce, 0xcc, 0x82, 0x44, 0xcc, 0xf8, 0xa2, 0x34, 0xce, 0x88, 0x36,
-  0x81, 0x95, 0x20, 0xa2, 0x0c, 0xce, 0x88, 0x99, 0x02, 0x9c, 0x00, 0x94, 0x28, 0xa2,
-  0x0f, 0x72, 0x88, 0x9c, 0x00, 0x94, 0x20, 0xac, 0xce, 0xcc, 0x82, 0x44, 0xcc, 0xf8,
-  0xa2, 0x34, 0xce, 0x88, 0x36, 0xaa, 0xb7, 0x02, 0x05, 0x02, 0xb7, 0x00, 0x00, 0x04,
-  0xb7, 0x00, 0x00, 0x06, 0xa2, 0x22, 0xce, 0x88, 0xb4, 0x96, 0x3b, 0xac, 0xce, 0xcc,
-  0x82, 0x44, 0xcc, 0xf8, 0xa2, 0x34, 0xce, 0x88, 0x36, 0xc2, 0x95, 0x20, 0xb7, 0x03,
-  0x01, 0x02, 0xb7, 0x00, 0x00, 0x04, 0xb7, 0x00, 0x00, 0x06, 0xa2, 0x22, 0xce, 0x88,
-  0xb5, 0x96, 0x19, 0x90, 0x20, 0x01, 0xab, 0xca, 0xa2, 0x50, 0xce, 0xa8, 0x96, 0xca,
-  0xf9, 0xa2, 0x50, 0xce, 0xab, 0xb5, 0xc4, 0x24, 0xa2, 0x3c, 0xce, 0x88, 0x9d, 0x00,
-  0x94, 0x30, 0xa2, 0x2a, 0xce, 0x88, 0x9c, 0x00, 0x42, 0x94, 0x27, 0xb5, 0xd9, 0x1c,
-  0x9c, 0x00, 0x94, 0x33, 0xac, 0xce, 0xcc, 0x82, 0x44, 0xcc, 0xf8, 0xa2, 0x34, 0xce,
-  0x88, 0x37, 0x17, 0xb7, 0x02, 0x05, 0x02, 0xb7, 0x00, 0x00, 0x04, 0xb7, 0x00, 0x00,
-  0x06, 0xa2, 0x22, 0xce, 0x88, 0xb4, 0x95, 0xce, 0xb7, 0x02, 0x01, 0x02, 0xb7, 0x00,
-  0x00, 0x04, 0xb7, 0x00, 0x00, 0x06, 0xa2, 0x22, 0xce, 0x88, 0xb4, 0x95, 0xbb, 0xac,
-  0xce, 0xcc, 0x82, 0x44, 0xcc, 0xf8, 0xa2, 0x34, 0xce, 0x88, 0x37, 0x42, 0x95, 0x33,
-  0xa2, 0x34, 0xce, 0x88, 0x9c, 0x00, 0x94, 0x2d, 0x9c, 0x01, 0x94, 0x2c, 0x9c, 0x02,
-  0x94, 0x2b, 0x9c, 0x03, 0x94, 0x2a, 0x9c, 0x04, 0x94, 0x5b, 0x9c, 0x05, 0x94, 0xcb,
-  0x9c, 0x06, 0x94, 0xca, 0x9c, 0x07, 0xb4, 0x01, 0x65, 0x9c, 0x08, 0xb4, 0x01, 0xc1,
-  0x9c, 0x09, 0xb4, 0x01, 0xec, 0x9c, 0x0a, 0xb4, 0x02, 0x4d, 0x3c, 0xb4, 0xfc, 0x96,
-  0xb4, 0xfc, 0x93, 0xb4, 0xfc, 0x90, 0xac, 0xce, 0xcc, 0x82, 0x46, 0xcc, 0xf8, 0x90,
-  0x01, 0x37, 0x85, 0x4c, 0x90, 0x02, 0x37, 0x8a, 0x94, 0x20, 0x90, 0x00, 0x4a, 0x90,
-  0x03, 0x47, 0x90, 0x02, 0x37, 0x96, 0x67, 0x90, 0x02, 0xa2, 0x28, 0xce, 0x8b, 0xa2,
-  0x22, 0xce, 0x88, 0xab, 0x18, 0xb0, 0x40, 0x0d, 0xb5, 0xd8, 0xf9, 0xb4, 0xfc, 0x5e,
-  0x90, 0x01, 0x75, 0xa2, 0x06, 0xce, 0xa8, 0x9c, 0x03, 0x5c, 0xac, 0xce, 0xcc, 0x82,
-  0x44, 0xcc, 0xf8, 0x90, 0x03, 0x37, 0xc1, 0x94, 0x30, 0xac, 0xce, 0xcc, 0x82, 0x46,
-  0xcc, 0xf8, 0x90, 0x03, 0x37, 0xce, 0x94, 0x23, 0x94, 0x4e, 0xa2, 0x28, 0xce, 0x88,
-  0x9c, 0x03, 0x42, 0x95, 0x23, 0x90, 0x01, 0xa2, 0x2a, 0xce, 0x8b, 0xa2, 0x22, 0xce,
-  0x88, 0xab, 0x18, 0xb0, 0x40, 0x3f, 0xb5, 0xd8, 0xb5, 0xb4, 0xfc, 0x1a, 0x90, 0x01,
-  0x50, 0xa2, 0x06, 0xce, 0xa8, 0x9c, 0x03, 0x69, 0xa2, 0x28, 0xce, 0x88, 0x9c, 0x03,
-  0x70, 0x90, 0x02, 0xa2, 0x29, 0xce, 0x8b, 0xaf, 0xce, 0xb5, 0xaf, 0x79, 0x3f, 0xce,
-  0xa2, 0x3c, 0xce, 0x88, 0x9c, 0x00, 0x48, 0x90, 0x03, 0xa2, 0x2a, 0xce, 0x8b, 0x95,
-  0x3a, 0x90, 0x00, 0x68, 0x90, 0x02, 0x6b, 0xb4, 0xfb, 0xe4, 0xac, 0xce, 0xcc, 0x82,
-  0x44, 0xcc, 0xf8, 0x90, 0x04, 0xb5, 0xfb, 0xcc, 0x94, 0x48, 0xac, 0xce, 0xcc, 0x82,
-  0x46, 0xcc, 0xf8, 0x90, 0x04, 0xb5, 0xfb, 0xbe, 0x94, 0x3a, 0xac, 0xce, 0xcc, 0x82,
-  0x44, 0xcc, 0xf8, 0x90, 0x05, 0xb5, 0xfb, 0xb0, 0x5d, 0xac, 0xce, 0xcc, 0x82, 0x46,
-  0xcc, 0xf8, 0x90, 0x05, 0xb5, 0xfb, 0xa3, 0x50, 0xb0, 0x2b, 0xc4, 0xa2, 0x24, 0xce,
-  0xab, 0x90, 0x01, 0xa2, 0x26, 0xce, 0xab, 0xb4, 0xfb, 0x9e, 0xb0, 0xe6, 0x59, 0xa2,
-  0x24, 0xce, 0xab, 0x90, 0x0b, 0xa2, 0x26, 0xce, 0xab, 0xb4, 0xfb, 0x8e, 0xac, 0xce,
-  0xcc, 0x82, 0x44, 0xcc, 0xf8, 0x90, 0x04, 0xb5, 0xfb, 0x76, 0x94, 0x23, 0xac, 0xce,
-  0xcc, 0x82, 0x46, 0xcc, 0xf8, 0x90, 0x04, 0xb5, 0xfb, 0x68, 0x90, 0x05, 0xb5, 0xfb,
-  0x63, 0x59, 0x40, 0xb0, 0x35, 0x20, 0xa2, 0x24, 0xce, 0xab, 0x90, 0x77, 0xa2, 0x26,
-  0xce, 0xab, 0xb4, 0xfb, 0x5d, 0x90, 0x05, 0xb5, 0xfb, 0x4c, 0x42, 0x95, 0x29, 0xb0,
-  0x12, 0x60, 0xa2, 0x24, 0xce, 0xab, 0xb0, 0x04, 0xa8, 0xa2, 0x26, 0xce, 0xab, 0xb4,
-  0xfb, 0x44, 0xb7, 0x02, 0x06, 0x02, 0xb7, 0x00, 0x00, 0x04, 0xb7, 0x00, 0x00, 0x06,
-  0xa2, 0x22, 0xce, 0x88, 0xb5, 0x94, 0x0f, 0xac, 0xce, 0xcc, 0x82, 0x44, 0xcc, 0xf8,
-  0x90, 0x06, 0xb5, 0xfb, 0x19, 0x41, 0x53, 0xb7, 0x03, 0x01, 0x02, 0xb7, 0x00, 0x01,
-  0x04, 0xb7, 0x00, 0x00, 0x06, 0xa2, 0x22, 0xce, 0x88, 0xb5, 0x93, 0xee, 0xaf, 0xce,
-  0xb7, 0x05, 0x03, 0x44, 0xb7, 0x00, 0x00, 0x48, 0xb7, 0x00, 0x00, 0x4a, 0xa2, 0x22,
-  0xce, 0x88, 0xab, 0x46, 0xb5, 0x98, 0xca, 0x3f, 0xce, 0xa2, 0x50, 0xce, 0xa8, 0x9a,
-  0x20, 0xa2, 0x50, 0xce, 0xab, 0xb5, 0xc1, 0xe6, 0x90, 0x01, 0xa2, 0x38, 0xce, 0x8b,
-  0x3c, 0xac, 0xce, 0xcc, 0x82, 0x44, 0xcc, 0xf8, 0x90, 0x07, 0xb5, 0xfa, 0xcb, 0x50,
-  0xac, 0xce, 0xcc, 0x82, 0x46, 0xcc, 0xf8, 0x90, 0x07, 0xb5, 0xfa, 0xbe, 0x43, 0xb4,
-  0xfa, 0xc6, 0xb7, 0x02, 0x01, 0x02, 0xb7, 0x00, 0x00, 0x04, 0xb7, 0x00, 0x00, 0x06,
-  0xa2, 0x22, 0xce, 0x88, 0xb4, 0x93, 0x91, 0xac, 0xce, 0xcc, 0x82, 0x44, 0xcc, 0xf8,
-  0x90, 0x08, 0xb5, 0xfa, 0x9b, 0x50, 0xac, 0xce, 0xcc, 0x82, 0x46, 0xcc, 0xf8, 0x90,
-  0x08, 0xb5, 0xfa, 0x8e, 0x43, 0xb4, 0xfa, 0x96, 0xb7, 0x02, 0x06, 0x02, 0xb7, 0x00,
-  0x00, 0x04, 0xb7, 0x00, 0x00, 0x06, 0xa2, 0x22, 0xce, 0x88, 0xb5, 0x93, 0x61, 0xac,
-  0xce, 0xcc, 0x82, 0x44, 0xcc, 0xf8, 0x90, 0x08, 0xb5, 0xfa, 0x6b, 0x54, 0xa2, 0x50,
-  0xce, 0xa8, 0x9a, 0x20, 0xa2, 0x50, 0xce, 0xab, 0xb5, 0xc1, 0x65, 0x90, 0x01, 0xa2,
-  0x38, 0xce, 0x8b, 0x3c, 0xb7, 0x03, 0x01, 0x02, 0xb7, 0x00, 0x01, 0x04, 0xb7, 0x00,
-  0x00, 0x06, 0xa2, 0x22, 0xce, 0x88, 0xb5, 0x93, 0x2d, 0x95, 0x27, 0xa2, 0x22, 0xce,
-  0x88, 0xab, 0x18, 0xb0, 0x40, 0x0f, 0xb5, 0xd6, 0xd9, 0xb7, 0x02, 0x07, 0x02, 0xb7,
-  0x00, 0x00, 0x04, 0xb7, 0x00, 0x00, 0x06, 0xa2, 0x22, 0xce, 0x88, 0xb4, 0x93, 0x0c,
-  0x00, 0x00
-};
-
-#endif /* !(_PTIFDDI_ASM_H) */
diff -urN linux-2.5.70-bk8/drivers/net/rrunner.c linux-2.5.70-bk9/drivers/net/rrunner.c
--- linux-2.5.70-bk8/drivers/net/rrunner.c	2003-05-26 18:00:26.000000000 -0700
+++ linux-2.5.70-bk9/drivers/net/rrunner.c	2003-06-04 04:37:26.000000000 -0700
@@ -97,13 +97,11 @@
 	struct rr_private *rrpriv;
 	void *tmpptr;
 	dma_addr_t ring_dma;
-	int ret;
+	int ret = -ENOMEM;
 
-	dev = init_hippi_dev(NULL, sizeof(struct rr_private));
-	if (!dev) {
-		ret = -ENOMEM;
-		goto out2;
-	}
+	dev = alloc_hippi_dev(sizeof(struct rr_private));
+	if (!dev)
+		goto out3;
 
 	ret = pci_enable_device(pdev);
 	if (ret) {
@@ -210,6 +208,10 @@
 	rr_init(dev);
 
 	dev->base_addr = 0;
+
+	ret = register_netdev(dev);
+	if (ret)
+		goto out;
 	return 0;
 
  out:
@@ -225,12 +227,9 @@
 		pci_release_regions(pdev);
 		pci_set_drvdata(pdev, NULL);
 	}
-
  out2:
-	if (dev) {
-		unregister_hipdev(dev);
-		kfree(dev);
-	}
+	kfree(dev);
+ out3:
 	return ret;
 }
 
@@ -252,7 +251,7 @@
 				    rr->rx_ring_dma);
 		pci_free_consistent(pdev, TX_TOTAL_SIZE, rr->tx_ring,
 				    rr->tx_ring_dma);
-		unregister_hipdev(dev);
+		unregister_netdev(dev);
 		iounmap(rr->regs);
 		kfree(dev);
 		pci_release_regions(pdev);
diff -urN linux-2.5.70-bk8/drivers/net/tokenring/3c359.c linux-2.5.70-bk9/drivers/net/tokenring/3c359.c
--- linux-2.5.70-bk8/drivers/net/tokenring/3c359.c	2003-05-26 18:01:00.000000000 -0700
+++ linux-2.5.70-bk9/drivers/net/tokenring/3c359.c	2003-06-04 04:37:26.000000000 -0700
@@ -1129,7 +1129,7 @@
 				netif_stop_queue(dev) ;
 				xl_freemem(dev) ; 
 				free_irq(dev->irq,dev); 
-				unregister_trdev(dev) ; 
+				unregister_netdev(dev) ; 
 				kfree(dev) ;  
 				xl_reset(dev) ; 
 				writel(ACK_INTERRUPT | LATCH_ACK, xl_mmio + MMIO_COMMAND) ; 
@@ -1783,7 +1783,7 @@
 	struct net_device *dev = pci_get_drvdata(pdev);
 	struct xl_private *xl_priv=(struct xl_private *)dev->priv;
 	
-	unregister_trdev(dev);
+	unregister_netdev(dev);
 	iounmap(xl_priv->xl_mmio) ; 
 	pci_release_regions(pdev) ; 
 	pci_set_drvdata(pdev,NULL) ; 
diff -urN linux-2.5.70-bk8/drivers/net/tokenring/abyss.c linux-2.5.70-bk9/drivers/net/tokenring/abyss.c
--- linux-2.5.70-bk8/drivers/net/tokenring/abyss.c	2003-05-26 18:00:26.000000000 -0700
+++ linux-2.5.70-bk9/drivers/net/tokenring/abyss.c	2003-06-04 04:37:26.000000000 -0700
@@ -112,9 +112,10 @@
 		
 	/* At this point we have found a valid card. */
 		
-	dev = init_trdev(NULL, 0);
+	dev = alloc_trdev(0);
 	if (!dev)
 		return -ENOMEM;
+
 	SET_MODULE_OWNER(dev);
 
 	if (!request_region(pci_ioaddr, ABYSS_IO_EXTENT, dev->name)) {
@@ -165,21 +166,21 @@
 	dev->open = abyss_open;
 	dev->stop = abyss_close;
 
-	ret = register_trdev(dev);
+	pci_set_drvdata(pdev, dev);
+
+	ret = register_netdev(dev);
 	if (ret)
 		goto err_out_tmsdev;
-
-	pci_set_drvdata(pdev, dev);
 	return 0;
 
 err_out_tmsdev:
+	pci_set_drvdata(pdev, NULL);
 	tmsdev_term(dev);
 err_out_irq:
 	free_irq(pdev->irq, dev);
 err_out_region:
 	release_region(pci_ioaddr, ABYSS_IO_EXTENT);
 err_out_trdev:
-	unregister_netdev(dev);
 	kfree(dev);
 	return ret;
 }
diff -urN linux-2.5.70-bk8/drivers/net/tokenring/ibmtr.c linux-2.5.70-bk9/drivers/net/tokenring/ibmtr.c
--- linux-2.5.70-bk8/drivers/net/tokenring/ibmtr.c	2003-05-26 18:00:41.000000000 -0700
+++ linux-2.5.70-bk9/drivers/net/tokenring/ibmtr.c	2003-06-04 04:37:27.000000000 -0700
@@ -110,7 +110,6 @@
 #include <linux/module.h>
 
 #ifdef PCMCIA
-#undef MODULE
 #undef ENABLE_PAGING
 #else
 #define ENABLE_PAGING 1		
@@ -352,7 +351,7 @@
 
 	unsigned char segment, intr=0, irq=0, i, j, cardpresent=NOTOK, temp=0;
 	void * t_mmio = 0;
-	struct tok_info *ti = 0;
+	struct tok_info *ti = dev->priv;
 	void *cd_chanid;
 	unsigned char *tchanid, ctemp;
 #ifndef PCMCIA
@@ -361,14 +360,6 @@
 	static int version_printed;
 #endif
 
-#ifndef MODULE
-#ifndef PCMCIA
-	dev = init_trdev(dev, 0);
-	if (!dev)
-		return -ENOMEM;
-#endif
-#endif
-
 	/*    Query the adapter PIO base port which will return
 	 *    indication of where MMIO was placed. We also have a
 	 *    coded interrupt number.
@@ -404,7 +395,6 @@
 	 */
 #ifdef PCMCIA
 	iounmap(t_mmio);
-	ti = dev->priv;		/*BMS moved up here */
 	t_mmio = (void *)ti->mmio;	/*BMS to get virtual address */
 	irq = ti->irq;		/*BMS to display the irq!   */
 #endif
@@ -454,30 +444,20 @@
 		DPRINTK("Expected for MCA: ");
 		PrtChanID(mcchannelid, 1);
 	}
-	/* Now, allocate some of the pl0 buffers for this driver.. */
+	/* Now, setup some of the pl0 buffers for this driver.. */
 	/* If called from PCMCIA, it is already set up, so no need to 
 	   waste the memory, just use the existing structure */
 #ifndef PCMCIA
-	ti = (struct tok_info *) kmalloc(sizeof(struct tok_info), GFP_KERNEL);
-	if (ti == NULL) {
-		iounmap(t_mmio);
-		return -ENOMEM;
-	}
-	memset(ti, 0, sizeof(struct tok_info));
 	ti->mmio = t_mmio;
-	dev->priv = ti;		/* this seems like the logical use of the
-				   field ... let's try some empirical tests
-				   using the token-info structure -- that
-				   should fit with out future hope of multiple
-				   adapter support as well /dwm   */
-        for(i=0; i<IBMTR_MAX_ADAPTERS; i++) {
-                if (turbo_io[i] != PIOaddr) continue;
+        for (i = 0; i < IBMTR_MAX_ADAPTERS; i++) {
+                if (turbo_io[i] != PIOaddr)
+			continue;
 #if IBMTR_DEBUG_MESSAGES 
-		printk("ibmtr::tr_probe1, setting PIOaddr %x to Turbo\n" ,
-							PIOaddr);
+		printk("ibmtr::tr_probe1, setting PIOaddr %x to Turbo\n",
+		       PIOaddr);
 #endif
-		ti->turbo=1;
-		t_irq=turbo_irq[i];
+		ti->turbo = 1;
+		t_irq = turbo_irq[i];
         }
 #endif /* !PCMCIA */
 	ti->readlog_pending = 0;
@@ -826,11 +806,6 @@
 	dev->set_multicast_list = tok_set_multicast_list;
 	dev->change_mtu = ibmtr_change_mtu;
 
-#ifndef MODULE
-#ifndef PCMCIA
-	tr_setup(dev);
-#endif
-#endif
 	return 0;
 }
 
@@ -1948,21 +1923,21 @@
 	int count=0;
 
 	find_turbo_adapters(io);
+
 	for (i = 0; io[i] && (i < IBMTR_MAX_ADAPTERS); i++) {
 		irq[i] = 0;
 		mem[i] = 0;
-		dev_ibmtr[i] = NULL;
-		dev_ibmtr[i] = init_trdev(dev_ibmtr[i], 0);
+		dev_ibmtr[i] = alloc_trdev(sizeof(struct tok_info));
 		if (dev_ibmtr[i] == NULL) { 
-			if (i==0)
+			if (i == 0)
 				return -ENOMEM;
-			break ; 
+			break;
 		}
 		dev_ibmtr[i]->base_addr = io[i];
 		dev_ibmtr[i]->irq = irq[i];
 		dev_ibmtr[i]->mem_start = mem[i];
 		dev_ibmtr[i]->init = &ibmtr_probe;
-		if (register_trdev(dev_ibmtr[i]) != 0) {
+		if (register_netdev(dev_ibmtr[i]) != 0) {
 			kfree(dev_ibmtr[i]);
 			dev_ibmtr[i] = NULL;
 			continue;
@@ -1970,7 +1945,7 @@
 		count++;
 	}
 	if (count) return 0;
-	printk("ibmtr: register_trdev() returned non-zero.\n");
+	printk("ibmtr: register_netdev() returned non-zero.\n");
 	return -EIO;
 }				/*init_module */
 
@@ -1979,24 +1954,25 @@
 	int i,j;
 
 	for (i = 0; i < IBMTR_MAX_ADAPTERS; i++){
-		if(!dev_ibmtr[i]) continue;
+		if (!dev_ibmtr[i])
+			continue;
 		if (dev_ibmtr[i]->base_addr) {
 			outb(0,dev_ibmtr[i]->base_addr+ADAPTRESET);
 			for(j=jiffies+TR_RST_TIME;
 				time_before_eq(jiffies,j);) ;
                         outb(0,dev_ibmtr[i]->base_addr+ADAPTRESETREL);
                 }
-		unregister_trdev(dev_ibmtr[i]);
+		unregister_netdev(dev_ibmtr[i]);
 		free_irq(dev_ibmtr[i]->irq, dev_ibmtr[i]);
 		release_region(dev_ibmtr[i]->base_addr, IBMTR_IO_EXTENT);
 #ifndef PCMCIA
 		{ 
-		struct tok_info *ti = (struct tok_info *)dev_ibmtr[i]->priv ; 
-		iounmap((u32 *)ti->mmio) ; 
-		iounmap((u32 *)ti->sram_virt) ; 
+			struct tok_info *ti = (struct tok_info *)
+				dev_ibmtr[i]->priv;
+			iounmap((u32 *)ti->mmio);
+			iounmap((u32 *)ti->sram_virt);
 		}
 #endif		
-		kfree(dev_ibmtr[i]->priv);
 		kfree(dev_ibmtr[i]);
 		dev_ibmtr[i] = NULL;
 	}
diff -urN linux-2.5.70-bk8/drivers/net/tokenring/lanstreamer.c linux-2.5.70-bk9/drivers/net/tokenring/lanstreamer.c
--- linux-2.5.70-bk8/drivers/net/tokenring/lanstreamer.c	2003-05-26 18:00:59.000000000 -0700
+++ linux-2.5.70-bk9/drivers/net/tokenring/lanstreamer.c	2003-06-04 04:37:27.000000000 -0700
@@ -221,213 +221,220 @@
 static int __devinit streamer_init_one(struct pci_dev *pdev,
 				       const struct pci_device_id *ent)
 {
-  struct net_device *dev=NULL;
+	struct net_device *dev;
 	struct streamer_private *streamer_priv;
-  __u32 pio_start, pio_end, pio_flags, pio_len;
-  __u32 mmio_start, mmio_end, mmio_flags, mmio_len;
-  int rc=0;
-  static int card_no=-1;
-  u16 pcr;
-  u8 cls = 0;
+	unsigned long pio_start, pio_end, pio_flags, pio_len;
+	unsigned long mmio_start, mmio_end, mmio_flags, mmio_len;
+	int rc = 0;
+	static int card_no=-1;
+	u16 pcr;
+	u8 cls = 0;
 
 #if STREAMER_DEBUG
-  printk("lanstreamer::streamer_init_one, entry pdev %p\n",pdev);
+	printk("lanstreamer::streamer_init_one, entry pdev %p\n",pdev);
 #endif
 
-				card_no++;
-  dev=init_trdev(dev, sizeof(*streamer_priv));
-  if(dev==NULL) {
-				printk(KERN_ERR "lanstreamer: out of memory.\n");
-    return -ENOMEM;
-			}
-			SET_MODULE_OWNER(dev);
-  streamer_priv=dev->priv;
+	card_no++;
+	dev = alloc_trdev(sizeof(*streamer_priv));
+	if (dev==NULL) {
+		printk(KERN_ERR "lanstreamer: out of memory.\n");
+		return -ENOMEM;
+	}
+
+	SET_MODULE_OWNER(dev);
+	streamer_priv = dev->priv;
 
 #if STREAMER_NETWORK_MONITOR
 #ifdef CONFIG_PROC_FS
-  if (!dev_streamer) {
-    create_proc_read_entry("net/streamer_tr",0,0,streamer_proc_info,NULL); 
-  }
-  streamer_priv->next=dev_streamer;
-  dev_streamer=streamer_priv;
+	if (!dev_streamer)
+		create_proc_read_entry("net/streamer_tr", 0, 0,
+					streamer_proc_info, NULL); 
+	streamer_priv->next = dev_streamer;
+	dev_streamer = streamer_priv;
 #endif
 #endif
- 
-  if(pci_set_dma_mask(pdev, 0xFFFFFFFF)) {
-    printk(KERN_ERR "%s: No suitable PCI mapping available.\n", dev->name);
-    rc = -ENODEV;
-    goto err_out;
-  }
-  
-  if (pci_enable_device(pdev)) {
-    printk(KERN_ERR "lanstreamer: unable to enable pci device\n");
-    rc=-EIO;
-    goto err_out;
-  }
-  
-  pci_set_master(pdev);
-  
-  pio_start = pci_resource_start(pdev, 0);
-  pio_end = pci_resource_end(pdev, 0);
-  pio_flags = pci_resource_flags(pdev, 0);
-  pio_len = pci_resource_len(pdev, 0);
-  
-  mmio_start = pci_resource_start(pdev, 1);
-  mmio_end = pci_resource_end(pdev, 1);
-  mmio_flags = pci_resource_flags(pdev, 1);
-  mmio_len = pci_resource_len(pdev, 1);
-  
+
+	if (pci_set_dma_mask(pdev, 0xFFFFFFFF)) {
+		printk(KERN_ERR "%s: No suitable PCI mapping available.\n",
+				dev->name);
+		rc = -ENODEV;
+		goto err_out;
+	}
+
+	if (pci_enable_device(pdev)) {
+		printk(KERN_ERR "lanstreamer: unable to enable pci device\n");
+		rc=-EIO;
+		goto err_out;
+	}
+
+	pci_set_master(pdev);
+
+	pio_start = pci_resource_start(pdev, 0);
+	pio_end = pci_resource_end(pdev, 0);
+	pio_flags = pci_resource_flags(pdev, 0);
+	pio_len = pci_resource_len(pdev, 0);
+
+	mmio_start = pci_resource_start(pdev, 1);
+	mmio_end = pci_resource_end(pdev, 1);
+	mmio_flags = pci_resource_flags(pdev, 1);
+	mmio_len = pci_resource_len(pdev, 1);
+
 #if STREAMER_DEBUG
-  printk("lanstreamer: pio_start %x pio_end %x pio_len %x pio_flags %x\n",
-	 pio_start, pio_end, pio_len, pio_flags);
-  printk("lanstreamer: mmio_start %x mmio_end %x mmio_len %x mmio_flags %x\n",
-	 mmio_start, mmio_end, mmio_flags, mmio_len);
-#endif
-
-  if (!request_region(pio_start, pio_len, "lanstreamer")) {
-    printk(KERN_ERR "lanstreamer: unable to get pci io addr %x\n",pio_start);
-    rc= -EBUSY;
-    goto err_out;
-  }
-
-  if (!request_mem_region(mmio_start, mmio_len, "lanstreamer")) {
-    printk(KERN_ERR "lanstreamer: unable to get pci mmio addr %x\n",mmio_start);
-    rc= -EBUSY;
-    goto err_out_free_pio;
-  }
-
-  streamer_priv->streamer_mmio=ioremap(mmio_start, mmio_len);
-  if (streamer_priv->streamer_mmio == NULL) {
-    printk(KERN_ERR "lanstreamer: unable to remap MMIO %x\n",mmio_start);
-    rc= -EIO;
-    goto err_out_free_mmio;
-			}
+	printk("lanstreamer: pio_start %x pio_end %x pio_len %x pio_flags %x\n",
+		pio_start, pio_end, pio_len, pio_flags);
+	printk("lanstreamer: mmio_start %x mmio_end %x mmio_len %x mmio_flags %x\n",
+		mmio_start, mmio_end, mmio_flags, mmio_len);
+#endif
 
-  init_waitqueue_head(&streamer_priv->srb_wait);
-  init_waitqueue_head(&streamer_priv->trb_wait);
+	if (!request_region(pio_start, pio_len, "lanstreamer")) {
+		printk(KERN_ERR "lanstreamer: unable to get pci io addr %lx\n",
+			pio_start);
+		rc= -EBUSY;
+		goto err_out;
+	}
+
+	if (!request_mem_region(mmio_start, mmio_len, "lanstreamer")) {
+		printk(KERN_ERR "lanstreamer: unable to get pci mmio addr %lx\n",
+			mmio_start);
+		rc= -EBUSY;
+		goto err_out_free_pio;
+	}
 
-			dev->open = &streamer_open;
-			dev->hard_start_xmit = &streamer_xmit;
-			dev->change_mtu = &streamer_change_mtu;
-			dev->stop = &streamer_close;
+	streamer_priv->streamer_mmio=ioremap(mmio_start, mmio_len);
+	if (streamer_priv->streamer_mmio == NULL) {
+		printk(KERN_ERR "lanstreamer: unable to remap MMIO %lx\n",
+			mmio_start);
+		rc= -EIO;
+		goto err_out_free_mmio;
+	}
+
+	init_waitqueue_head(&streamer_priv->srb_wait);
+	init_waitqueue_head(&streamer_priv->trb_wait);
+
+	dev->open = &streamer_open;
+	dev->hard_start_xmit = &streamer_xmit;
+	dev->change_mtu = &streamer_change_mtu;
+	dev->stop = &streamer_close;
 #if STREAMER_IOCTL
-			dev->do_ioctl = &streamer_ioctl;
+	dev->do_ioctl = &streamer_ioctl;
 #else
-			dev->do_ioctl = NULL;
+	dev->do_ioctl = NULL;
 #endif
-			dev->set_multicast_list = &streamer_set_rx_mode;
-			dev->get_stats = &streamer_get_stats;
-			dev->set_mac_address = &streamer_set_mac_address;
-  dev->irq = pdev->irq;
-  dev->base_addr=pio_start;
-  
-  streamer_priv->streamer_card_name = (char *)pdev->resource[0].name;
-  streamer_priv->pci_dev=pdev;
-  
-  if ((pkt_buf_sz[card_no] < 100) || (pkt_buf_sz[card_no] > 18000))
-    streamer_priv->pkt_buf_sz = PKT_BUF_SZ;
-  else
-    streamer_priv->pkt_buf_sz = pkt_buf_sz[card_no];
-  
-  streamer_priv->streamer_ring_speed = ringspeed[card_no];
-  streamer_priv->streamer_message_level = message_level[card_no];
+	dev->set_multicast_list = &streamer_set_rx_mode;
+	dev->get_stats = &streamer_get_stats;
+	dev->set_mac_address = &streamer_set_mac_address;
+	dev->irq = pdev->irq;
+	dev->base_addr=pio_start;
 
-  pci_set_drvdata(pdev, dev);
+	streamer_priv->streamer_card_name = (char *)pdev->resource[0].name;
+	streamer_priv->pci_dev = pdev;
 
-  spin_lock_init(&streamer_priv->streamer_lock);
-  
-  pci_read_config_byte(pdev, PCI_CACHE_LINE_SIZE, &cls);
-  cls <<= 2;
-  if (cls != SMP_CACHE_BYTES) {
-         printk(KERN_INFO "  PCI cache line size set incorrectly "
-                "(%i bytes) by BIOS/FW, ", cls);
-         if (cls > SMP_CACHE_BYTES)
-                printk("expecting %i\n", SMP_CACHE_BYTES);
-         else {
-                printk("correcting to %i\n", SMP_CACHE_BYTES);
-                pci_write_config_byte(pdev, PCI_CACHE_LINE_SIZE,
-                                      SMP_CACHE_BYTES >> 2);
-         }
-  }
-
-  pci_read_config_word (pdev, PCI_COMMAND, &pcr);
-
-  pcr |= (PCI_COMMAND_INVALIDATE | PCI_COMMAND_SERR);
-
-  pci_write_config_word (pdev, PCI_COMMAND, pcr);
-  pci_read_config_word (pdev, PCI_COMMAND, &pcr);
-
-  printk("%s \n", version);
-  printk("%s: %s. I/O at %hx, MMIO at %p, using irq %d\n",dev->name,
-	 streamer_priv->streamer_card_name,
-	 (unsigned int) dev->base_addr,
-	 streamer_priv->streamer_mmio, 
-	 dev->irq);
-
-  if (!streamer_reset(dev)) {
-    return 0;
-  }
+	if ((pkt_buf_sz[card_no] < 100) || (pkt_buf_sz[card_no] > 18000))
+		streamer_priv->pkt_buf_sz = PKT_BUF_SZ;
+	else
+		streamer_priv->pkt_buf_sz = pkt_buf_sz[card_no];
+
+	streamer_priv->streamer_ring_speed = ringspeed[card_no];
+	streamer_priv->streamer_message_level = message_level[card_no];
+
+	pci_set_drvdata(pdev, dev);
+
+	spin_lock_init(&streamer_priv->streamer_lock);
+
+	pci_read_config_byte(pdev, PCI_CACHE_LINE_SIZE, &cls);
+	cls <<= 2;
+	if (cls != SMP_CACHE_BYTES) {
+		printk(KERN_INFO "  PCI cache line size set incorrectly "
+				"(%i bytes) by BIOS/FW, ", cls);
+		if (cls > SMP_CACHE_BYTES)
+			printk("expecting %i\n", SMP_CACHE_BYTES);
+		else {
+			printk("correcting to %i\n", SMP_CACHE_BYTES);
+			pci_write_config_byte(pdev, PCI_CACHE_LINE_SIZE,
+							SMP_CACHE_BYTES >> 2);
+		}
+	}
+
+	pci_read_config_word (pdev, PCI_COMMAND, &pcr);
+
+	pcr |= (PCI_COMMAND_INVALIDATE | PCI_COMMAND_SERR);
+
+	pci_write_config_word (pdev, PCI_COMMAND, pcr);
+	pci_read_config_word (pdev, PCI_COMMAND, &pcr);
 
-  iounmap(streamer_priv->streamer_mmio);
+	printk("%s \n", version);
+	printk("%s: %s. I/O at %hx, MMIO at %p, using irq %d\n",dev->name,
+		streamer_priv->streamer_card_name,
+		(unsigned int) dev->base_addr,
+		streamer_priv->streamer_mmio, 
+		dev->irq);
+
+	if (streamer_reset(dev))
+		goto err_out_unmap;
+
+	rc = register_netdev(dev);
+	if (rc)
+		goto err_out_unmap;
+	return 0;
+
+err_out_unmap:
+	iounmap(streamer_priv->streamer_mmio);
 err_out_free_mmio:
-  release_mem_region(mmio_start, mmio_len);
+	release_mem_region(mmio_start, mmio_len);
 err_out_free_pio:
-  release_region(pio_start, pio_len);
+	release_region(pio_start, pio_len);
 err_out:
-  unregister_trdev(dev);
-  kfree(dev);
+	kfree(dev);
 #if STREAMER_DEBUG
-  printk("lanstreamer: Exit error %x\n",rc);
+	printk("lanstreamer: Exit error %x\n",rc);
 #endif
-  return rc;
+	return rc;
 }
 
-static void __devexit streamer_remove_one(struct pci_dev *pdev) {
-  struct net_device *dev=pci_get_drvdata(pdev);
-  struct streamer_private *streamer_priv;
+static void __devexit streamer_remove_one(struct pci_dev *pdev)
+{
+	struct net_device *dev=pci_get_drvdata(pdev);
+	struct streamer_private *streamer_priv;
 
 #if STREAMER_DEBUG
-  printk("lanstreamer::streamer_remove_one entry pdev %p\n",pdev);
+	printk("lanstreamer::streamer_remove_one entry pdev %p\n",pdev);
 #endif
 
-  if (dev == NULL) {
-    printk(KERN_ERR "lanstreamer::streamer_remove_one, ERROR dev is NULL\n");
-    return;
-		}
+	if (dev == NULL) {
+		printk(KERN_ERR "lanstreamer::streamer_remove_one, ERROR dev is NULL\n");
+		return;
+	}
 
-  streamer_priv=dev->priv;
-  if (streamer_priv == NULL) {
-    printk(KERN_ERR "lanstreamer::streamer_remove_one, ERROR dev->priv is NULL\n");
-    return;
+	streamer_priv=dev->priv;
+	if (streamer_priv == NULL) {
+		printk(KERN_ERR "lanstreamer::streamer_remove_one, ERROR dev->priv is NULL\n");
+		return;
 	}
 
 #if STREAMER_NETWORK_MONITOR
 #ifdef CONFIG_PROC_FS
-  {
-    struct streamer_private *slast;
-    struct streamer_private *scurrent;
-    if (streamer_priv == dev_streamer) {
-      dev_streamer=dev_streamer->next;
-    } else {
-      for(slast=scurrent=dev_streamer; dev_streamer; slast=scurrent, scurrent=scurrent->next) {
-	if (scurrent == streamer_priv) {
-	  slast->next=scurrent->next;
-	  break;
-	}
-      }
-    }
-    if (!dev_streamer) {
-      remove_proc_entry("net/streamer_tr", NULL);
-    }
-  }
+	{
+		struct streamer_private **p, **next;
+
+		for (p = &dev_streamer; *p; p = next) {
+			next = &(*p)->next;
+			if (*p == streamer_priv) {
+				*p = *next;
+				break;
+			}
+		}
+		if (!dev_streamer)
+			remove_proc_entry("net/streamer_tr", NULL);
+	}
 #endif
 #endif
 
-  unregister_trdev(dev);
-  release_region(pci_resource_start(pdev, 0), pci_resource_len(pdev,0));
-  release_mem_region(pci_resource_start(pdev, 1), pci_resource_len(pdev,1));
-  kfree(dev);
-  pci_set_drvdata(pdev, NULL);
+	unregister_netdev(dev);
+	/* shouldn't we do iounmap here? */
+	release_region(pci_resource_start(pdev, 0), pci_resource_len(pdev,0));
+	release_mem_region(pci_resource_start(pdev, 1), pci_resource_len(pdev,1));
+	kfree(dev);
+	pci_set_drvdata(pdev, NULL);
 }
 
 
diff -urN linux-2.5.70-bk8/drivers/net/tokenring/madgemc.c linux-2.5.70-bk9/drivers/net/tokenring/madgemc.c
--- linux-2.5.70-bk8/drivers/net/tokenring/madgemc.c	2003-05-26 18:00:58.000000000 -0700
+++ linux-2.5.70-bk9/drivers/net/tokenring/madgemc.c	2003-06-04 04:37:27.000000000 -0700
@@ -177,12 +177,14 @@
 		if (versionprinted++ == 0)
 			printk("%s", version);
 
-		if ((dev = init_trdev(NULL, 0))==NULL) {
+		dev = alloc_trdev(0);
+		if (dev == NULL) {
 			printk("madgemc: unable to allocate dev space\n");
 			if (madgemc_card_list)
 				return 0;
 			return -1;
 		}
+
 		SET_MODULE_OWNER(dev);
 		dev->dma = 0;
 
@@ -195,7 +197,7 @@
 		card = kmalloc(sizeof(struct madgemc_card), GFP_KERNEL);
 		if (card==NULL) {
 			printk("madgemc: unable to allocate card struct\n");
-			kfree(dev); /* release_trdev? */
+			kfree(dev);
 			if (madgemc_card_list)
 				return 0;
 			return -1;
@@ -331,7 +333,7 @@
 		 */ 
 		outb(0, dev->base_addr + MC_CONTROL_REG0); /* sanity */
 		madgemc_setsifsel(dev, 1);
-		if(request_irq(dev->irq, madgemc_interrupt, SA_SHIRQ,
+		if (request_irq(dev->irq, madgemc_interrupt, SA_SHIRQ,
 			       "madgemc", dev)) 
 			goto getout;
 		
@@ -382,33 +384,22 @@
 
 		dev->open = madgemc_open;
 		dev->stop = madgemc_close;
-		
-		if (register_trdev(dev) == 0) {
+
+		if (register_netdev(dev) == 0) {
 			/* Enlist in the card list */
 			card->next = madgemc_card_list;
 			madgemc_card_list = card;
-		} else {
-			printk("madgemc: register_trdev() returned non-zero.\n");
-			release_region(dev->base_addr-MADGEMC_SIF_OFFSET, 
-			       MADGEMC_IO_EXTENT); 
-			
-			kfree(card);
-			tmsdev_term(dev);
-			kfree(dev);
-			if (madgemc_card_list)
-				return 0;
-			return -1;
+			slot++;
+			continue; /* successful, try to find another */
 		}
-
-		slot++;
-		continue; /* successful, try to find another */
 		
+		free_irq(dev->irq, dev);
 	getout:
 		release_region(dev->base_addr-MADGEMC_SIF_OFFSET, 
 			       MADGEMC_IO_EXTENT); 
 	getout1:
 		kfree(card);
-		kfree(dev); /* release_trdev? */
+		kfree(dev);
 		slot++;
 	}
 
@@ -779,7 +770,7 @@
 	
 	while (madgemc_card_list) {
 		dev = madgemc_card_list->dev;
-		unregister_trdev(dev);
+		unregister_netdev(dev);
 		release_region(dev->base_addr-MADGEMC_SIF_OFFSET, MADGEMC_IO_EXTENT);
 		free_irq(dev->irq, dev);
 		tmsdev_term(dev);
diff -urN linux-2.5.70-bk8/drivers/net/tokenring/olympic.c linux-2.5.70-bk9/drivers/net/tokenring/olympic.c
--- linux-2.5.70-bk8/drivers/net/tokenring/olympic.c	2003-05-26 18:00:46.000000000 -0700
+++ linux-2.5.70-bk9/drivers/net/tokenring/olympic.c	2003-06-04 04:37:27.000000000 -0700
@@ -1773,7 +1773,7 @@
 		strcat(proc_name,dev->name) ;
 		remove_proc_entry(proc_name,NULL); 
 	}
-	unregister_trdev(dev) ; 
+	unregister_netdev(dev) ; 
 	iounmap(olympic_priv->olympic_mmio) ; 
 	iounmap(olympic_priv->olympic_lap) ; 
 	pci_release_regions(pdev) ;
diff -urN linux-2.5.70-bk8/drivers/net/tokenring/proteon.c linux-2.5.70-bk9/drivers/net/tokenring/proteon.c
--- linux-2.5.70-bk8/drivers/net/tokenring/proteon.c	2003-05-26 18:00:59.000000000 -0700
+++ linux-2.5.70-bk9/drivers/net/tokenring/proteon.c	2003-06-04 04:37:27.000000000 -0700
@@ -121,6 +121,11 @@
 	int i,j;
 	struct proteon_card *card;
 
+#ifndef MODULE
+	netdev_boot_setup_check(dev);
+	tr_setup(dev);
+#endif
+
 	SET_MODULE_OWNER(dev);
 	if (!dev->base_addr)
 	{
@@ -158,20 +163,8 @@
 	if (versionprinted++ == 0)
 		printk(KERN_DEBUG "%s", version);
 
-#ifndef MODULE
-	dev = init_trdev(dev, 0);
-	if (!dev)
-	{
-		release_region(dev->base_addr, PROTEON_IO_EXTENT); 
-		return -1;
-	}
-#endif
-
 	if (tmsdev_init(dev, ISA_MAX_ADDRESS, NULL))
-       	{
-		release_region(dev->base_addr, PROTEON_IO_EXTENT); 
-		return -1;
-	}
+		goto out4;
 
 	dev->base_addr &= ~3; 
 		
@@ -211,9 +204,7 @@
                 if(irqlist[j] == 0)
                 {
                         printk(KERN_INFO "%s: AutoSelect no IRQ available\n", dev->name);
-			release_region(dev->base_addr, PROTEON_IO_EXTENT); 
-			tmsdev_term(dev);
-			return -1;
+			goto out3;
 		}
 	}
 	else
@@ -225,18 +216,14 @@
 		{
 			printk(KERN_INFO "%s: Illegal IRQ %d specified\n",
 				dev->name, dev->irq);
-			release_region(dev->base_addr, PROTEON_IO_EXTENT); 
-			tmsdev_term(dev);
-			return -1;
+			goto out3;
 		}
 		if (request_irq(dev->irq, tms380tr_interrupt, 0, 
 			cardname, dev))
 		{
                         printk(KERN_INFO "%s: Selected IRQ %d not available\n", 
 				dev->name, dev->irq);
-			release_region(dev->base_addr, PROTEON_IO_EXTENT); 
-			tmsdev_term(dev);
-			return -1;
+			goto out3;
 		}
 	}
 
@@ -252,10 +239,7 @@
 		if(dmalist[j] == 0)
 		{
 			printk(KERN_INFO "%s: AutoSelect no DMA available\n", dev->name);
-			release_region(dev->base_addr, PROTEON_IO_EXTENT); 
-			free_irq(dev->irq, dev);
-			tmsdev_term(dev);
-			return -1;
+			goto out2;
 		}
 	}
 	else
@@ -267,52 +251,36 @@
 		{
                         printk(KERN_INFO "%s: Illegal DMA %d specified\n", 
 				dev->name, dev->dma);
-			release_region(dev->base_addr, PROTEON_IO_EXTENT); 
-			free_irq(dev->irq, dev);
-			tmsdev_term(dev);
-			return -1;
+			goto out2;
 		}
 		if (request_dma(dev->dma, cardname))
 		{
                         printk(KERN_INFO "%s: Selected DMA %d not available\n", 
 				dev->name, dev->dma);
-			release_region(dev->base_addr, PROTEON_IO_EXTENT); 
-			free_irq(dev->irq, dev);
-			tmsdev_term(dev);
-			return -1;
+			goto out2;
 		}
 	}
 
 	printk(KERN_DEBUG "%s:    IO: %#4lx  IRQ: %d  DMA: %d\n",
 	       dev->name, dev->base_addr, dev->irq, dev->dma);
 		
-	if (register_trdev(dev) == 0) 
-	{
-		/* Enlist in the card list */
-		card = kmalloc(sizeof(struct proteon_card), GFP_KERNEL);
-		if (!card) {
-			unregister_trdev(dev);
-			release_region(dev->base_addr, PROTEON_IO_EXTENT); 
-			free_irq(dev->irq, dev);
-			free_dma(dev->dma);
-			tmsdev_term(dev);
-			return -1;
-		}
-		card->next = proteon_card_list;
-		proteon_card_list = card;
-		card->dev = dev;
-	} 
-	else 
-	{
-		printk("KERN_INFO %s: register_trdev() returned non-zero.\n", dev->name);
-		release_region(dev->base_addr, PROTEON_IO_EXTENT); 
-		free_irq(dev->irq, dev);
-		free_dma(dev->dma);
-		tmsdev_term(dev);
-		return -1;
-	}
-	
+	/* Enlist in the card list */
+	card = kmalloc(sizeof(struct proteon_card), GFP_KERNEL);
+	if (!card)
+		goto out;
+	card->next = proteon_card_list;
+	proteon_card_list = card;
+	card->dev = dev;
 	return 0;
+out:
+	free_dma(dev->dma);
+out2:
+	free_irq(dev->irq, dev);
+out3:
+	tmsdev_term(dev);
+out4:
+	release_region(dev->base_addr, PROTEON_IO_EXTENT); 
+	return -1;
 }
 
 /*
@@ -402,64 +370,51 @@
 MODULE_PARM(irq, "1-" __MODULE_STRING(ISATR_MAX_ADAPTERS) "i");
 MODULE_PARM(dma, "1-" __MODULE_STRING(ISATR_MAX_ADAPTERS) "i");
 
+static int __init setup_card(unsigned long io, unsigned irq, unsigned char dma)
+{
+	int res = -ENOMEM;
+	struct proteon_card *this_card;
+	struct net_device *dev = alloc_trdev(0);
+
+	if (dev) {
+		dev->base_addr = io;
+		dev->irq       = irq;
+		dev->dma       = dma;
+		res = -ENODEV;
+		if (proteon_probe(dev) == 0) {
+			res = register_netdev(dev);
+			if (!res)
+				return 0;
+			release_region(dev->base_addr, PROTEON_IO_EXTENT);
+			free_irq(dev->irq, dev);
+			free_dma(dev->dma);
+			tmsdev_term(dev);
+			this_card = proteon_card_list;
+			proteon_card_list = this_card->next;
+			kfree(this_card);
+		}
+		kfree(dev);
+	}
+	return res;
+}
+
 int init_module(void)
 {
 	int i, num;
 	struct net_device *dev;
 
 	num = 0;
-	if (io[0]) 
-	{ /* Only probe addresses from command line */
-		dev = init_trdev(NULL, 0);
-		if (!dev)
-			return (-ENOMEM);
-		for (i = 0; i < ISATR_MAX_ADAPTERS; i++)
-	       	{
-			if (io[i] == 0)
-				continue;
-		
-			dev->base_addr = io[i];
-			dev->irq       = irq[i];
-			dev->dma       = dma[i];
-
-			if (!proteon_probe(dev))
-			{
+	if (io[0]) { /* Only probe addresses from command line */
+		for (i = 0; i < ISATR_MAX_ADAPTERS ; i++) {
+			if (io[i] && setup_card(io[i], irq[i], dma[i]) == 0)
 				num++;
-				dev = init_trdev(NULL, 0);
-				if (!dev)
-					goto partial;
-			}
 		}
-		unregister_netdev(dev);
-		kfree(dev);
-	}
-       	else
-       	{
-		dev = init_trdev(NULL, 0);
-		if (!dev)
-			return (-ENOMEM);
-
-		for(i = 0; portlist[i]; i++)
-		{
-			if (num >= ISATR_MAX_ADAPTERS)
-				continue;
-		
-			dev->base_addr = portlist[i];
-			dev->irq       = irq[num];
-			dev->dma       = dma[num];
-
-			if (!proteon_probe(dev))
-			{
+	} else {
+		for(i = 0; num < ISATR_MAX_ADAPTERS && portlist[i]; i++) {
+			if (setup_card(portlist[i], irq[i], dma[i]))
 				num++;
-				dev = init_trdev(NULL, 0);
-				if (!dev)
-					goto partial;
-			}
 		}
-		unregister_netdev(dev);
-		kfree(dev);
 	}
-partial:
 	printk(KERN_NOTICE "proteon.c: %d cards found.\n", num);
 	/* Probe for cards. */
 	if (num == 0) {
diff -urN linux-2.5.70-bk8/drivers/net/tokenring/skisa.c linux-2.5.70-bk9/drivers/net/tokenring/skisa.c
--- linux-2.5.70-bk8/drivers/net/tokenring/skisa.c	2003-05-26 18:00:23.000000000 -0700
+++ linux-2.5.70-bk9/drivers/net/tokenring/skisa.c	2003-06-04 04:37:27.000000000 -0700
@@ -141,6 +141,11 @@
 	int i,j;
 	struct sk_isa_card *card;
 
+#ifndef MODULE
+	netdev_boot_setup_check(dev);
+	tr_setup(dev);
+#endif
+
 	SET_MODULE_OWNER(dev);
 	if (!dev->base_addr)
 	{
@@ -178,20 +183,8 @@
 	if (versionprinted++ == 0)
 		printk(KERN_DEBUG "%s", version);
 
-#ifndef MODULE
-	dev = init_trdev(dev, 0);
-	if (!dev)
-	{
-		release_region(dev->base_addr, SK_ISA_IO_EXTENT); 
-		return -1;
-	}
-#endif
-
 	if (tmsdev_init(dev, ISA_MAX_ADDRESS, NULL))
-       	{
-		release_region(dev->base_addr, SK_ISA_IO_EXTENT); 
-		return -1;
-	}
+		goto out4;
 
 	dev->base_addr &= ~3; 
 		
@@ -231,9 +224,7 @@
                 if(irqlist[j] == 0)
                 {
                         printk(KERN_INFO "%s: AutoSelect no IRQ available\n", dev->name);
-			release_region(dev->base_addr, SK_ISA_IO_EXTENT); 
-			tmsdev_term(dev);
-			return -1;
+			goto out3;
 		}
 	}
 	else
@@ -245,18 +236,14 @@
 		{
 			printk(KERN_INFO "%s: Illegal IRQ %d specified\n",
 				dev->name, dev->irq);
-			release_region(dev->base_addr, SK_ISA_IO_EXTENT); 
-			tmsdev_term(dev);
-			return -1;
+			goto out3;
 		}
 		if (request_irq(dev->irq, tms380tr_interrupt, 0, 
 			isa_cardname, dev))
 		{
                         printk(KERN_INFO "%s: Selected IRQ %d not available\n", 
 				dev->name, dev->irq);
-			release_region(dev->base_addr, SK_ISA_IO_EXTENT); 
-			tmsdev_term(dev);
-			return -1;
+			goto out3;
 		}
 	}
 
@@ -272,10 +259,7 @@
 		if(dmalist[j] == 0)
 		{
 			printk(KERN_INFO "%s: AutoSelect no DMA available\n", dev->name);
-			release_region(dev->base_addr, SK_ISA_IO_EXTENT); 
-			free_irq(dev->irq, dev);
-			tmsdev_term(dev);
-			return -1;
+			goto out2;
 		}
 	}
 	else
@@ -287,52 +271,36 @@
 		{
                         printk(KERN_INFO "%s: Illegal DMA %d specified\n", 
 				dev->name, dev->dma);
-			release_region(dev->base_addr, SK_ISA_IO_EXTENT); 
-			free_irq(dev->irq, dev);
-			tmsdev_term(dev);
-			return -1;
+			goto out2;
 		}
 		if (request_dma(dev->dma, isa_cardname))
 		{
                         printk(KERN_INFO "%s: Selected DMA %d not available\n", 
 				dev->name, dev->dma);
-			release_region(dev->base_addr, SK_ISA_IO_EXTENT); 
-			free_irq(dev->irq, dev);
-			tmsdev_term(dev);
-			return -1;
+			goto out2;
 		}
 	}
 
 	printk(KERN_DEBUG "%s:    IO: %#4lx  IRQ: %d  DMA: %d\n",
 	       dev->name, dev->base_addr, dev->irq, dev->dma);
 		
-	if (register_trdev(dev) == 0) 
-	{
-		/* Enlist in the card list */
-		card = kmalloc(sizeof(struct sk_isa_card), GFP_KERNEL);
-		if (!card) {
-			unregister_trdev(dev);
-			release_region(dev->base_addr, SK_ISA_IO_EXTENT); 
-			free_irq(dev->irq, dev);
-			free_dma(dev->dma);
-			tmsdev_term(dev);
-			return -1;
-		}
-		card->next = sk_isa_card_list;
-		sk_isa_card_list = card;
-		card->dev = dev;
-	} 
-	else 
-	{
-		printk("KERN_INFO %s: register_trdev() returned non-zero.\n", dev->name);
-		release_region(dev->base_addr, SK_ISA_IO_EXTENT); 
-		free_irq(dev->irq, dev);
-		free_dma(dev->dma);
-		tmsdev_term(dev);
-		return -1;
-	}
-	
+	/* Enlist in the card list */
+	card = kmalloc(sizeof(struct sk_isa_card), GFP_KERNEL);
+	if (!card)
+		goto out;
+	card->next = sk_isa_card_list;
+	sk_isa_card_list = card;
+	card->dev = dev;
 	return 0;
+out:
+	free_dma(dev->dma);
+out2:
+	free_irq(dev->irq, dev);
+out3:
+	tmsdev_term(dev);
+out4:
+	release_region(dev->base_addr, SK_ISA_IO_EXTENT); 
+	return -1;
 }
 
 /*
@@ -415,64 +383,51 @@
 MODULE_PARM(irq, "1-" __MODULE_STRING(ISATR_MAX_ADAPTERS) "i");
 MODULE_PARM(dma, "1-" __MODULE_STRING(ISATR_MAX_ADAPTERS) "i");
 
+static int __init setup_card(unsigned long io, unsigned irq, unsigned char dma)
+{
+	int res = -ENOMEM;
+	struct sk_isa_card *this_card;
+	struct net_device *dev = alloc_trdev(0);
+
+	if (dev) {
+		dev->base_addr = io;
+		dev->irq       = irq;
+		dev->dma       = dma;
+		res = -ENODEV;
+		if (sk_isa_probe(dev) == 0) {
+			res = register_netdev(dev);
+			if (!res)
+				return 0;
+			release_region(dev->base_addr, SK_ISA_IO_EXTENT);
+			free_irq(dev->irq, dev);
+			free_dma(dev->dma);
+			tmsdev_term(dev);
+			this_card = sk_isa_card_list;
+			sk_isa_card_list = this_card->next;
+			kfree(this_card);
+		}
+		kfree(dev);
+	}
+	return res;
+}
+
 int init_module(void)
 {
 	int i, num;
 	struct net_device *dev;
 
 	num = 0;
-	if (io[0]) 
-	{ /* Only probe addresses from command line */
-		dev = init_trdev(NULL, 0);
-		if (!dev)
-			return (-ENOMEM);
-		for (i = 0; i < ISATR_MAX_ADAPTERS; i++)
-	       	{
-			if (io[i] == 0)
-				continue;
-		
-			dev->base_addr = io[i];
-			dev->irq       = irq[i];
-			dev->dma       = dma[i];
-
-			if (!sk_isa_probe(dev))
-			{
+	if (io[0]) { /* Only probe addresses from command line */
+		for (i = 0; i < ISATR_MAX_ADAPTERS ; i++) {
+			if (io[i] && setup_card(io[i], irq[i], dma[i]) == 0)
 				num++;
-				dev = init_trdev(NULL, 0);
-				if (!dev)
-					goto partial;
-			}
 		}
-		unregister_netdev(dev);
-		kfree(dev);
-	}
-       	else
-       	{
-		dev = init_trdev(NULL, 0);
-		if (!dev)
-			return (-ENOMEM);
-
-		for(i = 0; portlist[i]; i++)
-		{
-			if (num >= ISATR_MAX_ADAPTERS)
-				continue;
-		
-			dev->base_addr = portlist[i];
-			dev->irq       = irq[num];
-			dev->dma       = dma[num];
-
-			if (!sk_isa_probe(dev))
-			{
+	} else {
+		for(i = 0; num < ISATR_MAX_ADAPTERS && portlist[i]; i++) {
+			if (setup_card(portlist[i], irq[i], dma[i]))
 				num++;
-				dev = init_trdev(NULL, 0);
-				if (!dev)
-					goto partial;
-			}
 		}
-		unregister_netdev(dev);
-		kfree(dev);
 	}
-partial:
 	printk(KERN_NOTICE "skisa.c: %d cards found.\n", num);
 	/* Probe for cards. */
 	if (num == 0) {
diff -urN linux-2.5.70-bk8/drivers/net/tokenring/smctr.c linux-2.5.70-bk9/drivers/net/tokenring/smctr.c
--- linux-2.5.70-bk8/drivers/net/tokenring/smctr.c	2003-05-26 18:00:40.000000000 -0700
+++ linux-2.5.70-bk9/drivers/net/tokenring/smctr.c	2003-06-04 04:37:27.000000000 -0700
@@ -143,7 +143,6 @@
 /* I */
 static int smctr_init_acbs(struct net_device *dev);
 static int smctr_init_adapter(struct net_device *dev);
-static int __init smctr_init_card(struct net_device *dev);
 static int smctr_init_card_real(struct net_device *dev);
 static int smctr_init_rx_bdbs(struct net_device *dev);
 static int smctr_init_rx_fcbs(struct net_device *dev);
@@ -541,25 +540,18 @@
 			dev->irq = 15;
                		break;
 	}
-	if(request_irq(dev->irq, smctr_interrupt, SA_SHIRQ, smctr_name, dev))
-                return (-ENODEV);
+	if (request_irq(dev->irq, smctr_interrupt, SA_SHIRQ, smctr_name, dev)) {
+		release_region(dev->base_addr, SMCTR_IO_EXTENT);
+		return -ENODEV;
+	}
 
 	/* Get RAM base */
 	r3 = mca_read_stored_pos(tp->slot_num, 3);
-	if(r3 & 0x8) 
-	{ 
-        	if(r3 & 0x80)
-               		tp->ram_base = ((__u32)(r3 & 0x7) << 13) + 0xFD0000;
-            	else
-			tp->ram_base = ((__u32)(r3 & 0x7) << 13) + 0x0D0000;
-        }
-	else 
-	{
-            	if(r3 & 0x80)
-               		tp->ram_base = ((__u32)(r3 & 0x7) << 13) + 0xFC0000;
-            	else
-			tp->ram_base = ((__u32)(r3 & 0x7) << 13) + 0x0C0000;
-        }
+	tp->ram_base = ((__u32)(r3 & 0x7) << 13) + 0x0C0000;
+	if (r3 & 0x8)
+		tp->ram_base += 0x010000;
+	if (r3 & 0x80)
+		tp->ram_base += 0xF00000;
 
 	/* Get Ram Size */
 	r3 &= 0x30;
@@ -570,26 +562,24 @@
 	tp->board_id |= TOKEN_MEDIA;
 
 	r4 = mca_read_stored_pos(tp->slot_num, 4);
-	if(r4 & 0x8)
-		tp->rom_base = ((__u32)(r4 & 0x7) << 13) + 0xD0000;
-	else
-		tp->rom_base = ((__u32)(r4 & 0x7) << 13) + 0xC0000;
+	tp->rom_base = ((__u32)(r4 & 0x7) << 13) + 0x0C0000;
+	if (r4 & 0x8)
+		tp->rom_base += 0x010000;
 
 	/* Get ROM size. */
 	r4 >>= 4;
-	if(r4 == 0)
-		tp->rom_size = CNFG_SIZE_8KB;
-	else
-	{
-		if(r4 == 1)
+	switch (r4) {
+		case 0:
+			tp->rom_size = CNFG_SIZE_8KB;
+			break;
+		case 1:
 			tp->rom_size = CNFG_SIZE_16KB;
-		else
-		{
-			if(r4 == 2)
-				tp->rom_size = CNFG_SIZE_32KB;
-			else
-				tp->rom_size = ROM_DISABLE;
-		}
+			break;
+		case 2:
+			tp->rom_size = CNFG_SIZE_32KB;
+			break;
+		default:
+			tp->rom_size = ROM_DISABLE;
 	}
 
 	/* Get Media Type. */
@@ -953,12 +943,19 @@
         __u8 r1, r2, b, chksum = 0;
         __u16 r;
 	int i;
+	int err = -ENODEV;
 
         if(smctr_debug > 10)
                 printk(KERN_DEBUG "%s: smctr_chk_isa %#4x\n", dev->name, ioaddr);
 
 	if((ioaddr & 0x1F) != 0)
-                return (-ENODEV);
+                goto out;
+
+        /* Grab the region so that no one else tries to probe our ioports. */
+	if (!request_region(ioaddr, SMCTR_IO_EXTENT, smctr_name)) {
+		err = -EBUSY;
+		goto out;
+	}
 
         /* Checksum SMC node address */
         for(i = 0; i < 8; i++)
@@ -967,17 +964,14 @@
                 chksum += b;
         }
 
-        if(chksum != NODE_ADDR_CKSUM)
-                return (-ENODEV);            /* Adapter Not Found */
-
-        /* Grab the region so that no one else tries to probe our ioports. */
-        request_region(ioaddr, SMCTR_IO_EXTENT, smctr_name);
+        if (chksum != NODE_ADDR_CKSUM)
+                goto out2;
 
         b = inb(ioaddr + BDID);
 	if(b != BRD_ID_8115T)
         {
                 printk(KERN_ERR "%s: The adapter found is not supported\n", dev->name);
-                return (-1);
+                goto out2;
         }
 
         /* Check for 8115T Board ID */
@@ -990,7 +984,7 @@
 
         /* value of RegF adds up the sum to 0xFF */
         if((r2 != 0xFF) && (r2 != 0xEE))
-                return (-1);
+                goto out2;
 
         /* Get adapter ID */
         tp->board_id = smctr_get_boardid(dev, 0);
@@ -1077,11 +1071,11 @@
 
                 default:
                         printk(KERN_ERR "%s: No IRQ found aborting\n", dev->name);
-                        return(-1);
+                        goto out2;
          }
 
-        if(request_irq(dev->irq, smctr_interrupt, SA_SHIRQ, smctr_name, dev))
-                return (-ENODEV);
+        if (request_irq(dev->irq, smctr_interrupt, SA_SHIRQ, smctr_name, dev))
+                goto out2;
 
         /* Get 58x Rom Base */
         r1 = inb(ioaddr + CNFG_BIO_583);
@@ -1157,12 +1151,18 @@
                 if(smctr_read_584_chksum(ioaddr))
                 {
                         printk(KERN_ERR "%s: EEPROM Checksum Failure\n", dev->name);
-                        return(-1);
+                        goto out3;
                 }
 		*/
         }
 
         return (0);
+out3:
+	free_irq(dev->irq, dev);
+out2:
+	release_region(ioaddr, SMCTR_IO_EXTENT);
+out:
+	return err;
 }
 
 static int __init smctr_get_boardid(struct net_device *dev, int mca)
@@ -1650,15 +1650,6 @@
         return (0);
 }
 
-/* Dummy function */
-static int __init smctr_init_card(struct net_device *dev)
-{
-        if(smctr_debug > 10)
-                printk(KERN_DEBUG "%s: smctr_init_card\n", dev->name);
-
-        return (0);
-}
-
 static int smctr_init_card_real(struct net_device *dev)
 {
         struct net_local *tp = (struct net_local *)dev->priv;
@@ -3608,8 +3599,14 @@
 int __init smctr_probe (struct net_device *dev)
 {
         int i;
-        int base_addr = dev ? dev->base_addr : 0;
+        int base_addr;
+
+#ifndef MODULE
+	netdev_boot_setup_check(dev);
+	tr_setup(dev);
+#endif
 
+        base_addr = dev->base_addr;
         if(base_addr > 0x1ff)    /* Check a single specified location. */
                 return (smctr_probe1(dev, base_addr));
         else if(base_addr != 0)  /* Don't probe at all. */
@@ -3618,8 +3615,6 @@
         for(i = 0; smctr_portlist[i]; i++)
         {
                 int ioaddr = smctr_portlist[i];
-                if(check_region(ioaddr, SMCTR_IO_EXTENT))
-                        continue;
                 if (!smctr_probe1(dev, ioaddr))
                         return (0);
         }
@@ -3627,6 +3622,20 @@
         return (-ENODEV);
 }
 
+static void cleanup_card(struct net_device *dev)
+{
+#ifdef CONFIG_MCA
+	struct net_local *tp = (struct net_local *)dev->priv;
+	if (tp->slot_num)
+		mca_mark_as_unused(tp->slot_num);
+#endif
+	release_region(dev->base_addr, SMCTR_IO_EXTENT);
+	if (dev->irq)
+		free_irq(dev->irq, dev);
+	if (dev->priv)
+		kfree(dev->priv);
+}
+
 static int __init smctr_probe1(struct net_device *dev, int ioaddr)
 {
         static unsigned version_printed;
@@ -3637,12 +3646,6 @@
         if(smctr_debug && version_printed++ == 0)
                 printk(version);
 
-#ifndef MODULE
-        dev = init_trdev(dev, 0);
-        if(dev == NULL)
-                return (-ENOMEM);
-#endif
-
         /* Setup this devices private information structure */
         tp = (struct net_local *)kmalloc(sizeof(struct net_local),
                 GFP_KERNEL);
@@ -3677,8 +3680,9 @@
         if(err != UCODE_PRESENT && err != SUCCESS)
         {
                 printk(KERN_ERR "%s: Firmware load failed (%d)\n", dev->name, err);
+		cleanup_card(dev);
 		err = -EIO;
-		goto out_tp;
+		goto out;
         }
 
 	/* Allow user to specify ring speed on module insert. */
@@ -3692,8 +3696,6 @@
                 (unsigned int)dev->base_addr,
                 dev->irq, tp->rom_base, tp->ram_base);
 
-	/* AKPM: there's no point in this */
-        dev->init               = smctr_init_card;
         dev->open               = smctr_open;
         dev->stop               = smctr_close;
         dev->hard_start_xmit    = smctr_send_packet;
@@ -5689,33 +5691,31 @@
 {
         int i;
 
-        for(i = 0; i < SMCTR_MAX_ADAPTERS; i++)
-        {
+        for(i = 0; i < SMCTR_MAX_ADAPTERS; i++) {
+		struct net_device *dev = alloc_trdev(0);
                 irq[i] = 0;
                 mem[i] = 0;
-                dev_smctr[i] = NULL;
-                dev_smctr[i] = init_trdev(dev_smctr[i], 0);
-                if(dev_smctr[i] == NULL)
-                        return (-ENOMEM);
-
-                dev_smctr[i]->base_addr = io[i];
-                dev_smctr[i]->irq       = irq[i];
-                dev_smctr[i]->mem_start = mem[i];
-                dev_smctr[i]->init      = &smctr_probe;
-
-                if(register_trdev(dev_smctr[i]) != 0)
-                {
-                        kfree(dev_smctr[i]);
-                        dev_smctr[i] = NULL;
-                        if(i == 0)
-                        {
-                                printk(KERN_ERR "%s: register_trdev() returned (<0).\n",
+		if (!dev)
+			return -ENOMEM;
+                dev->base_addr = io[i];
+                dev->irq       = irq[i];
+                dev->mem_start = mem[i];
+
+		if (smctr_probe(dev) != 0) {
+                        kfree(dev);
+                        if (i == 0) {
+                                printk(KERN_ERR "%s: smctr_probe failed.\n",
                                         cardname);
-                                return (-EIO);
+                                return -EIO;
                         }
-                        else
-                                return (0);
+			return 0;
                 }
+		if (register_netdev(dev) != 0) {
+                        cleanup_card(dev);
+			kfree(dev);
+			continue;
+                }
+                dev_smctr[i] = dev;
         }
 
         return (0);
@@ -5725,26 +5725,13 @@
 {
         int i;
 
-        for(i = 0; i < SMCTR_MAX_ADAPTERS; i++)
-        {
-                if(dev_smctr[i])
-                {
-#ifdef CONFIG_MCA
-			struct net_local *tp 
-				= (struct net_local *)dev_smctr[i]->priv;
-			if(tp->slot_num)
-				mca_mark_as_unused(tp->slot_num);
-#endif
-                        unregister_trdev(dev_smctr[i]);
-                        release_region(dev_smctr[i]->base_addr,
-                                SMCTR_IO_EXTENT);
-                        if(dev_smctr[i]->irq)
-                                free_irq(dev_smctr[i]->irq, dev_smctr[i]);
-                        if(dev_smctr[i]->priv)
-                                kfree(dev_smctr[i]->priv);
-                        kfree(dev_smctr[i]);
-                        dev_smctr[i] = NULL;
-                }
+        for(i = 0; i < SMCTR_MAX_ADAPTERS; i++) {
+		struct net_device *dev = dev_smctr[i];
+		if (dev) {
+			unregister_netdev(dev);
+			cleanup_card(dev);
+			kfree(dev);
+		}
         }
 }
 #endif /* MODULE */
diff -urN linux-2.5.70-bk8/drivers/net/tokenring/tmspci.c linux-2.5.70-bk9/drivers/net/tokenring/tmspci.c
--- linux-2.5.70-bk8/drivers/net/tokenring/tmspci.c	2003-05-26 18:00:56.000000000 -0700
+++ linux-2.5.70-bk9/drivers/net/tokenring/tmspci.c	2003-06-04 04:37:27.000000000 -0700
@@ -112,11 +112,11 @@
 	pci_ioaddr = pci_resource_start (pdev, 0);
 
 	/* At this point we have found a valid card. */
-	dev = init_trdev(NULL, 0);
+	dev = alloc_trdev(0);
 	if (!dev)
 		return -ENOMEM;
 	SET_MODULE_OWNER(dev);
-		
+
 	if (!request_region(pci_ioaddr, TMS_PCI_IO_EXTENT, dev->name)) {
 		ret = -EBUSY;
 		goto err_out_trdev;
@@ -163,22 +163,22 @@
 
 	dev->open = tms380tr_open;
 	dev->stop = tms380tr_close;
+	pci_set_drvdata(pdev, dev);
 
-	ret = register_trdev(dev);
+	ret = register_netdev(dev);
 	if (ret)
 		goto err_out_tmsdev;
 	
-	pci_set_drvdata(pdev, dev);
 	return 0;
 
 err_out_tmsdev:
+	pci_set_drvdata(pdev, NULL);
 	tmsdev_term(dev);
 err_out_irq:
 	free_irq(pdev->irq, dev);
 err_out_region:
 	release_region(pci_ioaddr, TMS_PCI_IO_EXTENT);
 err_out_trdev:
-	unregister_netdev(dev);
 	kfree(dev);
 	return ret;
 }
diff -urN linux-2.5.70-bk8/drivers/s390/net/lcs.c linux-2.5.70-bk9/drivers/s390/net/lcs.c
--- linux-2.5.70-bk8/drivers/s390/net/lcs.c	2003-05-26 18:00:24.000000000 -0700
+++ linux-2.5.70-bk9/drivers/s390/net/lcs.c	2003-06-04 04:37:28.000000000 -0700
@@ -1751,30 +1751,29 @@
 #ifdef CONFIG_NET_ETHERNET
 	case LCS_FRAME_TYPE_ENET:
 		card->lan_type_trans = eth_type_trans;
-		dev = init_etherdev(NULL,0);
+		dev = alloc_etherdev(0);
 		break;
 #endif
 #ifdef CONFIG_TR
 	case LCS_FRAME_TYPE_TR:
 		card->lan_type_trans = tr_type_trans;
-		dev = init_trdev(NULL,0);
+		dev = alloc_trdev(0);
 		break;
 #endif
 #ifdef CONFIG_FDDI
 	case LCS_FRAME_TYPE_FDDI:
 		card->lan_type_trans = fddi_type_trans;
-		dev = init_fddidev(NULL,0);
+		dev = alloc_fddidev(0);
 		break;
 #endif
 	default:
 		LCS_DBF_TEXT(3, setup, "errinit");
 		PRINT_ERR("LCS: Initialization failed\n");
 		PRINT_ERR("LCS: No device found!\n");
-		lcs_cleanup_channel(&card->read);
-		lcs_cleanup_channel(&card->write);
-		lcs_free_card(card);
-		return -ENODEV;
+		goto out;
 	}
+	if (!dev)
+		goto out;
 	memcpy(dev->dev_addr, card->mac, LCS_MAC_LENGTH);
 	card->dev = dev;
 	dev->priv = card;
@@ -1787,9 +1786,16 @@
 #endif
 	dev->get_stats = lcs_getstats;
 	SET_MODULE_OWNER(&tun->dev);
+	if (register_netdev(dev) != 0)
+		goto out;
 	netif_stop_queue(dev);
 	lcs_stopcard(card);
 	return 0;
+out:
+	lcs_cleanup_channel(&card->read);
+	lcs_cleanup_channel(&card->write);
+	lcs_free_card(card);
+	return -ENODEV;
 }
 
 /**
diff -urN linux-2.5.70-bk8/drivers/scsi/NCR_D700.c linux-2.5.70-bk9/drivers/scsi/NCR_D700.c
--- linux-2.5.70-bk8/drivers/scsi/NCR_D700.c	2003-06-04 04:37:18.000000000 -0700
+++ linux-2.5.70-bk9/drivers/scsi/NCR_D700.c	2003-06-04 04:37:28.000000000 -0700
@@ -385,7 +385,7 @@
 static void __exit NCR_D700_exit(void)
 {
 	mca_unregister_driver(&NCR_D700_driver);
-	scsi_sysfs_release_attributes();
+	scsi_sysfs_release_attributes(&NCR_D700_driver_template);
 }
 
 module_init(NCR_D700_init);
diff -urN linux-2.5.70-bk8/drivers/scsi/arm/ecoscsi.c linux-2.5.70-bk9/drivers/scsi/arm/ecoscsi.c
--- linux-2.5.70-bk8/drivers/scsi/arm/ecoscsi.c	2003-06-04 04:37:18.000000000 -0700
+++ linux-2.5.70-bk9/drivers/scsi/arm/ecoscsi.c	2003-06-04 04:37:29.000000000 -0700
@@ -21,26 +21,6 @@
  * 1+ (800) 334-5454
  */
 
-/*
- * Options :
- *
- * PARITY - enable parity checking.  Not supported.
- *
- * SCSI2 - enable support for SCSI-II tagged queueing.  Untested.
- *
- * USLEEP - enable support for devices that don't disconnect.  Untested.
- */
-
-/*
- * $Log: ecoscsi.c,v $
- * Revision 1.2  1998/03/08 05:49:47  davem
- * Merge to 2.1.89
- *
- * Revision 1.1  1998/02/23 02:45:24  davem
- * Merge to 2.1.88
- *
- */
-
 #include <linux/module.h>
 #include <linux/signal.h>
 #include <linux/sched.h>
@@ -94,71 +74,8 @@
  *
  */
 
-void ecoscsi_setup(char *str, int *ints) {
-}
-
-/*
- * Function : int ecoscsi_detect(Scsi_Host_Template * tpnt)
- *
- * Purpose : initializes ecoscsi NCR5380 driver based on the
- *	command line / compile time port and irq definitions.
- *
- * Inputs : tpnt - template for this SCSI adapter.
- *
- * Returns : 1 if a host adapter was found, 0 if not.
- *
- */
-
-int ecoscsi_detect(Scsi_Host_Template * tpnt)
-{
-	struct Scsi_Host *host;
-
-	tpnt->proc_name = "ecoscsi";
-
-	host = scsi_register (tpnt, sizeof(struct NCR5380_hostdata));
-	if (!host)
-		return 0;
-
-	host->io_port = 0x80ce8000;
-	host->n_io_port = 144;
-	host->irq = IRQ_NONE;
-
-	if ( !(request_region(host->io_port, host->n_io_port, "ecoscsi")) )
-		goto unregister_scsi;
-
-	ecoscsi_write (host, MODE_REG, 0x20);		/* Is it really SCSI? */
-	if (ecoscsi_read (host, MODE_REG) != 0x20) /* Write to a reg.    */
-		goto release_reg;
-
-	ecoscsi_write( host, MODE_REG, 0x00 );		/* it back.	      */
-	if (ecoscsi_read (host, MODE_REG) != 0x00)
-		goto release_reg;
-
-	NCR5380_init(host, 0);
-
-	printk("scsi%d: at port 0x%08lx irqs disabled", host->host_no, host->io_port);
-	printk(" options CAN_QUEUE=%d CMD_PER_LUN=%d release=%d",
-		host->can_queue, host->cmd_per_lun, ECOSCSI_PUBLIC_RELEASE);
-	printk("\nscsi%d:", host->host_no);
-	NCR5380_print_options(host);
-	printk("\n");
-
-	return 1;
-
-release_reg:
-	release_region(host->io_port, host->n_io_port);
-unregister_scsi:
-	scsi_unregister(host);
-	return 0;
-}
-
-int ecoscsi_release (struct Scsi_Host *shpnt)
+void ecoscsi_setup(char *str, int *ints)
 {
-	if (shpnt->irq != IRQ_NONE)
-		free_irq (shpnt->irq, NULL);
-	if (shpnt->io_port)
-		release_region (shpnt->io_port, shpnt->n_io_port);
-	return 0;
 }
 
 const char * ecoscsi_info (struct Scsi_Host *spnt)
@@ -241,8 +158,7 @@
 static Scsi_Host_Template ecoscsi_template =  {
 	.module		= THIS_MODULE,
 	.name		= "Serial Port EcoSCSI NCR5380",
-	.detect		= ecoscsi_detect,
-	.release	= ecoscsi_release,
+	.proc_name	= "ecoscsi",
 	.info		= ecoscsi_info,
 	.queuecommand	= ecoscsi_queue_command,
 	.eh_abort_handler	= NCR5380_abort,
@@ -256,19 +172,60 @@
 	.use_clustering	= DISABLE_CLUSTERING
 };
 
+static struct Scsi_Host *host;
+
 static int __init ecoscsi_init(void)
 {
-	scsi_register_host(&ecoscsi_template);
-	if (ecoscsi_template.present)
+
+	host = scsi_register(tpnt, sizeof(struct NCR5380_hostdata));
+	if (!host)
 		return 0;
 
-	scsi_unregister_host(&ecoscsi_template);
+	host->io_port = 0x80ce8000;
+	host->n_io_port = 144;
+	host->irq = IRQ_NONE;
+
+	if (!(request_region(host->io_port, host->n_io_port, "ecoscsi")) )
+		goto unregister_scsi;
+
+	ecoscsi_write(host, MODE_REG, 0x20);		/* Is it really SCSI? */
+	if (ecoscsi_read(host, MODE_REG) != 0x20) /* Write to a reg.    */
+		goto release_reg;
+
+	ecoscsi_write(host, MODE_REG, 0x00 );		/* it back.	      */
+	if (ecoscsi_read(host, MODE_REG) != 0x00)
+		goto release_reg;
+
+	NCR5380_init(host, 0);
+
+	printk("scsi%d: at port 0x%08lx irqs disabled", host->host_no, host->io_port);
+	printk(" options CAN_QUEUE=%d CMD_PER_LUN=%d release=%d",
+		host->can_queue, host->cmd_per_lun, ECOSCSI_PUBLIC_RELEASE);
+	printk("\nscsi%d:", host->host_no);
+	NCR5380_print_options(host);
+	printk("\n");
+
+	scsi_add_host(host, NULL);
+	return 0;
+
+release_reg:
+	release_region(host->io_port, host->n_io_port);
+unregister_scsi:
+	scsi_unregister(host);
 	return -ENODEV;
 }
 
 static void __exit ecoscsi_exit(void)
 {
-	scsi_unregister_host(&ecoscsi_template);
+	scsi_remove_host(host);
+
+	if (shpnt->irq != IRQ_NONE)
+		free_irq(shpnt->irq, NULL);
+	if (shpnt->io_port)
+		release_region(shpnt->io_port, shpnt->n_io_port);
+
+	scsi_unregister(host);
+	return 0;
 }
 
 module_init(ecoscsi_init);
diff -urN linux-2.5.70-bk8/drivers/scsi/dc395x.c linux-2.5.70-bk9/drivers/scsi/dc395x.c
--- linux-2.5.70-bk8/drivers/scsi/dc395x.c	2003-06-04 04:37:18.000000000 -0700
+++ linux-2.5.70-bk9/drivers/scsi/dc395x.c	2003-06-04 04:37:30.000000000 -0700
@@ -46,8 +46,8 @@
  *
  ************************************************************************
  */
-
 #include <linux/module.h>
+#include <linux/moduleparam.h>
 #include <linux/delay.h>
 #include <linux/ctype.h>
 #include <linux/blk.h>
@@ -60,109 +60,147 @@
 #include <linux/init.h>
 #include <linux/spinlock.h>
 
-/* Debugging */
-/*#define DC395x_DEBUG_KG */
-/*#define DC395x_DEBUG0*/
-/*#define DC395x_DEBUG1*/
-/*#define DC395x_DEBUGDCB*/
-#define DC395x_DEBUGTRACE
-/*#define DC395x_DEBUGTRACEALL*/
-/*#define DC395x_DEBUGPARSE*/
-/*#define DC395x_SGPARANOIA*/
-/*#define DC395x_DEBUGFIFO*/
-/*#define DC395x_DEBUGRECURSION*/
-/*#define DC395x_DEBUGPIO*/
-/*#define DC395x_DEBUGMALLOC*/
-
-/* DISable features */
+/*---------------------------------------------------------------------------
+                                  Features
+ ---------------------------------------------------------------------------*/
+/*
+ * Set to disable parts of the driver
+ */
 /*#define DC395x_NO_DISCONNECT*/
 /*#define DC395x_NO_TAGQ*/
 /*#define DC395x_NO_SYNC*/
 /*#define DC395x_NO_WIDE*/
 
-#ifdef DC395x_DEBUG0
-# define DEBUG0(x) x
-#else
-# define DEBUG0(x)
-#endif
+/*---------------------------------------------------------------------------
+                                  Debugging
+ ---------------------------------------------------------------------------*/
+/*
+ * Types of debugging that can be enabled and disabled
+ */
+#define DBG_KG		0x0001
+#define DBG_0		0x0002
+#define DBG_1		0x0004
+#define DBG_DCB		0x0008
+#define DBG_PARSE	0x0010		/* debug command line parsing */
+#define DBG_SGPARANOIA	0x0020
+#define DBG_FIFO	0x0040
+#define DBG_PIO		0x0080
+#define DBG_RECURSION	0x0100		/* check for excessive recursion */
+#define DBG_MALLOC	0x0200		/* report on memory allocations */
+#define DBG_TRACE	0x0400
+#define DBG_TRACEALL	0x0800
 
-#ifdef DC395x_DEBUG1
-# define DEBUG1(x) x
-#else
-# define DEBUG1(x)
-#endif
 
-#ifdef DC395x_DEBUGDCB
-# define DCBDEBUG(x) x
-#else
-# define DCBDEBUG(x)
-#endif
+/*
+ * Set set of things to output debugging for.
+ * Undefine to remove all debugging
+ */
+/*#define DEBUG_MASK (DBG_0|DBG_1|DBG_DCB|DBG_PARSE|DBG_SGPARANOIA|DBG_FIFO|DBG_PIO|DBG_TRACE|DBG_TRACEALL)*/
+/*#define  DEBUG_MASK	DBG_0*/
+
+
+/*
+ * Output a kernel mesage at the specified level and append the
+ * driver name and a ": " to the start of the message
+ */
+#define dprintkl(level, format, arg...)  \
+    printk(level DC395X_NAME ": " format , ## arg)
+
+
+#ifdef DEBUG_MASK
+/*
+ * print a debug message - this is formated with KERN_DEBUG, then the
+ * driver name followed by a ": " and then the message is output. 
+ * This also checks that the specified debug level is enabled before
+ * outputing the message
+ */
+#define dprintkdbg(type, format, arg...) \
+	do { \
+		if ((type) & (DEBUG_MASK)) \
+			dprintkl(KERN_DEBUG , format , ## arg); \
+	} while (0)
+
+/*
+ * Check if the specified type of debugging is enabled
+ */
+#define debug_enabled(type)	((DEBUG_MASK) & (type))
 
-#ifdef DC395x_DEBUGPARSE
-# define PARSEDEBUG(x) x
 #else
-# define PARSEDEBUG(x)
+/*
+ * No debugging. Do nothing
+ */
+#define dprintkdbg(type, format, arg...) \
+	do {} while (0)
+#define debug_enabled(type)	(0)
+
 #endif
 
-#ifdef DC395x_DEBUGRECURSION
-# define DEBUGRECURSION(x) x
-#else
-# define DEBUGRECURSION(x)
+
+/*
+ * The recursion debugging just counts entries into the driver and
+ * prints out a messge if it exceeds a certain limit. This variable
+ * hold the count.
+ */
+#if debug_enabled(DBG_RECURSION)
+static int dbg_in_driver = 0;
 #endif
 
-#ifdef DC395x_DEBUGPIO
-# define DEBUGPIO(x) x
+
+/*
+ * Memory allocation debugging
+ * Just reports when memory is allocated and/or released.
+ */
+#if debug_enabled(DBG_MALLOC)
+inline void *dc395x_kmalloc(size_t sz, int fl)
+{
+	void *ptr = kmalloc(sz, fl);
+	dprintkl(KERN_DEBUG, "Alloc %i bytes @ %p w/ fl %08x\n", sz, ptr, fl);
+	return ptr;
+}
+inline void dc395x_kfree(const void *adr)
+{
+	dprintkl(KERN_DEBUG, "Free mem @ %p\n", adr);
+	kfree(adr);
+}
 #else
-# define DEBUGPIO(x)
+#define dc395x_kmalloc(sz, fl)	kmalloc(sz, fl)
+#define dc395x_kfree(adr) kfree(adr)
 #endif
 
-/* Here comes the joker of all debugging facilities! */
-#ifdef DC395x_DEBUGTRACEALL
-# ifndef DC395x_DEBUGTRACE
-#  define DC395x_DEBUGTRACE
-# endif
+
+/*
+ * Debug/trace stuff
+ */
+#if debug_enabled(DBG_TRACEALL)
 # define TRACEOUTALL(x...) printk ( x)
 #else
 # define TRACEOUTALL(x...) do {} while (0)
 #endif
-#ifdef DC395x_DEBUGTRACE
+
+#if debug_enabled(DBG_TRACE|DBG_TRACEALL)
 # define DEBUGTRACEBUFSZ 512
 char DC395x_tracebuf[64];
 char DC395x_traceoverflow[8] = { 0, 0, 0, 0, 0, 0, 0, 0 };
 # define TRACEPRINTF(x...) \
-do { int ln = sprintf (DC395x_tracebuf, x); \
-     if (pSRB->debugpos + ln >= DEBUGTRACEBUFSZ) \
-     { pSRB->debugtrace[pSRB->debugpos] = 0; pSRB->debugpos = DEBUGTRACEBUFSZ/5; pSRB->debugtrace[pSRB->debugpos++] = '>'; }; \
-     sprintf (pSRB->debugtrace + pSRB->debugpos, "%s", DC395x_tracebuf); \
-     pSRB->debugpos += ln - 1; \
-   } while (0)
-# define TRACEOUT(x...) printk ( x)
+	do { \
+		int ln = sprintf(DC395x_tracebuf, x); \
+		if (pSRB->debugpos + ln >= DEBUGTRACEBUFSZ) { \
+			pSRB->debugtrace[pSRB->debugpos] = 0; \
+			pSRB->debugpos = DEBUGTRACEBUFSZ/5; \
+			pSRB->debugtrace[pSRB->debugpos++] = '>'; \
+		} \
+		sprintf(pSRB->debugtrace + pSRB->debugpos, "%s", DC395x_tracebuf); \
+		pSRB->debugpos += ln - 1; \
+	} while (0)
+# define TRACEOUT(x...) printk (x)
 #else
 # define TRACEPRINTF(x...) do {} while (0)
 # define TRACEOUT(x...) do {} while (0)
 #endif
 
 
-#ifdef DC395x_DEBUGMALLOC
-inline void *dc395x_kmalloc(size_t sz, int fl)
-{
-	void *ptr = kmalloc(sz, fl);
-	printk(KERN_DEBUG DC395X_NAME ": Alloc %i bytes @ %p w/ fl %08x\n",
-	       sz, ptr, fl);
-	return ptr;
-}
-inline void dc395x_kfree(const void *adr)
-{
-	printk(KERN_DEBUG DC395X_NAME ": Free mem @ %p\n", adr);
-	kfree(adr);
-}
-
-# define KMALLOC(sz,fl) dc395x_kmalloc(sz,fl)
-# define KFREE(adr) dc395x_kfree(adr)
-#else
-# define KMALLOC(sz,fl) kmalloc(sz,fl)
-# define KFREE(adr) kfree(adr)
-#endif
+/*---------------------------------------------------------------------------
+ ---------------------------------------------------------------------------*/
 
 
 #ifndef PCI_VENDOR_ID_TEKRAM
@@ -172,16 +210,6 @@
 #define PCI_DEVICE_ID_TEKRAM_TRMS1040           0x0391	/* Device ID    */
 #endif
 
-static struct pci_device_id dc395x_pci_tbl[] __devinitdata = {
-	{
-		.vendor		= PCI_VENDOR_ID_TEKRAM,
-		.device		= PCI_DEVICE_ID_TEKRAM_TRMS1040,
-		.subvendor	= PCI_ANY_ID,
-		.subdevice	= PCI_ANY_ID,
-	 },
-	{}			/* Terminating entry */
-};
-MODULE_DEVICE_TABLE(pci, dc395x_pci_tbl);
 
 
 #define DC395x_LOCK_IO(dev)   spin_lock_irqsave(((struct Scsi_Host *)dev)->host_lock, flags)
@@ -284,7 +312,7 @@
 	u8 padding;
 	u16 debugpos;
 	/* Offset 0x58/0x40 */
-#ifdef DC395x_DEBUGTRACE
+#if debug_enabled(DBG_TRACE|DBG_TRACEALL)
 	char *debugtrace;
 	/* Offset 0x60/0x44 */
 #endif
@@ -509,7 +537,6 @@
 				      struct DeviceCtlBlk *pDCB);
 void DC395x_initDCB(struct AdapterCtlBlk *pACB,
 		    struct DeviceCtlBlk **ppDCB, u8 target, u8 lun);
-int DC395x_shutdown(struct Scsi_Host *host);
 static void DC395x_remove_dev(struct AdapterCtlBlk *pACB,
 			      struct DeviceCtlBlk *pDCB);
 
@@ -519,8 +546,6 @@
 static u16 DC395x_adapterCnt = 0;
 static u16 DC395x_CurrSyncOffset = 0;
 
-DEBUGRECURSION(static char in_driver = 0;
-    )
 static char DC395x_monitor_next_IRQ = 0;
 
 /* 
@@ -578,119 +603,203 @@
 static u16 dc395x_clock_speed[] = { 200, 133, 100, 80, 67, 58, 50, 40 };
 /* real period:48ns,72ns,100ns,124ns,148ns,172ns,200ns,248ns */
 
+
+
+/*---------------------------------------------------------------------------
+                                Configuration
+  ---------------------------------------------------------------------------*/
+
 /*
- * Override defaults on cmdline:
- * dc395x_trm = AdaptID, MaxSpeed (Index), DevMode (Bitmapped), AdaptMode (Bitmapped), Tags (log2-1), DelayReset
+ * Command line parameters are stored in a structure below.
+ * These are the index's into the strcuture for the various
+ * command line options.
  */
-int dc395x_trm[] = { -2, -2, -2, -2, -2, -2 };
+#define CFG_ADAPTER_ID		0
+#define CFG_MAX_SPEED		1
+#define CFG_DEV_MODE		2
+#define CFG_ADAPTER_MODE	3
+#define CFG_TAGS		4
+#define CFG_RESET_DELAY		5
+
+#define CFG_NUM			6	/* number of configuration items */
 
-#if defined(MODULE)
-MODULE_PARM(dc395x_trm, "1-6i");
-MODULE_PARM_DESC(dc395x_trm,
-		 "Host SCSI ID, Speed (0=20MHz), Device Flags, Adapter Flags, Max Tags (log2(tags)-1), DelayReset (s)");
+
+/*
+ * Value used to indicate that a command line override
+ * hasn't been used to modify the value.
+ */
+#define CFG_PARAM_UNSET -1
+
+
+/*
+ * Hold command line parameters.
+ */
+struct dc395x_config_data {
+	int value;		/* value of this setting */
+	int min;		/* minimum value */
+	int max;		/* maximum value */
+	int def;		/* default value */
+	int safe;		/* safe value */
+};
+struct dc395x_config_data __initdata cfg_data[] = {
+	{ /* adapter id */
+		CFG_PARAM_UNSET,
+		0,
+		15,
+		7,
+		7
+	},
+	{ /* max speed */
+		CFG_PARAM_UNSET,
+		  0,
+		  7,
+		  1,	/* 13.3Mhz */
+		  4,	/*  6.7Hmz */
+	},
+	{ /* dev mode */
+		CFG_PARAM_UNSET,
+		0,
+		0x3f,
+		NTC_DO_PARITY_CHK | NTC_DO_DISCONNECT | NTC_DO_SYNC_NEGO |
+			NTC_DO_WIDE_NEGO | NTC_DO_TAG_QUEUEING |
+			NTC_DO_SEND_START,
+		NTC_DO_PARITY_CHK | NTC_DO_SEND_START
+	},
+	{ /* adapter mode */
+		CFG_PARAM_UNSET,
+		0,
+		0x2f,
+#ifdef CONFIG_SCSI_MULTI_LUN
+			NAC_SCANLUN |
 #endif
+		NAC_GT2DRIVES | NAC_GREATER_1G | NAC_POWERON_SCSI_RESET
+			/*| NAC_ACTIVE_NEG*/,
+		NAC_GT2DRIVES | NAC_GREATER_1G | NAC_POWERON_SCSI_RESET | 0x08
+	},
+	{ /* tags */
+		CFG_PARAM_UNSET,
+		0,
+		5,
+		3,	/* 16 tags (??) */
+		2,
+	},
+	{ /* reset delay */
+		CFG_PARAM_UNSET,
+		0,
+		180,
+		1,	/* 1 second */
+		10,	/* 10 seconds */
+	}
+};
 
-MODULE_AUTHOR("C.L. Huang / Erich Chen / Kurt Garloff");
-MODULE_DESCRIPTION
-    ("SCSI host adapter driver for Tekram TRM-S1040 based adapters: Tekram DC395 and DC315 series");
-MODULE_SUPPORTED_DEVICE("sd,sr,sg,st");
 
-MODULE_LICENSE("GPL");
+/*
+ * Safe settings. If set to zero the the BIOS/default values with command line
+ * overrides will be used. If set to 1 then safe and slow settings will be used.
+ */
+static int dc395x_safe = 0;
+module_param_named(safe, dc395x_safe, bool, 0);
+MODULE_PARM_DESC(safe, "Use safe and slow settings only. Default: false");
 
-/* Delaying after a reset */
-static char __initdata DC395x_interpd[] = { 1, 3, 5, 10, 16, 30, 60, 120 };
 
-/* Convert EEprom value to seconds */
-static void __init DC395x_interpret_delay(struct NvRamType *eeprom)
-{
-	/*printk (DC395X_NAME ": Debug: Delay: %i\n", eeprom->NvramDelayTime); */
-	eeprom->NvramDelayTime = DC395x_interpd[eeprom->NvramDelayTime];
-}
+module_param_named(adapter_id, cfg_data[CFG_ADAPTER_ID].value, int, 0);
+MODULE_PARM_DESC(adapter_id, "Adapter SCSI ID. Default 7 (0-15)");
+
+module_param_named(max_speed, cfg_data[CFG_MAX_SPEED].value, int, 0);
+MODULE_PARM_DESC(max_speed, "Maximum bus speed. Default 1 (0-7) Speeds: 0=20, 1=13.3, 2=10, 3=8, 4=6.7, 5=5.8, 6=5, 7=4 Mhz");
+
+module_param_named(dev_mode, cfg_data[CFG_DEV_MODE].value, int, 0);
+MODULE_PARM_DESC(dev_mode, "Device mode.");
 
-/* seconds to EEProm value */
-static int __init DC395x_uninterpret_delay(int delay)
+module_param_named(adapter_mode, cfg_data[CFG_ADAPTER_MODE].value, int, 0);
+MODULE_PARM_DESC(adapter_mode, "Adapter mode.");
+
+module_param_named(tags, cfg_data[CFG_TAGS].value, int, 0);
+MODULE_PARM_DESC(tags, "Number of tags (1<<x). Default 3 (0-5)");
+
+module_param_named(reset_delay, cfg_data[CFG_RESET_DELAY].value, int, 0);
+MODULE_PARM_DESC(reset_delay, "Reset delay in seconds. Default 1 (0-180)");
+
+
+/**
+ * set_safe_settings - if the safe parameter is set then
+ * set all values to the safe and slow values.
+ **/
+static
+void __init set_safe_settings(void)
 {
-	u8 idx = 0;
-	while (idx < 7 && DC395x_interpd[idx] < delay)
-		idx++;
-	return idx;
+	if (dc395x_safe)
+	{
+		int i;
+
+		dprintkl(KERN_INFO, "Using sage settings.\n");
+		for (i = 0; i < CFG_NUM; i++)
+		{
+			cfg_data[i].value = cfg_data[i].safe;
+		}
+	}
 }
 
 
-/* Handle "-1" case */
-static void __init DC395x_check_for_safe_settings(void)
+/**
+ * fix_settings - reset any boot parmeters which are out of range
+ * back to the default values.
+ **/
+static
+void __init fix_settings(void)
 {
-	if (dc395x_trm[0] == -1 || dc395x_trm[0] > 15) {	/* modules-2.0.0 passes -1 as string */
-		dc395x_trm[0] = 7;
-		dc395x_trm[1] = 4;
-		dc395x_trm[2] = 0x09;
-		dc395x_trm[3] = 0x0f;
-		dc395x_trm[4] = 2;
-		dc395x_trm[5] = 10;
-		printk(KERN_INFO DC395X_NAME ": Using safe settings.\n");
+	int i;
+
+	dprintkdbg(DBG_PARSE, "setup %08x %08x %08x %08x %08x %08x\n",
+		    cfg_data[CFG_ADAPTER_ID].value,
+		    cfg_data[CFG_MAX_SPEED].value,
+		    cfg_data[CFG_DEV_MODE].value,
+		    cfg_data[CFG_ADAPTER_MODE].value,
+		    cfg_data[CFG_TAGS].value,
+		    cfg_data[CFG_RESET_DELAY].value);
+	for (i = 0; i < CFG_NUM; i++)
+	{
+		if (cfg_data[i].value < cfg_data[i].min ||
+			cfg_data[i].value > cfg_data[i].max)
+		{
+			cfg_data[i].value = cfg_data[i].def;
+		}
 	}
 }
 
-/* Defaults, to be overriden by (a) BIOS and (b) Cmnd line (kernel/module) args */
-int __initdata dc395x_def[] = { 7, 1 /* 13.3MHz */ ,
-	NTC_DO_PARITY_CHK | NTC_DO_DISCONNECT | NTC_DO_SYNC_NEGO |
-	    NTC_DO_WIDE_NEGO | NTC_DO_TAG_QUEUEING | NTC_DO_SEND_START,
-	NAC_GT2DRIVES | NAC_GREATER_1G | NAC_POWERON_SCSI_RESET
-	    /* | NAC_ACTIVE_NEG */
-#ifdef CONFIG_SCSI_MULTI_LUN
-	    | NAC_SCANLUN
-#endif
-	    , 3 /* 16 Tags per LUN */ , 1	/* s delay after Reset */
-};
 
-/* Copy defaults over set values where missing */
-static void __init DC395x_fill_with_defaults(void)
+
+/*
+ * Mapping from the eeprom value (index into this array) to the
+ * the number of actual seconds that the delay should be for.
+ */
+static
+char __initdata eeprom_index_to_delay_map[] = { 1, 3, 5, 10, 16, 30, 60, 120 };
+
+
+/**
+ * eeprom_index_to_delay - Take the eeprom delay setting and convert it
+ * into a number of seconds.
+ */
+static void __init eeprom_index_to_delay(struct NvRamType *eeprom)
 {
-	int i;
-	PARSEDEBUG(printk
-		   (KERN_INFO DC395X_NAME
-		    ": setup %08x %08x %08x %08x %08x %08x\n",
-		    dc395x_trm[0], dc395x_trm[1], dc395x_trm[2],
-		    dc395x_trm[3], dc395x_trm[4], dc395x_trm[5]);
-	    )
-	    for (i = 0; i < 6; i++) {
-		if (dc395x_trm[i] < 0 || dc395x_trm[i] > 255)
-			dc395x_trm[i] = dc395x_def[i];
-	}
-	/* Sanity checks */
-	if (dc395x_trm[0] > 15)
-		dc395x_trm[0] = 7;
-	if (dc395x_trm[1] > 7)
-		dc395x_trm[1] = 4;
-	if (dc395x_trm[4] > 5)
-		dc395x_trm[4] = 4;
-	if (dc395x_trm[5] > 180)
-		dc395x_trm[5] = 180;
+	eeprom->NvramDelayTime = eeprom_index_to_delay_map[eeprom->NvramDelayTime];
 }
 
 
-/* Read the parameters from the command line */
-#if !defined(MODULE)
-static int DC395x_trm_setup(char *str)
+/**
+ * delay_to_eeprom_index - Take a delay in seconds and return the closest
+ * eeprom index which will delay for at least that amount of seconds.
+ */
+static int __init delay_to_eeprom_index(int delay)
 {
-	int i;
-	int im;
-	int ints[8];
-	(void) get_options(str, ARRAY_SIZE(ints), ints);
-	im = ints[0];
-	if (im > 6) {
-		printk(KERN_NOTICE DC395X_NAME ": ignore extra params!\n");
-		im = 6;
+	u8 idx = 0;
+	while (idx < 7 && eeprom_index_to_delay_map[idx] < delay) {
+		idx++;
 	}
-	for (i = 0; i < im; i++)
-		dc395x_trm[i] = ints[i + 1];
-
-	return 1;
+	return idx;
 }
 
-__setup(DC395X_NAME "=", DC395x_trm_setup);
-
-#endif				/* !MODULE */
 
 /* Overrride BIOS values with the set ones */
 static void __init DC395x_EEprom_Override(struct NvRamType *eeprom)
@@ -698,21 +807,32 @@
 	u8 id;
 
 	/* Adapter Settings */
-	if (dc395x_trm[0] != -2)
-		eeprom->NvramScsiId = (u8) dc395x_trm[0];	/* Adapter ID */
-	if (dc395x_trm[3] != -2)
-		eeprom->NvramChannelCfg = (u8) dc395x_trm[3];
-	if (dc395x_trm[5] != -2)
-		eeprom->NvramDelayTime = DC395x_uninterpret_delay(dc395x_trm[5]);	/* Reset delay */
-	if (dc395x_trm[4] != -2)
-		eeprom->NvramMaxTag = (u8) dc395x_trm[4];	/* Tagged Cmds */
+	if (cfg_data[CFG_ADAPTER_ID].value != CFG_PARAM_UNSET) {
+		eeprom->NvramScsiId =
+		    (u8)cfg_data[CFG_ADAPTER_ID].value;
+	}
+	if (cfg_data[CFG_ADAPTER_MODE].value != CFG_PARAM_UNSET) {
+		eeprom->NvramChannelCfg =
+		    (u8)cfg_data[CFG_ADAPTER_MODE].value;
+	}
+	if (cfg_data[CFG_RESET_DELAY].value != CFG_PARAM_UNSET) {
+		eeprom->NvramDelayTime =
+		    delay_to_eeprom_index(cfg_data[CFG_RESET_DELAY].value);
+	}
+	if (cfg_data[CFG_TAGS].value != CFG_PARAM_UNSET) {
+		eeprom->NvramMaxTag = (u8)cfg_data[CFG_TAGS].value;
+	}
 
 	/* Device Settings */
 	for (id = 0; id < DC395x_MAX_SCSI_ID; id++) {
-		if (dc395x_trm[2] != -2)
-			eeprom->NvramTarget[id].NvmTarCfg0 = (u8) dc395x_trm[2];	/* Cfg0 */
-		if (dc395x_trm[1] != -2)
-			eeprom->NvramTarget[id].NvmTarPeriod = (u8) dc395x_trm[1];	/* Speed */
+		if (cfg_data[CFG_DEV_MODE].value != CFG_PARAM_UNSET) {
+			eeprom->NvramTarget[id].NvmTarCfg0 =
+			    (u8)cfg_data[CFG_DEV_MODE].value;
+		}
+		if (cfg_data[CFG_MAX_SPEED].value != CFG_PARAM_UNSET) {
+			eeprom->NvramTarget[id].NvmTarPeriod =
+			    (u8)cfg_data[CFG_MAX_SPEED].value;
+		}
 	}
 }
 
@@ -763,10 +883,9 @@
 static void
 DC395x_Query_append(Scsi_Cmnd * cmd, struct AdapterCtlBlk *pACB)
 {
-	DEBUG0(printk(DC395X_NAME ": Append cmd %li to Query\n", cmd->pid);
-	    )
+	dprintkdbg(DBG_0, "Append cmd %li to Query\n", cmd->pid);
 
-	    cmd->host_scribble = NULL;
+	cmd->host_scribble = NULL;
 
 	if (!pACB->QueryCnt)
 		pACB->pQueryHead = cmd;
@@ -787,9 +906,8 @@
 	pcmd = pACB->pQueryHead;
 	if (!pcmd)
 		return pcmd;
-	DEBUG0(printk(DC395X_NAME ": Get cmd %li from Query\n", pcmd->pid);
-	    )
-	    pACB->pQueryHead = (void *) pcmd->host_scribble;
+	dprintkdbg(DBG_0, "Get cmd %li from Query\n", pcmd->pid);
+	pACB->pQueryHead = (void *) pcmd->host_scribble;
 	pcmd->host_scribble = NULL;
 	if (!pACB->pQueryHead)
 		pACB->pQueryTail = NULL;
@@ -807,7 +925,7 @@
 	/*DC395x_Free_integrity (pACB); */
 	pSRB = pACB->pFreeSRB;
 	if (!pSRB)
-		printk(DC395X_NAME ": Out of Free SRBs :-(\n");
+		dprintkl(KERN_ERR, "Out of Free SRBs :-(\n");
 	if (pSRB) {
 		pACB->pFreeSRB = pSRB->pNextSRB;
 		pSRB->pNextSRB = NULL;
@@ -821,9 +939,8 @@
 static __inline__ void
 DC395x_Free_insert(struct AdapterCtlBlk *pACB, struct ScsiReqBlk *pSRB)
 {
-	DEBUG0(printk(DC395X_NAME ": Free SRB %p\n", pSRB);
-	    )
-	    pSRB->pNextSRB = pACB->pFreeSRB;
+	dprintkdbg(DBG_0, "Free SRB %p\n", pSRB);
+	pSRB->pNextSRB = pACB->pFreeSRB;
 	pACB->pFreeSRB = pSRB;
 }
 
@@ -832,11 +949,8 @@
 static __inline__ void
 DC395x_Waiting_insert(struct DeviceCtlBlk *pDCB, struct ScsiReqBlk *pSRB)
 {
-	DEBUG0(printk
-	       (DC395X_NAME ": Insert pSRB %p cmd %li to Waiting\n", pSRB,
-		pSRB->pcmd->pid);
-	    )
-	    pSRB->pNextSRB = pDCB->pWaitingSRB;
+	dprintkdbg(DBG_0, "Insert pSRB %p cmd %li to Waiting\n", pSRB, pSRB->pcmd->pid);
+	pSRB->pNextSRB = pDCB->pWaitingSRB;
 	if (!pDCB->pWaitingSRB)
 		pDCB->pWaitLast = pSRB;
 	pDCB->pWaitingSRB = pSRB;
@@ -848,11 +962,8 @@
 static __inline__ void
 DC395x_Waiting_append(struct DeviceCtlBlk *pDCB, struct ScsiReqBlk *pSRB)
 {
-	DEBUG0(printk
-	       (DC395X_NAME ": Append pSRB %p cmd %li to Waiting\n", pSRB,
-		pSRB->pcmd->pid);
-	    )
-	    if (pDCB->pWaitingSRB)
+	dprintkdbg(DBG_0, "Append pSRB %p cmd %li to Waiting\n", pSRB, pSRB->pcmd->pid);
+	if (pDCB->pWaitingSRB)
 		pDCB->pWaitLast->pNextSRB = pSRB;
 	else
 		pDCB->pWaitingSRB = pSRB;
@@ -868,10 +979,9 @@
 static __inline__ void
 DC395x_Going_append(struct DeviceCtlBlk *pDCB, struct ScsiReqBlk *pSRB)
 {
-	DEBUG0(printk(DC395X_NAME ": Append SRB %p to Going\n", pSRB);
-	    )
-	    /* Append to the list of Going commands */
-	    if (pDCB->pGoingSRB)
+	dprintkdbg(DBG_0, "Append SRB %p to Going\n", pSRB);
+	/* Append to the list of Going commands */
+	if (pDCB->pGoingSRB)
 		pDCB->pGoingLast->pNextSRB = pSRB;
 	else
 		pDCB->pGoingSRB = pSRB;
@@ -908,8 +1018,7 @@
 	if (pre->pNextSRB != pSRB)
 		pre = DC395x_find_SRBpre(pSRB, pre);
 	if (!pre) {
-		printk(DC395X_NAME
-		       ": Internal ERROR: SRB to rmv not found in Q!\n");
+		dprintkl(KERN_ERR, "Internal ERROR: SRB to rmv not found in Q!\n");
 		return 0;
 	}
 	pre->pNextSRB = pSRB->pNextSRB;
@@ -924,10 +1033,9 @@
 		    struct ScsiReqBlk *hint)
 {
 	struct ScsiReqBlk *pre = 0;
-	DEBUG0(printk(DC395X_NAME ": Remove SRB %p from Going\n", pSRB);
-	    )
-	    if (!pSRB)
-		printk(DC395X_NAME ": Going_remove %p!\n", pSRB);
+	dprintkdbg(DBG_0, "Remove SRB %p from Going\n", pSRB);
+	if (!pSRB)
+		dprintkl(KERN_ERR, "Going_remove %p!\n", pSRB);
 	if (pSRB == pDCB->pGoingSRB)
 		pDCB->pGoingSRB = pSRB->pNextSRB;
 	else if (hint && hint->pNextSRB == pSRB)
@@ -946,10 +1054,9 @@
 		      struct ScsiReqBlk *hint)
 {
 	struct ScsiReqBlk *pre = 0;
-	DEBUG0(printk(DC395X_NAME ": Remove SRB %p from Waiting\n", pSRB);
-	    )
-	    if (!pSRB)
-		printk(DC395X_NAME ": Waiting_remove %p!\n", pSRB);
+	dprintkdbg(DBG_0, "Remove SRB %p from Waiting\n", pSRB);
+	if (!pSRB)
+		dprintkl(KERN_ERR, "Waiting_remove %p!\n", pSRB);
 	if (pSRB == pDCB->pWaitingSRB)
 		pDCB->pWaitingSRB = pSRB->pNextSRB;
 	else if (hint && hint->pNextSRB == pSRB)
@@ -966,13 +1073,9 @@
 static void
 DC395x_Going_to_Waiting(struct DeviceCtlBlk *pDCB, struct ScsiReqBlk *pSRB)
 {
-	DEBUG0(printk
-	       (KERN_INFO DC395X_NAME
-		": Going_to_Waiting (SRB %p) pid = %li\n", pSRB,
-		pSRB->pcmd->pid);
-	    )
-	    /* Remove SRB from Going */
-	    DC395x_Going_remove(pDCB, pSRB, 0);
+	dprintkdbg(DBG_0, "Going_to_Waiting (SRB %p) pid = %li\n", pSRB, pSRB->pcmd->pid);
+	/* Remove SRB from Going */
+	DC395x_Going_remove(pDCB, pSRB, 0);
 	TRACEPRINTF("GtW *");
 	/* Insert on top of Waiting */
 	DC395x_Waiting_insert(pDCB, pSRB);
@@ -985,11 +1088,8 @@
 DC395x_Waiting_to_Going(struct DeviceCtlBlk *pDCB, struct ScsiReqBlk *pSRB)
 {
 	/* Remove from waiting list */
-	DEBUG0(printk
-	       (DC395X_NAME ": Remove SRB %p from head of Waiting\n",
-		pSRB);
-	    )
-	    DC395x_Waiting_remove(pDCB, pSRB, 0);
+	dprintkdbg(DBG_0, "Remove SRB %p from head of Waiting\n", pSRB);
+	DC395x_Waiting_remove(pDCB, pSRB, 0);
 	TRACEPRINTF("WtG *");
 	DC395x_Going_append(pDCB, pSRB);
 }
@@ -1059,9 +1159,7 @@
 {
 	unsigned long flags;
 	struct AdapterCtlBlk *pACB = (struct AdapterCtlBlk *) ptr;
-#ifdef DC395x_DEBUG_KG
-	printk(DC395X_NAME ": Debug: Waiting queue woken up by timer.\n");
-#endif
+	dprintkdbg(DBG_KG, "Debug: Waiting queue woken up by timer.\n");
 	DC395x_LOCK_IO(pACB->pScsiHost);
 	DC395x_Waiting_process(pACB);
 	DC395x_UNLOCK_IO(pACB->pScsiHost);
@@ -1138,9 +1236,7 @@
 	u32 request_size;
 	int dir;
 
-#ifdef DC395x_DEBUG0
-	printk(KERN_INFO DC395X_NAME ": DC395x_BuildSRB..............\n ");
-#endif
+	dprintkdbg(DBG_0, "DC395x_BuildSRB..............\n");
 	/*memset (pSRB, 0, sizeof (struct ScsiReqBlk)); */
 	pSRB->pSRBDCB = pDCB;
 	pSRB->pcmd = pcmd;
@@ -1157,15 +1253,13 @@
 			       pcmd->use_sg, dir);
 		sgp = pSRB->SegmentX;
 		request_size = pcmd->request_bufflen;
-#ifdef DC395x_SGPARANOIA
-		printk(KERN_INFO DC395X_NAME
-		       ": BuildSRB: Bufflen = %d, buffer = %p, use_sg = %d\n",
+		dprintkdbg(DBG_SGPARANOIA, 
+		       "BuildSRB: Bufflen = %d, buffer = %p, use_sg = %d\n",
 		       pcmd->request_bufflen, pcmd->request_buffer,
 		       pcmd->use_sg);
-		printk(KERN_INFO DC395X_NAME
-		       ": Mapped %i Segments to %i\n", pcmd->use_sg,
+		dprintkdbg(DBG_SGPARANOIA, 
+		       "Mapped %i Segments to %i\n", pcmd->use_sg,
 		       pSRB->SRBSGCount);
-#endif
 		sl = (struct scatterlist *) pcmd->request_buffer;
 
 		pSRB->virt_addr = page_address(sl->page);
@@ -1175,18 +1269,16 @@
 			sgp[i].address = busaddr;
 			sgp[i].length = seglen;
 			len += seglen;
-#ifdef DC395x_SGPARANOIA
-			printk(KERN_INFO DC395X_NAME
-			       ": Setting up sgp %d, address = 0x%08x, length = %d, tot len = %d\n",
+			dprintkdbg(DBG_SGPARANOIA,
+			       "Setting up sgp %d, address = 0x%08x, length = %d, tot len = %d\n",
 			       i, busaddr, seglen, len);
-#endif
 		}
 		sgp += max - 1;
 		/* Fixup for last buffer too big as it is allocated on even page boundaries */
 		if (len > request_size) {
-#if defined(DC395x_DEBUG_KG) || defined (DC395x_SGPARANOIA)
-			printk(KERN_INFO DC395X_NAME
-			       ": Fixup SG total length: %d->%d, last seg %d->%d\n",
+#if debug_enabled(DBG_KG) || debug_enabled(DBG_SGPARANOIA)
+			dprintkdbg(DBG_KG|DBG_SGPARANOIA,
+			       "Fixup SG total length: %d->%d, last seg %d->%d\n",
 			       len, request_size, sgp->length,
 			       sgp->length - (len - request_size));
 #endif
@@ -1205,13 +1297,11 @@
 				   sizeof(struct SGentry) *
 				   DC395x_MAX_SG_LISTENTRY,
 				   PCI_DMA_TODEVICE);
-#ifdef DC395x_SGPARANOIA
-		printk(DC395X_NAME
-		       ": Map SG descriptor list %p (%05x) to %08x\n",
+		dprintkdbg(DBG_SGPARANOIA,
+		       "Map SG descriptor list %p (%05x) to %08x\n",
 		       pSRB->SegmentX,
 		       sizeof(struct SGentry) * DC395x_MAX_SG_LISTENTRY,
 		       pSRB->SRBSGBusAddr);
-#endif
 	} else {
 		if (pcmd->request_buffer && dir != PCI_DMA_NONE) {
 			u32 len = pcmd->request_bufflen;	/* Actual request size */
@@ -1226,23 +1316,19 @@
 			pSRB->SRBTotalXferLength = len;
 			pSRB->virt_addr = pcmd->request_buffer;
 			pSRB->SRBSGBusAddr = 0;
-#ifdef DC395x_SGPARANOIA
-			printk(KERN_INFO DC395X_NAME
-			       ": BuildSRB: len = %d, buffer = %p, use_sg = %d, map %08x\n",
+			dprintkdbg(DBG_SGPARANOIA,
+			       "BuildSRB: len = %d, buffer = %p, use_sg = %d, map %08x\n",
 			       len, pcmd->request_buffer, pcmd->use_sg,
 			       pSRB->SegmentX[0].address);
-#endif
 		} else {
 			pSRB->SRBSGCount = 0;
 			pSRB->SRBTotalXferLength = 0;
 			pSRB->SRBSGBusAddr = 0;
 			pSRB->virt_addr = 0;
-#ifdef DC395x_SGPARANOIA
-			printk(KERN_INFO DC395X_NAME
-			       ": BuildSRB: buflen = %d, buffer = %p, use_sg = %d, NOMAP %08x\n",
+			dprintkdbg(DBG_SGPARANOIA,
+			       "BuildSRB: buflen = %d, buffer = %p, use_sg = %d, NOMAP %08x\n",
 			       pcmd->bufflen, pcmd->request_buffer,
 			       pcmd->use_sg, pSRB->SegmentX[0].address);
-#endif
 		}
 	}
 
@@ -1255,16 +1341,15 @@
 	pSRB->SRBState = 0;
 	pSRB->RetryCnt = 0;
 
-#if DC395x_SGPARANOIA
-	if ((unsigned long) pSRB->debugtrace & (DEBUGTRACEBUFSZ - 1)) {
-		printk(DC395X_NAME
-		       ": SRB %i (%p): debugtrace %p corrupt!\n",
-		       (pSRB -
-			pDCB->pDCBACB->SRB_array) /
+#if debug_enabled(DBG_TRACE|DBG_TRACEALL) && debug_enabled(DBG_SGPARANOIA)
+	if ((unsigned long)pSRB->debugtrace & (DEBUGTRACEBUFSZ - 1)) {
+		dprintkdbg(DBG_SGPARANOIA,
+			"SRB %i (%p): debugtrace %p corrupt!\n",
+		       (pSRB - pDCB->pDCBACB->SRB_array) /
 		       sizeof(struct ScsiReqBlk), pSRB, pSRB->debugtrace);
 	}
 #endif
-#ifdef DC395x_TRACEDEBUG
+#if debug_enabled(DBG_TRACE|DBG_TRACEALL)
 	pSRB->debugpos = 0;
 	pSRB->debugtrace = 0;
 #endif
@@ -1303,8 +1388,7 @@
 				   pcmd->device->lun);
 		if (!pDCB) {
 			DC395x_Free_insert(pACB, pSRB);
-			printk(KERN_ERR DC395X_NAME
-			       ": Command in queue to non-existing device!\n");
+			dprintkl(KERN_ERR, "Command in queue to non-existing device!\n");
 			pcmd->result =
 			    MK_RES(DRIVER_ERROR, DID_ERROR, 0, 0);
 			/*DC395x_UNLOCK_ACB_NI; */
@@ -1343,55 +1427,55 @@
 	    (struct AdapterCtlBlk *) cmd->device->host->hostdata;
 
 
-	DEBUG0(			/*  if(pACB->scan_devices) */
-		      printk(KERN_INFO DC395X_NAME
-			     ": Queue Cmd=%02x,Tgt=%d,LUN=%d (pid=%li)\n",
-			     cmd->cmnd[0], cmd->device->id,
-			     cmd->device->lun, cmd->pid);
-	    )
-
-	    DEBUGRECURSION(if (in_driver++ > NORM_REC_LVL)
-			   printk(DC395X_NAME
-				  ": %i queue_command () recursion? (pid=%li)\n",
-				  in_driver, cmd->pid);)
+	dprintkdbg(DBG_0, "Queue Cmd=%02x,Tgt=%d,LUN=%d (pid=%li)\n",
+		cmd->cmnd[0], cmd->device->id,
+		cmd->device->lun, cmd->pid);
+
+#if debug_enabled(DBG_RECURSION)
+	if (dbg_in_driver++ > NORM_REC_LVL) {
+		dprintkl(KERN_DEBUG,
+			"%i queue_command () recursion? (pid=%li)\n",
+			dbg_in_driver, cmd->pid);
+	}
+#endif
 
-		/* Assume BAD_TARGET; will be cleared later */
-		cmd->result = DID_BAD_TARGET << 16;
+	/* Assume BAD_TARGET; will be cleared later */
+	cmd->result = DID_BAD_TARGET << 16;
 
 	if ((cmd->device->id >= pACB->pScsiHost->max_id)
 	    || (cmd->device->lun >= pACB->pScsiHost->max_lun)
 	    || (cmd->device->lun >31)) {
-		/*      printk (KERN_INFO DC395X_NAME "Ignore target %d lun %d\n",
+		/*      dprintkl(KERN_INFO, "Ignore target %d lun %d\n",
 		   cmd->device->id, cmd->device->lun); */
-		DEBUGRECURSION(in_driver--;
-		    )
-		    /*return 1; */
-		    done(cmd);
+#if debug_enabled(DBG_RECURSION)
+		dbg_in_driver--
+#endif
+		/*return 1; */
+		done(cmd);
 		return 0;
 	}
 
 	if (!(pACB->DCBmap[cmd->device->id] & (1 << cmd->device->lun))) {
-		printk(KERN_INFO DC395X_NAME
-		       ": Ignore target %02x lun %02x\n", cmd->device->id,
+		dprintkl(KERN_INFO, "Ignore target %02x lun %02x\n", cmd->device->id,
 		       cmd->device->lun);
 		/*return 1; */
-		DEBUGRECURSION(in_driver--;
-		    )
-		    done(cmd);
+#if debug_enabled(DBG_RECURSION)
+		dbg_in_driver--
+#endif
+		done(cmd);
 		return 0;
 	} else {
 		pDCB =
 		    DC395x_findDCB(pACB, cmd->device->id,
 				   cmd->device->lun);
 		if (!pDCB) {	/* should never happen */
-			printk(KERN_ERR DC395X_NAME
-			       ": no DCB failed, target %02x lun %02x\n",
+			dprintkl(KERN_ERR, "no DCB failed, target %02x lun %02x\n",
 			       cmd->device->id, cmd->device->lun);
-			printk(DC395X_NAME
-			       ": No DCB in queuecommand (2)!\n");
-			DEBUGRECURSION(in_driver--;
-			    )
-			    return 1;
+			dprintkl(KERN_ERR, "No DCB in queuecommand (2)!\n");
+#if debug_enabled(DBG_RECURSION)
+			dbg_in_driver--
+#endif
+			return 1;
 		}
 	}
 
@@ -1403,52 +1487,49 @@
 
 	if (pACB->QueryCnt) {
 		/* Unsent commands ? */
-		DEBUG0(printk(DC395X_NAME ": QueryCnt != 0\n");
-		    )
-		    DC395x_Query_append(cmd, pACB);
+		dprintkdbg(DBG_0, "QueryCnt != 0\n");
+		DC395x_Query_append(cmd, pACB);
 		DC395x_Waiting_process(pACB);
 	} else {
 		if (pDCB->pWaitingSRB) {
 			pSRB = DC395x_Free_get(pACB);
-			DEBUG0(if (!pSRB)
-			       printk(DC395X_NAME
-				      ": No free SRB but Waiting\n");
-			       else
-			       printk(DC395X_NAME
-				      ": Free SRB w/ Waiting\n");)
-				if (!pSRB) {
-					DC395x_Query_append(cmd, pACB);
-				} else {
-					DC395x_BuildSRB(cmd, pDCB, pSRB);
-					DC395x_Waiting_append(pDCB, pSRB);
-				}
+			if (debug_enabled(DBG_0)) {
+				if (!pSRB)
+					dprintkdbg(DBG_0, "No free SRB but Waiting\n");
+				else
+					dprintkdbg(DBG_0, "Free SRB w/ Waiting\n");
+			}
+			if (!pSRB) {
+				DC395x_Query_append(cmd, pACB);
+			} else {
+				DC395x_BuildSRB(cmd, pDCB, pSRB);
+				DC395x_Waiting_append(pDCB, pSRB);
+			}
 			DC395x_Waiting_process(pACB);
 		} else {
 			pSRB = DC395x_Free_get(pACB);
-			DEBUG0(if (!pSRB)
-			       printk(DC395X_NAME
-				      ": No free SRB w/o Waiting\n");
-			       else
-			       printk(DC395X_NAME
-				      ": Free SRB w/o Waiting\n");)
-				if (!pSRB) {
-					DC395x_Query_append(cmd, pACB);
-					DC395x_Waiting_process(pACB);
-				} else {
-					DC395x_BuildSRB(cmd, pDCB, pSRB);
-					DC395x_SendSRB(pACB, pSRB);
-				}
+			if (debug_enabled(DBG_0)) {
+				if (!pSRB)
+					dprintkdbg(DBG_0, "No free SRB w/o Waiting\n");
+				else
+					dprintkdbg(DBG_0, "Free SRB w/o Waiting\n");
+			}
+			if (!pSRB) {
+				DC395x_Query_append(cmd, pACB);
+				DC395x_Waiting_process(pACB);
+			} else {
+				DC395x_BuildSRB(cmd, pDCB, pSRB);
+				DC395x_SendSRB(pACB, pSRB);
+			}
 		}
 	}
 
 	/*DC395x_ACB_LOCK(pACB,acb_flags); */
-	DEBUG1(printk
-	       (KERN_DEBUG " ... command (pid %li) queued successfully.\n",
-		cmd->pid);
-	    )
-	    DEBUGRECURSION(in_driver--;
-	    )
-	    return 0;
+	dprintkdbg(DBG_1, "... command (pid %li) queued successfully.\n", cmd->pid);
+#if debug_enabled(DBG_RECURSION)
+	dbg_in_driver--
+#endif
+	return 0;
 }
 
 
@@ -1546,10 +1627,7 @@
 	struct AdapterCtlBlk *pACB;
 	int size = capacity;
 
-#ifdef DC395x_DEBUG0
-	printk(KERN_INFO DC395X_NAME
-	       ":DC395x_bios_param..............\n ");
-#endif
+	dprintkdbg(DBG_0, "DC395x_bios_param..............\n");
 	pACB = (struct AdapterCtlBlk *) sdev->host->hostdata;
 	heads = 64;
 	sectors = 32;
@@ -1586,12 +1664,10 @@
 		pSRB = pDCB->pActiveSRB;
 	if (pSRB) {
 		if (!(pSRB->pcmd))
-			printk(DC395X_NAME
-			       ": dump: SRB %p: cmd %p OOOPS!\n", pSRB,
+			dprintkl(KERN_INFO, "dump: SRB %p: cmd %p OOOPS!\n", pSRB,
 			       pSRB->pcmd);
 		else
-			printk(DC395X_NAME
-			       ": dump: SRB %p: cmd %p pid %li: %02x (%02i-%i)\n",
+			dprintkl(KERN_INFO, "dump: SRB %p: cmd %p pid %li: %02x (%02i-%i)\n",
 			       pSRB, pSRB->pcmd, pSRB->pcmd->pid,
 			       pSRB->pcmd->cmnd[0], pSRB->pcmd->device->id,
 			       pSRB->pcmd->device->lun);
@@ -1604,7 +1680,7 @@
 		     (pACB->pActiveDCB) ? "" : "not");
 		TRACEOUT("        %s\n", pSRB->debugtrace);
 	}
-	printk(DC395X_NAME ": dump: SCSI block\n");
+	dprintkl(KERN_INFO, "dump: SCSI block\n");
 	printk
 	    ("              Status %04x FIFOCnt %02x Signals %02x IRQStat %02x\n",
 	     DC395x_read16(TRM_S1040_SCSI_STATUS),
@@ -1624,7 +1700,7 @@
 	     DC395x_read8(TRM_S1040_SCSI_CONFIG2),
 	     DC395x_read8(TRM_S1040_SCSI_COMMAND),
 	     DC395x_read8(TRM_S1040_SCSI_TIMEOUT));
-	printk(DC395X_NAME ": dump: DMA block\n");
+	dprintkl(KERN_INFO, "dump: DMA block\n");
 	printk
 	    ("              Cmd %04x FIFOCnt %02x FStat %02x IRQStat %02x IRQEn %02x Cfg %04x\n",
 	     DC395x_read16(TRM_S1040_DMA_COMMAND),
@@ -1638,12 +1714,11 @@
 	       DC395x_read32(TRM_S1040_DMA_CXCNT),
 	       DC395x_read32(TRM_S1040_DMA_XHIGHADDR),
 	       DC395x_read32(TRM_S1040_DMA_XLOWADDR));
-	printk(DC395X_NAME
-	       ": dump: Misc: GCtrl %02x GStat %02x GTmr %02x\n",
+	dprintkl(KERN_INFO, "dump: Misc: GCtrl %02x GStat %02x GTmr %02x\n",
 	       DC395x_read8(TRM_S1040_GEN_CONTROL),
 	       DC395x_read8(TRM_S1040_GEN_STATUS),
 	       DC395x_read8(TRM_S1040_GEN_TIMER));
-	printk(DC395X_NAME ": dump: PCI Status %04x\n", pstat);
+	dprintkl(KERN_INFO, "dump: PCI Status %04x\n", pstat);
 
 
 }
@@ -1651,18 +1726,20 @@
 
 static inline void DC395x_clrfifo(struct AdapterCtlBlk *pACB, char *txt)
 {
-#ifdef DC395x_DEBUGFIFO
+#if debug_enabled(DBG_FIFO)
 	u8 lines = DC395x_read8(TRM_S1040_SCSI_SIGNAL);
 	u8 fifocnt = DC395x_read8(TRM_S1040_SCSI_FIFOCNT);
 	if (!(fifocnt & 0x40))
-		printk(DC395X_NAME
-		       ": Clr FIFO (%i bytes) on phase %02x in %s\n",
-		       fifocnt & 0x3f, lines, txt);
+		dprintkdbg(DBG_FIFO,
+		       "Clr FIFO (%i bytes) on phase %02x in %s\n",
+			fifocnt & 0x3f, lines, txt);
 #endif
+#if debug_enabled(DBG_TRACE)   
 	if (pACB->pActiveDCB && pACB->pActiveDCB->pActiveSRB) {
 		struct ScsiReqBlk *pSRB = pACB->pActiveDCB->pActiveSRB;
 		TRACEPRINTF("#*");
 	}
+#endif
 	DC395x_write16(TRM_S1040_SCSI_CONTROL, DO_CLRFIFO);
 }
 
@@ -1682,10 +1759,7 @@
 	u8 PeriodIndex;
 	u16 index;
 
-#ifdef DC395x_DEBUG0
-	printk(KERN_INFO DC395X_NAME
-	       ": DC395x_ResetDevParam..............\n ");
-#endif
+	dprintkdbg(DBG_0, "DC395x_ResetDevParam..............\n");
 	pDCB = pACB->pLinkDCB;
 	if (pDCB == NULL)
 		return;
@@ -1728,7 +1802,7 @@
 	struct AdapterCtlBlk *pACB;
 	/*u32         acb_flags=0; */
 
-	printk(KERN_INFO DC395X_NAME ": reset requested!\n");
+	dprintkl(KERN_INFO, "reset requested!\n");
 	pACB = (struct AdapterCtlBlk *) cmd->device->host->hostdata;
 	/* mid level guarantees no recursion */
 	/*DC395x_ACB_LOCK(pACB,acb_flags); */
@@ -1797,7 +1871,7 @@
 	int cnt = pACB->QueryCnt;
 	Scsi_Cmnd *pcmd;
 	Scsi_Cmnd *last = 0;
-	printk(DC395X_NAME ": DC395x_eh_abort: cmd %p (pid %li, %02i-%i) ",
+	dprintkl(KERN_INFO, "eh abort: cmd %p (pid %li, %02i-%i) ",
 	       cmd, cmd->pid, cmd->device->id, cmd->device->lun);
 	for (pcmd = pACB->pQueryHead; cnt--;
 	     last = pcmd, pcmd = (Scsi_Cmnd *) pcmd->host_scribble) {
@@ -1821,7 +1895,7 @@
 	}
 	pDCB = DC395x_findDCB(pACB, cmd->device->id, cmd->device->lun);
 	if (!pDCB) {
-		printk("no DCB !\n");
+		printk("no DCB!\n");
 		return FAILED;
 	}
 
@@ -1863,8 +1937,8 @@
 {
 	u8 *ptr = pSRB->MsgOutBuf + pSRB->MsgCnt;
 	if (pSRB->MsgCnt > 1) {
-		printk(DC395X_NAME
-		       ": Build_SDTR: MsgOutBuf BUSY (%i: %02x %02x)\n",
+		dprintkl(KERN_INFO,
+		       "Build_SDTR: MsgOutBuf BUSY (%i: %02x %02x)\n",
 		       pSRB->MsgCnt, pSRB->MsgOutBuf[0],
 		       pSRB->MsgOutBuf[1]);
 		return;
@@ -1897,8 +1971,8 @@
 	    ? 1 : 0;
 	u8 *ptr = pSRB->MsgOutBuf + pSRB->MsgCnt;
 	if (pSRB->MsgCnt > 1) {
-		printk(DC395X_NAME
-		       ": Build_WDTR: MsgOutBuf BUSY (%i: %02x %02x)\n",
+		dprintkl(KERN_INFO,
+		       "Build_WDTR: MsgOutBuf BUSY (%i: %02x %02x)\n",
 		       pSRB->MsgCnt, pSRB->MsgOutBuf[0],
 		       pSRB->MsgOutBuf[1]);
 		return;
@@ -1940,9 +2014,9 @@
 	unsigned long flags;
 	struct AdapterCtlBlk *pACB = (struct AdapterCtlBlk *) ptr;
 	struct ScsiReqBlk *pSRB;
-	printk(DC395X_NAME ": Debug: Chip forgot to produce SelTO IRQ!\n");
+	dprintkl(KERN_DEBUG, "Chip forgot to produce SelTO IRQ!\n");
 	if (!pACB->pActiveDCB || !pACB->pActiveDCB->pActiveSRB) {
-		printk(DC395X_NAME ": ... but no cmd pending? Oops!\n");
+		dprintkl(KERN_DEBUG, "... but no cmd pending? Oops!\n");
 		return;
 	}
 	DC395x_LOCK_IO(pACB->pScsiHost);
@@ -1967,10 +2041,7 @@
 	u8 s_stat, scsicommand, i, identify_message;
 	u8 *ptr;
 
-#ifdef DC395x_DEBUG0
-	printk(KERN_INFO DC395X_NAME
-	       ": DC395x_StartSCSI..............\n ");
-#endif
+	dprintkdbg(DBG_0, "DC395x_StartSCSI..............\n");
 	pSRB->TagNumber = TAG_NONE;	/* pACB->TagMaxNum: had error read in eeprom */
 
 	s_stat = DC395x_read8(TRM_S1040_SCSI_SIGNAL);
@@ -1979,12 +2050,10 @@
 	TRACEPRINTF("Start %02x *", s_stat);
 #if 1
 	if (s_stat & 0x20 /* s_stat2 & 0x02000 */ ) {
-#ifdef DC395x_DEBUG_KG
-		printk(DC395X_NAME
-		       ": Debug: StartSCSI: pid %li(%02i-%i): BUSY %02x %04x\n",
+		dprintkdbg(DBG_KG,
+		       "StartSCSI: pid %li(%02i-%i): BUSY %02x %04x\n",
 		       pSRB->pcmd->pid, pDCB->TargetID, pDCB->TargetLUN,
 		       s_stat, s_stat2);
-#endif
 		/*
 		 * Try anyway?
 		 *
@@ -2002,11 +2071,9 @@
 	}
 #endif
 	if (pACB->pActiveDCB) {
-		printk(DC395X_NAME
-		       ": We try to start a SCSI command (%li)!\n",
+		dprintkl(KERN_DEBUG, "We try to start a SCSI command (%li)!\n",
 		       pSRB->pcmd->pid);
-		printk(DC395X_NAME
-		       ": While another one (%li) is active!!\n",
+		dprintkl(KERN_DEBUG, "While another one (%li) is active!!\n",
 		       (pACB->pActiveDCB->pActiveSRB ? pACB->pActiveDCB->
 			pActiveSRB->pcmd->pid : 0));
 		TRACEOUT(" %s\n", pSRB->debugtrace);
@@ -2016,21 +2083,17 @@
 		return 1;
 	}
 	if (DC395x_read16(TRM_S1040_SCSI_STATUS) & SCSIINTERRUPT) {
-#ifdef DC395x_DEBUG_KG
-		printk(DC395X_NAME
-		       ": Debug: StartSCSI failed (busy) for pid %li(%02i-%i)\n",
+		dprintkdbg(DBG_KG,
+		       "StartSCSI failed (busy) for pid %li(%02i-%i)\n",
 		       pSRB->pcmd->pid, pDCB->TargetID, pDCB->TargetLUN);
-#endif
 		TRACEPRINTF("°*");
 		return 1;
 	}
 	/* Allow starting of SCSI commands half a second before we allow the mid-level
 	 * to queue them again after a reset */
 	if (time_before(jiffies, pACB->pScsiHost->last_reset - HZ / 2)) {
-#ifdef DC395x_DEBUG_KG
-		printk(DC395X_NAME
-		       ": We were just reset and don't accept commands yet!\n");
-#endif
+		dprintkdbg(DBG_KG, 
+		       "We were just reset and don't accept commands yet!\n");
 		return 1;
 	}
 
@@ -2098,8 +2161,8 @@
 			tag_number++;
 		}
 		if (tag_number >= pDCB->MaxCommand) {
-			printk(KERN_WARNING DC395X_NAME
-			       ": Start_SCSI: Out of tags for pid %li (%i-%i)\n",
+			dprintkl(KERN_WARNING,
+			       "Start_SCSI: Out of tags for pid %li (%i-%i)\n",
 			       pSRB->pcmd->pid, pSRB->pcmd->device->id,
 			       pSRB->pcmd->device->lun);
 			pSRB->SRBState = SRB_READY;
@@ -2124,13 +2187,11 @@
 	/*
 	 *          Send CDB ..command block .........                     
 	 */
-#ifdef DC395x_DEBUG_KG
-	printk(KERN_INFO DC395X_NAME
-	       ": StartSCSI (pid %li) %02x (%i-%i): Tag %i\n",
+	dprintkdbg(DBG_KG, 
+	       "StartSCSI (pid %li) %02x (%i-%i): Tag %i\n",
 	       pSRB->pcmd->pid, pSRB->pcmd->cmnd[0],
 	       pSRB->pcmd->device->id, pSRB->pcmd->device->lun,
 	       pSRB->TagNumber);
-#endif
 	if (pSRB->SRBFlag & AUTO_REQSENSE) {
 		DC395x_write8(TRM_S1040_SCSI_FIFO, REQUEST_SENSE);
 		DC395x_write8(TRM_S1040_SCSI_FIFO, (pDCB->TargetLUN << 5));
@@ -2153,14 +2214,11 @@
 		 * we caught an interrupt (must be reset or reselection ... )
 		 * : Let's process it first!
 		 */
-		DEBUG0(printk
-		       (DC395X_NAME
-			": Debug: StartSCSI failed (busy) for pid %li(%02i-%i)!\n",
+		dprintkdbg(DBG_0, "Debug: StartSCSI failed (busy) for pid %li(%02i-%i)!\n",
 			pSRB->pcmd->pid, pDCB->TargetID, pDCB->TargetLUN);
-		    )
-		    /*DC395x_clrfifo (pACB, "Start2"); */
-		    /*DC395x_write16 (TRM_S1040_SCSI_CONTROL, DO_HWRESELECT | DO_DATALATCH); */
-		    pSRB->SRBState = SRB_READY;
+		/*DC395x_clrfifo (pACB, "Start2"); */
+		/*DC395x_write16 (TRM_S1040_SCSI_CONTROL, DO_HWRESELECT | DO_DATALATCH); */
+		pSRB->SRBState = SRB_READY;
 		DC395x_freetag(pDCB, pSRB);
 		pSRB->MsgCnt = 0;
 		return_code = 1;
@@ -2216,22 +2274,22 @@
 	/* This acknowledges the IRQ */
 	scsi_intstatus = DC395x_read8(TRM_S1040_SCSI_INTSTATUS);
 	if ((scsi_status & 0x2007) == 0x2002)
-		printk(DC395X_NAME ": COP after COP completed? %04x\n",
+		dprintkl(KERN_DEBUG, "COP after COP completed? %04x\n",
 		       scsi_status);
-#if 1				/*def DC395x_DEBUG0 */
+#if 1				/*def DBG_0 */
 	if (DC395x_monitor_next_IRQ) {
-		printk(KERN_INFO DC395X_NAME
-		       ": status=%04x intstatus=%02x\n", scsi_status,
+		dprintkl(KERN_INFO,
+		       "status=%04x intstatus=%02x\n", scsi_status,
 		       scsi_intstatus);
 		DC395x_monitor_next_IRQ--;
 	}
 #endif
 	/*DC395x_ACB_LOCK(pACB,acb_flags); */
-#ifdef DC395x_DEBUG_KG
-	if (scsi_intstatus & INT_SELTIMEOUT)
-		printk(KERN_INFO DC395X_NAME ": Sel Timeout IRQ\n");
-#endif
-	/*printk (DC395X_NAME ": DC395x_IRQ: intstatus = %02x ", scsi_intstatus); */
+	if (debug_enabled(DBG_KG)) {
+		if (scsi_intstatus & INT_SELTIMEOUT)
+		dprintkdbg(DBG_KG, "Sel Timeout IRQ\n");
+	}
+	/*dprintkl(KERN_DEBUG, "DC395x_IRQ: intstatus = %02x ", scsi_intstatus); */
 
 	if (timer_pending(&pACB->SelTO_Timer))
 		del_timer(&pACB->SelTO_Timer);
@@ -2245,8 +2303,7 @@
 		goto out_unlock;
 	}
 	if (scsi_intstatus & INT_SELECT) {
-		printk(KERN_INFO DC395X_NAME
-		       ": Host does not support target mode!\n");
+		dprintkl(KERN_INFO, "Host does not support target mode!\n");
 		goto out_unlock;
 	}
 	if (scsi_intstatus & INT_SCSIRESET) {
@@ -2256,16 +2313,14 @@
 	if (scsi_intstatus & (INT_BUSSERVICE | INT_CMDDONE)) {
 		pDCB = pACB->pActiveDCB;
 		if (!pDCB) {
-			printk(DC395X_NAME
-			       ": Oops: BusService (%04x %02x) w/o ActiveDCB!\n",
+			dprintkl(KERN_DEBUG,
+			       "Oops: BusService (%04x %02x) w/o ActiveDCB!\n",
 			       scsi_status, scsi_intstatus);
 			goto out_unlock;
 		}
 		pSRB = pDCB->pActiveSRB;
 		if (pDCB->DCBFlag & ABORT_DEV_) {
-#ifdef DC395x_DEBUG0
-			printk(KERN_INFO "MsgOut Abort Device..... ");
-#endif
+			dprintkdbg(DBG_0, "MsgOut Abort Device.....\n");
 			DC395x_EnableMsgOut_Abort(pACB, pSRB);
 		}
 		/*
@@ -2320,7 +2375,6 @@
 	return;
 }
 
-/*inline */
 irqreturn_t DC395x_Interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
 	struct AdapterCtlBlk *pACB = DC395x_pACB_start;
@@ -2328,12 +2382,12 @@
 	u8 dma_status;
 	irqreturn_t handled = IRQ_NONE;
 
-#ifdef DC395x_DEBUG0
-	printk(KERN_INFO DC395X_NAME ": DC395x_Interrupt..............\n ");
+	dprintkdbg(DBG_0, "DC395x_Interrupt..............\n");
+#if debug_enabled(DBG_RECURSION)
+        if (dbg_in_driver++ > NORM_REC_LVL) {
+		dprintkl(KERN_DEBUG, "%i interrupt recursion?\n", dbg_in_driver);
+	}
 #endif
-	DEBUGRECURSION(if (in_driver++ > NORM_REC_LVL)
-		       printk(DC395X_NAME ": %i interrupt recursion?\n",
-			      in_driver);)
 
 	/*
 	 * Find which card generated the interrupt. Note that it may have
@@ -2362,10 +2416,10 @@
 		}
 		else if (dma_status & 0x20) {
 			/* Error from the DMA engine */
-			printk(DC395X_NAME ": Interrupt from DMA engine: %02x!\n",
+			dprintkl(KERN_INFO, "Interrupt from DMA engine: %02x!\n",
 			       dma_status);
 #if 0
-			printk(DC395X_NAME ": This means DMA error! Try to handle ...\n");
+			dprintkl(KERN_INFO, "This means DMA error! Try to handle ...\n");
 			if (pACB->pActiveDCB) {
 				pACB->pActiveDCB-> DCBFlag |= ABORT_DEV_;
 				if (pACB->pActiveDCB->pActiveSRB)
@@ -2373,14 +2427,16 @@
 			}
 			DC395x_write8(TRM_S1040_DMA_CONTROL, ABORTXFER | CLRXFIFO);
 #else
-			printk(DC395X_NAME ": Ignoring DMA error (probably a bad thing) ...\n");
+			dprintkl(KERN_INFO, "Ignoring DMA error (probably a bad thing) ...\n");
 			pACB = (struct AdapterCtlBlk *)NULL;
 #endif
 			handled = IRQ_HANDLED;
 		}
 	}
 
-	DEBUGRECURSION(in_driver--;)
+#if debug_enabled(DBG_RECURSION)
+	dbg_in_driver--
+#endif
 	return handled;
 }
 
@@ -2397,9 +2453,7 @@
 DC395x_MsgOutPhase0(struct AdapterCtlBlk *pACB, struct ScsiReqBlk *pSRB,
 		    u16 * pscsi_status)
 {
-#ifdef DC395x_DEBUG0
-	printk(KERN_INFO DC395X_NAME ": DC395x_MsgOutPhase0..... ");
-#endif
+	dprintkdbg(DBG_0, "DC395x_MsgOutPhase0.....\n");
 	if (pSRB->SRBState & (SRB_UNEXPECT_RESEL + SRB_ABORT_SENT)) {
 		*pscsi_status = PH_BUS_FREE;	/*.. initial phase */
 	}
@@ -2425,24 +2479,18 @@
 	u8 *ptr;
 	struct DeviceCtlBlk *pDCB;
 
-#ifdef DC395x_DEBUG0
-	printk(KERN_INFO DC395X_NAME
-	       ": DC395x_MsgOutPhase1..............\n ");
-#endif
+	dprintkdbg(DBG_0, "DC395x_MsgOutPhase1..............\n");
 	TRACEPRINTF("MOP1*");
 	pDCB = pACB->pActiveDCB;
 	DC395x_clrfifo(pACB, "MOP1");
 	if (!(pSRB->SRBState & SRB_MSGOUT)) {
 		pSRB->SRBState |= SRB_MSGOUT;
-		printk(DC395X_NAME ": Debug: pid %li: MsgOut Phase unexpected.\n", pSRB->pcmd->pid);	/* So what ? */
+		dprintkl(KERN_DEBUG, "Debug: pid %li: MsgOut Phase unexpected.\n", pSRB->pcmd->pid);	/* So what ? */
 	}
 	if (!pSRB->MsgCnt) {
-		DEBUG0(printk
-		       (DC395X_NAME
-			": Debug: pid %li: NOP Msg (no output message there).\n",
+		dprintkdbg(DBG_0, "Debug: pid %li: NOP Msg (no output message there).\n",
 			pSRB->pcmd->pid);
-		    )
-		    DC395x_write8(TRM_S1040_SCSI_FIFO, MSG_NOP);
+		DC395x_write8(TRM_S1040_SCSI_FIFO, MSG_NOP);
 		DC395x_write16(TRM_S1040_SCSI_CONTROL, DO_DATALATCH);	/* it's important for atn stop */
 		DC395x_write8(TRM_S1040_SCSI_COMMAND, SCMD_FIFO_OUT);
 		TRACEPRINTF("\\*");
@@ -2451,15 +2499,15 @@
 	}
 	ptr = (u8 *) pSRB->MsgOutBuf;
 	TRACEPRINTF("(*");
-	/*printk (DC395X_NAME ": Send msg: "); DC395x_printMsg (ptr, pSRB->MsgCnt); */
-	/*printk (DC395X_NAME ": MsgOut: "); */
+	/*dprintkl(KERN_DEBUG, "Send msg: "); DC395x_printMsg (ptr, pSRB->MsgCnt); */
+	/*dprintkl(KERN_DEBUG, "MsgOut: "); */
 	for (i = 0; i < pSRB->MsgCnt; i++) {
 		TRACEPRINTF("%02x *", *ptr);
 		DC395x_write8(TRM_S1040_SCSI_FIFO, *ptr++);
 	}
 	TRACEPRINTF(")*");
 	pSRB->MsgCnt = 0;
-	/*printk ("\n"); */
+	/*printk("\n"); */
 	if (			/*(pDCB->DCBFlag & ABORT_DEV_) && */
 		   (pSRB->MsgOutBuf[0] == MSG_ABORT))
 		pSRB->SRBState = SRB_ABORT_SENT;
@@ -2509,10 +2557,7 @@
 	u8 *ptr;
 	u16 i;
 
-#ifdef DC395x_DEBUG0
-	printk(KERN_INFO DC395X_NAME
-	       ": DC395x_CommandPhase1..............\n ");
-#endif
+	dprintkdbg(DBG_0, "DC395x_CommandPhase1..............\n");
 	TRACEPRINTF("COP1*");
 	DC395x_clrfifo(pACB, "COP1");
 	DC395x_write16(TRM_S1040_SCSI_CONTROL, DO_CLRATN);
@@ -2543,24 +2588,20 @@
 
 
 /* Do sanity checks for S/G list */
-#ifdef DC395x_SGPARANOIA
 static inline void DC395x_check_SG(struct ScsiReqBlk *pSRB)
 {
-	unsigned Length = 0;
-	unsigned Idx = pSRB->SRBSGIndex;
-	struct SGentry *psge = pSRB->SegmentX + Idx;
-	for (; Idx < pSRB->SRBSGCount; psge++, Idx++)
-		Length += psge->length;
-	if (Length != pSRB->SRBTotalXferLength)
-		printk(DC395X_NAME
-		       ": Inconsistent SRB S/G lengths (Tot=%i, Count=%i) !!\n",
-		       pSRB->SRBTotalXferLength, Length);
+	if (debug_enabled(DBG_SGPARANOIA)) {
+		unsigned Length = 0;
+		unsigned Idx = pSRB->SRBSGIndex;
+		struct SGentry *psge = pSRB->SegmentX + Idx;
+		for (; Idx < pSRB->SRBSGCount; psge++, Idx++)
+			Length += psge->length;
+		if (Length != pSRB->SRBTotalXferLength)
+			dprintkdbg(DBG_SGPARANOIA,
+			       "Inconsistent SRB S/G lengths (Tot=%i, Count=%i) !!\n",
+			       pSRB->SRBTotalXferLength, Length);
+	}			       
 }
-#else
-static inline void DC395x_check_SG(struct ScsiReqBlk *pSRB)
-{
-}
-#endif
 
 
 /*
@@ -2576,10 +2617,8 @@
 	struct scatterlist *sg;
 	int segment = pcmd->use_sg;
 
-#ifdef DC395x_DEBUG_KG
-	printk(DC395X_NAME ": Update SG: Total %i, Left %i\n",
+	dprintkdbg(DBG_KG, "Update SG: Total %i, Left %i\n",
 	       pSRB->SRBTotalXferLength, Left);
-#endif
 	DC395x_check_SG(pSRB);
 	psge = pSRB->SegmentX + pSRB->SRBSGIndex;
 	/* data that has already been transferred */
@@ -2612,28 +2651,28 @@
 		DC395x_check_SG(pSRB);
 	}
 	/* We need the corresponding virtual address sg_to_virt */
-	/*printk (DC395X_NAME ": sg_to_virt: bus %08x -> virt ", psge->address); */
+	/*dprintkl(KERN_DEBUG, "sg_to_virt: bus %08x -> virt ", psge->address); */
 	if (!segment) {
 		pSRB->virt_addr += Xferred;
-		/*printk ("%p\n", pSRB->virt_addr); */
+		/*printk("%p\n", pSRB->virt_addr); */
 		return;
 	}
 	/* We have to walk the scatterlist to find it */
 	sg = (struct scatterlist *) pcmd->request_buffer;
 	while (segment--) {
-		/*printk ("(%08x)%p ", BUS_ADDR(*sg), PAGE_ADDRESS(sg)); */
+		/*printk("(%08x)%p ", BUS_ADDR(*sg), PAGE_ADDRESS(sg)); */
 		unsigned long mask =
 		    ~((unsigned long) sg->length - 1) & PAGE_MASK;
 		if ((BUS_ADDR(*sg) & mask) == (psge->address & mask)) {
 			pSRB->virt_addr = (PAGE_ADDRESS(sg)
 					   + psge->address -
 					   (psge->address & PAGE_MASK));
-			/*printk ("%p\n", pSRB->virt_addr); */
+			/*printk("%p\n", pSRB->virt_addr); */
 			return;
 		}
 		++sg;
 	}
-	printk(DC395X_NAME ": sg_to_virt failed!\n");
+	dprintkl(KERN_ERR, "sg_to_virt failed!\n");
 	pSRB->virt_addr = 0;
 }
 
@@ -2692,9 +2731,7 @@
 	u32 dLeftCounter = 0;
 	struct DeviceCtlBlk *pDCB = pSRB->pSRBDCB;
 
-#ifdef DC395x_DEBUG0
-	printk(KERN_INFO DC395X_NAME ": DC395x_DataOutPhase0.....\n ");
-#endif
+	dprintkdbg(DBG_0, "DC395x_DataOutPhase0.....\n");
 	TRACEPRINTF("DOP0*");
 	pDCB = pSRB->pSRBDCB;
 	scsi_status = *pscsi_status;
@@ -2711,16 +2748,12 @@
 	 * KG: Stop DMA engine pushing more data into the SCSI FIFO
 	 * If we need more data, the DMA SG list will be freshly set up, anyway
 	 */
-#ifdef DC395x_DEBUGPIO
-	printk(DC395X_NAME
-	       ": DOP0: DMA_FCNT: %02x, DMA_FSTAT: %02x, SCSI_FCNT: %02x, CTR %06x, stat %04x, Tot: %06x\n",
+	dprintkdbg(DBG_PIO, "DOP0: DMA_FCNT: %02x, DMA_FSTAT: %02x, SCSI_FCNT: %02x, CTR %06x, stat %04x, Tot: %06x\n",
 	       DC395x_read8(TRM_S1040_DMA_FIFOCNT),
 	       DC395x_read8(TRM_S1040_DMA_FIFOSTAT),
 	       DC395x_read8(TRM_S1040_SCSI_FIFOCNT),
 	       DC395x_read32(TRM_S1040_SCSI_COUNTER), scsi_status,
 	       pSRB->SRBTotalXferLength);
-	/*DC395x_dumpinfo(pACB, pDCB, pSRB); */
-#endif
 	DC395x_write8(TRM_S1040_DMA_CONTROL, STOPDMAXFER | CLRXFIFO);
 
 	if (!(pSRB->SRBState & SRB_XFERPAD)) {
@@ -2744,23 +2777,22 @@
 			if (pDCB->SyncPeriod & WIDE_SYNC)
 				dLeftCounter <<= 1;
 
-#ifdef DC395x_DEBUG_KG
-			printk(DC395X_NAME
-			       ": Debug: SCSI FIFO contains %i %s in DOP0\n",
+			dprintkdbg(DBG_KG,
+			       "Debug: SCSI FIFO contains %i %s in DOP0\n",
 			       DC395x_read8(TRM_S1040_SCSI_FIFOCNT),
 			       (pDCB->
 				SyncPeriod & WIDE_SYNC) ? "words" :
 			       "bytes");
-			printk(DC395X_NAME
-			       ": SCSI FIFOCNT %02x, SCSI CTR %08x\n",
+			dprintkdbg(DBG_KG,
+			       "SCSI FIFOCNT %02x, SCSI CTR %08x\n",
 			       DC395x_read8(TRM_S1040_SCSI_FIFOCNT),
 			       DC395x_read32(TRM_S1040_SCSI_COUNTER));
-			printk(DC395X_NAME
-			       ": DMA FIFOCNT %04x, FIFOSTAT %02x, DMA CTR %08x\n",
+			dprintkdbg(DBG_KG,
+			       "DMA FIFOCNT %04x, FIFOSTAT %02x, DMA CTR %08x\n",
 			       DC395x_read8(TRM_S1040_DMA_FIFOCNT),
 			       DC395x_read8(TRM_S1040_DMA_FIFOSTAT),
 			       DC395x_read32(TRM_S1040_DMA_CXCNT));
-#endif
+
 			/*
 			 * if WIDE scsi SCSI FIFOCNT unit is word !!!
 			 * so need to *= 2
@@ -2786,8 +2818,7 @@
 		if (dLeftCounter == 1 && pDCB->SyncPeriod & WIDE_SYNC
 		    && pSRB->pcmd->request_bufflen % 2) {
 			dLeftCounter = 0;
-			printk(DC395X_NAME
-			       ": DOP0: Discard 1 byte. (%02x)\n",
+			dprintkl(KERN_INFO, "DOP0: Discard 1 byte. (%02x)\n",
 			       scsi_status);
 		}
 		/*
@@ -2808,8 +2839,8 @@
 			 * {
 			 *  TempDMAstatus = DC395x_read8(TRM_S1040_DMA_STATUS);
 			 * } while( !(TempDMAstatus & DMAXFERCOMP) && --ctr);
-			 * if (ctr < 6000000-1) printk (DC395X_NAME ": DMA should be complete ... in DOP1\n");
-			 * if (!ctr) printk (KERN_ERR DC395X_NAME ": Deadlock in DataOutPhase0 !!\n");
+			 * if (ctr < 6000000-1) dprintkl(KERN_DEBUG, "DMA should be complete ... in DOP1\n");
+			 * if (!ctr) dprintkl(KERN_ERR, "Deadlock in DataOutPhase0 !!\n");
 			 */
 			pSRB->SRBTotalXferLength = 0;
 		} else {	/* Update SG list         */
@@ -2829,9 +2860,8 @@
 			    || ((oldXferred & ~PAGE_MASK) ==
 				(PAGE_SIZE - diff))
 			    ) {
-				printk(DC395X_NAME
-				       ": Work around chip bug (%i)?\n",
-				       diff);
+				dprintkl(KERN_INFO,
+				       "Work around chip bug (%i)?\n", diff);
 				dLeftCounter =
 				    pSRB->SRBTotalXferLength - diff;
 				DC395x_update_SGlist(pSRB, dLeftCounter);
@@ -2844,16 +2874,16 @@
 	}
 #if 0
 	if (!(DC395x_read8(TRM_S1040_SCSI_FIFOCNT) & 0x40))
-		printk(DC395X_NAME
-		       ": DOP0(%li): %i bytes in SCSI FIFO! (Clear!)\n",
-		       pSRB->pcmd->pid,
-		       DC395x_read8(TRM_S1040_SCSI_FIFOCNT) & 0x1f);
+		dprintkl(KERN_DEBUG,
+			"DOP0(%li): %i bytes in SCSI FIFO! (Clear!)\n",
+			pSRB->pcmd->pid,
+			DC395x_read8(TRM_S1040_SCSI_FIFOCNT) & 0x1f);
 #endif
 	/*DC395x_clrfifo (pACB, "DOP0"); */
 	/*DC395x_write8 (TRM_S1040_DMA_CONTROL, CLRXFIFO | ABORTXFER); */
 #if 1
 	if ((*pscsi_status & PHASEMASK) != PH_DATA_OUT) {
-		/*printk (DC395X_NAME ": Debug: Clean up after Data Out ...\n"); */
+		/*dprintkl(KERN_DEBUG, "Debug: Clean up after Data Out ...\n"); */
 		DC395x_cleanup_after_transfer(pACB, pSRB);
 	}
 #endif
@@ -2875,9 +2905,7 @@
 		     u16 * pscsi_status)
 {
 
-#ifdef DC395x_DEBUG0
-	printk(KERN_INFO DC395X_NAME ": DC395x_DataOutPhase1.....\n");
-#endif
+	dprintkdbg(DBG_0, "DC395x_DataOutPhase1.....\n");
 	/*1.25 */
 	TRACEPRINTF("DOP1*");
 	DC395x_clrfifo(pACB, "DOP1");
@@ -2906,10 +2934,7 @@
 	/*struct DeviceCtlBlk*   pDCB = pSRB->pSRBDCB; */
 	/*u8 bval; */
 
-#ifdef DC395x_DEBUG0
-	printk(KERN_INFO DC395X_NAME
-	       ": DC395x_DataInPhase0..............\n ");
-#endif
+	dprintkdbg(DBG_0, "DC395x_DataInPhase0..............\n");
 	TRACEPRINTF("DIP0*");
 	scsi_status = *pscsi_status;
 
@@ -2928,8 +2953,8 @@
 	 */
 	if (!(pSRB->SRBState & SRB_XFERPAD)) {
 		if (scsi_status & PARITYERROR) {
-			printk(DC395X_NAME
-			       ": Parity Error (pid %li, target %02i-%i)\n",
+			dprintkl(KERN_INFO,
+			       "Parity Error (pid %li, target %02i-%i)\n",
 			       pSRB->pcmd->pid, pSRB->pcmd->device->id,
 			       pSRB->pcmd->device->lun);
 			pSRB->SRBStatus |= PARITY_ERROR;
@@ -2943,8 +2968,8 @@
 		if (!(DC395x_read8(TRM_S1040_DMA_FIFOSTAT) & 0x80)) {
 #if 0
 			int ctr = 6000000;
-			printk(DC395X_NAME
-			       ": DIP0: Wait for DMA FIFO to flush ...\n");
+			dprintkl(KERN_DEBUG,
+			       "DIP0: Wait for DMA FIFO to flush ...\n");
 			/*DC395x_write8  (TRM_S1040_DMA_CONTROL, STOPDMAXFER); */
 			/*DC395x_write32 (TRM_S1040_SCSI_COUNTER, 7); */
 			/*DC395x_write8  (TRM_S1040_SCSI_COMMAND, SCMD_DMA_IN); */
@@ -2952,18 +2977,16 @@
 			       (DC395x_read16(TRM_S1040_DMA_FIFOSTAT) &
 				0x80) && --ctr);
 			if (ctr < 6000000 - 1)
-				printk(DC395X_NAME
-				       ": Debug: DIP0: Had to wait for DMA ...\n");
+				dprintkl(KERN_DEBUG
+				       "DIP0: Had to wait for DMA ...\n");
 			if (!ctr)
-				printk(KERN_ERR DC395X_NAME
-				       ": Deadlock in DIP0 waiting for DMA FIFO empty!!\n");
+				dprintkl(KERN_ERR,
+				       "Deadlock in DIP0 waiting for DMA FIFO empty!!\n");
 			/*DC395x_write32 (TRM_S1040_SCSI_COUNTER, 0); */
 #endif
-#ifdef DC395x_DEBUG_KG
-			printk(DC395X_NAME ": DIP0: DMA_FIFO: %02x %02x\n",
+			dprintkdbg(DBG_KG, "DIP0: DMA_FIFO: %02x %02x\n",
 			       DC395x_read8(TRM_S1040_DMA_FIFOCNT),
 			       DC395x_read8(TRM_S1040_DMA_FIFOSTAT));
-#endif
 		}
 		/* Now: Check remainig data: The SCSI counters should tell us ... */
 		dLeftCounter = DC395x_read32(TRM_S1040_SCSI_COUNTER)
@@ -2971,42 +2994,34 @@
 		       << ((pSRB->pSRBDCB->SyncPeriod & WIDE_SYNC) ? 1 :
 			   0));
 
-#ifdef DC395x_DEBUG_KG
-		printk(DC395X_NAME
-		       ": Debug: SCSI FIFO contains %i %s in DIP0\n",
-		       DC395x_read8(TRM_S1040_SCSI_FIFOCNT) & 0x1f,
-		       (pSRB->pSRBDCB->
-			SyncPeriod & WIDE_SYNC) ? "words" : "bytes");
-		printk(DC395X_NAME ": SCSI FIFOCNT %02x, SCSI CTR %08x\n",
-		       DC395x_read8(TRM_S1040_SCSI_FIFOCNT),
-		       DC395x_read32(TRM_S1040_SCSI_COUNTER));
-		printk(DC395X_NAME
-		       ": DMA FIFOCNT %02x,%02x DMA CTR %08x\n",
-		       DC395x_read8(TRM_S1040_DMA_FIFOCNT),
-		       DC395x_read8(TRM_S1040_DMA_FIFOSTAT),
-		       DC395x_read32(TRM_S1040_DMA_CXCNT));
-		printk(DC395X_NAME
-		       ": Remaining: TotXfer: %i, SCSI FIFO+Ctr: %i\n",
-		       pSRB->SRBTotalXferLength, dLeftCounter);
-#endif
+		dprintkdbg(DBG_KG, "SCSI FIFO contains %i %s in DIP0\n",
+			  DC395x_read8(TRM_S1040_SCSI_FIFOCNT) & 0x1f,
+			  (pSRB->pSRBDCB->
+			  SyncPeriod & WIDE_SYNC) ? "words" : "bytes");
+		dprintkdbg(DBG_KG, "SCSI FIFOCNT %02x, SCSI CTR %08x\n",
+			  DC395x_read8(TRM_S1040_SCSI_FIFOCNT),
+			  DC395x_read32(TRM_S1040_SCSI_COUNTER));
+		dprintkdbg(DBG_KG, "DMA FIFOCNT %02x,%02x DMA CTR %08x\n",
+			  DC395x_read8(TRM_S1040_DMA_FIFOCNT),
+			  DC395x_read8(TRM_S1040_DMA_FIFOSTAT),
+			  DC395x_read32(TRM_S1040_DMA_CXCNT));
+		dprintkdbg(DBG_KG, "Remaining: TotXfer: %i, SCSI FIFO+Ctr: %i\n",
+			  pSRB->SRBTotalXferLength, dLeftCounter);
 #if DC395x_LASTPIO
 		/* KG: Less than or equal to 4 bytes can not be transfered via DMA, it seems. */
 		if (dLeftCounter
 		    && pSRB->SRBTotalXferLength <= DC395x_LASTPIO) {
 			/*u32 addr = (pSRB->SegmentX[pSRB->SRBSGIndex].address); */
 			/*DC395x_update_SGlist (pSRB, dLeftCounter); */
-			DEBUGPIO(printk
-				 (DC395X_NAME
-				  ": DIP0: PIO (%i %s) to %p for remaining %i bytes:",
+			dprintkdbg(DBG_PIO, "DIP0: PIO (%i %s) to %p for remaining %i bytes:",
 				  DC395x_read8(TRM_S1040_SCSI_FIFOCNT) &
 				  0x1f,
 				  (pSRB->pSRBDCB->
 				   SyncPeriod & WIDE_SYNC) ? "words" :
 				  "bytes", pSRB->virt_addr,
 				  pSRB->SRBTotalXferLength);
-			    )
 
-			    if (pSRB->pSRBDCB->SyncPeriod & WIDE_SYNC)
+			if (pSRB->pSRBDCB->SyncPeriod & WIDE_SYNC)
 				DC395x_write8(TRM_S1040_SCSI_CONFIG2,
 					      CFG2_WIDEFIFO);
 
@@ -3015,17 +3030,17 @@
 				u8 byte =
 				    DC395x_read8(TRM_S1040_SCSI_FIFO);
 				*(pSRB->virt_addr)++ = byte;
-				DEBUGPIO(printk(" %02x", byte);
-				    )
-				    pSRB->SRBTotalXferLength--;
+				if (debug_enabled(DBG_PIO))
+					printk(" %02x", byte);
+				pSRB->SRBTotalXferLength--;
 				dLeftCounter--;
 				pSRB->SegmentX[pSRB->SRBSGIndex].length--;
 				if (pSRB->SRBTotalXferLength
 				    && !pSRB->SegmentX[pSRB->SRBSGIndex].
 				    length) {
-					DEBUGPIO(printk(" (next segment)");
-					    )
-					    pSRB->SRBSGIndex++;
+				    	if (debug_enabled(DBG_PIO))
+						printk(" (next segment)");
+					pSRB->SRBSGIndex++;
 					DC395x_update_SGlist(pSRB,
 							     dLeftCounter);
 				}
@@ -3038,16 +3053,16 @@
 					    (TRM_S1040_SCSI_FIFO);
 					*(pSRB->virt_addr)++ = byte;
 					pSRB->SRBTotalXferLength--;
-					DEBUGPIO(printk(" %02x", byte);
-					    )
+					if (debug_enabled(DBG_PIO))
+						printk(" %02x", byte);
 				}
 #endif
 				DC395x_write8(TRM_S1040_SCSI_CONFIG2, 0);
 			}
-			/*printk (" %08x", *(u32*)(bus_to_virt (addr))); */
+			/*printk(" %08x", *(u32*)(bus_to_virt (addr))); */
 			/*pSRB->SRBTotalXferLength = 0; */
-			DEBUGPIO(printk("\n");
-			    )
+			if (debug_enabled(DBG_PIO))
+				printk("\n");
 		}
 #endif				/* DC395x_LASTPIO */
 
@@ -3075,12 +3090,12 @@
 #endif
 		/*dLeftCounter += DC395x_read32(TRM_S1040_SCSI_COUNTER); */
 #if 0
-		printk(DC395X_NAME
-		       ": DIP0: ctr=%08x, DMA_FIFO=%02x,%02x SCSI_FIFO=%02x\n",
+		dprintkl(KERN_DEBUG,
+		       "DIP0: ctr=%08x, DMA_FIFO=%02x,%02x SCSI_FIFO=%02x\n",
 		       dLeftCounter, DC395x_read8(TRM_S1040_DMA_FIFOCNT),
 		       DC395x_read8(TRM_S1040_DMA_FIFOSTAT),
 		       DC395x_read8(TRM_S1040_SCSI_FIFOCNT));
-		printk(DC395X_NAME ": DIP0: DMAStat %02x\n",
+		dprintkl(KERN_DEBUG, "DIP0: DMAStat %02x\n",
 		       DC395x_read8(TRM_S1040_DMA_STATUS));
 #endif
 
@@ -3095,13 +3110,13 @@
 				    DC395x_read8(TRM_S1040_DMA_STATUS);
 			} while (!(TempDMAstatus & DMAXFERCOMP) && --ctr);
 			if (!ctr)
-				printk(KERN_ERR DC395X_NAME
-				       ": Deadlock in DataInPhase0 waiting for DMA!!\n");
+				dprintkl(KERN_ERR,
+				       "Deadlock in DataInPhase0 waiting for DMA!!\n");
 			pSRB->SRBTotalXferLength = 0;
 #endif
-#if 0				/*def DC395x_DEBUG_KG             */
-			printk(DC395X_NAME
-			       ": DIP0: DMA not yet ready: %02x: %i -> %i bytes\n",
+#if 0				/*def DBG_KG             */
+			dprintkl(KERN_DEBUG,
+			       "DIP0: DMA not yet ready: %02x: %i -> %i bytes\n",
 			       DC395x_read8(TRM_S1040_DMA_STATUS),
 			       pSRB->SRBTotalXferLength, dLeftCounter);
 #endif
@@ -3120,7 +3135,7 @@
 	}
 	/* KG: The target may decide to disconnect: Empty FIFO before! */
 	if ((*pscsi_status & PHASEMASK) != PH_DATA_IN) {
-		/*printk (DC395X_NAME ": Debug: Clean up after Data In  ...\n"); */
+		/*dprintkl(KERN_DEBUG, "Debug: Clean up after Data In  ...\n"); */
 		DC395x_cleanup_after_transfer(pACB, pSRB);
 	}
 #if 0
@@ -3128,13 +3143,13 @@
 	bval = DC395x_read8(TRM_S1040_SCSI_FIFOCNT);
 	if (!(bval & 0x40)) {
 		bval &= 0x1f;
-		printk(DC395X_NAME
-		       ": DIP0(%li): %i bytes in SCSI FIFO (stat %04x) (left %08x)!!\n",
+		dprintkl(KERN_DEBUG,
+		       "DIP0(%li): %i bytes in SCSI FIFO (stat %04x) (left %08x)!!\n",
 		       pSRB->pcmd->pid, bval & 0x1f, scsi_status,
 		       dLeftCounter);
 		if ((dLeftCounter == 0)
 		    || (scsi_status & SCSIXFERCNT_2_ZERO)) {
-			printk(DC395X_NAME ": Clear FIFO!\n");
+			dprintkl(KERN_DEBUG, "Clear FIFO!\n");
 			DC395x_clrfifo(pACB, "DIP0");
 		}
 	}
@@ -3159,9 +3174,7 @@
 DC395x_DataInPhase1(struct AdapterCtlBlk *pACB, struct ScsiReqBlk *pSRB,
 		    u16 * pscsi_status)
 {
-#ifdef DC395x_DEBUG0
-	printk(KERN_INFO DC395X_NAME ": DC395x_DataInPhase1..... ");
-#endif
+	dprintkdbg(DBG_0, "DC395x_DataInPhase1.....\n");
 	/* FIFO should be cleared, if previous phase was not DataPhase */
 	/*DC395x_clrfifo (pACB, "DIP1"); */
 	/* Allow data in! */
@@ -3189,19 +3202,15 @@
 	u8 bval;
 	struct DeviceCtlBlk *pDCB;
 
-#ifdef DC395x_DEBUG0
-	printk(KERN_INFO DC395X_NAME
-	       ": DataIO_transfer %c (pid %li): len = %i, SG: %i/%i\n",
+	dprintkdbg(DBG_0, "DataIO_transfer %c (pid %li): len = %i, SG: %i/%i\n",
 	       ((ioDir & DMACMD_DIR) ? 'r' : 'w'), pSRB->pcmd->pid,
 	       pSRB->SRBTotalXferLength, pSRB->SRBSGIndex,
 	       pSRB->SRBSGCount);
-#endif
 	TRACEPRINTF("%05x(%i/%i)*", pSRB->SRBTotalXferLength,
 		    pSRB->SRBSGIndex, pSRB->SRBSGCount);
 	pDCB = pSRB->pSRBDCB;
 	if (pSRB == pACB->pTmpSRB) {
-		printk(DC395X_NAME
-		       ": ERROR! Using TmpSRB in DataPhase!\n");
+		dprintkl(KERN_ERR, "Using TmpSRB in DataPhase!\n");
 	}
 	if (pSRB->SRBSGIndex < pSRB->SRBSGCount) {
 		if (pSRB->SRBTotalXferLength > DC395x_LASTPIO) {
@@ -3211,8 +3220,7 @@
 			 * Maybe, even ABORTXFER would be appropriate
 			 */
 			if (dma_status & XFERPENDING) {
-				printk(DC395X_NAME
-				       ": Xfer pending! Expect trouble!!\n");
+				dprintkl(KERN_DEBUG, "Xfer pending! Expect trouble!!\n");
 				DC395x_dumpinfo(pACB, pDCB, pSRB);
 				DC395x_write8(TRM_S1040_DMA_CONTROL,
 					      CLRXFIFO);
@@ -3280,19 +3288,13 @@
 					DC395x_write8
 					    (TRM_S1040_SCSI_CONFIG2,
 					     CFG2_WIDEFIFO);
-				DEBUGPIO(printk
-					 (DC395X_NAME
-					  ": DOP1: PIO %i bytes from %p:",
+				dprintkdbg(DBG_PIO, "DOP1: PIO %i bytes from %p:",
 					  pSRB->SRBTotalXferLength,
 					  pSRB->virt_addr);
-				    )
-				    while (pSRB->SRBTotalXferLength) {
-					DEBUGPIO(printk
-						 (" %02x",
-						  (unsigned char) *(pSRB->
-								    virt_addr));
-					    )
-					    DC395x_write8
+				while (pSRB->SRBTotalXferLength) {
+					if (debug_enabled(DBG_PIO))
+						printk(" %02x", (unsigned char) *(pSRB->virt_addr));
+					DC395x_write8
 					    (TRM_S1040_SCSI_FIFO,
 					     *(pSRB->virt_addr)++);
 					pSRB->SRBTotalXferLength--;
@@ -3302,10 +3304,9 @@
 					    && !pSRB->SegmentX[pSRB->
 							       SRBSGIndex].
 					    length) {
-						DEBUGPIO(printk
-							 (" (next segment)");
-						    )
-						    pSRB->SRBSGIndex++;
+						if (debug_enabled(DBG_PIO))
+							printk(" (next segment)");
+						pSRB->SRBSGIndex++;
 						DC395x_update_SGlist(pSRB,
 								     pSRB->
 								     SRBTotalXferLength);
@@ -3313,19 +3314,17 @@
 				}
 				if (pSRB->pSRBDCB->SyncPeriod & WIDE_SYNC) {
 					if (ln % 2) {
-						DC395x_write8
-						    (TRM_S1040_SCSI_FIFO,
-						     0);
-						DEBUGPIO(printk(" |00");
-						    )
+						DC395x_write8(TRM_S1040_SCSI_FIFO, 0);
+						if (debug_enabled(DBG_PIO))
+							printk(" |00");
 					}
 					DC395x_write8
 					    (TRM_S1040_SCSI_CONFIG2, 0);
 				}
 				/*DC395x_write32(TRM_S1040_SCSI_COUNTER, ln); */
-				DEBUGPIO(printk("\n");
-				    )
-				    DC395x_write8(TRM_S1040_SCSI_COMMAND,
+				if (debug_enabled(DBG_PIO))
+					printk("\n");
+				DC395x_write8(TRM_S1040_SCSI_COMMAND,
 						  SCMD_FIFO_OUT);
 			}
 		}
@@ -3353,7 +3352,7 @@
 					data2 =
 					    DC395x_read8
 					    (TRM_S1040_SCSI_FIFO);
-					/*printk (DC395X_NAME ": DataIO: Xfer pad: %02x %02x\n", data, data2); */
+					/*dprintkl(KERN_DEBUG, "DataIO: Xfer pad: %02x %02x\n", data, data2); */
 				} else {
 					/* Danger, Robinson: If you find KGs scattered over the wide
 					 * disk, the driver or chip is to blame :-( */
@@ -3371,7 +3370,7 @@
 					data =
 					    DC395x_read8
 					    (TRM_S1040_SCSI_FIFO);
-					/*printk (DC395X_NAME ": DataIO: Xfer pad: %02x\n", data); */
+					/*dprintkl(KERN_DEBUG, "DataIO: Xfer pad: %02x\n", data); */
 				} else {
 					DC395x_write8(TRM_S1040_SCSI_FIFO,
 						      'K');
@@ -3389,7 +3388,7 @@
 		}
 	}
 	/*DC395x_monitor_next_IRQ = 2; */
-	/*printk (" done\n"); */
+	/*printk(" done\n"); */
 }
 
 
@@ -3405,10 +3404,7 @@
 DC395x_StatusPhase0(struct AdapterCtlBlk *pACB, struct ScsiReqBlk *pSRB,
 		    u16 * pscsi_status)
 {
-#ifdef DC395x_DEBUG0
-	printk(KERN_INFO DC395X_NAME ": StatusPhase0 (pid %li)\n",
-	       pSRB->pcmd->pid);
-#endif
+	dprintkdbg(DBG_0, "StatusPhase0 (pid %li)\n", pSRB->pcmd->pid);
 	TRACEPRINTF("STP0 *");
 	pSRB->TargetStatus = DC395x_read8(TRM_S1040_SCSI_FIFO);
 	pSRB->EndMessage = DC395x_read8(TRM_S1040_SCSI_FIFO);	/* get message */
@@ -3436,10 +3432,7 @@
 DC395x_StatusPhase1(struct AdapterCtlBlk *pACB, struct ScsiReqBlk *pSRB,
 		    u16 * pscsi_status)
 {
-#ifdef DC395x_DEBUG0
-	printk(KERN_INFO DC395X_NAME ": StatusPhase1 (pid=%li)\n",
-	       pSRB->pcmd->pid);
-#endif
+	dprintkdbg(DBG_0, "StatusPhase1 (pid=%li)\n", pSRB->pcmd->pid);
 	TRACEPRINTF("STP1 *");
 	/* Cleanup is now done at the end of DataXXPhase0 */
 	/*DC395x_cleanup_after_transfer (pACB, pSRB); */
@@ -3494,8 +3487,8 @@
 	DC395x_ENABLE_MSGOUT;
 	pSRB->SRBState &= ~SRB_MSGIN;
 	pSRB->SRBState |= SRB_MSGOUT;
-	printk(KERN_INFO DC395X_NAME
-	       ": Reject message %02x from %02i-%i\n", pSRB->MsgInBuf[0],
+	dprintkl(KERN_INFO,
+	       "Reject message %02x from %02i-%i\n", pSRB->MsgInBuf[0],
 	       pSRB->pSRBDCB->TargetID, pSRB->pSRBDCB->TargetLUN);
 	TRACEPRINTF("\\*");
 }
@@ -3525,12 +3518,10 @@
 {
 	struct ScsiReqBlk *lastSRB = pDCB->pGoingLast;
 	struct ScsiReqBlk *pSRB = pDCB->pGoingSRB;
-#ifdef DC395x_DEBUG0
-	printk(DC395X_NAME ": QTag Msg (SRB %p): %i ", pSRB, tag);
-#endif
+	dprintkdbg(DBG_0, "QTag Msg (SRB %p): %i\n", pSRB, tag);
 	if (!(pDCB->TagMask & (1 << tag)))
-		printk(DC395X_NAME
-		       ": MsgIn_QTag: TagMask (%08x) does not reserve tag %i!\n",
+		dprintkl(KERN_DEBUG,
+		       "MsgIn_QTag: TagMask (%08x) does not reserve tag %i!\n",
 		       pDCB->TagMask, tag);
 
 	if (!pSRB)
@@ -3542,10 +3533,8 @@
 			goto mingx0;
 		pSRB = pSRB->pNextSRB;
 	}
-#ifdef DC395x_DEBUG0
-	printk("pid %li (%i-%i)\n", pSRB->pcmd->pid,
+	dprintkdbg(DBG_0, "pid %li (%i-%i)\n", pSRB->pcmd->pid,
 	       pSRB->pSRBDCB->TargetID, pSRB->pSRBDCB->TargetLUN);
-#endif
 	if (pDCB->DCBFlag & ABORT_DEV_) {
 		/*pSRB->SRBState = SRB_ABORT_SENT; */
 		DC395x_EnableMsgOut_Abort(pACB, pSRB);
@@ -3578,7 +3567,7 @@
 	pSRB->MsgCnt = 1;
 	DC395x_ENABLE_MSGOUT;
 	TRACEPRINTF("?*");
-	printk(DC395X_NAME ": Unknown tag received: %i: abort !!\n", tag);
+	dprintkl(KERN_DEBUG, "Unknown tag received: %i: abort !!\n", tag);
 	return pSRB;
 }
 
@@ -3599,8 +3588,7 @@
 DC395x_MsgIn_set_async(struct AdapterCtlBlk *pACB, struct ScsiReqBlk *pSRB)
 {
 	struct DeviceCtlBlk *pDCB = pSRB->pSRBDCB;
-	printk(DC395X_NAME ": Target %02i: No sync transfers\n",
-	       pDCB->TargetID);
+	dprintkl(KERN_DEBUG, "Target %02i: No sync transfers\n", pDCB->TargetID);
 	TRACEPRINTF("!S *");
 	pDCB->SyncMode &= ~(SYNC_NEGO_ENABLE);
 	pDCB->SyncMode |= SYNC_NEGO_DONE;
@@ -3613,9 +3601,7 @@
 	    && !(pDCB->SyncMode & WIDE_NEGO_DONE)) {
 		DC395x_Build_WDTR(pACB, pDCB, pSRB);
 		DC395x_ENABLE_MSGOUT;
-		DEBUG0(printk
-		       (DC395X_NAME ": SDTR(rej): Try WDTR anyway ...\n");
-		    )
+		dprintkdbg(DBG_0, "SDTR(rej): Try WDTR anyway ...\n");
 	}
 }
 
@@ -3630,14 +3616,11 @@
 	/*u8 oldsyncperiod = pDCB->SyncPeriod; */
 	/*u8 oldsyncoffset = pDCB->SyncOffset; */
 
-#ifdef DC395x_DEBUG1
-	printk(KERN_INFO DC395X_NAME
-	       ": Target %02i: Sync: %ins (%02i.%01i MHz) Offset %i\n",
+	dprintkdbg(DBG_1, "Target %02i: Sync: %ins (%02i.%01i MHz) Offset %i\n",
 	       pDCB->TargetID, pSRB->MsgInBuf[3] << 2,
 	       (250 / pSRB->MsgInBuf[3]),
 	       ((250 % pSRB->MsgInBuf[3]) * 10) / pSRB->MsgInBuf[3],
 	       pSRB->MsgInBuf[4]);
-#endif
 
 	if (pSRB->MsgInBuf[4] > 15)
 		pSRB->MsgInBuf[4] = 15;
@@ -3655,8 +3638,8 @@
 			    dc395x_clock_period[bval]))
 		bval++;
 	if (pSRB->MsgInBuf[3] < dc395x_clock_period[bval])
-		printk(KERN_INFO DC395X_NAME
-		       ": Increase sync nego period to %ins\n",
+		dprintkl(KERN_INFO,
+		       "Increase sync nego period to %ins\n",
 		       dc395x_clock_period[bval] << 2);
 	pSRB->MsgInBuf[3] = dc395x_clock_period[bval];
 	pDCB->SyncPeriod &= 0xf0;
@@ -3668,8 +3651,8 @@
 	else
 		fact = 250;
 
-	printk(KERN_INFO DC395X_NAME
-	       ": Target %02i: %s Sync: %ins Offset %i (%02i.%01i MB/s)\n",
+	dprintkl(KERN_INFO,
+	       "Target %02i: %s Sync: %ins Offset %i (%02i.%01i MB/s)\n",
 	       pDCB->TargetID, (fact == 500) ? "Wide16" : "",
 	       pDCB->MinNegoPeriod << 2, pDCB->SyncOffset,
 	       (fact / pDCB->MinNegoPeriod),
@@ -3679,7 +3662,7 @@
 	TRACEPRINTF("S%i *", pDCB->MinNegoPeriod << 2);
 	if (!(pSRB->SRBState & SRB_DO_SYNC_NEGO)) {
 		/* Reply with corrected SDTR Message */
-		printk(DC395X_NAME ": .. answer w/  %ins %i\n",
+		dprintkl(KERN_DEBUG, " .. answer w/  %ins %i\n",
 		       pSRB->MsgInBuf[3] << 2, pSRB->MsgInBuf[4]);
 
 		memcpy(pSRB->MsgOutBuf, pSRB->MsgInBuf, 5);
@@ -3691,9 +3674,7 @@
 		    && !(pDCB->SyncMode & WIDE_NEGO_DONE)) {
 			DC395x_Build_WDTR(pACB, pDCB, pSRB);
 			DC395x_ENABLE_MSGOUT;
-			DEBUG0(printk
-			       (DC395X_NAME ": SDTR: Also try WDTR ...\n");
-			    )
+			dprintkdbg(DBG_0, "SDTR: Also try WDTR ...\n");
 		}
 	}
 	pSRB->SRBState &= ~SRB_DO_SYNC_NEGO;
@@ -3708,10 +3689,8 @@
 			struct ScsiReqBlk *pSRB)
 {
 	struct DeviceCtlBlk *pDCB = pSRB->pSRBDCB;
-#ifdef DC395x_DEBUG_KG
-	printk(DC395X_NAME ": WDTR got rejected from target %02i\n",
+	dprintkdbg(DBG_KG, "WDTR got rejected from target %02i\n",
 	       pDCB->TargetID);
-#endif
 	TRACEPRINTF("!W *");
 	pDCB->SyncPeriod &= ~WIDE_SYNC;
 	pDCB->SyncMode &= ~(WIDE_NEGO_ENABLE);
@@ -3722,9 +3701,7 @@
 	    && !(pDCB->SyncMode & SYNC_NEGO_DONE)) {
 		DC395x_Build_SDTR(pACB, pDCB, pSRB);
 		DC395x_ENABLE_MSGOUT;
-		DEBUG0(printk
-		       (DC395X_NAME ": WDTR(rej): Try SDTR anyway ...\n");
-		    )
+		dprintkdbg(DBG_0, "WDTR(rej): Try SDTR anyway ...\n");
 	}
 }
 
@@ -3738,8 +3715,8 @@
 		pSRB->MsgInBuf[3] = wide;
 	/* Completed */
 	if (!(pSRB->SRBState & SRB_DO_WIDE_NEGO)) {
-		printk(DC395X_NAME
-		       ": Target %02i initiates Wide Nego ...\n",
+		dprintkl(KERN_DEBUG,
+		       "Target %02i initiates Wide Nego ...\n",
 		       pDCB->TargetID);
 		memcpy(pSRB->MsgOutBuf, pSRB->MsgInBuf, 4);
 		pSRB->MsgCnt = 4;
@@ -3755,18 +3732,15 @@
 	pSRB->SRBState &= ~SRB_DO_WIDE_NEGO;
 	TRACEPRINTF("W%i *", (pDCB->SyncPeriod & WIDE_SYNC ? 1 : 0));
 	/*pDCB->SyncMode &= ~(WIDE_NEGO_ENABLE+WIDE_NEGO_DONE); */
-#ifdef DC395x_DEBUG_KG
-	printk(DC395X_NAME
-	       ": Wide transfers (%i bit) negotiated with target %02i\n",
+	dprintkdbg(DBG_KG,
+	       "Wide transfers (%i bit) negotiated with target %02i\n",
 	       (8 << pSRB->MsgInBuf[3]), pDCB->TargetID);
-#endif
 	DC395x_reprog(pACB, pDCB);
 	if ((pDCB->SyncMode & SYNC_NEGO_ENABLE)
 	    && !(pDCB->SyncMode & SYNC_NEGO_DONE)) {
 		DC395x_Build_SDTR(pACB, pDCB, pSRB);
 		DC395x_ENABLE_MSGOUT;
-		DEBUG0(printk(DC395X_NAME ": WDTR: Also try SDTR ...\n");
-		    )
+		dprintkdbg(DBG_0, "WDTR: Also try SDTR ...\n");
 	}
 }
 
@@ -3797,17 +3771,14 @@
 {
 	struct DeviceCtlBlk *pDCB;
 
-#ifdef DC395x_DEBUG0
-	printk(KERN_INFO DC395X_NAME
-	       ": DC395x_MsgInPhase0..............\n ");
-#endif
+	dprintkdbg(DBG_0, "DC395x_MsgInPhase0..............\n");
 	TRACEPRINTF("MIP0*");
 	pDCB = pACB->pActiveDCB;
 
 	pSRB->MsgInBuf[pACB->MsgLen++] = DC395x_read8(TRM_S1040_SCSI_FIFO);
 	if (DC395x_MsgIn_complete(pSRB->MsgInBuf, pACB->MsgLen)) {
 		TRACEPRINTF("(%02x)*", pSRB->MsgInBuf[0]);
-		/*printk (KERN_INFO DC395X_NAME ": MsgIn:"); */
+		/*dprintkl(KERN_INFO, "MsgIn:"); */
 		/*DC395x_printMsg (pSRB->MsgInBuf, pACB->MsgLen); */
 
 		/* Now eval the msg */
@@ -3860,12 +3831,10 @@
 
 			/* Discard  wide residual */
 		case MSG_IGNOREWIDE:
-			DEBUG0(printk
-			       (DC395X_NAME ": Ignore Wide Residual!\n");
-			    )
-			    /*DC395x_write32 (TRM_S1040_SCSI_COUNTER, 1); */
-			    /*DC395x_read8 (TRM_S1040_SCSI_FIFO); */
-			    break;
+			dprintkdbg(DBG_0, "Ignore Wide Residual!\n");
+			/*DC395x_write32 (TRM_S1040_SCSI_COUNTER, 1); */
+			/*DC395x_read8 (TRM_S1040_SCSI_FIFO); */
+			break;
 
 			/* nothing has to be done */
 		case COMMAND_COMPLETE:
@@ -3876,22 +3845,19 @@
 			 * scsi command. Thanks, Gérard, for pointing it out.
 			 */
 		case SAVE_POINTERS:
-#ifdef DC395x_DEBUG0
-			printk(DC395X_NAME
-			       ": SAVE POINTER message received (pid %li: rem.%i) ... ignore :-(\n",
+			dprintkdbg(DBG_0, "SAVE POINTER message received (pid %li: rem.%i) ... ignore :-(\n",
 			       pSRB->pcmd->pid, pSRB->SRBTotalXferLength);
-#endif
 			/*pSRB->Saved_Ptr = pSRB->TotalXferredLen; */
 			break;
 			/* The device might want to restart transfer with a RESTORE */
 		case RESTORE_POINTERS:
-			printk(DC395X_NAME
-			       ": RESTORE POINTER message received ... ignore :-(\n");
+			dprintkl(KERN_DEBUG,
+			       "RESTORE POINTER message received ... ignore :-(\n");
 			/*dc395x_restore_ptr (pACB, pSRB); */
 			break;
 		case ABORT:
-			printk(DC395X_NAME
-			       ": ABORT msg received (pid %li %02i-%i)\n",
+			dprintkl(KERN_DEBUG,
+			       "ABORT msg received (pid %li %02i-%i)\n",
 			       pSRB->pcmd->pid, pDCB->TargetID,
 			       pDCB->TargetLUN);
 			pDCB->DCBFlag |= ABORT_DEV_;
@@ -3900,8 +3866,7 @@
 			/* reject unknown messages */
 		default:
 			if (pSRB->MsgInBuf[0] & IDENTIFY_BASE) {
-				printk(DC395X_NAME
-				       ": Identify Message received?\n");
+				dprintkl(KERN_DEBUG, "Identify Message received?\n");
 				/*TRACEOUT (" %s\n", pSRB->debugtrace); */
 				pSRB->MsgCnt = 1;
 				pSRB->MsgOutBuf[0] = pDCB->IdentifyMsg;
@@ -3944,10 +3909,7 @@
 DC395x_MsgInPhase1(struct AdapterCtlBlk *pACB, struct ScsiReqBlk *pSRB,
 		   u16 * pscsi_status)
 {
-#ifdef DC395x_DEBUG0
-	printk(KERN_INFO DC395X_NAME
-	       ": DC395x_MsgInPhase1..............\n ");
-#endif
+	dprintkdbg(DBG_0, "DC395x_MsgInPhase1..............\n");
 	TRACEPRINTF("MIP1 *");
 	DC395x_clrfifo(pACB, "MIP1");
 	DC395x_write32(TRM_S1040_SCSI_COUNTER, 1);
@@ -4050,14 +4012,10 @@
 	struct DeviceCtlBlk *pDCB;
 	struct ScsiReqBlk *pSRB;
 
-#ifdef DC395x_DEBUG0
-	printk(KERN_INFO DC395X_NAME ": Disconnect (pid=%li)\n",
-	       pACB->pActiveDCB->pActiveSRB->pcmd->pid);
-#endif
+	dprintkdbg(DBG_0, "Disconnect (pid=%li)\n", pACB->pActiveDCB->pActiveSRB->pcmd->pid);
 	pDCB = pACB->pActiveDCB;
 	if (!pDCB) {
-		printk(KERN_ERR DC395X_NAME
-		       ": Disc: Exception Disconnect pDCB=NULL !!\n ");
+		dprintkl(KERN_ERR, "Disc: Exception Disconnect pDCB=NULL !!\n ");
 		udelay(500);
 		/* Suspend queue for a while */
 		pACB->pScsiHost->last_reset =
@@ -4077,8 +4035,7 @@
 	DC395x_clrfifo(pACB, "Disc");
 	DC395x_write16(TRM_S1040_SCSI_CONTROL, DO_HWRESELECT);
 	if (pSRB->SRBState & SRB_UNEXPECT_RESEL) {
-		printk(KERN_ERR DC395X_NAME
-		       ": Disc: Unexpected Reselection (%i-%i)\n",
+		dprintkl(KERN_ERR, "Disc: Unexpected Reselection (%i-%i)\n",
 		       pDCB->TargetID, pDCB->TargetLUN);
 		pSRB->SRBState = 0;
 		DC395x_Waiting_process(pACB);
@@ -4086,7 +4043,7 @@
 		/*Scsi_Cmnd* pcmd = pSRB->pcmd; */
 		pDCB->DCBFlag &= ~ABORT_DEV_;
 		pACB->pScsiHost->last_reset = jiffies + HZ / 2 + 1;
-		printk(KERN_ERR DC395X_NAME ": Disc: SRB_ABORT_SENT!\n");
+		dprintkl(KERN_ERR, "Disc: SRB_ABORT_SENT!\n");
 		DC395x_DoingSRB_Done(pACB, DID_ABORT, pSRB->pcmd, 1);
 		DC395x_Query_to_Waiting(pACB);
 		DC395x_Waiting_process(pACB);
@@ -4102,8 +4059,7 @@
 			if (pSRB->SRBState != SRB_START_
 			    && pSRB->SRBState != SRB_MSGOUT) {
 				pSRB->SRBState = SRB_READY;
-				printk(DC395X_NAME
-				       ": Unexpected Disconnection (pid %li)!\n",
+				dprintkl(KERN_DEBUG, "Unexpected Disconnection (pid %li)!\n",
 				       pSRB->pcmd->pid);
 				pSRB->TargetStatus = SCSI_STAT_SEL_TIMEOUT;
 				TRACEPRINTF("UnExpD *");
@@ -4112,12 +4068,10 @@
 			} else {
 				/* Normal selection timeout */
 				TRACEPRINTF("SlTO *");
-#ifdef DC395x_DEBUG_KG
-				printk(DC395X_NAME
-				       ": Disc: SelTO (pid=%li) for dev %02i-%i\n",
+				dprintkdbg(DBG_KG,
+				       "Disc: SelTO (pid=%li) for dev %02i-%i\n",
 				       pSRB->pcmd->pid, pDCB->TargetID,
 				       pDCB->TargetLUN);
-#endif
 				if (pSRB->RetryCnt++ > DC395x_MAX_RETRIES
 				    || pACB->scan_devices) {
 					pSRB->TargetStatus =
@@ -4126,10 +4080,8 @@
 				}
 				DC395x_freetag(pDCB, pSRB);
 				DC395x_Going_to_Waiting(pDCB, pSRB);
-#ifdef DC395x_DEBUG_KG
-				printk(DC395X_NAME ": Retry pid %li ...\n",
+				dprintkdbg(DBG_KG, "Retry pid %li ...\n",
 				       pSRB->pcmd->pid);
-#endif
 				DC395x_waiting_timer(pACB, HZ / 20);
 			}
 		} else if (pSRB->SRBState & SRB_DISCONNECT) {
@@ -4137,16 +4089,13 @@
 			/*
 			 * SRB_DISCONNECT (This is what we expect!)
 			 */
-			/* printk (DC395X_NAME ": DoWaitingSRB (pid=%li)\n", pSRB->pcmd->pid); */
+			/* dprintkl(KERN_DEBUG, "DoWaitingSRB (pid=%li)\n", pSRB->pcmd->pid); */
 			TRACEPRINTF("+*");
 			if (bval & 0x40) {
-				DEBUG0(printk
-				       (DC395X_NAME
-					": Debug: DISC: SCSI bus stat %02x: ACK set! Other controllers?\n",
+				dprintkdbg(DBG_0, "Debug: DISC: SCSI bus stat %02x: ACK set! Other controllers?\n",
 					bval);
-				    )
-				    /* It could come from another initiator, therefore don't do much ! */
-				    TRACEPRINTF("ACK(%02x) *", bval);
+				/* It could come from another initiator, therefore don't do much ! */
+				TRACEPRINTF("ACK(%02x) *", bval);
 				/*DC395x_dumpinfo (pACB, pDCB, pSRB); */
 				/*TRACEOUT (" %s\n", pSRB->debugtrace); */
 				/*pDCB->DCBFlag |= ABORT_DEV_; */
@@ -4162,7 +4111,7 @@
 			DC395x_freetag(pDCB, pSRB);
 			pDCB->pActiveSRB = 0;
 			pSRB->SRBState = SRB_FREE;
-			/*printk (DC395X_NAME ": done (pid=%li)\n", pSRB->pcmd->pid); */
+			/*dprintkl(KERN_DEBUG, "done (pid=%li)\n", pSRB->pcmd->pid); */
 			DC395x_SRBdone(pACB, pDCB, pSRB);
 		}
 	}
@@ -4184,9 +4133,7 @@
 	u8 id, lun;
 	u8 arblostflag = 0;
 
-#ifdef DC395x_DEBUG0
-	printk(KERN_INFO DC395X_NAME ": DC395x_Reselect..............\n ");
-#endif
+	dprintkdbg(DBG_0, "DC395x_Reselect..............\n");
 
 	DC395x_clrfifo(pACB, "Resel");
 	/*DC395x_write16(TRM_S1040_SCSI_CONTROL, DO_HWRESELECT | DO_DATALATCH); */
@@ -4196,20 +4143,17 @@
 	if (pDCB) {		/* Arbitration lost but Reselection win */
 		pSRB = pDCB->pActiveSRB;
 		if (!pSRB) {
-			printk(DC395X_NAME
-			       ": Arb lost Resel won, but pActiveSRB == 0!\n");
+			dprintkl(KERN_DEBUG, "Arb lost Resel won, but pActiveSRB == 0!\n");
 			DC395x_write16(TRM_S1040_SCSI_CONTROL, DO_DATALATCH);	/* it's important for atn stop */
 			return;
 		}
 		/* Why the if ? */
 		if (!(pACB->scan_devices)) {
-#ifdef DC395x_DEBUG_KG
-			printk(DC395X_NAME
-			       ": Arb lost but Resel win pid %li (%02i-%i) Rsel %04x Stat %04x\n",
+			dprintkdbg(DBG_KG,
+			       "Arb lost but Resel win pid %li (%02i-%i) Rsel %04x Stat %04x\n",
 			       pSRB->pcmd->pid, pDCB->TargetID,
 			       pDCB->TargetLUN, RselTarLunId,
 			       DC395x_read16(TRM_S1040_SCSI_STATUS));
-#endif
 			TRACEPRINTF("ArbLResel!*");
 			/*TRACEOUT (" %s\n", pSRB->debugtrace); */
 			arblostflag = 1;
@@ -4225,15 +4169,13 @@
 	}
 	/* Read Reselected Target Id and LUN */
 	if (!(RselTarLunId & (IDENTIFY_BASE << 8)))
-		printk(DC395X_NAME
-		       ": Resel expects identify msg! Got %04x!\n",
+		dprintkl(KERN_DEBUG, "Resel expects identify msg! Got %04x!\n",
 		       RselTarLunId);
 	id = RselTarLunId & 0xff;
 	lun = (RselTarLunId >> 8) & 7;
 	pDCB = DC395x_findDCB(pACB, id, lun);
 	if (!pDCB) {
-		printk(KERN_ERR DC395X_NAME
-		       ": Reselect from non existing device (%02i-%i)\n",
+		dprintkl(KERN_ERR, "Reselect from non existing device (%02i-%i)\n",
 		       id, lun);
 		DC395x_write16(TRM_S1040_SCSI_CONTROL, DO_DATALATCH);	/* it's important for atn stop */
 		return;
@@ -4242,21 +4184,20 @@
 	pACB->pActiveDCB = pDCB;
 
 	if (!(pDCB->DevMode & NTC_DO_DISCONNECT))
-		printk(DC395X_NAME
-		       ": Reselection in spite of forbidden disconnection? (%02i-%i)\n",
+		dprintkl(KERN_DEBUG, "Reselection in spite of forbidden disconnection? (%02i-%i)\n",
 		       pDCB->TargetID, pDCB->TargetLUN);
 
 	if ((pDCB->SyncMode & EN_TAG_QUEUEING) /*&& !arblostflag */ ) {
 		struct ScsiReqBlk *oldSRB = pSRB;
 		pSRB = pACB->pTmpSRB;
-#ifdef DC395x_DEBUGTRACE
+#if debug_enabled(DBG_TRACE|DBG_TRACEALL)
 		pSRB->debugpos = 0;
 		pSRB->debugtrace[0] = 0;
 #endif
 		pDCB->pActiveSRB = pSRB;
 		if (oldSRB)
 			TRACEPRINTF("ArbLResel(%li):*", oldSRB->pcmd->pid);
-		/*if (arblostflag) printk (DC395X_NAME ": Reselect: Wait for Tag ... \n"); */
+		/*if (arblostflag) dprintkl(KERN_DEBUG, "Reselect: Wait for Tag ... \n"); */
 	} else {
 		/* There can be only one! */
 		pSRB = pDCB->pActiveSRB;
@@ -4266,8 +4207,8 @@
 			/*
 			 * abort command
 			 */
-			printk(DC395X_NAME
-			       ": Reselected w/o disconnected cmds from %02i-%i?\n",
+			dprintkl(KERN_DEBUG,
+			       "Reselected w/o disconnected cmds from %02i-%i?\n",
 			       pDCB->TargetID, pDCB->TargetLUN);
 			pSRB = pACB->pTmpSRB;
 			pSRB->SRBState = SRB_UNEXPECT_RESEL;
@@ -4307,14 +4248,12 @@
 {
 	struct DeviceCtlBlk *pPrevDCB = pACB->pLinkDCB;
 
+	dprintkdbg(DBG_0, "remove_dev\n");
 	if (pDCB->GoingSRBCnt > 1) {
-		DCBDEBUG(printk
-			 (KERN_INFO DC395X_NAME
-			  ": Driver won't free DCB (ID %i, LUN %i): 0x%08x because of SRBCnt %i\n",
+		dprintkdbg(DBG_DCB, "Driver won't free DCB (ID %i, LUN %i): 0x%08x because of SRBCnt %i\n",
 			  pDCB->TargetID, pDCB->TargetLUN, (int) pDCB,
 			  pDCB->GoingSRBCnt);
-		    )
-		    return;
+		return;
 	}
 	pACB->DCBmap[pDCB->TargetID] &= ~(1 << pDCB->TargetLUN);
 	pACB->children[pDCB->TargetID][pDCB->TargetLUN] = NULL;
@@ -4335,19 +4274,16 @@
 			pACB->pLastDCB = pPrevDCB;
 	}
 
-	DCBDEBUG(printk
-		 (KERN_INFO DC395X_NAME
-		  ": Driver about to free DCB (ID %i, LUN %i): %p\n",
+	dprintkdbg(DBG_DCB, "Driver about to free DCB (ID %i, LUN %i): %p\n",
 		  pDCB->TargetID, pDCB->TargetLUN, pDCB);
-	    )
-	    if (pDCB == pACB->pActiveDCB)
+	if (pDCB == pACB->pActiveDCB)
 		pACB->pActiveDCB = 0;
 	if (pDCB == pACB->pLinkDCB)
 		pACB->pLinkDCB = pDCB->pNextDCB;
 	if (pDCB == pACB->pDCBRunRobin)
 		pACB->pDCBRunRobin = pDCB->pNextDCB;
 	pACB->DCBCnt--;
-	KFREE(pDCB);
+	dc395x_kfree(pDCB);
 	/* pACB->DeviceCnt--; */
 }
 
@@ -4414,29 +4350,23 @@
 	dir = scsi_to_pci_dma_dir(pcmd->sc_data_direction);
 	if (pcmd->use_sg && dir != PCI_DMA_NONE) {
 		/* unmap DC395x SG list */
-#ifdef DC395x_SGPARANOIA
-		printk(DC395X_NAME
-		       ": Unmap SG descriptor list %08x (%05x)\n",
+		dprintkdbg(DBG_SGPARANOIA,
+		       "Unmap SG descriptor list %08x (%05x)\n",
 		       pSRB->SRBSGBusAddr,
 		       sizeof(struct SGentry) * DC395x_MAX_SG_LISTENTRY);
-#endif
 		pci_unmap_single(pACB->pdev, pSRB->SRBSGBusAddr,
 				 sizeof(struct SGentry) *
 				 DC395x_MAX_SG_LISTENTRY,
 				 PCI_DMA_TODEVICE);
-#ifdef DC395x_SGPARANOIA
-		printk(DC395X_NAME ": Unmap %i SG segments from %p\n",
+		dprintkdbg(DBG_SGPARANOIA, "Unmap %i SG segments from %p\n",
 		       pcmd->use_sg, pcmd->request_buffer);
-#endif
 		/* unmap the sg segments */
 		pci_unmap_sg(pACB->pdev,
 			     (struct scatterlist *) pcmd->request_buffer,
 			     pcmd->use_sg, dir);
 	} else if (pcmd->request_buffer && dir != PCI_DMA_NONE) {
-#ifdef DC395x_SGPARANOIA
-		printk(DC395X_NAME ": Unmap buffer at %08x (%05x)\n",
+		dprintkdbg(DBG_SGPARANOIA, "Unmap buffer at %08x (%05x)\n",
 		       pSRB->SegmentX[0].address, pcmd->request_bufflen);
-#endif
 		pci_unmap_single(pACB->pdev, pSRB->SegmentX[0].address,
 				 pcmd->request_bufflen, dir);
 	}
@@ -4454,10 +4384,8 @@
 	if (!(pSRB->SRBFlag & AUTO_REQSENSE))
 		return;
 	/* Unmap sense buffer */
-#ifdef DC395x_SGPARANOIA
-	printk(DC395X_NAME ": Unmap sense buffer from %08x (%05x)\n",
-	       pSRB->SegmentX[0].address, sizeof(pcmd->sense_buffer));
-#endif
+	dprintkdbg(DBG_SGPARANOIA, "Unmap sense buffer from %08x\n",
+	       pSRB->SegmentX[0].address);
 	pci_unmap_single(pACB->pdev, pSRB->SegmentX[0].address,
 			 pSRB->SegmentX[0].length, PCI_DMA_FROMDEVICE);
 	/* Restore SG stuff */
@@ -4497,22 +4425,16 @@
 		ptr =
 		    (struct ScsiInqData *) CPU_ADDR(*(struct scatterlist *)
 						    ptr);
-#ifdef DC395x_SGPARANOIA
-	printk(KERN_INFO DC395X_NAME
-	       ": SRBdone SG=%i (%i/%i), req_buf = %p, adr = %p\n",
+	dprintkdbg(DBG_SGPARANOIA, 
+	       "SRBdone SG=%i (%i/%i), req_buf = %p, adr = %p\n",
 	       pcmd->use_sg, pSRB->SRBSGIndex, pSRB->SRBSGCount,
 	       pcmd->request_buffer, ptr);
-#endif
-#ifdef DC395x_DEBUG_KG
-	printk(KERN_INFO DC395X_NAME
-	       ": SRBdone (pid %li, target %02i-%i): ", pSRB->pcmd->pid,
+	dprintkdbg(DBG_KG,
+	       "SRBdone (pid %li, target %02i-%i): ", pSRB->pcmd->pid,
 	       pSRB->pcmd->device->id, pSRB->pcmd->device->lun);
-#endif
 	status = pSRB->TargetStatus;
 	if (pSRB->SRBFlag & AUTO_REQSENSE) {
-#ifdef DC395x_DEBUG0
-		printk(KERN_INFO "AUTO_REQSENSE1..............\n ");
-#endif
+		dprintkdbg(DBG_0, "AUTO_REQSENSE1..............\n");
 		DC395x_pci_unmap_sense(pACB, pSRB);
 		/*
 		 ** target status..........................
@@ -4520,60 +4442,58 @@
 		pSRB->SRBFlag &= ~AUTO_REQSENSE;
 		pSRB->AdaptStatus = 0;
 		pSRB->TargetStatus = CHECK_CONDITION << 1;
-#ifdef DC395x_DEBUG_KG
-		switch (pcmd->sense_buffer[2] & 0x0f) {
-		case NOT_READY:
-			printk
-			    ("\nDC395x:  ReqSense: NOT_READY (Cmnd = 0x%02x, Dev = %i-%i, Stat = %i, Scan = %i) ",
-			     pcmd->cmnd[0], pDCB->TargetID,
-			     pDCB->TargetLUN, status, pACB->scan_devices);
-			break;
-		case UNIT_ATTENTION:
-			printk
-			    ("\nDC395x:  ReqSense: UNIT_ATTENTION (Cmnd = 0x%02x, Dev = %i-%i, Stat = %i, Scan = %i) ",
-			     pcmd->cmnd[0], pDCB->TargetID,
-			     pDCB->TargetLUN, status, pACB->scan_devices);
-			break;
-		case ILLEGAL_REQUEST:
-			printk
-			    ("\nDC395x:  ReqSense: ILLEGAL_REQUEST (Cmnd = 0x%02x, Dev = %i-%i, Stat = %i, Scan = %i) ",
-			     pcmd->cmnd[0], pDCB->TargetID,
-			     pDCB->TargetLUN, status, pACB->scan_devices);
-			break;
-		case MEDIUM_ERROR:
-			printk
-			    ("\nDC395x:  ReqSense: MEDIUM_ERROR (Cmnd = 0x%02x, Dev = %i-%i, Stat = %i, Scan = %i) ",
-			     pcmd->cmnd[0], pDCB->TargetID,
-			     pDCB->TargetLUN, status, pACB->scan_devices);
-			break;
-		case HARDWARE_ERROR:
-			printk
-			    ("\nDC395x:  ReqSense: HARDWARE_ERROR (Cmnd = 0x%02x, Dev = %i-%i, Stat = %i, Scan = %i) ",
-			     pcmd->cmnd[0], pDCB->TargetID,
-			     pDCB->TargetLUN, status, pACB->scan_devices);
-			break;
+		if (debug_enabled(DBG_KG)) {
+			switch (pcmd->sense_buffer[2] & 0x0f) {
+			case NOT_READY:
+				dprintkl(KERN_DEBUG,
+				     "ReqSense: NOT_READY (Cmnd = 0x%02x, Dev = %i-%i, Stat = %i, Scan = %i) ",
+				     pcmd->cmnd[0], pDCB->TargetID,
+				     pDCB->TargetLUN, status, pACB->scan_devices);
+				break;
+			case UNIT_ATTENTION:
+				dprintkl(KERN_DEBUG,
+				     "ReqSense: UNIT_ATTENTION (Cmnd = 0x%02x, Dev = %i-%i, Stat = %i, Scan = %i) ",
+				     pcmd->cmnd[0], pDCB->TargetID,
+				     pDCB->TargetLUN, status, pACB->scan_devices);
+				break;
+			case ILLEGAL_REQUEST:
+				dprintkl(KERN_DEBUG,
+				     "ReqSense: ILLEGAL_REQUEST (Cmnd = 0x%02x, Dev = %i-%i, Stat = %i, Scan = %i) ",
+				     pcmd->cmnd[0], pDCB->TargetID,
+				     pDCB->TargetLUN, status, pACB->scan_devices);
+				break;
+			case MEDIUM_ERROR:
+				dprintkl(KERN_DEBUG,
+				     "ReqSense: MEDIUM_ERROR (Cmnd = 0x%02x, Dev = %i-%i, Stat = %i, Scan = %i) ",
+				     pcmd->cmnd[0], pDCB->TargetID,
+				     pDCB->TargetLUN, status, pACB->scan_devices);
+				break;
+			case HARDWARE_ERROR:
+				dprintkl(KERN_DEBUG,
+				     "ReqSense: HARDWARE_ERROR (Cmnd = 0x%02x, Dev = %i-%i, Stat = %i, Scan = %i) ",
+				     pcmd->cmnd[0], pDCB->TargetID,
+				     pDCB->TargetLUN, status, pACB->scan_devices);
+				break;
+			}
+			if (pcmd->sense_buffer[7] >= 6)
+				dprintkl(KERN_DEBUG, 
+				     "Sense=%02x, ASC=%02x, ASCQ=%02x (%08x %08x) ",
+				     pcmd->sense_buffer[2], pcmd->sense_buffer[12],
+				     pcmd->sense_buffer[13],
+				     *((unsigned int *) (pcmd->sense_buffer + 3)),
+				     *((unsigned int *) (pcmd->sense_buffer + 8)));
+			else
+				dprintkl(KERN_DEBUG,
+				     "Sense=%02x, No ASC/ASCQ (%08x) ",
+				     pcmd->sense_buffer[2],
+				     *((unsigned int *) (pcmd->sense_buffer + 3)));
 		}
-		if (pcmd->sense_buffer[7] >= 6)
-			printk
-			    ("\nDC395x:  Sense=%02x, ASC=%02x, ASCQ=%02x (%08x %08x) ",
-			     pcmd->sense_buffer[2], pcmd->sense_buffer[12],
-			     pcmd->sense_buffer[13],
-			     *((unsigned int *) (pcmd->sense_buffer + 3)),
-			     *((unsigned int *) (pcmd->sense_buffer + 8)));
-		else
-			printk
-			    ("\nDC395x:  Sense=%02x, No ASC/ASCQ (%08x) ",
-			     pcmd->sense_buffer[2],
-			     *((unsigned int *) (pcmd->sense_buffer + 3)));
-#endif
 
 		if (status == (CHECK_CONDITION << 1)) {
 			pcmd->result = DID_BAD_TARGET << 16;
 			goto ckc_e;
 		}
-#ifdef DC395x_DEBUG0
-		printk(KERN_INFO "AUTO_REQSENSE2..............\n ");
-#endif
+		dprintkdbg(DBG_0, "AUTO_REQSENSE2..............\n");
 
 		if ((pSRB->SRBTotalXferLength)
 		    && (pSRB->SRBTotalXferLength >= pcmd->underflow))
@@ -4680,28 +4600,24 @@
 	/* This may be interpreted by sb. or not ... */
 	pcmd->SCp.this_residual = pSRB->SRBTotalXferLength;
 	pcmd->SCp.buffers_residual = 0;
-#ifdef DC395x_DEBUG_KG
-	if (pSRB->SRBTotalXferLength)
-		printk
-		    ("\nDC395x:  pid %li: %02x (%02i-%i): Missed %i bytes\n",
-		     pcmd->pid, pcmd->cmnd[0], pcmd->device->id,
-		     pcmd->device->lun, pSRB->SRBTotalXferLength);
-#endif
+	if (debug_enabled(DBG_KG)) {
+		if (pSRB->SRBTotalXferLength)
+			dprintkdbg(DBG_KG, "pid %li: %02x (%02i-%i): Missed %i bytes\n",
+			     pcmd->pid, pcmd->cmnd[0], pcmd->device->id,
+			     pcmd->device->lun, pSRB->SRBTotalXferLength);
+	}
 
 	DC395x_Going_remove(pDCB, pSRB, 0);
 	/* Add to free list */
 	if (pSRB == pACB->pTmpSRB)
-		printk("\nDC395x:  ERROR! Completed Cmnd with TmpSRB!\n");
+		dprintkl(KERN_ERR, "ERROR! Completed Cmnd with TmpSRB!\n");
 	else
 		DC395x_Free_insert(pACB, pSRB);
 
-	DEBUG0(printk
-	       (KERN_DEBUG DC395X_NAME ":  SRBdone: done pid %li\n",
-		pcmd->pid);
-	    )
-#ifdef DC395x_DEBUG_KG
-	    printk(" 0x%08x\n", pcmd->result);
-#endif
+	dprintkdbg(DBG_0, "SRBdone: done pid %li\n", pcmd->pid);
+	if (debug_enabled(DBG_KG)) {
+		printk(" 0x%08x\n", pcmd->result);
+	}
 	TRACEPRINTF("%08x(%li)*", pcmd->result, jiffies);
 	DC395x_pci_unmap(pACB, pSRB);
 	/*DC395x_UNLOCK_ACB_NI; */
@@ -4735,7 +4651,7 @@
 	pDCB = pACB->pLinkDCB;
 	if (!pDCB)
 		return;
-	printk(KERN_INFO DC395X_NAME ": DC395x_DoingSRB_Done: pids ");
+	dprintkl(KERN_INFO, "DC395x_DoingSRB_Done: pids ");
 	do {
 		/* As the ML may queue cmnds again, cache old values */
 		struct ScsiReqBlk *pWaitingSRB = pDCB->pWaitingSRB;
@@ -4779,12 +4695,12 @@
 			pSRB = pSRBTemp;
 		}
 		if (pDCB->pGoingSRB)
-			printk(DC395X_NAME
-			       ": How could the ML send cmnds to the Going queue? (%02i-%i)!!\n",
+			dprintkl(KERN_DEBUG, 
+			       "How could the ML send cmnds to the Going queue? (%02i-%i)!!\n",
 			       pDCB->TargetID, pDCB->TargetLUN);
 		if (pDCB->TagMask)
-			printk(DC395X_NAME
-			       ": TagMask for %02i-%i should be empty, is %08x!\n",
+			dprintkl(KERN_DEBUG,
+			       "TagMask for %02i-%i should be empty, is %08x!\n",
 			       pDCB->TargetID, pDCB->TargetLUN,
 			       pDCB->TagMask);
 		/*pDCB->GoingSRBCnt = 0;; */
@@ -4850,10 +4766,7 @@
 {
 	/*u32  drv_flags=0; */
 
-#ifdef DC395x_DEBUG0
-	printk(KERN_INFO DC395X_NAME
-	       ": DC395x_ResetSCSIBus..............\n ");
-#endif
+	dprintkdbg(DBG_0, "DC395x_ResetSCSIBus..............\n");
 
 	/*DC395x_DRV_LOCK(drv_flags); */
 	pACB->ACBFlag |= RESET_DEV;	/* RESET_DETECT, RESET_DONE, RESET_DEV */
@@ -4892,7 +4805,7 @@
 	wval = DC395x_read16(TRM_S1040_DMA_CONFIG) & ~DMA_FIFO_CTRL;
 	wval |=
 	    DMA_FIFO_HALF_HALF | DMA_ENHANCE /*| DMA_MEM_MULTI_READ */ ;
-	/*printk (KERN_INFO DC395X_NAME "DMA_Config: %04x\n", wval); */
+	/*dprintkl(KERN_INFO, "DMA_Config: %04x\n", wval); */
 	DC395x_write16(TRM_S1040_DMA_CONFIG, wval);
 	/* Clear pending interrupt status */
 	DC395x_read8(TRM_S1040_SCSI_INTSTATUS);
@@ -4912,7 +4825,7 @@
  */
 static void DC395x_ScsiRstDetect(struct AdapterCtlBlk *pACB)
 {
-	printk(KERN_INFO DC395X_NAME ": DC395x_ScsiRstDetect\n");
+	dprintkl(KERN_INFO, "DC395x_ScsiRstDetect\n");
 	/* delay half a second */
 	if (timer_pending(&pACB->Waiting_Timer))
 		del_timer(&pACB->Waiting_Timer);
@@ -4960,11 +4873,9 @@
 	Scsi_Cmnd *pcmd;
 
 	pcmd = pSRB->pcmd;
-#ifdef DC395x_DEBUG_KG
-	printk(KERN_INFO DC395X_NAME
-	       ": DC395x_RequestSense for pid %li, target %02i-%i\n",
+	dprintkdbg(DBG_KG,
+	       "DC395x_RequestSense for pid %li, target %02i-%i\n",
 	       pcmd->pid, pcmd->device->id, pcmd->device->lun);
-#endif
 	TRACEPRINTF("RqSn*");
 	pSRB->SRBFlag |= AUTO_REQSENSE;
 	pSRB->AdaptStatus = 0;
@@ -4986,17 +4897,15 @@
 	pSRB->SegmentX[0].address =
 	    pci_map_single(pACB->pdev, pcmd->sense_buffer,
 			   sizeof(pcmd->sense_buffer), PCI_DMA_FROMDEVICE);
-#ifdef DC395x_SGPARANOIA
-	printk(DC395X_NAME ": Map sense buffer at %p (%05x) to %08x\n",
+	dprintkdbg(DBG_SGPARANOIA, "Map sense buffer at %p (%05x) to %08x\n",
 	       pcmd->sense_buffer, sizeof(pcmd->sense_buffer),
 	       pSRB->SegmentX[0].address);
-#endif
 	pSRB->SRBSGCount = 1;
 	pSRB->SRBSGIndex = 0;
 
 	if (DC395x_StartSCSI(pACB, pDCB, pSRB)) {	/* Should only happen, if sb. else grabs the bus */
-		printk(DC395X_NAME
-		       ": Request Sense failed for pid %li (%02i-%i)!\n",
+		dprintkl(KERN_DEBUG,
+		       "Request Sense failed for pid %li (%02i-%i)!\n",
 		       pSRB->pcmd->pid, pDCB->TargetID, pDCB->TargetLUN);
 		TRACEPRINTF("?*");
 		DC395x_Going_to_Waiting(pDCB, pSRB);
@@ -5025,10 +4934,8 @@
 	struct DeviceCtlBlk *pDCB;
 	struct DeviceCtlBlk *pDCB2;
 
-#ifdef DC395x_DEBUG0
-	printk(KERN_INFO DC395X_NAME ": DC395x_initDCB..............\n ");
-#endif
-	pDCB = KMALLOC(sizeof(struct DeviceCtlBlk), GFP_ATOMIC);
+	dprintkdbg(DBG_0, "DC395x_initDCB..............\n");
+	pDCB = dc395x_kmalloc(sizeof(struct DeviceCtlBlk), GFP_ATOMIC);
 	/*pDCB = DC395x_findDCB (pACB, target, lun); */
 	*ppDCB = pDCB;
 	pDCB2 = 0;
@@ -5098,12 +5005,10 @@
 		struct DeviceCtlBlk *prevDCB = pACB->pLinkDCB;
 		while (prevDCB->TargetID != pDCB->TargetID)
 			prevDCB = prevDCB->pNextDCB;
-#ifdef DC395x_DEBUG_KG
-		printk(DC395X_NAME
-		       ": Copy settings from %02i-%02i to %02i-%02i\n",
+		dprintkdbg(DBG_KG,
+		       "Copy settings from %02i-%02i to %02i-%02i\n",
 		       prevDCB->TargetID, prevDCB->TargetLUN,
 		       pDCB->TargetID, pDCB->TargetLUN);
-#endif
 		pDCB->SyncMode = prevDCB->SyncMode;
 		pDCB->SyncPeriod = prevDCB->SyncPeriod;
 		pDCB->MinNegoPeriod = prevDCB->MinNegoPeriod;
@@ -5116,18 +5021,18 @@
 }
 
 
-/* Dynamically allocated memory handling */
-
-#ifdef DC395x_DEBUGTRACE
-/* Memory for trace buffers */
+#if debug_enabled(DBG_TRACE|DBG_TRACEALL)
+/*
+ * Memory for trace buffers
+ */
 void DC395x_free_tracebufs(struct AdapterCtlBlk *pACB, int SRBIdx)
 {
 	int srbidx;
 	const unsigned bufs_per_page = PAGE_SIZE / DEBUGTRACEBUFSZ;
 	for (srbidx = 0; srbidx < SRBIdx; srbidx += bufs_per_page) {
-		/*printk (DC395X_NAME ": Free tracebuf %p (for %i)\n", */
+		/*dprintkl(KERN_DEBUG, "Free tracebuf %p (for %i)\n", */
 		/*      pACB->SRB_array[srbidx].debugtrace, srbidx); */
-		KFREE(pACB->SRB_array[srbidx].debugtrace);
+		dc395x_kfree(pACB->SRB_array[srbidx].debugtrace);
 	}
 }
 
@@ -5141,14 +5046,14 @@
 	int SRBIdx = 0;
 	unsigned i = 0;
 	unsigned char *ptr;
-	/*printk (DC395X_NAME ": Alloc %i pages for tracebufs\n", pages); */
+	/*dprintkl(KERN_DEBUG, "Alloc %i pages for tracebufs\n", pages); */
 	while (pages--) {
-		ptr = KMALLOC(PAGE_SIZE, GFP_KERNEL);
+		ptr = dc395x_kmalloc(PAGE_SIZE, GFP_KERNEL);
 		if (!ptr) {
 			DC395x_free_tracebufs(pACB, SRBIdx);
 			return 1;
 		}
-		/*printk (DC395X_NAME ": Alloc %li bytes at %p for tracebuf %i\n", */
+		/*dprintkl(KERN_DEBUG, "Alloc %li bytes at %p for tracebuf %i\n", */
 		/*      PAGE_SIZE, ptr, SRBIdx); */
 		i = 0;
 		while (i < bufs_per_page && SRBIdx < DC395x_MAX_SRB_CNT)
@@ -5159,23 +5064,23 @@
 		pACB->TmpSRB.debugtrace = ptr + (i * DEBUGTRACEBUFSZ);
 		pACB->TmpSRB.debugtrace[0] = 0;
 	} else
-		printk(DC395X_NAME
-		       ": No space for tmpSRB tracebuf reserved?!\n");
+		dprintkl(KERN_DEBUG, "No space for tmpSRB tracebuf reserved?!\n");
 	return 0;
 }
 #endif
 
 
 /* Free SG tables */
+static
 void DC395x_free_SG_tables(struct AdapterCtlBlk *pACB, int SRBIdx)
 {
 	int srbidx;
 	const unsigned SRBs_per_page =
 	    PAGE_SIZE / (DC395x_MAX_SG_LISTENTRY * sizeof(struct SGentry));
 	for (srbidx = 0; srbidx < SRBIdx; srbidx += SRBs_per_page) {
-		/*printk (DC395X_NAME ": Free SG segs %p (for %i)\n", */
+		/*dprintkl(KERN_DEBUG, "Free SG segs %p (for %i)\n", */
 		/*      pACB->SRB_array[srbidx].SegmentX, srbidx); */
-		KFREE(pACB->SRB_array[srbidx].SegmentX);
+		dc395x_kfree(pACB->SRB_array[srbidx].SegmentX);
 	}
 }
 
@@ -5194,14 +5099,14 @@
 	int SRBIdx = 0;
 	unsigned i = 0;
 	struct SGentry *ptr;
-	/*printk (DC395X_NAME ": Alloc %i pages for SG tables\n", pages); */
+	/*dprintkl(KERN_DEBUG, "Alloc %i pages for SG tables\n", pages); */
 	while (pages--) {
-		ptr = (struct SGentry *) KMALLOC(PAGE_SIZE, GFP_KERNEL);
+		ptr = (struct SGentry *) dc395x_kmalloc(PAGE_SIZE, GFP_KERNEL);
 		if (!ptr) {
 			DC395x_free_SG_tables(pACB, SRBIdx);
 			return 1;
 		}
-		/*printk (DC395X_NAME ": Alloc %li bytes at %p for SG segments %i\n", */
+		/*dprintkl(KERN_DEBUG, "Alloc %li bytes at %p for SG segments %i\n", */
 		/*      PAGE_SIZE, ptr, SRBIdx); */
 		i = 0;
 		while (i < SRBs_per_page && SRBIdx < DC395x_MAX_SRB_CNT)
@@ -5212,8 +5117,7 @@
 		pACB->TmpSRB.SegmentX =
 		    ptr + (i * DC395x_MAX_SG_LISTENTRY);
 	else
-		printk(DC395X_NAME
-		       ": No space for tmpSRB SG table reserved?!\n");
+		dprintkl(KERN_DEBUG, "No space for tmpSRB SG table reserved?!\n");
 	return 0;
 }
 
@@ -5306,13 +5210,12 @@
 	 * link all device's SRB Q of this adapter 
 	 */
 	if (DC395x_alloc_SG_tables(pACB)) {
-		printk(DC395X_NAME ": SG table allocation failed!\n");
+		dprintkl(KERN_DEBUG, "SG table allocation failed!\n");
 		return 1;
 	}
-#ifdef DC395x_DEBUGTRACE
+#if debug_enabled(DBG_TRACE|DBG_TRACEALL)
 	if (DC395x_alloc_tracebufs(pACB)) {
-		printk(DC395X_NAME
-		       ": SG trace buffer allocation failed!\n");
+		dprintkl(KERN_DEBUG, "SG trace buffer allocation failed!\n");
 		DC395x_free_SG_tables(pACB, DC395x_MAX_SRB_CNT);
 		return 1;
 	}
@@ -5329,15 +5232,11 @@
 
 	for (i = 0; i < DC395x_MAX_SCSI_ID; i++)
 		pACB->DCBmap[i] = 0;
-#ifdef DC395x_DEBUG0
-	printk(KERN_INFO DC395X_NAME
-	       ": pACB = %p, pDCBmap = %p, pSRB_array = %p\n", pACB,
+	dprintkdbg(DBG_0, "pACB = %p, pDCBmap = %p, pSRB_array = %p\n", pACB,
 	       pACB->DCBmap, pACB->SRB_array);
-	printk(KERN_INFO DC395X_NAME
-	       ": ACB size= %04lx, DCB size= %04lx, SRB size= %04lx\n",
+	dprintkdbg(DBG_0, "ACB size= %04x, DCB size= %04x, SRB size= %04x\n",
 	       sizeof(struct AdapterCtlBlk), sizeof(struct DeviceCtlBlk),
 	       sizeof(struct ScsiReqBlk));
-#endif
 	return 0;
 }
 
@@ -5374,16 +5273,14 @@
 	}
 
 	if (!request_region(io_port, host->n_io_port, DC395X_NAME)) {
-		printk(KERN_ERR DC395X_NAME
-		       ": Failed to reserve IO region 0x%x\n", io_port);
+		dprintkl(KERN_ERR, "Failed to reserve IO region 0x%x\n", io_port);
 		return -1;
 	}
 	if (!used_irq) {
 		if (request_irq
 		    (irq, DC395x_Interrupt, SA_SHIRQ, DC395X_NAME,
 		     (void *) host->hostdata)) {
-			printk(KERN_INFO DC395X_NAME
-			       ": Failed to register IRQ!\n");
+			dprintkl(KERN_INFO, "Failed to register IRQ!\n");
 			return -1;
 		}
 	}
@@ -5414,8 +5311,7 @@
 		pACB->Config |= HCC_SCSI_RESET;
 
 	if (pACB->Config & HCC_SCSI_RESET) {
-		printk(KERN_INFO DC395X_NAME
-		       ": Performing initial SCSI bus reset\n");
+		dprintkl(KERN_INFO, "Performing initial SCSI bus reset\n");
 		DC395x_write8(TRM_S1040_SCSI_CONTROL, DO_RSTSCSI);
 
 		/*while (!( DC395x_read8(TRM_S1040_SCSI_INTSTATUS) & INT_SCSIRESET )); */
@@ -5691,11 +5587,11 @@
 		cksum += *w_eeprom;
 	if (cksum != 0x1234) {
 		/*
-		 * Checksum is wrong. 
+		 * Checksum is wrong.
 		 * Load a set of defaults into the eeprom buffer
 		 */
-		printk(KERN_WARNING DC395X_NAME
-		       ": EEProm checksum error: using default values and options.\n");
+		dprintkl(KERN_WARNING,
+		       "EEProm checksum error: using default values and options.\n");
 		eeprom->NvramSubVendorID[0] = (u8) PCI_VENDOR_ID_TEKRAM;
 		eeprom->NvramSubVendorID[1] =
 		    (u8) (PCI_VENDOR_ID_TEKRAM >> 8);
@@ -5723,8 +5619,8 @@
 			*d_eeprom = 0x00;
 
 		/* Now load defaults (maybe set by boot/module params) */
-		DC395x_check_for_safe_settings();
-		DC395x_fill_with_defaults();
+		set_safe_settings();
+		fix_settings();
 		DC395x_EEprom_Override(eeprom);
 
 		eeprom->NvramCheckSum = 0x00;
@@ -5734,16 +5630,16 @@
 
 		*w_eeprom = 0x1234 - cksum;
 		TRM_S1040_write_all(eeprom, io_port);
-		eeprom->NvramDelayTime = dc395x_trm[5];
+		eeprom->NvramDelayTime = cfg_data[CFG_RESET_DELAY].value;
 	} else {
-		DC395x_check_for_safe_settings();
-		DC395x_interpret_delay(eeprom);
+		set_safe_settings();
+		eeprom_index_to_delay(eeprom);
 		DC395x_EEprom_Override(eeprom);
 	}
 }
 
 
-/* 
+/*
  * adapter - print connection and terminiation config
  *
  * @param pACB - adapter control block
@@ -5753,7 +5649,7 @@
 	u8 bval;
 
 	bval = DC395x_read8(TRM_S1040_GEN_STATUS);
-	printk(KERN_INFO DC395X_NAME "%c: Connectors: ",
+	dprintkl(KERN_INFO, "%c: Connectors: ",
 	       ((bval & WIDESCSI) ? 'W' : ' '));
 	if (!(bval & CON5068))
 		printk("ext%s ", !(bval & EXT68HIGH) ? "68" : "50");
@@ -5780,6 +5676,29 @@
 }
 
 
+/**
+ * DC395x_print_eeprom_settings - output the eeprom settings
+ * to the kernel log so people can see what they were.
+ *
+ * @index: Adapter number
+ **/
+static void __init
+DC395x_print_eeprom_settings(u16 index)
+{
+	dprintkl(KERN_INFO, "Used settings: AdapterID=%02i, Speed=%i(%02i.%01iMHz), DevMode=0x%02x\n",
+	       dc395x_trm_eepromBuf[index].NvramScsiId,
+	       dc395x_trm_eepromBuf[index].NvramTarget[0].NvmTarPeriod,
+	       dc395x_clock_speed[dc395x_trm_eepromBuf[index].NvramTarget[0].NvmTarPeriod] / 10,
+	       dc395x_clock_speed[dc395x_trm_eepromBuf[index].NvramTarget[0].NvmTarPeriod] % 10,
+	       dc395x_trm_eepromBuf[index].NvramTarget[0].NvmTarCfg0);
+	dprintkl(KERN_INFO, "               AdaptMode=0x%02x, Tags=%i(%02i), DelayReset=%is\n",
+	       dc395x_trm_eepromBuf[index].NvramChannelCfg,
+	       dc395x_trm_eepromBuf[index].NvramMaxTag,
+	       1 << dc395x_trm_eepromBuf[index].NvramMaxTag,
+	       dc395x_trm_eepromBuf[index].NvramDelayTime);
+}
+
+
 /*
  *********************************************************************
  *			DC395x_detect
@@ -5804,124 +5723,44 @@
 	 */
 	DC395x_check_eeprom(&dc395x_trm_eepromBuf[index], (u16) io_port);
 
-	/*$$$$$$$$$$$  MEMORY ALLOCATE FOR ADAPTER CONTROL BLOCK $$$$$$$$$$$$ */
+	/*
+	 *$$$$$$$$$$$  MEMORY ALLOCATE FOR ADAPTER CONTROL BLOCK $$$$$$$$$$$$
+	 */
 	host = scsi_register(host_template, sizeof(struct AdapterCtlBlk));
 	if (!host) {
-		printk(KERN_INFO DC395X_NAME
-		       " : pSH scsi_register ERROR\n");
+		dprintkl(KERN_INFO, "pSH scsi_register ERROR\n");
 		return 0;
 	}
-	printk(KERN_INFO DC395X_NAME
-	       ": Used settings: AdapterID=%02i, Speed=%i(%02i.%01iMHz), DevMode=0x%02x\n",
-	       dc395x_trm_eepromBuf[index].NvramScsiId,
-	       dc395x_trm_eepromBuf[index].NvramTarget[0].NvmTarPeriod,
-	       dc395x_clock_speed[dc395x_trm_eepromBuf[index].
-				  NvramTarget[0].NvmTarPeriod] / 10,
-	       dc395x_clock_speed[dc395x_trm_eepromBuf[index].
-				  NvramTarget[0].NvmTarPeriod] % 10,
-	       dc395x_trm_eepromBuf[index].NvramTarget[0].NvmTarCfg0);
-	printk(KERN_INFO DC395X_NAME
-	       ":      AdaptMode=0x%02x, Tags=%i(%02i), DelayReset=%is\n",
-	       dc395x_trm_eepromBuf[index].NvramChannelCfg,
-	       dc395x_trm_eepromBuf[index].NvramMaxTag,
-	       1 << dc395x_trm_eepromBuf[index].NvramMaxTag,
-	       dc395x_trm_eepromBuf[index].NvramDelayTime);
+	DC395x_print_eeprom_settings(index);
 
 	pACB = (struct AdapterCtlBlk *) host->hostdata;
-	/*DC395x_ACB_INITLOCK(pACB); */
-	/*DC395x_ACB_LOCK(pACB,acb_flags); */
-	/*$$$$$$$$ INITIAL ADAPTER CONTROL BLOCK $$$$$$$$$$$$ */
+
 	if (DC395x_initACB(host, io_port, irq, index)) {
 		scsi_unregister(host);
-		/*DC395x_ACB_UNLOCK(pACB,acb_flags); */
 		return 0;
 	}
 	DC395x_print_config(pACB);
-	/*$$$$$$$$$$$$$$$$$ INITIAL ADAPTER $$$$$$$$$$$$$$$$$ */
+
+       /*
+        *$$$$$$$$$$$$$$$$$ INITIAL ADAPTER $$$$$$$$$$$$$$$$$
+        */
 	if (!DC395x_initAdapter(host, io_port, irq, index)) {
 		if (!DC395x_pACB_start) {
 			DC395x_pACB_start = pACB;
-			DC395x_pACB_current = pACB;
-			pACB->pNextACB = NULL;
 		} else {
 			DC395x_pACB_current->pNextACB = pACB;
-			DC395x_pACB_current = pACB;
-			pACB->pNextACB = NULL;
 		}
-		/*DC395x_ACB_UNLOCK(pACB,acb_flags); */
-		return host;
+		DC395x_pACB_current = pACB;
+		pACB->pNextACB = NULL;
+
 	} else {
-		printk(KERN_INFO DC395X_NAME
-		       ": DC395x_initAdapter initial ERROR\n");
+		dprintkl(KERN_INFO, "DC395x_initAdapter initial ERROR\n");
 		scsi_unregister(host);
-		/*DC395x_ACB_UNLOCK(pACB,acb_flags); */
-		return 0;
-	}
-}
-
-
-/*
- * DC395x_detect
- *
- * Detect TRM-S1040 cards, acquire resources and initialise the card.
- * Argument is a pointer to the host driver's scsi_hosts entry.
- *
- * Returns the number of adapters found.
- *
- * This function is called during system initialization and must not
- * call SCSI mid-level functions including scsi_malloc() and
- * scsi_free().
- */
-static int __init DC395x_detect(Scsi_Host_Template * host_template)
-{
-	struct pci_dev *pdev = NULL;
-	unsigned int io_port;
-	u8 irq;
-	DC395x_pACB_start = NULL;
-
-	/* without PCI we cannot do anything */
-	if (pci_present() == 0) {
-		printk(KERN_INFO DC395X_NAME ": PCI not present\n");
-		return 0;
+		host = NULL;
 	}
-	printk(KERN_INFO DC395X_NAME ": %s %s\n", DC395X_BANNER,
-	       DC395X_VERSION);
-
-	while ((pdev =
-		pci_find_device(PCI_VENDOR_ID_TEKRAM,
-				PCI_DEVICE_ID_TEKRAM_TRMS1040, pdev))) {
-		struct Scsi_Host *scsi_host;
-		if (pci_enable_device(pdev))
-			continue;
-
-		io_port =
-		    pci_resource_start(pdev, 0) & PCI_BASE_ADDRESS_IO_MASK;
-		irq = pdev->irq;
-#ifdef DC395x_DEBUG0
-		printk(KERN_INFO DC395X_NAME ": IO_PORT=%04x,IRQ=%x\n",
-		       (unsigned int) io_port, irq);
-#endif
-		if ((scsi_host =
-		     DC395x_init(host_template, io_port, irq,
-				 DC395x_adapterCnt))) {
-			pci_set_master(pdev);
-			((struct AdapterCtlBlk *) (scsi_host->hostdata))->
-			    pdev = pdev;
-			/*DC395x_set_pci_cfg(pdev); */
-			DC395x_adapterCnt++;
-		}
-	}
-
-	if (DC395x_adapterCnt) {
-		host_template->proc_name = DC395X_NAME;
-	}
-	printk(KERN_INFO DC395X_NAME ": %s: %i adapters found\n",
-	       DC395X_BANNER, DC395x_adapterCnt);
-
-	return DC395x_adapterCnt;
+	return host;
 }
 
-
 /*
  * Functions: DC395x_inquiry(), DC395x_inquiry_done()
  *
@@ -5935,11 +5774,11 @@
 	    (struct AdapterCtlBlk *) cmd->device->host->hostdata;
 	struct DeviceCtlBlk *pDCB =
 	    DC395x_findDCB(pACB, cmd->device->id, cmd->device->lun);
-#ifdef DC395x_DEBUGTRACE
+#if debug_enabled(DBG_TRACE|DBG_TRACEALL)
 	struct ScsiReqBlk *pSRB = pACB->pFreeSRB;
 #endif
-	printk(KERN_INFO DC395X_NAME
-	       ": INQUIRY (%02i-%i) returned %08x: %02x %02x %02x %02x ...\n",
+	dprintkl(KERN_INFO,
+	       "INQUIRY (%02i-%i) returned %08x: %02x %02x %02x %02x ...\n",
 	       cmd->device->id, cmd->device->lun, cmd->result,
 	       ((u8 *) cmd->request_buffer)[0],
 	       ((u8 *) cmd->request_buffer)[1],
@@ -5947,7 +5786,7 @@
 	       ((u8 *) cmd->request_buffer)[3]);
 	/*TRACEOUT ("%s\n", pSRB->debugtrace); */
 	if (cmd->result) {
-		printk(DC395X_NAME ": Unsetting Wide, Sync and TagQ!\n");
+		dprintkl(KERN_INFO, "Unsetting Wide, Sync and TagQ!\n");
 		if (pDCB) {
 			TRACEOUT("%s\n", pSRB->debugtrace);
 			pDCB->DevMode &=
@@ -5965,8 +5804,8 @@
 			pDCB->SyncMode &= ~WIDE_NEGO_ENABLE;
 		}
 	} else {
-		printk(DC395X_NAME
-		       ": ERROR! No DCB existent for %02i-%i ?\n",
+		dprintkl(KERN_ERR, 
+		       "ERROR! No DCB existent for %02i-%i ?\n",
 		       cmd->device->id, cmd->device->lun);
 	}
 	kfree(cmd->buffer);
@@ -5981,15 +5820,15 @@
 {
 	char *buffer;
 	Scsi_Cmnd *cmd;
-	cmd = KMALLOC(sizeof(Scsi_Cmnd), GFP_ATOMIC);
+	cmd = dc395x_kmalloc(sizeof(Scsi_Cmnd), GFP_ATOMIC);
 	if (!cmd) {
-		printk(DC395X_NAME ": kmalloc failed in inquiry!\n");
+		dprintkl(KERN_ERR, "kmalloc failed in inquiry!\n");
 		return;
 	}
 	buffer = kmalloc(256, GFP_ATOMIC);
 	if (!buffer) {
 		kfree(cmd);
-		printk(DC395X_NAME ": kmalloc failed in inquiry!\n");
+		dprintkl(KERN_ERR, "kmalloc failed in inquiry!\n");
 		return;
 	}
 
@@ -6022,8 +5861,8 @@
 	pDCB->SyncMode |= SYNC_NEGO_ENABLE;
 	pDCB->SyncMode &= ~WIDE_NEGO_DONE;
 	pDCB->SyncMode |= WIDE_NEGO_ENABLE;
-	printk(KERN_INFO DC395X_NAME
-	       ": Queue INQUIRY command to dev %02i-%i\n", pDCB->TargetID,
+	dprintkl(KERN_INFO, 
+	       "Queue INQUIRY command to dev %02i-%i\n", pDCB->TargetID,
 	       pDCB->TargetLUN);
 	DC395x_queue_command(cmd, DC395x_inquiry_done);
 }
@@ -6182,7 +6021,7 @@
 				pDCB->TargetID, pDCB->TargetLUN,
 				pDCB->GoingSRBCnt);
 		for (pSRB = pDCB->pGoingSRB; pSRB; pSRB = pSRB->pNextSRB)
-#ifdef DC395x_DEBUGTRACE
+#if debug_enabled(DBG_TRACE|DBG_TRACEALL)
 			SPRINTF("\n  %s", pSRB->debugtrace);
 #else
 			SPRINTF(" %li", pSRB->pcmd->pid);
@@ -6192,14 +6031,14 @@
 		pDCB = pDCB->pNextDCB;
 	}
 
-#ifdef DC395x_DEBUGDCB
-	SPRINTF("DCB list for ACB %p:\n", pACB);
-	pDCB = pACB->pLinkDCB;
-	SPRINTF("%p", pDCB);
-	for (dev = 0; dev < pACB->DCBCnt; dev++, pDCB = pDCB->pNextDCB)
-		SPRINTF("->%p", pDCB->pNextDCB);
-	SPRINTF("\n");
-#endif
+	if (debug_enabled(DBG_DCB)) {
+		SPRINTF("DCB list for ACB %p:\n", pACB);
+		pDCB = pACB->pLinkDCB;
+		SPRINTF("%p", pDCB);
+		for (dev = 0; dev < pACB->DCBCnt; dev++, pDCB = pDCB->pNextDCB)
+			SPRINTF("->%p", pDCB->pNextDCB);
+		SPRINTF("\n");
+	}
 
 	*start = buffer + offset;
 	DC395x_UNLOCK_IO(pACB->pScsiHost);
@@ -6213,135 +6052,224 @@
 }
 
 
-/*
- * Function : int DC395x_shutdown (struct Scsi_Host *host)
- *  Purpose : does a clean (we hope) shutdown of the SCSI chip.
- *		Use prior to dumping core, unloading the driver, etc.
- *  Returns : 0 on success
- */
-int DC395x_shutdown(struct Scsi_Host *host)
+/**
+ * DC395x_chip_shutdown - cleanly shut down the scsi controller chip,
+ * stopping all operations and disablig interrupt generation on the
+ * card.
+ *
+ * @acb: The scsi adapter control block of the adapter to shut down.
+ **/
+static
+void DC395x_chip_shutdown(struct AdapterCtlBlk *pACB)
 {
-	struct AdapterCtlBlk *pACB;
-	pACB = (struct AdapterCtlBlk *) (host->hostdata);
-
-	/* pACB->soft_reset(host); */
-
 	/* disable interrupt */
 	DC395x_write8(TRM_S1040_DMA_INTEN, 0);
 	DC395x_write8(TRM_S1040_SCSI_INTEN, 0);
+
+	/* remove timers */
 	if (timer_pending(&pACB->Waiting_Timer))
 		del_timer(&pACB->Waiting_Timer);
 	if (timer_pending(&pACB->SelTO_Timer))
 		del_timer(&pACB->SelTO_Timer);
 
-	if (1 || pACB->Config & HCC_SCSI_RESET)
+	/* reset the scsi bus */
+	if (pACB->Config & HCC_SCSI_RESET)
 		DC395x_ResetSCSIBus(pACB);
 
+	/* clear any pending interupt state */
 	DC395x_read8(TRM_S1040_SCSI_INTSTATUS);
-#ifdef DC395x_DEBUGTRACE
+
+	/* release chip resources */
+#if debug_enabled(DBG_TRACE|DBG_TRACEALL)
 	DC395x_free_tracebufs(pACB, DC395x_MAX_SRB_CNT);
 #endif
 	DC395x_free_SG_tables(pACB, DC395x_MAX_SRB_CNT);
-	return 0;
 }
 
 
-/*
- * Free all DCBs
- */
-void DC395x_freeDCBs(struct Scsi_Host *host)
+/**
+ * DC395x_free_DCBs - Free all of the DCBs.
+ *
+ * @pACB: Adapter to remove the DCBs for.
+ **/
+static
+void DC395x_free_DCBs(struct AdapterCtlBlk* pACB)
 {
-	struct DeviceCtlBlk *pDCB;
-	struct DeviceCtlBlk *nDCB;
-	struct AdapterCtlBlk *pACB =
-	    (struct AdapterCtlBlk *) (host->hostdata);
+	struct DeviceCtlBlk *dcb;
+	struct DeviceCtlBlk *dcb_next;
+
+	dprintkdbg(DBG_DCB, "Free %i DCBs\n", pACB->DCBCnt);
+
+	for (dcb = pACB->pLinkDCB; dcb != NULL; dcb = dcb_next)
+	{
+		dcb_next = dcb->pNextDCB;
+		dprintkdbg(DBG_DCB, "Free DCB (ID %i, LUN %i): %p\n",
+				dcb->TargetID, dcb->TargetLUN, dcb);
+		/*
+		 * Free the DCB. This removes the entry from the
+		 * pLinkDCB list and decrements the count in DCBCnt
+		 */
+		DC395x_remove_dev(pACB, dcb);
 
-	DCBDEBUG(printk
-		 (KERN_INFO DC395X_NAME ": Free %i DCBs\n", pACB->DCBCnt);
-	    )
-	    pDCB = pACB->pLinkDCB;
-	if (pDCB) {
-		do {
-			nDCB = pDCB->pNextDCB;
-			DCBDEBUG(printk
-				 (KERN_INFO DC395X_NAME
-				  ": Free DCB (ID %i, LUN %i): %p\n",
-				  pDCB->TargetID, pDCB->TargetLUN, pDCB);
-			    )
-			    DC395x_remove_dev(pACB, pDCB);	/* includes a KFREE(pDCB); */
-			printk(".");
-			pDCB = nDCB;
-		} while (pDCB && pACB->pLinkDCB);
 	}
 }
 
-
-/*
- * Release method
+/**
+ * DC395x_release - shutdown device and release resources that were
+ * allocate for it. Called once for each card as it is shutdown.
  *
- * Called when we are to shutdown the controller and release all of
- * it's resources.
- */
-static int DC395x_release(struct Scsi_Host *host)
+ * @host: The adapter instance to shutdown.
+ **/
+static
+void DC395x_release(struct Scsi_Host *host)
 {
-	struct AdapterCtlBlk *pACB =
-	    (struct AdapterCtlBlk *) (host->hostdata);
+	struct AdapterCtlBlk *pACB = (struct AdapterCtlBlk *) (host->hostdata);
 	unsigned long flags;
 
-	printk(DC395X_NAME ": release");
+	dprintkl(KERN_DEBUG, "DC395x release\n");
 
 	DC395x_LOCK_IO(pACB->pScsiHost);
-	DC395x_shutdown(host);
-	DC395x_freeDCBs(host);
+	DC395x_chip_shutdown(pACB);
+	DC395x_free_DCBs(pACB);
 
 	if (host->irq != NO_IRQ) {
-		/*
-		 * Find the IRQ to release. XXX Why didn't we just store the
-		 * appropriate IRQ details when we request_irq it?
-		 */
-		int irq_count;
-		for (irq_count = 0, pACB = DC395x_pACB_start;
-		     pACB;
-		     pACB = pACB->pNextACB) {
-			if (pACB->IRQLevel == host->irq)
-				++irq_count;
-		}
-		if (irq_count == 1)
-			free_irq(host->irq, DC395x_pACB_start);
+		free_irq(host->irq, DC395x_pACB_start);
 	}
 	release_region(host->io_port, host->n_io_port);
 
 	DC395x_UNLOCK_IO(pACB->pScsiHost);
-
-	return 1;
 }
 
 
 /*
  * SCSI host template
  */
-static Scsi_Host_Template driver_template = {
-	.proc_name = DC395X_NAME,
-	.proc_info = DC395x_proc_info,
-	.name = DC395X_BANNER " " DC395X_VERSION,
-	.detect = DC395x_detect,
-	.release = DC395x_release,
-	.queuecommand = DC395x_queue_command,
-	.bios_param = DC395x_bios_param,
-	.slave_alloc = DC395x_slave_alloc,
-	.slave_destroy = DC395x_slave_destroy,
-	.can_queue = DC395x_MAX_CAN_QUEUE,
-	.this_id = 7,
-	.sg_tablesize = DC395x_MAX_SG_TABLESIZE,
-	.cmd_per_lun = DC395x_MAX_CMD_PER_LUN,
-	.eh_abort_handler = DC395x_eh_abort,
-	.eh_bus_reset_handler = DC395x_eh_bus_reset,
-	.unchecked_isa_dma = 0,
-	.use_clustering = DISABLE_CLUSTERING,
+static Scsi_Host_Template dc395x_driver_template = {
+	.module                 = THIS_MODULE,
+	.proc_name              = DC395X_NAME,
+	.proc_info              = DC395x_proc_info,
+	.name                   = DC395X_BANNER " " DC395X_VERSION,
+	.queuecommand           = DC395x_queue_command,
+	.bios_param             = DC395x_bios_param,
+	.slave_alloc            = DC395x_slave_alloc,
+	.slave_destroy          = DC395x_slave_destroy,
+	.can_queue              = DC395x_MAX_CAN_QUEUE,
+	.this_id                = 7,
+	.sg_tablesize           = DC395x_MAX_SG_TABLESIZE,
+	.cmd_per_lun            = DC395x_MAX_CMD_PER_LUN,
+	.eh_abort_handler       = DC395x_eh_abort,
+	.eh_bus_reset_handler   = DC395x_eh_bus_reset,
+	.unchecked_isa_dma      = 0,
+	.use_clustering         = DISABLE_CLUSTERING,
+};
+
+/*
+ * Called to initialise a single instance of the adaptor
+ */
+
+static
+int __devinit dc395x_init_one(struct pci_dev *pdev,
+			      const struct pci_device_id *id)
+{
+	unsigned int io_port;
+	u8 irq;
+	struct Scsi_Host *scsi_host;
+	static int banner_done = 0;
+
+	dprintkdbg(DBG_0, "Init one instance of the dc395x\n");
+	if (!banner_done)
+	{
+		dprintkl(KERN_INFO, "%s %s\n", DC395X_BANNER, DC395X_VERSION);
+		banner_done = 1;
+	}
+
+	if (pci_enable_device(pdev))
+	{
+		dprintkl(KERN_INFO, "PCI Enable device failed.\n");
+		return -ENODEV;
+	}
+
+	dprintkdbg(DBG_0, "Get resources...\n");
+	io_port = pci_resource_start(pdev, 0) & PCI_BASE_ADDRESS_IO_MASK;
+	irq = pdev->irq;
+	dprintkdbg(DBG_0, "IO_PORT=%04x,IRQ=%x\n", (unsigned int) io_port, irq);
+
+	scsi_host = DC395x_init(&dc395x_driver_template, io_port, irq, DC395x_adapterCnt);
+	if (!scsi_host)
+	{
+		dprintkdbg(DBG_0, "DC395x_init failed\n");
+		return -ENOMEM;
+	}
+
+	pci_set_master(pdev);
+
+	/* store pci devices in out host data object. */
+	((struct AdapterCtlBlk *)(scsi_host->hostdata))->pdev = pdev;
+
+	/* increment adaptor count */
+	DC395x_adapterCnt++;
+
+	/* store ptr to scsi host in the PCI device structure */
+	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);
+
+	return 0;
+}
+
+
+/*
+ * Called to remove a single instance of the adaptor
+ */
+static void __devexit dc395x_remove_one(struct pci_dev *pdev)
+{
+	struct Scsi_Host *host = pci_get_drvdata(pdev);
+	dprintkdbg(DBG_0, "Removing instance\n");
+	scsi_remove_host(host);
+	DC395x_release(host);
+	pci_set_drvdata(pdev, NULL);
+}
+
+/*
+ * Table which identifies the PCI devices which
+ * are handled by this device driver.
+ */
+static struct pci_device_id dc395x_pci_table[] __devinitdata = {
+	{
+		.vendor		= PCI_VENDOR_ID_TEKRAM,
+		.device		= PCI_DEVICE_ID_TEKRAM_TRMS1040,
+		.subvendor	= PCI_ANY_ID,
+		.subdevice	= PCI_ANY_ID,
+	 },
+	{}			/* Terminating entry */
 };
+MODULE_DEVICE_TABLE(pci, dc395x_pci_table);
+
 /*
- * The following code deals with registering the above scsi host
- * template with the higher level scsi code and results in the detect
- * method from the template being called during initialisation.
+ * PCI driver operations.
+ * Tells the PCI sub system what can be done with the card.
  */
-#include "scsi_module.c"
+static struct pci_driver dc395x_driver = {
+	.name           = DC395X_NAME,
+	.id_table       = dc395x_pci_table,
+	.probe          = dc395x_init_one,
+	.remove         = __devexit_p(dc395x_remove_one),
+};
+
+static int __init dc395x_module_init(void)
+{
+	return pci_module_init(&dc395x_driver);
+}
+
+static void __exit dc395x_module_exit(void)
+{
+	pci_unregister_driver(&dc395x_driver);
+}
+
+module_init(dc395x_module_init);
+module_exit(dc395x_module_exit);
+
+MODULE_AUTHOR("C.L. Huang / Erich Chen / Kurt Garloff");
+MODULE_DESCRIPTION("SCSI host adapter driver for Tekram TRM-S1040 based adapters: Tekram DC395 and DC315 series");
+MODULE_LICENSE("GPL");
diff -urN linux-2.5.70-bk8/drivers/scsi/hosts.c linux-2.5.70-bk9/drivers/scsi/hosts.c
--- linux-2.5.70-bk8/drivers/scsi/hosts.c	2003-06-04 04:37:18.000000000 -0700
+++ linux-2.5.70-bk9/drivers/scsi/hosts.c	2003-06-04 04:37:30.000000000 -0700
@@ -234,27 +234,18 @@
 int scsi_add_host(struct Scsi_Host *shost, struct device *dev)
 {
 	Scsi_Host_Template *sht = shost->hostt;
-	struct scsi_device *sdev;
-	int error = 0, saved_error = 0;
+	int error;
 
 	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 (error)
-		return error;
-
-	scsi_proc_host_add(shost);
-
-	scsi_scan_host(shost);
+	if (!error) {
+		scsi_proc_host_add(shost);
+		scsi_scan_host(shost);
+	};
 			
-	list_for_each_entry (sdev, &shost->my_devices, siblings) {
-		error = scsi_attach_device(sdev);
-		if (error)
-			saved_error = error;
-	}
-
-	return saved_error;
+	return error;
 }
 
 /**
@@ -500,60 +491,43 @@
 }
 
 /**
- * *scsi_host_get_next - get scsi host and inc ref count
- * @shost:	pointer to a Scsi_Host or NULL to start.
+ * scsi_host_lookup - get a reference to a Scsi_Host by host no
+ *
+ * @hostnum:	host number to locate
  *
  * Return value:
- * 	A pointer to next Scsi_Host in list or NULL.
+ *	A pointer to located Scsi_Host or NULL.
  **/
-struct Scsi_Host *scsi_host_get_next(struct Scsi_Host *shost)
+struct Scsi_Host *scsi_host_lookup(unsigned short hostnum)
 {
-	struct list_head *lh = NULL;
-
-	spin_lock(&scsi_host_list_lock);
-	if (shost) {
-		/* XXX Dec ref on cur shost */
-		lh = shost->sh_list.next;
-	} else {
-		lh = scsi_host_list.next;
-	}
-
-	if (lh == &scsi_host_list) {
-		shost = (struct Scsi_Host *)NULL;
-		goto done;
+	struct class *class = class_get(&shost_class);
+	struct class_device *cdev;
+	struct Scsi_Host *shost = NULL, *p;
+
+	if (class) {
+		down_read(&class->subsys.rwsem);
+		list_for_each_entry(cdev, &class->children, node) {
+			p = class_to_shost(cdev);
+			if (p->host_no == hostnum) {
+				scsi_host_get(p);
+				shost = p;
+				break;
+			}
+		}
+		up_read(&class->subsys.rwsem);
 	}
 
-	shost = list_entry(lh, struct Scsi_Host, sh_list);
-	/* XXX Inc ref count */
-
-done:
-	spin_unlock(&scsi_host_list_lock);
 	return shost;
 }
 
 /**
- * scsi_host_hn_get - get a Scsi_Host by host no and inc ref count
- * @host_no:	host number to locate
- *
- * Return value:
- * 	A pointer to located Scsi_Host or NULL.
- **/
-struct Scsi_Host *scsi_host_hn_get(unsigned short host_no)
-{
-	/* XXX Inc ref count */
-	return scsi_find_host_by_num(host_no);
-}
-
-/**
  * *scsi_host_get - inc a Scsi_Host ref count
  * @shost:	Pointer to Scsi_Host to inc.
  **/
 void scsi_host_get(struct Scsi_Host *shost)
 {
-
 	get_device(&shost->host_gendev);
 	class_device_get(&shost->class_dev);
-	return;
 }
 
 /**
@@ -565,7 +539,6 @@
 
 	class_device_put(&shost->class_dev);
 	put_device(&shost->host_gendev);
-	return;
 }
 
 /**
diff -urN linux-2.5.70-bk8/drivers/scsi/hosts.h linux-2.5.70-bk9/drivers/scsi/hosts.h
--- linux-2.5.70-bk8/drivers/scsi/hosts.h	2003-06-04 04:37:18.000000000 -0700
+++ linux-2.5.70-bk9/drivers/scsi/hosts.h	2003-06-04 04:37:30.000000000 -0700
@@ -542,25 +542,23 @@
         return shost->host_gendev.parent;
 }
 
-struct Scsi_Device_Template
-{
-    struct list_head list;
-    const char * name;
-    struct module * module;	  /* Used for loadable modules */
-    unsigned char scsi_type;
-    int (*attach)(Scsi_Device *); /* Attach devices to arrays */
-    void (*detach)(Scsi_Device *);
-    int (*init_command)(Scsi_Cmnd *);     /* Used by new queueing code. 
-                                           Selects command for blkdevs */
-    void (*rescan)(Scsi_Device *);
-    struct device_driver scsi_driverfs_driver;
+struct scsi_driver {
+	struct module		*owner;
+	struct device_driver	gendrv;
+
+	int (*init_command)(struct scsi_cmnd *);
+	void (*rescan)(struct device *);
 };
+#define to_scsi_driver(drv) \
+	container_of((drv), struct scsi_driver, gendrv)
 
-/*
- * Highlevel driver registration/unregistration.
- */
-extern int scsi_register_device(struct Scsi_Device_Template *);
-extern int scsi_unregister_device(struct Scsi_Device_Template *);
+extern int scsi_register_driver(struct device_driver *);
+#define scsi_unregister_driver(drv) \
+	driver_unregister(drv);
+
+extern int scsi_register_interface(struct class_interface *);
+#define scsi_unregister_interface(intf) \
+	class_interface_unregister(intf)
 
 /*
  * HBA allocation/freeing.
diff -urN linux-2.5.70-bk8/drivers/scsi/ide-scsi.c linux-2.5.70-bk9/drivers/scsi/ide-scsi.c
--- linux-2.5.70-bk8/drivers/scsi/ide-scsi.c	2003-05-26 18:00:42.000000000 -0700
+++ linux-2.5.70-bk9/drivers/scsi/ide-scsi.c	2003-06-04 04:37:30.000000000 -0700
@@ -771,6 +771,10 @@
 static inline int should_transform(ide_drive_t *drive, Scsi_Cmnd *cmd)
 {
 	idescsi_scsi_t *scsi = drive_to_idescsi(drive);
+
+	/* this was a layering violation and we can't support it
+	   anymore, sorry. */
+#if 0
 	struct gendisk *disk = cmd->request->rq_disk;
 
 	if (disk) {
@@ -778,6 +782,7 @@
 		if (strcmp((*p)->scsi_driverfs_driver.name, "sg") == 0)
 			return test_bit(IDESCSI_SG_TRANSFORM, &scsi->transform);
 	}
+#endif
 	return test_bit(IDESCSI_TRANSFORM, &scsi->transform);
 }
 
diff -urN linux-2.5.70-bk8/drivers/scsi/imm.c linux-2.5.70-bk9/drivers/scsi/imm.c
--- linux-2.5.70-bk8/drivers/scsi/imm.c	2003-06-04 04:37:18.000000000 -0700
+++ linux-2.5.70-bk9/drivers/scsi/imm.c	2003-06-04 04:37:30.000000000 -0700
@@ -254,7 +254,7 @@
 }
 
 int imm_proc_info(struct Scsi_Host *host, char *buffer, char **start, off_t offset,
-		  int length, int hostno, int inout)
+		  int length, int inout)
 {
     int i;
     int len = 0;
diff -urN linux-2.5.70-bk8/drivers/scsi/imm.h linux-2.5.70-bk9/drivers/scsi/imm.h
--- linux-2.5.70-bk8/drivers/scsi/imm.h	2003-06-04 04:37:18.000000000 -0700
+++ linux-2.5.70-bk9/drivers/scsi/imm.h	2003-06-04 04:37:30.000000000 -0700
@@ -159,6 +159,7 @@
 int imm_queuecommand(Scsi_Cmnd *, void (*done) (Scsi_Cmnd *));
 int imm_abort(Scsi_Cmnd *);
 int imm_reset(Scsi_Cmnd *);
+int imm_proc_info(struct Scsi_Host *, char *, char **, off_t, int, int);
 int imm_biosparam(struct scsi_device *, struct block_device *,
 		sector_t, int *);
 
diff -urN linux-2.5.70-bk8/drivers/scsi/megaraid.c linux-2.5.70-bk9/drivers/scsi/megaraid.c
--- linux-2.5.70-bk8/drivers/scsi/megaraid.c	2003-06-04 04:37:18.000000000 -0700
+++ linux-2.5.70-bk9/drivers/scsi/megaraid.c	2003-06-04 04:37:31.000000000 -0700
@@ -723,7 +723,7 @@
 {
 	dma_addr_t	prod_info_dma_handle;
 	mega_inquiry3	*inquiry3;
-	u8	raw_mbox[16];
+	u8	raw_mbox[sizeof(mbox_t)];
 	mbox_t	*mbox;
 	int	retval;
 
@@ -732,7 +732,7 @@
 	mbox = (mbox_t *)raw_mbox;
 
 	memset((void *)adapter->mega_buffer, 0, MEGA_BUFFER_SIZE);
-	memset(mbox, 0, 16);
+	memset(mbox, 0, sizeof(*mbox));
 
 	/*
 	 * Try to issue Inquiry3 command
@@ -2400,7 +2400,7 @@
 {
 	adapter_t	*adapter;
 	mbox_t	*mbox;
-	u_char	raw_mbox[16];
+	u_char	raw_mbox[sizeof(mbox_t)];
 	char	buf[12] = { 0 };
 
 	adapter = (adapter_t *)host->hostdata;
@@ -2409,7 +2409,7 @@
 	printk(KERN_NOTICE "megaraid: being unloaded...");
 
 	/* Flush adapter cache */
-	memset(mbox, 0, 16);
+	memset(mbox, 0, sizeof(*mbox));
 	raw_mbox[0] = FLUSH_ADAPTER;
 
 	irq_disable(adapter);
@@ -2419,7 +2419,7 @@
 	issue_scb_block(adapter, raw_mbox);
 
 	/* Flush disks cache */
-	memset(mbox, 0, 16);
+	memset(mbox, 0, sizeof(*mbox));
 	raw_mbox[0] = FLUSH_SYSTEM;
 
 	/* Issue a blocking (interrupts disabled) command to the card */
@@ -3881,7 +3881,7 @@
 {
 	adapter_t *adapter;
 	struct Scsi_Host *host;
-	u8 raw_mbox[16];
+	u8 raw_mbox[sizeof(mbox_t)];
 	mbox_t *mbox;
 	int i,j;
 
@@ -3897,7 +3897,7 @@
 		mbox = (mbox_t *)raw_mbox;
 
 		/* Flush adapter cache */
-		memset(mbox, 0, 16);
+		memset(mbox, 0, sizeof(*mbox));
 		raw_mbox[0] = FLUSH_ADAPTER;
 
 		irq_disable(adapter);
@@ -3910,7 +3910,7 @@
 		issue_scb_block(adapter, raw_mbox);
 
 		/* Flush disks cache */
-		memset(mbox, 0, 16);
+		memset(mbox, 0, sizeof(*mbox));
 		raw_mbox[0] = FLUSH_SYSTEM;
 
 		issue_scb_block(adapter, raw_mbox);
@@ -4643,7 +4643,7 @@
 static int
 mega_is_bios_enabled(adapter_t *adapter)
 {
-	unsigned char	raw_mbox[16];
+	unsigned char	raw_mbox[sizeof(mbox_t)];
 	mbox_t	*mbox;
 	int	ret;
 
@@ -4676,7 +4676,7 @@
 static void
 mega_enum_raid_scsi(adapter_t *adapter)
 {
-	unsigned char raw_mbox[16];
+	unsigned char raw_mbox[sizeof(mbox_t)];
 	mbox_t *mbox;
 	int i;
 
@@ -4731,7 +4731,7 @@
 mega_get_boot_drv(adapter_t *adapter)
 {
 	struct private_bios_data	*prv_bios_data;
-	unsigned char	raw_mbox[16];
+	unsigned char	raw_mbox[sizeof(mbox_t)];
 	mbox_t	*mbox;
 	u16	cksum = 0;
 	u8	*cksum_p;
@@ -4797,7 +4797,7 @@
 static int
 mega_support_random_del(adapter_t *adapter)
 {
-	unsigned char raw_mbox[16];
+	unsigned char raw_mbox[sizeof(mbox_t)];
 	mbox_t *mbox;
 	int rval;
 
@@ -4826,7 +4826,7 @@
 static int
 mega_support_ext_cdb(adapter_t *adapter)
 {
-	unsigned char raw_mbox[16];
+	unsigned char raw_mbox[sizeof(mbox_t)];
 	mbox_t *mbox;
 	int rval;
 
@@ -4944,7 +4944,7 @@
 static void
 mega_get_max_sgl(adapter_t *adapter)
 {
-	unsigned char	raw_mbox[16];
+	unsigned char	raw_mbox[sizeof(mbox_t)];
 	mbox_t	*mbox;
 
 	mbox = (mbox_t *)raw_mbox;
@@ -4989,7 +4989,7 @@
 static int
 mega_support_cluster(adapter_t *adapter)
 {
-	unsigned char	raw_mbox[16];
+	unsigned char	raw_mbox[sizeof(mbox_t)];
 	mbox_t	*mbox;
 
 	mbox = (mbox_t *)raw_mbox;
diff -urN linux-2.5.70-bk8/drivers/scsi/nsp32.c linux-2.5.70-bk9/drivers/scsi/nsp32.c
--- linux-2.5.70-bk8/drivers/scsi/nsp32.c	2003-06-04 04:37:18.000000000 -0700
+++ linux-2.5.70-bk9/drivers/scsi/nsp32.c	2003-06-04 04:37:31.000000000 -0700
@@ -278,14 +278,12 @@
 /*
  * function declaration
  */
-static int nsp32_detect(Scsi_Host_Template *);
 static int nsp32_queuecommand(Scsi_Cmnd *, void (*done)(Scsi_Cmnd *));
 static const char *nsp32_info(struct Scsi_Host *);
 static int nsp32_eh_abort(Scsi_Cmnd *);
 static int nsp32_eh_bus_reset(Scsi_Cmnd *);
 static int nsp32_eh_host_reset(Scsi_Cmnd *);
 static int nsp32_reset(Scsi_Cmnd *, unsigned int);
-static int nsp32_release(struct Scsi_Host *);
 static int nsp32_proc_info(struct Scsi_Host *, char *, char **, off_t, int, int);
 static int __devinit nsp32_probe(struct pci_dev *, const struct pci_device_id *);
 static void __devexit nsp32_remove(struct pci_dev *);
@@ -335,11 +333,10 @@
 /*
  * max_sectors is currently limited up to 128.
  */
-static Scsi_Host_Template driver_template = {
-	.proc_name =			"nsp32",
+static Scsi_Host_Template nsp32_template = {
 	.name =				"Workbit NinjaSCSI-32Bi/UDE",
+	.proc_name =			"nsp32",
 	.proc_info =			nsp32_proc_info,
-	.detect =			nsp32_detect,
 	.info =				nsp32_info,
 	.queuecommand =			nsp32_queuecommand,
 	.can_queue =			1,
@@ -352,12 +349,6 @@
 	.eh_device_reset_handler =	NULL,
 	.eh_bus_reset_handler =		nsp32_eh_bus_reset,
 	.eh_host_reset_handler =	nsp32_eh_host_reset,
-	.release =			nsp32_release,
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,2))
-	.use_new_eh_code =        	1,
-#else
-	/* .highmem_io =		1,	*/
-#endif
 };
 
 #include "nsp32_io.h"
@@ -1618,7 +1609,7 @@
  *	0x900-0xbff: (map same 0x800-0x8ff I/O port image repeatedly)
  *	0xc00-0xfff: CardBus status registers
  */
-static int nsp32_detect(Scsi_Host_Template *sht)
+static int nsp32_detect(struct pci_dev *pdev)
 {
 	struct Scsi_Host *host;	/* registered host structure */
 	int ret;
@@ -1630,7 +1621,7 @@
 	/*
 	 * register this HBA as SCSI device
 	 */
-	host = scsi_register(sht, sizeof(nsp32_hw_data));
+	host = scsi_register(&nsp32_template, sizeof(nsp32_hw_data));
 	if (host == NULL) {
 		nsp32_msg (KERN_ERR, "failed to scsi register");
 		goto err;
@@ -1793,8 +1784,6 @@
 		 "NinjaSCSI-32Bi/UDE: irq %d, io 0x%lx+0x%x",
 		 host->irq, host->io_port, host->n_io_port);
 
-	sht->name = data->info_str;
-
 	/*
 	 * SCSI bus reset
 	 *
@@ -1832,7 +1821,9 @@
 		goto free_irq;
         }
 
-	return 1;
+	scsi_add_host(host, &pdev->dev);
+	pci_set_drvdata(pdev, host);
+	return 0;
 
  free_irq:
 	free_irq(host->irq, data);
@@ -1852,43 +1843,7 @@
 	scsi_unregister(host);
 
  err:
-	return 0;
-}
-
-static int nsp32_release(struct Scsi_Host *shpnt)
-{
-	nsp32_hw_data *data = (nsp32_hw_data *)shpnt->hostdata;
-
-	if (data->lunt_list) {
-		kfree(data->lunt_list);
-	}
-
-	if (data->autoparam) {
-		pci_free_consistent(data->Pci, AUTOPARAM_SIZE,
-					data->autoparam, data->apaddr);
-	}
-
-	if (data->sg_list) {
-		pci_free_consistent(data->Pci, 
-			(sizeof(struct nsp32_sgtable) * NSP_SG_SIZE * MAX_TARGET * MAX_LUN),
-			data->sg_list, data->sgaddr);
-	}
-
-	DEBUG(0, "free irq\n");
-	if (shpnt->irq) {
-		free_irq(shpnt->irq, data);
-	}
-
-	DEBUG(0, "free io\n");
-	if (shpnt->io_port && shpnt->n_io_port) {
-		release_region(shpnt->io_port, shpnt->n_io_port);
-	}
-
-	if (data->MmioAddress != 0) {
-		iounmap((void *)(data->MmioAddress));
-	}
-
-	return 0;
+	return 1;
 }
 
 static const char *nsp32_info(struct Scsi_Host *shpnt)
@@ -2031,11 +1986,7 @@
 
 	pci_set_master(pdev);
 
-#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,2))
-	scsi_register_host(&driver_template);
-#else
-	scsi_register_module(MODULE_SCSI_HA, &driver_template);
-#endif
+	ret = nsp32_detect(pdev);
 
 	nsp32_msg(KERN_INFO, "nsp32 irq: %i mmio: 0x%lx slot: %s model: %s",
 		  pdev->irq, data->MmioAddress, pdev->slot_name,
@@ -2043,18 +1994,23 @@
 
 	nsp32_dbg(NSP32_DEBUG_REGISTER, "exit");
 
-	return 0;
+	return ret;
 }
 
 static void __devexit nsp32_remove(struct pci_dev *pdev)
 {
-	nsp32_dbg(NSP32_DEBUG_REGISTER, "enter");
-	
-#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,2))
-	scsi_unregister_host(&driver_template);
-#else
-	scsi_unregister_module(MODULE_SCSI_HA, &driver_template);
-#endif
+	struct Scsi_Host *shpnt = pci_get_drvdata(pdev);
+	nsp32_hw_data *data = (nsp32_hw_data *)shpnt->hostdata;
+
+	kfree(data->lunt_list);
+	pci_free_consistent(data->Pci, AUTOPARAM_SIZE,
+			data->autoparam, data->apaddr);
+	pci_free_consistent(data->Pci, 
+		(sizeof(struct nsp32_sgtable) * NSP_SG_SIZE*MAX_TARGET*MAX_LUN),
+		data->sg_list, data->sgaddr);
+	free_irq(shpnt->irq, data);
+	release_region(shpnt->io_port, shpnt->n_io_port);
+	iounmap((void *)(data->MmioAddress));
 }
 
 static struct pci_device_id nsp32_pci_table[] __devinitdata = {
diff -urN linux-2.5.70-bk8/drivers/scsi/osst.c linux-2.5.70-bk9/drivers/scsi/osst.c
--- linux-2.5.70-bk8/drivers/scsi/osst.c	2003-05-26 18:00:39.000000000 -0700
+++ linux-2.5.70-bk9/drivers/scsi/osst.c	2003-06-04 04:37:31.000000000 -0700
@@ -160,19 +160,15 @@
 static int osst_copy_to_buffer(OSST_buffer *, unsigned char *);
 static int osst_copy_from_buffer(OSST_buffer *, unsigned char *);
 
-static int osst_attach(Scsi_Device *);
-static void osst_detach(Scsi_Device *);
+static int osst_probe(struct device *);
+static int osst_remove(struct device *);
 
-struct Scsi_Device_Template osst_template =
-{
-	.module =       THIS_MODULE,
-	.list =         LIST_HEAD_INIT(osst_template.list),
-	.name =         "OnStream Tape",
-	.scsi_type =    TYPE_TAPE,
-	.attach =       osst_attach,
-	.detach =       osst_detach,
-	.scsi_driverfs_driver = {
-		.name =  "osst",
+struct scsi_driver osst_template = {
+	.owner			= THIS_MODULE,
+	.gendrv = {
+		.name		=  "osst",
+		.probe		= osst_probe,
+		.remove		= osst_remove,
 	}
 };
 
@@ -5326,22 +5322,6 @@
 
 #endif
 
-/* Driverfs file support */
-static ssize_t osst_device_kdev_read(struct device *driverfs_dev, char *page)
-{
-	kdev_t kdev; 
-	kdev.value=(int)(long)driverfs_dev->driver_data;
-	return sprintf(page, "%x\n",kdev.value);
-}
-static DEVICE_ATTR(kdev,S_IRUGO,osst_device_kdev_read,NULL);
-
-static ssize_t osst_device_type_read(struct device *driverfs_dev, char *page) 
-{
-	return sprintf (page, "CHR\n");
-}
-static DEVICE_ATTR(type,S_IRUGO,osst_device_type_read,NULL);
-
-
 static struct file_operations osst_fops = {
 	.owner =        THIS_MODULE,
 	.read =         osst_read,
@@ -5384,8 +5364,9 @@
  * osst startup / cleanup code
  */
 
-static int osst_attach(Scsi_Device * SDp)
+static int osst_probe(struct device *dev)
 {
+	Scsi_Device    * SDp = to_scsi_device(dev);
 	OS_Scsi_Tape   * tpnt;
 	ST_mode        * STm;
 	ST_partstat    * STps;
@@ -5394,12 +5375,12 @@
 	int              i, mode, dev_num;
 
 	if (SDp->type != TYPE_TAPE || !osst_supports(SDp))
-		return 1;
+		return -ENODEV;
 
 	drive = alloc_disk(1);
 	if (!drive) {
 		printk(KERN_ERR "osst :E: Out of memory. Device not attached.\n");
-		return 1;
+		return -ENODEV;
 	}
 
 	/* if this is the first attach, build the infrastructure */
@@ -5521,45 +5502,12 @@
 	write_unlock(&os_scsi_tapes_lock);
 
 	for (mode = 0; mode < ST_NBR_MODES; ++mode) {
-		char name[8];
-
 		/*  Rewind entry  */
-		sprintf(name, "ot%s", osst_formats[mode]);
-
-		sprintf(tpnt->driverfs_dev_r[mode].bus_id, "%s:%s", 
-				SDp->sdev_driverfs_dev.bus_id, name);
-		sprintf(tpnt->driverfs_dev_r[mode].name, "%s%s", 
-				SDp->sdev_driverfs_dev.name, name);
-		tpnt->driverfs_dev_r[mode].parent = &SDp->sdev_driverfs_dev;
-		tpnt->driverfs_dev_r[mode].bus = SDp->sdev_driverfs_dev.bus;
-		tpnt->driverfs_dev_r[mode].driver_data =
-			(void *)(long)__mkdev(OSST_MAJOR, dev_num + (mode << 5));
-		device_register(&tpnt->driverfs_dev_r[mode]);
-		device_create_file(&tpnt->driverfs_dev_r[mode], 
-				&dev_attr_type);
-		device_create_file(&tpnt->driverfs_dev_r[mode], &dev_attr_kdev);
-
 		devfs_mk_cdev(MKDEV(OSST_MAJOR, dev_num + (mode << 5)),
 				S_IFCHR | S_IRUGO | S_IWUGO,
 				"%s/ot%s", SDp->devfs_name, osst_formats[mode]);
 
 		/*  No-rewind entry  */
-		sprintf (name, "ot%sn", osst_formats[mode]);
-
-		sprintf(tpnt->driverfs_dev_n[mode].bus_id, "%s:%s", 
-				SDp->sdev_driverfs_dev.bus_id, name);
-		sprintf(tpnt->driverfs_dev_n[mode].name, "%s%s", 
-				SDp->sdev_driverfs_dev.name, name);
-		tpnt->driverfs_dev_n[mode].parent= &SDp->sdev_driverfs_dev;
-		tpnt->driverfs_dev_n[mode].bus = SDp->sdev_driverfs_dev.bus;
-		tpnt->driverfs_dev_n[mode].driver_data =
-			(void *)(long)__mkdev(OSST_MAJOR, dev_num + (mode << 5) + 128);
-		device_register(&tpnt->driverfs_dev_n[mode]);
-		device_create_file(&tpnt->driverfs_dev_n[mode], 
-				&dev_attr_type);
-		device_create_file(&tpnt->driverfs_dev_n[mode], 
-				&dev_attr_kdev);
-
 		devfs_mk_cdev(MKDEV(OSST_MAJOR, dev_num + (mode << 5) + 128),
 				S_IFCHR | S_IRUGO | S_IWUGO,
 				"%s/ot%sn", SDp->devfs_name, osst_formats[mode]);
@@ -5574,16 +5522,17 @@
 
 out_put_disk:
         put_disk(drive);
-        return 1;
+        return -ENODEV;
 };
 
-static void osst_detach(Scsi_Device * SDp)
+static int osst_remove(struct device *dev)
 {
+  Scsi_Device * SDp = to_scsi_device(dev);
   OS_Scsi_Tape * tpnt;
   int i, mode;
 
   if ((SDp->type != TYPE_TAPE) || (osst_nr_dev <= 0))
-	  return;
+	  return 0;
 
   write_lock(&os_scsi_tapes_lock);
   for(i=0; i < osst_max_dev; i++) {
@@ -5598,29 +5547,17 @@
 		os_scsi_tapes[i] = NULL;
 		osst_nr_dev--;
 		write_unlock(&os_scsi_tapes_lock);
-		for (mode = 0; mode < ST_NBR_MODES; ++mode) {
-			device_remove_file(&tpnt->driverfs_dev_r[mode],
-					&dev_attr_type);
-			device_remove_file(&tpnt->driverfs_dev_r[mode],
-					&dev_attr_kdev);
-			device_unregister(&tpnt->driverfs_dev_r[mode]);
-			device_remove_file(&tpnt->driverfs_dev_n[mode],
-					&dev_attr_type);
-			device_remove_file(&tpnt->driverfs_dev_n[mode],
-					&dev_attr_kdev);
-			device_unregister(&tpnt->driverfs_dev_n[mode]);
-			}
 		if (tpnt->header_cache != NULL) vfree(tpnt->header_cache);
 		if (tpnt->buffer) {
 			normalize_buffer(tpnt->buffer);
 			kfree(tpnt->buffer);
 		}
 		kfree(tpnt);
-		return;
+		return 0;
 	}
   }
   write_unlock(&os_scsi_tapes_lock);
-  return;
+  return 0;
 }
 
 static int __init init_osst(void) 
@@ -5629,7 +5566,7 @@
 
 	validate_options();
 	
-	if ((register_chrdev(OSST_MAJOR,"osst", &osst_fops) < 0) || scsi_register_device(&osst_template)) {
+	if ((register_chrdev(OSST_MAJOR,"osst", &osst_fops) < 0) || scsi_register_driver(&osst_template.gendrv)) {
 		printk(KERN_ERR "osst :E: Unable to register major %d for OnStream tapes\n", OSST_MAJOR);
 		return 1;
 	}
@@ -5642,7 +5579,7 @@
 	int i;
 	OS_Scsi_Tape * STp;
 
-	scsi_unregister_device(&osst_template);
+	scsi_unregister_driver(&osst_template.gendrv);
 	unregister_chrdev(OSST_MAJOR, "osst");
 
 	if (os_scsi_tapes) {
diff -urN linux-2.5.70-bk8/drivers/scsi/osst.h linux-2.5.70-bk9/drivers/scsi/osst.h
--- linux-2.5.70-bk8/drivers/scsi/osst.h	2003-05-26 18:00:42.000000000 -0700
+++ linux-2.5.70-bk9/drivers/scsi/osst.h	2003-06-04 04:37:31.000000000 -0700
@@ -530,7 +530,7 @@
 
 /* The OnStream tape drive descriptor */
 typedef struct {
-  struct Scsi_Device_Template *driver;
+  struct scsi_driver *driver;
   unsigned capacity;
   Scsi_Device* device;
   struct semaphore lock;       /* for serialization */
@@ -555,8 +555,6 @@
   /* Mode characteristics */
   ST_mode modes[ST_NBR_MODES];
   int current_mode;
-  struct device driverfs_dev_r[ST_NBR_MODES];
-  struct device driverfs_dev_n[ST_NBR_MODES];
 
   /* Status variables */
   int partition;
diff -urN linux-2.5.70-bk8/drivers/scsi/ppa.c linux-2.5.70-bk9/drivers/scsi/ppa.c
--- linux-2.5.70-bk8/drivers/scsi/ppa.c	2003-06-04 04:37:18.000000000 -0700
+++ linux-2.5.70-bk9/drivers/scsi/ppa.c	2003-06-04 04:37:31.000000000 -0700
@@ -277,7 +277,7 @@
     int len = 0;
 
     for (i = 0; i < 4; i++)
-	if (ppa_hosts[i] == host)
+	if (ppa_hosts[i].host == host->host_no)
 	    break;
 
     if (inout)
diff -urN linux-2.5.70-bk8/drivers/scsi/scsi.c linux-2.5.70-bk9/drivers/scsi/scsi.c
--- linux-2.5.70-bk8/drivers/scsi/scsi.c	2003-05-26 18:00:40.000000000 -0700
+++ linux-2.5.70-bk9/drivers/scsi/scsi.c	2003-06-04 04:37:31.000000000 -0700
@@ -86,12 +86,6 @@
 static unsigned long serial_number;
 
 /*
- * List of all highlevel drivers.
- */
-LIST_HEAD(scsi_devicelist);
-static DECLARE_RWSEM(scsi_devicelist_mutex);
-
-/*
  * Note - the initial logging level can be set here to log events at boot time.
  * After the system is up, you may enable logging via the /proc interface.
  */
@@ -931,50 +925,6 @@
 	return depth;
 }
 
-int scsi_attach_device(struct scsi_device *sdev)
-{
-	struct Scsi_Device_Template *sdt;
-
-	down_read(&scsi_devicelist_mutex);
-	list_for_each_entry(sdt, &scsi_devicelist, list) {
-		if (!try_module_get(sdt->module))
-			continue;
-		(*sdt->attach)(sdev);
-		module_put(sdt->module);
-	}
-	up_read(&scsi_devicelist_mutex);
-	return 0;
-}
-
-void scsi_detach_device(struct scsi_device *sdev)
-{
-	struct Scsi_Device_Template *sdt;
-
-	down_read(&scsi_devicelist_mutex);
-	list_for_each_entry(sdt, &scsi_devicelist, list) {
-		if (!try_module_get(sdt->module))
-			continue;
-		(*sdt->detach)(sdev);
-		module_put(sdt->module);
-	}
-	up_read(&scsi_devicelist_mutex);
-}
-
-void scsi_rescan_device(struct scsi_device *sdev)
-{
-	struct Scsi_Device_Template *sdt;
-
-	down_read(&scsi_devicelist_mutex);
-	list_for_each_entry(sdt, &scsi_devicelist, list) {
-		if (!try_module_get(sdt->module))
-			continue;
-		if (*sdt->rescan)
-			(*sdt->rescan)(sdev);
-		module_put(sdt->module);
-	}
-	up_read(&scsi_devicelist_mutex);
-}
-
 int scsi_device_get(struct scsi_device *sdev)
 {
 	if (!try_module_get(sdev->host->hostt->module))
@@ -1030,71 +980,6 @@
 	}
 }
 
-/*
- * This entry point is called from the upper level module's module_init()
- * routine.  That implies that when this function is called, the
- * scsi_mod module is locked down because of upper module layering and
- * that the high level driver module is locked down by being in it's
- * init routine.  So, the *only* thing we have to do to protect adds 
- * we perform in this function is to make sure that all call's
- * to the high level driver's attach() and detach() call in points, other
- * than via scsi_register_device and scsi_unregister_device which are in
- * the module_init and module_exit code respectively and therefore already
- * locked down by the kernel module loader, are wrapped by try_module_get()
- * and module_put() to avoid races on device adds and removes.
- */
-int scsi_register_device(struct Scsi_Device_Template *tpnt)
-{
-	struct scsi_device *sdev;
-	struct Scsi_Host *shpnt;
-
-#ifdef CONFIG_KMOD
-	if (scsi_host_get_next(NULL) == NULL)
-		request_module("scsi_hostadapter");
-#endif
-
-	if (!list_empty(&tpnt->list))
-		return 1;
-
-	down_write(&scsi_devicelist_mutex);
-	list_add_tail(&tpnt->list, &scsi_devicelist);
-	up_write(&scsi_devicelist_mutex);
-
-	scsi_upper_driver_register(tpnt);
-
-	for (shpnt = scsi_host_get_next(NULL); shpnt;
-	     shpnt = scsi_host_get_next(shpnt)) 
-		list_for_each_entry(sdev, &shpnt->my_devices, siblings)
-			(*tpnt->attach)(sdev);
-
-	return 0;
-}
-
-int scsi_unregister_device(struct Scsi_Device_Template *tpnt)
-{
-	struct scsi_device *sdev;
-	struct Scsi_Host *shpnt;
-
-	/*
-	 * Next, detach the devices from the driver.
-	 */
-	for (shpnt = scsi_host_get_next(NULL); shpnt;
-	     shpnt = scsi_host_get_next(shpnt)) {
-		list_for_each_entry(sdev, &shpnt->my_devices, siblings)
-			(*tpnt->detach)(sdev);
-	}
-
-	/*
-	 * Extract the template from the linked list.
-	 */
-	down_write(&scsi_devicelist_mutex);
-	list_del(&tpnt->list);
-	up_write(&scsi_devicelist_mutex);
-
-	scsi_upper_driver_unregister(tpnt);
-	return 0;
-}
-
 MODULE_DESCRIPTION("SCSI core");
 MODULE_LICENSE("GPL");
 
diff -urN linux-2.5.70-bk8/drivers/scsi/scsi.h linux-2.5.70-bk9/drivers/scsi/scsi.h
--- linux-2.5.70-bk8/drivers/scsi/scsi.h	2003-06-04 04:37:18.000000000 -0700
+++ linux-2.5.70-bk9/drivers/scsi/scsi.h	2003-06-04 04:37:31.000000000 -0700
@@ -316,6 +316,7 @@
  */
 
 struct scsi_device {
+	struct class_device	sdev_classdev;
 	/*
 	 * This information is private to the scsi mid-layer.
 	 */
diff -urN linux-2.5.70-bk8/drivers/scsi/scsi_lib.c linux-2.5.70-bk9/drivers/scsi/scsi_lib.c
--- linux-2.5.70-bk8/drivers/scsi/scsi_lib.c	2003-06-04 04:37:18.000000000 -0700
+++ linux-2.5.70-bk9/drivers/scsi/scsi_lib.c	2003-06-04 04:37:31.000000000 -0700
@@ -613,29 +613,6 @@
 }
 
 /*
- * Function:    scsi_get_request_dev()
- *
- * Purpose:     Find the upper-level driver that is responsible for this
- *              request
- *
- * Arguments:   request   - I/O request we are preparing to queue.
- *
- * Lock status: No locks assumed to be held, but as it happens the
- *              q->queue_lock is held when this is called.
- *
- * Returns:     Nothing
- *
- * Notes:       The requests in the request queue may have originated
- *              from any block device driver.  We need to find out which
- *              one so that we can later form the appropriate command.
- */
-static struct Scsi_Device_Template *scsi_get_request_dev(struct request *req)
-{
-	struct gendisk *p = req->rq_disk;
-	return p ? *(struct Scsi_Device_Template **)p->private_data : NULL;
-}
-
-/*
  * Function:    scsi_io_completion()
  *
  * Purpose:     Completion processing for block device I/O requests.
@@ -849,11 +826,7 @@
 		return;
 	}
 	if (result) {
-		struct Scsi_Device_Template *sdt;
-
-		sdt = scsi_get_request_dev(cmd->request);
-		printk("SCSI %s error : <%d %d %d %d> return code = 0x%x\n",
-		       (sdt ? sdt->name : "device"),
+		printk("SCSI error : <%d %d %d %d> return code = 0x%x\n",
 		       cmd->device->host->host_no,
 		       cmd->device->channel,
 		       cmd->device->id,
@@ -947,7 +920,6 @@
 
 static int scsi_prep_fn(struct request_queue *q, struct request *req)
 {
-	struct Scsi_Device_Template *sdt;
 	struct scsi_device *sdev = q->queuedata;
 	struct scsi_cmnd *cmd;
 
@@ -1003,6 +975,7 @@
 	 * happening now.
 	 */
 	if (req->flags & (REQ_CMD | REQ_BLOCK_PC)) {
+		struct scsi_driver *drv;
 		int ret;
 
 		/*
@@ -1017,8 +990,6 @@
 		 * some kinds of consistency checking may cause the	
 		 * request to be rejected immediately.
 		 */
-		sdt = scsi_get_request_dev(req);
-		BUG_ON(!sdt);
 
 		/* 
 		 * This sets up the scatter-gather table (allocating if
@@ -1031,7 +1002,8 @@
 		/*
 		 * Initialize the actual SCSI command for this request.
 		 */
-		if (unlikely(!sdt->init_command(cmd))) {
+		drv = *(struct scsi_driver **)req->rq_disk->private_data;
+		if (unlikely(!drv->init_command(cmd))) {
 			scsi_release_buffers(cmd);
 			scsi_put_command(cmd);
 			return BLKPREP_KILL;
diff -urN linux-2.5.70-bk8/drivers/scsi/scsi_pc98.c linux-2.5.70-bk9/drivers/scsi/scsi_pc98.c
--- linux-2.5.70-bk8/drivers/scsi/scsi_pc98.c	2003-05-26 18:00:21.000000000 -0700
+++ linux-2.5.70-bk9/drivers/scsi/scsi_pc98.c	2003-06-04 04:37:31.000000000 -0700
@@ -15,21 +15,6 @@
 #include "hosts.h"
 
 
-/* XXX - For now, we assume the first (i.e. having the least host_no)
-   real (i.e. non-emulated) host adapter shall be BIOS-controlled one.
-   We *SHOULD* invent another way.  */
-static inline struct Scsi_Host *first_real_host(void)
-{
-	struct Scsi_Host *shost = NULL;
-
-	while ((shost = scsi_host_get_next(shost))) {
-		if (!shost->hostt->emulated)
-			break;
-	}
-
-	return shost;
-}
-
 static int pc98_first_bios_param(struct scsi_device *sdev, int *ip)
 {
 	const u8 *p = (&__PC9800SCA(u8, PC9800SCA_SCSI_PARAMS) + sdev->id * 4);
@@ -50,7 +35,16 @@
 {
 	struct Scsi_Host *first_real = first_real_host();
 
-	if (sdev->host == first_real && sdev->id < 7 &&
+	/*
+	 * XXX
+	 * XXX This needs to become a sysfs attribute that's set
+	 * XXX by code that knows which host is the first one.
+	 * XXX
+	 * XXX Currently we support only one host on with a
+	 * XXX PC98ish HBA.
+	 * XXX
+	 */
+	if (1 || sdev->host == first_real && sdev->id < 7 &&
 	    __PC9800SCA_TEST_BIT(PC9800SCA_DISK_EQUIPS, sdev->id))
 	    	return pc98_first_bios_param(sdev, ip);
 
diff -urN linux-2.5.70-bk8/drivers/scsi/scsi_priv.h linux-2.5.70-bk9/drivers/scsi/scsi_priv.h
--- linux-2.5.70-bk8/drivers/scsi/scsi_priv.h	2003-06-04 04:37:18.000000000 -0700
+++ linux-2.5.70-bk9/drivers/scsi/scsi_priv.h	2003-06-04 04:37:31.000000000 -0700
@@ -41,9 +41,6 @@
 #define SCSI_SENSE_VALID(scmd) \
 	(((scmd)->sense_buffer[0] & 0x70) == 0x70)
 
-struct Scsi_Device_Template;
-
-
 /*
  * scsi_target: representation of a scsi target, for now, this is only
  * used for single_lun devices. If no one has active IO to the target,
@@ -58,8 +55,7 @@
 /* hosts.c */
 extern void scsi_host_busy_inc(struct Scsi_Host *, Scsi_Device *);
 extern void scsi_host_busy_dec_and_test(struct Scsi_Host *, Scsi_Device *);
-extern struct Scsi_Host *scsi_host_get_next(struct Scsi_Host *);
-extern struct Scsi_Host *scsi_host_hn_get(unsigned short);
+extern struct Scsi_Host *scsi_host_lookup(unsigned short);
 extern void scsi_host_put(struct Scsi_Host *);
 extern void scsi_host_init(void);
 
@@ -70,9 +66,6 @@
 extern void scsi_done(struct scsi_cmnd *cmd);
 extern void scsi_finish_command(struct scsi_cmnd *cmd);
 extern int scsi_retry_command(struct scsi_cmnd *cmd);
-extern int scsi_attach_device(struct scsi_device *sdev);
-extern void scsi_detach_device(struct scsi_device *sdev);
-extern void scsi_rescan_device(struct scsi_device *sdev);
 extern int scsi_insert_special_req(struct scsi_request *sreq, int);
 extern void scsi_init_cmd_from_req(struct scsi_cmnd *cmd,
 		struct scsi_request *sreq);
@@ -119,12 +112,11 @@
 extern void scsi_free_sdev(struct scsi_device *);
 extern void scsi_free_shost(struct Scsi_Host *);
 extern void scsi_host_get(struct Scsi_Host *);
+extern void scsi_rescan_device(struct device *dev);
 
 /* scsi_sysfs.c */
 extern int scsi_device_register(struct scsi_device *);
 extern void scsi_device_unregister(struct scsi_device *);
-extern int scsi_upper_driver_register(struct Scsi_Device_Template *);
-extern void scsi_upper_driver_unregister(struct Scsi_Device_Template *);
 extern void scsi_sysfs_init_host(struct Scsi_Host *);
 extern int scsi_sysfs_add_host(struct Scsi_Host *, struct device *);
 extern void scsi_sysfs_remove_host(struct Scsi_Host *);
@@ -136,4 +128,7 @@
 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;
+
 #endif /* _SCSI_PRIV_H */
diff -urN linux-2.5.70-bk8/drivers/scsi/scsi_proc.c linux-2.5.70-bk9/drivers/scsi/scsi_proc.c
--- linux-2.5.70-bk8/drivers/scsi/scsi_proc.c	2003-06-04 04:37:18.000000000 -0700
+++ linux-2.5.70-bk9/drivers/scsi/scsi_proc.c	2003-06-04 04:37:31.000000000 -0700
@@ -24,6 +24,7 @@
 #include <linux/proc_fs.h>
 #include <linux/errno.h>
 #include <linux/blk.h>
+#include <linux/seq_file.h>
 #include <asm/uaccess.h>
 
 #include "scsi.h"
@@ -86,7 +87,7 @@
 	return n;
 }
 
-static int proc_scsi_write(struct file *file, const char *buf,
+static int proc_scsi_write_proc(struct file *file, const char *buf,
                            unsigned long count, void *data)
 {
 	struct Scsi_Host *shost = data;
@@ -137,7 +138,7 @@
 		return;
 	} 
 
-	p->write_proc = proc_scsi_write;
+	p->write_proc = proc_scsi_write_proc;
 	p->owner = shost->hostt->module;
 
 }
@@ -152,96 +153,52 @@
 		remove_proc_entry(shost->hostt->proc_name, proc_scsi);
 }
 
-static void proc_print_scsidevice(struct scsi_device* sdev, char *buffer,
-				  int *size, int len)
+static int proc_print_scsidevice(struct device *dev, void *data)
 {
-
-	int x, y = *size;
-	extern const char *const scsi_device_types[MAX_SCSI_DEVICE_CODE];
-
-	y = sprintf(buffer + len,
-	     "Host: scsi%d Channel: %02d Id: %02d Lun: %02d\n  Vendor: ",
-		    sdev->host->host_no, sdev->channel, sdev->id, sdev->lun);
-	for (x = 0; x < 8; x++) {
-		if (sdev->vendor[x] >= 0x20)
-			y += sprintf(buffer + len + y, "%c", sdev->vendor[x]);
+	struct scsi_device *sdev = to_scsi_device(dev);
+	struct seq_file *s = data;
+	int i;
+
+	seq_printf(s,
+		"Host: scsi%d Channel: %02d Id: %02d Lun: %02d\n  Vendor: ",
+		sdev->host->host_no, sdev->channel, sdev->id, sdev->lun);
+	for (i = 0; i < 8; i++) {
+		if (sdev->vendor[i] >= 0x20)
+			seq_printf(s, "%c", sdev->vendor[i]);
 		else
-			y += sprintf(buffer + len + y, " ");
+			seq_printf(s, " ");
 	}
-	y += sprintf(buffer + len + y, " Model: ");
-	for (x = 0; x < 16; x++) {
-		if (sdev->model[x] >= 0x20)
-			y += sprintf(buffer + len + y, "%c", sdev->model[x]);
+
+	seq_printf(s, " Model: ");
+	for (i = 0; i < 16; i++) {
+		if (sdev->model[i] >= 0x20)
+			seq_printf(s, "%c", sdev->model[i]);
 		else
-			y += sprintf(buffer + len + y, " ");
+			seq_printf(s, " ");
 	}
-	y += sprintf(buffer + len + y, " Rev: ");
-	for (x = 0; x < 4; x++) {
-		if (sdev->rev[x] >= 0x20)
-			y += sprintf(buffer + len + y, "%c", sdev->rev[x]);
+
+	seq_printf(s, " Rev: ");
+	for (i = 0; i < 4; i++) {
+		if (sdev->rev[i] >= 0x20)
+			seq_printf(s, "%c", sdev->rev[i]);
 		else
-			y += sprintf(buffer + len + y, " ");
+			seq_printf(s, " ");
 	}
-	y += sprintf(buffer + len + y, "\n");
 
-	y += sprintf(buffer + len + y, "  Type:   %s ",
+	seq_printf(s, "\n");
+
+	seq_printf(s, "  Type:   %s ",
 		     sdev->type < MAX_SCSI_DEVICE_CODE ?
 	       scsi_device_types[(int) sdev->type] : "Unknown          ");
-	y += sprintf(buffer + len + y, "               ANSI"
+	seq_printf(s, "               ANSI"
 		     " SCSI revision: %02x", (sdev->scsi_level - 1) ?
 		     sdev->scsi_level - 1 : 1);
 	if (sdev->scsi_level == 2)
-		y += sprintf(buffer + len + y, " CCS\n");
+		seq_printf(s, " CCS\n");
 	else
-		y += sprintf(buffer + len + y, "\n");
-
-	*size = y;
-	return;
-}
+		seq_printf(s, "\n");
 
-static int scsi_proc_info(char *buffer, char **start, off_t offset, int length)
-{
-	struct Scsi_Host *shost;
-	Scsi_Device *sdev;
-	int size, len = 0;
-	off_t begin = 0;
-	off_t pos = 0;
-
-	/*
-	 * First, see if there are any attached devices or not.
-	 */
-	for (shost = scsi_host_get_next(NULL); shost;
-	     shost = scsi_host_get_next(shost)) {
-		if (!list_empty(&shost->my_devices)) {
-			break;
-		}
-	}
-	size = sprintf(buffer + len, "Attached devices: %s\n",
-			(shost) ? "" : "none");
-	len += size;
-	pos = begin + len;
-	for (shost = scsi_host_get_next(NULL); shost;
-	     shost = scsi_host_get_next(shost)) {
-		list_for_each_entry(sdev, &shost->my_devices, siblings) {
-			proc_print_scsidevice(sdev, buffer, &size, len);
-			len += size;
-			pos = begin + len;
-
-			if (pos < offset) {
-				len = 0;
-				begin = pos;
-			}
-			if (pos > offset + length)
-				goto stop_output;
-		}
-	}
-
-stop_output:
-	*start = buffer + (offset - begin);	/* Start of wanted data */
-	len -= (offset - begin);	/* Start slop */
-	if (len > length)
-		len = length;	/* Ending slop */
-	return (len);
+	return 0;
 }
 
 static int scsi_add_single_device(uint host, uint channel, uint id, uint lun)
@@ -250,7 +207,7 @@
 	struct scsi_device *sdev;
 	int error = -ENODEV;
 
-	shost = scsi_host_hn_get(host);
+	shost = scsi_host_lookup(host);
 	if (!shost)
 		return -ENODEV;
 
@@ -272,7 +229,7 @@
 	struct Scsi_Host *shost;
 	int error = -ENODEV;
 
-	shost = scsi_host_hn_get(host);
+	shost = scsi_host_lookup(host);
 	if (!shost)
 		return -ENODEV;
 	sdev = scsi_find_device(shost, channel, id, lun);
@@ -287,8 +244,8 @@
 	return error;
 }
 
-static int proc_scsi_gen_write(struct file * file, const char * buf,
-                              unsigned long length, void *data)
+static int proc_scsi_write(struct file *file, const char* buf,
+                           size_t length, loff_t *ppos)
 {
 	int host, channel, id, lun;
 	char *buffer, *p;
@@ -431,6 +388,30 @@
 	return err;
 }
 
+static int proc_scsi_show(struct seq_file *s, void *p)
+{
+	seq_printf(s, "Attached devices:\n");
+	bus_for_each_dev(&scsi_bus_type, NULL, s, proc_print_scsidevice);
+	return 0;
+}
+
+static int proc_scsi_open(struct inode *inode, struct file *file)
+{
+	/*
+	 * We don't really needs this for the write case but it doesn't
+	 * harm either.
+	 */
+	return single_open(file, proc_scsi_show, NULL);
+}
+
+static struct file_operations proc_scsi_operations = {
+	.open		= proc_scsi_open,
+	.read		= seq_read,
+	.write		= proc_scsi_write,
+	.llseek		= seq_lseek,
+	.release	= single_release,
+};
+
 int __init scsi_init_procfs(void)
 {
 	struct proc_dir_entry *pde;
@@ -439,10 +420,10 @@
 	if (!proc_scsi)
 		goto err1;
 
-	pde = create_proc_info_entry("scsi/scsi", 0, 0, scsi_proc_info);
+	pde = create_proc_entry("scsi/scsi", 0, NULL);
 	if (!pde)
 		goto err2;
-	pde->write_proc = proc_scsi_gen_write;
+	pde->proc_fops = &proc_scsi_operations;
 
 	return 0;
 
diff -urN linux-2.5.70-bk8/drivers/scsi/scsi_scan.c linux-2.5.70-bk9/drivers/scsi/scsi_scan.c
--- linux-2.5.70-bk8/drivers/scsi/scsi_scan.c	2003-06-04 04:37:18.000000000 -0700
+++ linux-2.5.70-bk9/drivers/scsi/scsi_scan.c	2003-06-04 04:37:32.000000000 -0700
@@ -1098,24 +1098,31 @@
 				    uint channel, uint id, uint lun)
 {
 	struct scsi_device *sdev;
-	int error = -ENODEV, res;
+	int res;
 
 	res = scsi_probe_and_add_lun(shost, channel, id, lun, NULL, &sdev);
-	if (res == SCSI_SCAN_LUN_PRESENT)
-		error = scsi_attach_device(sdev);
-
-	if (error)
-		sdev = ERR_PTR(error);
+	if (res != SCSI_SCAN_LUN_PRESENT)
+		sdev = ERR_PTR(-ENODEV);
 	return sdev;
 }
 
 int scsi_remove_device(struct scsi_device *sdev)
 {
-	scsi_detach_device(sdev);
 	scsi_device_unregister(sdev);
 	return 0;
 }
 
+void scsi_rescan_device(struct device *dev)
+{
+	struct scsi_driver *drv = to_scsi_driver(dev->driver);
+
+	if (try_module_get(drv->owner)) {
+		if (drv->rescan)
+			drv->rescan(dev);
+		module_put(drv->owner);
+	}
+}
+
 /**
  * scsi_scan_target - scan a target id, possibly including all LUNs on the
  *     target.
diff -urN linux-2.5.70-bk8/drivers/scsi/scsi_syms.c linux-2.5.70-bk9/drivers/scsi/scsi_syms.c
--- linux-2.5.70-bk8/drivers/scsi/scsi_syms.c	2003-06-04 04:37:18.000000000 -0700
+++ linux-2.5.70-bk9/drivers/scsi/scsi_syms.c	2003-06-04 04:37:32.000000000 -0700
@@ -29,8 +29,8 @@
  * This source file contains the symbol table used by scsi loadable
  * modules.
  */
-EXPORT_SYMBOL(scsi_register_device);
-EXPORT_SYMBOL(scsi_unregister_device);
+EXPORT_SYMBOL(scsi_register_driver);
+EXPORT_SYMBOL(scsi_register_interface);
 EXPORT_SYMBOL(scsi_register_host);
 EXPORT_SYMBOL(scsi_unregister_host);
 EXPORT_SYMBOL(scsi_add_host);
diff -urN linux-2.5.70-bk8/drivers/scsi/scsi_sysfs.c linux-2.5.70-bk9/drivers/scsi/scsi_sysfs.c
--- linux-2.5.70-bk8/drivers/scsi/scsi_sysfs.c	2003-06-04 04:37:18.000000000 -0700
+++ linux-2.5.70-bk9/drivers/scsi/scsi_sysfs.c	2003-06-04 04:37:32.000000000 -0700
@@ -54,37 +54,21 @@
 	NULL
 };
 
-static struct class shost_class = {
+struct class shost_class = {
 	.name		= "scsi_host",
 };
 
-/**
- * scsi_bus_match:
- * @dev:
- * @dev_driver:
- *
- * Return value:
- **/
-static int scsi_bus_match(struct device *dev, 
-                          struct device_driver *dev_driver)
+static struct class sdev_class = {
+	.name		= "scsi_device",
+};
+
+/* all probing is done in the individual ->probe routines */
+static int scsi_bus_match(struct device *dev, struct device_driver *gendrv)
 {
-        if (!strcmp("sg", dev_driver->name)) {
-                if (strstr(dev->bus_id, ":gen"))
-                        return 1;
-        } else if (!strcmp("st",dev_driver->name)) {
-                if (strstr(dev->bus_id,":mt"))
-                        return 1;
-        } else if (!strcmp("sd", dev_driver->name)) {
-                if ((!strstr(dev->bus_id, ":gen")) && 
-		    (!strstr(dev->bus_id, ":mt"))) { 
-                        return 1;
-                }
-	}
-        return 0;
+	return 1;
 }
 
-
-static struct bus_type scsi_bus_type = {
+struct bus_type scsi_bus_type = {
         .name		= "scsi",
         .match		= scsi_bus_match,
 };
@@ -99,45 +83,26 @@
 		return error;
 	error = class_register(&shost_class);
 	if (error)
-		return error;
+		goto bus_unregister;
+	error = class_register(&sdev_class);
+	if (error)
+		goto class_unregister;
+	return 0;
 
+ class_unregister:
+	class_unregister(&shost_class);
+ bus_unregister:
+	bus_unregister(&scsi_bus_type);
 	return error;
 }
 
 void scsi_sysfs_unregister(void)
 {
+	class_unregister(&sdev_class);
 	class_unregister(&shost_class);
 	bus_unregister(&scsi_bus_type);
 }
 
-/**
- * scsi_upper_driver_register - register upper level driver.
- * @sdev_tp:	Upper level driver to register with the scsi bus.
- *
- * Return value:
- * 	0 on Success / non-zero on Failure
- **/
-int scsi_upper_driver_register(struct Scsi_Device_Template *sdev_tp)
-{
-	int error = 0;
-
-	sdev_tp->scsi_driverfs_driver.bus = &scsi_bus_type;
-	error = driver_register(&sdev_tp->scsi_driverfs_driver);
-
-	return error;
-}
-
-/**
- * scsi_upper_driver_unregister - unregister upper level driver 
- * @sdev_tp:	Upper level driver to unregister with the scsi bus.
- *
- **/
-void scsi_upper_driver_unregister(struct Scsi_Device_Template *sdev_tp)
-{
-	driver_unregister(&sdev_tp->scsi_driverfs_driver);
-}
-
-
 /*
  * sdev_show_function: macro to create an attr function that can be used to
  * show a non-bit field.
@@ -238,7 +203,7 @@
 static ssize_t
 store_rescan_field (struct device *dev, const char *buf, size_t count) 
 {
-	scsi_rescan_device(to_scsi_device(dev));
+	scsi_rescan_device(dev);
 	return 0;
 }
 
@@ -280,15 +245,30 @@
 {
 	int error = 0, i;
 
+	device_initialize(&sdev->sdev_driverfs_dev);
 	sprintf(sdev->sdev_driverfs_dev.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;
 
-	error = device_register(&sdev->sdev_driverfs_dev);
-	if (error)
+	class_device_initialize(&sdev->sdev_classdev);
+	sdev->sdev_classdev.dev = &sdev->sdev_driverfs_dev;
+	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);
+	if (error) {
+		printk(KERN_INFO "error 1\n");
 		return error;
+	}
+	error = class_device_add(&sdev->sdev_classdev);
+	if (error) {
+		printk(KERN_INFO "error 2\n");
+		device_unregister(&sdev->sdev_driverfs_dev);
+		return error;
+	}
 
 	for (i = 0; !error && sdev->host->hostt->sdev_attrs[i] != NULL; i++)
 		error = device_create_file(&sdev->sdev_driverfs_dev,
@@ -310,9 +290,24 @@
 
 	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);
 }
 
+int scsi_register_driver(struct device_driver *drv)
+{
+	drv->bus = &scsi_bus_type;
+
+	return driver_register(drv);
+}
+
+int scsi_register_interface(struct class_interface *intf)
+{
+	intf->class = &sdev_class;
+
+	return class_interface_register(intf);
+}
+
 static void scsi_host_release(struct device *dev)
 {
 	struct Scsi_Host *shost;
@@ -350,7 +345,7 @@
 	int i, error;
 
 	if (!shost->host_gendev.parent)
-		shost->host_gendev.parent = (dev) ? dev : &legacy_bus;
+		shost->host_gendev.parent = dev ? dev : &legacy_bus;
 
 	error = device_add(&shost->host_gendev);
 	if (error)
diff -urN linux-2.5.70-bk8/drivers/scsi/sd.c linux-2.5.70-bk9/drivers/scsi/sd.c
--- linux-2.5.70-bk8/drivers/scsi/sd.c	2003-06-04 04:37:18.000000000 -0700
+++ linux-2.5.70-bk9/drivers/scsi/sd.c	2003-06-04 04:37:32.000000000 -0700
@@ -73,8 +73,7 @@
 #define SD_MAX_RETRIES		5
 
 struct scsi_disk {
-	struct list_head list;		/* list of all scsi_disks */
-	struct Scsi_Device_Template *driver;	/* always &sd_template */
+	struct scsi_driver *driver;	/* always &sd_template */
 	struct scsi_device *device;
 	struct gendisk	*disk;
 	sector_t	capacity;	/* size in 512-byte sectors */
@@ -85,37 +84,31 @@
 	unsigned	RCD : 1;	/* state of disk RCD bit, unused */
 };
 
-static LIST_HEAD(sd_devlist);
-static spinlock_t sd_devlist_lock = SPIN_LOCK_UNLOCKED;
-
 static unsigned long sd_index_bits[SD_DISKS / BITS_PER_LONG];
 static spinlock_t sd_index_lock = SPIN_LOCK_UNLOCKED;
 
 static void sd_init_onedisk(struct scsi_disk * sdkp, struct gendisk *disk);
 static void sd_rw_intr(struct scsi_cmnd * SCpnt);
 
-static int sd_attach(struct scsi_device *);
-static void sd_detach(struct scsi_device *);
-static void sd_rescan(struct scsi_device *);
+static int sd_probe(struct device *);
+static int sd_remove(struct device *);
+static void sd_shutdown(struct device *dev);
+static void sd_rescan(struct device *);
 static int sd_init_command(struct scsi_cmnd *);
 static int sd_synchronize_cache(struct scsi_disk *, int);
-static int sd_notifier(struct notifier_block *, unsigned long, void *);
 static void sd_read_capacity(struct scsi_disk *sdkp, char *diskname,
 		 struct scsi_request *SRpnt, unsigned char *buffer);
-static struct notifier_block sd_notifier_block = {sd_notifier, NULL, 0}; 
 
-static struct Scsi_Device_Template sd_template = {
-	.module		= THIS_MODULE,
-	.list		= LIST_HEAD_INIT(sd_template.list),
-	.name		= "disk",
-	.scsi_type	= TYPE_DISK,
-	.attach		= sd_attach,
-	.detach		= sd_detach,
-	.rescan		= sd_rescan,
-	.init_command	= sd_init_command,
-	.scsi_driverfs_driver = {
-		.name   = "sd",
+static struct scsi_driver sd_template = {
+	.owner			= THIS_MODULE,
+	.gendrv = {
+		.name		= "sd",
+		.probe		= sd_probe,
+		.remove		= sd_remove,
+		.shutdown	= sd_shutdown,
 	},
+	.rescan			= sd_rescan,
+	.init_command		= sd_init_command,
 };
 
 static int sd_major(int major_idx)
@@ -133,36 +126,6 @@
 	}
 }
 
-static struct scsi_disk *sd_find_by_sdev(Scsi_Device *sd)
-{
-	struct scsi_disk *sdkp;
-
-	spin_lock(&sd_devlist_lock);
-	list_for_each_entry(sdkp, &sd_devlist, list) {
-		if (sdkp->device == sd) {
-			spin_unlock(&sd_devlist_lock);
-			return sdkp;
-		}
-	}
-
-	spin_unlock(&sd_devlist_lock);
-	return NULL;
-}
-
-static inline void sd_devlist_insert(struct scsi_disk *sdkp)
-{
-	spin_lock(&sd_devlist_lock);
-	list_add(&sdkp->list, &sd_devlist);
-	spin_unlock(&sd_devlist_lock);
-}
-
-static inline void sd_devlist_remove(struct scsi_disk *sdkp)
-{
-	spin_lock(&sd_devlist_lock);
-	list_del(&sdkp->list);
-	spin_unlock(&sd_devlist_lock);
-}
- 
 static inline struct scsi_disk *scsi_disk(struct gendisk *disk)
 {
 	return container_of(disk->private_data, struct scsi_disk, driver);
@@ -636,12 +599,13 @@
 	return 1;
 }
 
-static void sd_rescan(struct scsi_device * sdp)
+static void sd_rescan(struct device *dev)
 {
-	unsigned char *buffer;
-	struct scsi_disk *sdkp = sd_find_by_sdev(sdp);
+	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;
@@ -1312,10 +1276,10 @@
 }
 
 /**
- *	sd_attach - called during driver initialization and whenever a
+ *	sd_probe - called during driver initialization and whenever a
  *	new scsi device is attached to the system. It is called once
  *	for each scsi device (not just disks) present.
- *	@sdp: pointer to mid level scsi device object
+ *	@dev: pointer to device object
  *
  *	Returns 0 if successful (or not interested in this scsi device 
  *	(e.g. scanner)); 1 when there is an error.
@@ -1327,17 +1291,19 @@
  *	and minor number that is chosen here.
  *
  *	Assume sd_attach is not re-entrant (for time being)
- *	Also think about sd_attach() and sd_detach() running coincidentally.
+ *	Also think about sd_attach() and sd_remove() running coincidentally.
  **/
-static int sd_attach(struct scsi_device * sdp)
+static int sd_probe(struct device *dev)
 {
+	struct scsi_device *sdp = to_scsi_device(dev);
 	struct scsi_disk *sdkp;
 	struct gendisk *gd;
 	u32 index;
 	int error;
 
+	error = -ENODEV;
 	if ((sdp->type != TYPE_DISK) && (sdp->type != TYPE_MOD))
-		return 1;
+		goto out;
 
 	SCSI_LOG_HLQUEUE(3, printk("sd_attach: scsi device: <%d,%d,%d,%d>\n", 
 			 sdp->host->host_no, sdp->channel, sdp->id, sdp->lun));
@@ -1389,8 +1355,8 @@
 	gd->private_data = &sdkp->driver;
 	gd->queue = sdkp->device->request_queue;
 
-	sd_devlist_insert(sdkp);
 	set_capacity(gd, sdkp->capacity);
+	dev_set_drvdata(dev, sdkp);
 	add_disk(gd);
 
 	printk(KERN_NOTICE "Attached scsi %sdisk %s at scsi%d, channel %d, "
@@ -1409,44 +1375,42 @@
 }
 
 /**
- *	sd_detach - called whenever a scsi disk (previously recognized by
- *	sd_attach) is detached from the system. It is called (potentially
+ *	sd_remove - called whenever a scsi disk (previously recognized by
+ *	sd_probe) is detached from the system. It is called (potentially
  *	multiple times) during sd module unload.
  *	@sdp: pointer to mid level scsi device object
  *
  *	Note: this function is invoked from the scsi mid-level.
  *	This function potentially frees up a device name (e.g. /dev/sdc)
- *	that could be re-used by a subsequent sd_attach().
+ *	that could be re-used by a subsequent sd_probe().
  *	This function is not called when the built-in sd driver is "exit-ed".
  **/
-static void sd_detach(struct scsi_device * sdp)
+static int sd_remove(struct device *dev)
 {
-	struct scsi_disk *sdkp;
-
-	SCSI_LOG_HLQUEUE(3, printk("sd_detach: <%d,%d,%d,%d>\n", 
-			    sdp->host->host_no, sdp->channel, sdp->id, 
-			    sdp->lun));
-
-	sdkp = sd_find_by_sdev(sdp);
-	if (!sdkp)
-		return;
+	struct scsi_disk *sdkp = dev_get_drvdata(dev);
 
-	/* check that we actually have a write back cache to synchronize */
-	if (sdkp->WCE) {
-		printk(KERN_NOTICE "Synchronizing SCSI cache: ");
-		sd_synchronize_cache(sdkp, 1);
-		printk("\n");
-	}
-
-	sd_devlist_remove(sdkp);
 	del_gendisk(sdkp->disk);
 
 	spin_lock(&sd_index_lock);
 	clear_bit(sdkp->index, sd_index_bits);
 	spin_unlock(&sd_index_lock);
 
+	sd_shutdown(dev);
 	put_disk(sdkp->disk);
 	kfree(sdkp);
+
+	return 0;
+}
+
+static void sd_shutdown(struct device *dev)
+{
+	struct scsi_disk *sdkp = dev_get_drvdata(dev);
+
+	if (sdkp->WCE) {
+		printk(KERN_NOTICE "Synchronizing SCSI cache: ");
+		sd_synchronize_cache(sdkp, 1);
+		printk("\n");
+	}
 }
 
 /**
@@ -1457,7 +1421,7 @@
  **/
 static int __init init_sd(void)
 {
-	int majors = 0, rc = -ENODEV, i;
+	int majors = 0, i;
 
 	SCSI_LOG_HLQUEUE(3, printk("init_sd: sd driver entry point\n"));
 
@@ -1468,11 +1432,7 @@
 	if (!majors)
 		return -ENODEV;
 
-	rc = scsi_register_device(&sd_template);
-	if (rc)
-		return rc;
-	register_reboot_notifier(&sd_notifier_block);
-	return rc;
+	return scsi_register_driver(&sd_template.gendrv);
 }
 
 /**
@@ -1486,37 +1446,11 @@
 
 	SCSI_LOG_HLQUEUE(3, printk("exit_sd: exiting sd driver\n"));
 
-	unregister_reboot_notifier(&sd_notifier_block);
-	scsi_unregister_device(&sd_template);
+	scsi_unregister_driver(&sd_template.gendrv);
 	for (i = 0; i < SD_MAJORS; i++)
 		unregister_blkdev(sd_major(i), "sd");
 }
 
-/*
- * XXX: this function does not take sd_devlist_lock to synchronize
- *	access to sd_devlist.  This should be safe as no other reboot
- *	notifier can access it.
- */
-static int sd_notifier(struct notifier_block *n, unsigned long event, void *p)
-{
-	if (event != SYS_RESTART &&
-	    event != SYS_HALT &&
-	    event != SYS_POWER_OFF)
-		return NOTIFY_DONE;
-
-	if (!list_empty(&sd_devlist)) {
-		struct scsi_disk *sdkp;
-
-		printk(KERN_NOTICE "Synchronizing SCSI caches: ");
-		list_for_each_entry(sdkp, &sd_devlist, list)
-			if (sdkp->WCE)
-				sd_synchronize_cache(sdkp, 1);
-		printk("\n");
-	}
-
-	return NOTIFY_OK;
-}
-
 /* send a SYNCHRONIZE CACHE instruction down to the device through the
  * normal SCSI command structure.  Wait for the command to complete (must
  * have user context) */
diff -urN linux-2.5.70-bk8/drivers/scsi/sg.c linux-2.5.70-bk9/drivers/scsi/sg.c
--- linux-2.5.70-bk8/drivers/scsi/sg.c	2003-05-26 18:00:39.000000000 -0700
+++ linux-2.5.70-bk9/drivers/scsi/sg.c	2003-06-04 04:37:32.000000000 -0700
@@ -18,8 +18,8 @@
  *
  */
 #include <linux/config.h>
-static char *sg_version_str = "3.5.28 [20030308]";
-static int sg_version_num = 30528;	/* 2 digits for each component */
+static char *sg_version_str = "3.5.29 [20030529]";
+static int sg_version_num = 30529;	/* 2 digits for each component */
 /*
  *  D. P. Gilbert (dgilbert@interlog.com, dougg@triode.net.au), notes:
  *      - scsi logging is available via SCSI_LOG_TIMEOUT macros. First
@@ -112,24 +112,17 @@
 
 #define SG_DEV_ARR_LUMP 6	/* amount to over allocate sg_dev_arr by */
 
-static int sg_attach(Scsi_Device *);
-static void sg_detach(Scsi_Device *);
+static int sg_add(struct class_device *);
+static void sg_remove(struct class_device *);
 
 static Scsi_Request *dummy_cmdp;	/* only used for sizeof */
 
 static rwlock_t sg_dev_arr_lock = RW_LOCK_UNLOCKED;	/* Also used to lock
 							   file descriptor list for device */
 
-static struct Scsi_Device_Template sg_template = {
-	.module = THIS_MODULE,
-	.list = LIST_HEAD_INIT(sg_template.list),
-	.name = "generic",
-	.scsi_type = 0xff,
-	.attach = sg_attach,
-	.detach = sg_detach,
-	.scsi_driverfs_driver = {
-		.name = "sg",
-	},
+static struct class_interface sg_interface = {
+	.add		= sg_add,
+	.remove		= sg_remove,
 };
 
 typedef struct sg_scatter_hold { /* holding area for scsi scatter gather info */
@@ -180,15 +173,13 @@
 } Sg_fd;
 
 typedef struct sg_device { /* holds the state of each scsi generic device */
-	struct Scsi_Device_Template *driver;
-	Scsi_Device *device;
+	struct scsi_device *device;
 	wait_queue_head_t o_excl_wait;	/* queue open() when O_EXCL in use */
 	int sg_tablesize;	/* adapter's max scatter-gather table size */
 	Sg_fd *headfp;		/* first open fd belonging to this device */
 	volatile char detached;	/* 0->attached, 1->detached pending removal */
 	volatile char exclude;	/* opened for exclusive access */
 	char sgdebug;		/* 0->off, 1->sense, 9->dump dev, 10-> all devs */
-	struct device sg_driverfs_dev;
 	struct gendisk *disk;
 } Sg_device;
 
@@ -1328,27 +1319,10 @@
 	.fasync = sg_fasync,
 };
 
-/* Driverfs file support */
-static ssize_t
-sg_device_kdev_read(struct device *driverfs_dev, char *page)
-{
-	Sg_device *sdp = list_entry(driverfs_dev, Sg_device, sg_driverfs_dev);
-	return sprintf(page, "%x\n", MKDEV(sdp->disk->major,
-					   sdp->disk->first_minor));
-}
-static DEVICE_ATTR(kdev,S_IRUGO,sg_device_kdev_read,NULL);
-
-static ssize_t
-sg_device_type_read(struct device *driverfs_dev, char *page)
-{
-	return sprintf(page, "CHR\n");
-}
-
-static DEVICE_ATTR(type,S_IRUGO,sg_device_type_read,NULL);
-
 static int
-sg_attach(Scsi_Device * scsidp)
+sg_add(struct class_device *cdev)
 {
+	struct scsi_device *scsidp = to_scsi_device(cdev->dev);
 	struct gendisk *disk;
 	Sg_device *sdp = NULL;
 	unsigned long iflags;
@@ -1416,8 +1390,6 @@
 
 	SCSI_LOG_TIMEOUT(3, printk("sg_attach: dev=%d \n", k));
 	memset(sdp, 0, sizeof(*sdp));
-	sdp->driver = &sg_template;
-	disk->private_data = &sdp->driver;
 	sprintf(disk->disk_name, "sg%d", k);
 	disk->major = SCSI_GENERIC_MAJOR;
 	disk->first_minor = k;
@@ -1430,40 +1402,20 @@
 	sdp->detached = 0;
 	sdp->sg_tablesize = scsidp->host ? scsidp->host->sg_tablesize : 0;
 
-	memset(&sdp->sg_driverfs_dev, 0, sizeof (struct device));
-	snprintf(sdp->sg_driverfs_dev.bus_id, BUS_ID_SIZE, "%s:gen",
-		scsidp->sdev_driverfs_dev.bus_id);
-	snprintf(sdp->sg_driverfs_dev.name, DEVICE_NAME_SIZE, "%sgeneric",
-		scsidp->sdev_driverfs_dev.name);
-	sdp->sg_driverfs_dev.parent = &scsidp->sdev_driverfs_dev;
-	sdp->sg_driverfs_dev.bus = scsidp->sdev_driverfs_dev.bus;
-
 	sg_nr_dev++;
 	sg_dev_arr[k] = sdp;
 	write_unlock_irqrestore(&sg_dev_arr_lock, iflags);
 
-	device_register(&sdp->sg_driverfs_dev);
-	device_create_file(&sdp->sg_driverfs_dev, &dev_attr_type);
-	device_create_file(&sdp->sg_driverfs_dev, &dev_attr_kdev);
-
 	devfs_mk_cdev(MKDEV(SCSI_GENERIC_MAJOR, k),
 			S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP,
 			"%s/generic", scsidp->devfs_name);
 
-	switch (scsidp->type) {
-	case TYPE_DISK:
-	case TYPE_MOD:
-	case TYPE_ROM:
-	case TYPE_WORM:
-	case TYPE_TAPE:
-		break;
-	default:
-		printk(KERN_NOTICE
-		       "Attached scsi generic sg%d at scsi%d, channel"
-		       " %d, id %d, lun %d,  type %d\n", k,
-		       scsidp->host->host_no, scsidp->channel, scsidp->id,
-		       scsidp->lun, scsidp->type);
-	}
+	printk(KERN_NOTICE
+	       "Attached scsi generic sg%d at scsi%d, channel"
+	       " %d, id %d, lun %d,  type %d\n", k,
+	       scsidp->host->host_no, scsidp->channel, scsidp->id,
+	       scsidp->lun, scsidp->type);
+
 	return 0;
 
 out:
@@ -1472,8 +1424,9 @@
 }
 
 static void
-sg_detach(Scsi_Device * scsidp)
+sg_remove(struct class_device *cdev)
 {
+	struct scsi_device *scsidp = to_scsi_device(cdev->dev);
 	Sg_device *sdp = NULL;
 	unsigned long iflags;
 	Sg_fd *sfp;
@@ -1524,9 +1477,6 @@
 
 	if (sdp) {
 		devfs_remove("%s/generic", scsidp->devfs_name);
-		device_remove_file(&sdp->sg_driverfs_dev, &dev_attr_type);
-		device_remove_file(&sdp->sg_driverfs_dev, &dev_attr_kdev);
-		device_unregister(&sdp->sg_driverfs_dev);
 		put_disk(sdp->disk);
 		sdp->disk = NULL;
 		if (NULL == sdp->headfp)
@@ -1550,64 +1500,6 @@
 
 MODULE_PARM_DESC(def_reserved_size, "size of buffer reserved for each fd");
 
-static ssize_t sg_allow_dio_show(struct device_driver * ddp, char * buf)
-{
-	return snprintf(buf, PAGE_SIZE, "%d\n", sg_allow_dio);
-}
-static ssize_t sg_allow_dio_store(struct device_driver * ddp,
-				  const char * buf, size_t count)
-{
-	if (1 == sscanf(buf, "%d", &sg_allow_dio)) {
-		sg_allow_dio = sg_allow_dio ? 1 : 0;
-		return count;
-	}
-	return -EINVAL;
-}
-DRIVER_ATTR(allow_dio, S_IRUGO | S_IWUSR, sg_allow_dio_show, 
-	    sg_allow_dio_store)
-
-static ssize_t sg_def_reserved_show(struct device_driver * ddp, char * buf)
-{
-	return snprintf(buf, PAGE_SIZE, "%d\n", sg_big_buff);
-}
-static ssize_t sg_def_reserved_store(struct device_driver * ddp,
-				     const char * buf, size_t count)
-{
-	if (1 == sscanf(buf, "%d", &def_reserved_size)) {
-		if (def_reserved_size >= 0) {
-			sg_big_buff = def_reserved_size;
-			return count;
-		}
-	}
-	return -EINVAL;
-}
-DRIVER_ATTR(def_reserved_size, S_IRUGO | S_IWUSR, sg_def_reserved_show, 
-	    sg_def_reserved_store)
-
-static ssize_t sg_version_show(struct device_driver * ddp, char * buf)
-{
-	return snprintf(buf, PAGE_SIZE, "%s\n", sg_version_str);
-}
-DRIVER_ATTR(version, S_IRUGO, sg_version_show, NULL)
-
-static void do_create_driverfs_files(void)
-{
-	struct device_driver * driverfs = &sg_template.scsi_driverfs_driver;
-
-	driver_create_file(driverfs, &driver_attr_allow_dio);
-	driver_create_file(driverfs, &driver_attr_def_reserved_size);
-	driver_create_file(driverfs, &driver_attr_version);
-}
-
-static void do_remove_driverfs_files(void)
-{
-	struct device_driver * driverfs = &sg_template.scsi_driverfs_driver;
-
-	driver_remove_file(driverfs, &driver_attr_version);
-	driver_remove_file(driverfs, &driver_attr_def_reserved_size);
-	driver_remove_file(driverfs, &driver_attr_allow_dio);
-}
-
 static int __init
 init_sg(void)
 {
@@ -1619,24 +1511,22 @@
 	rc = register_chrdev(SCSI_GENERIC_MAJOR, "sg", &sg_fops);
 	if (rc)
 		return rc;
-	rc = scsi_register_device(&sg_template);
+	rc = scsi_register_interface(&sg_interface);
 	if (rc)
 		return rc;
 #ifdef CONFIG_PROC_FS
 	sg_proc_init();
 #endif				/* CONFIG_PROC_FS */
-	do_create_driverfs_files();
 	return 0;
 }
 
 static void __exit
 exit_sg(void)
 {
-	do_remove_driverfs_files();
 #ifdef CONFIG_PROC_FS
 	sg_proc_cleanup();
 #endif				/* CONFIG_PROC_FS */
-	scsi_unregister_device(&sg_template);
+	scsi_unregister_interface(&sg_interface);
 	unregister_chrdev(SCSI_GENERIC_MAJOR, "sg");
 	if (sg_dev_arr != NULL) {
 		vfree((char *) sg_dev_arr);
@@ -1994,11 +1884,8 @@
 			if (res)
 				return res;
 
-			for (; k < schp->k_use_sg; ++k, ++sclp) {
-				ksglen = (int) sclp->length;
-				p = sg_scatg2virt(sclp);
-				if (NULL == p)
-					break;
+			for (; p; ++sclp, ksglen = (int) sclp->length,
+				  p = sg_scatg2virt(sclp)) {
 				if (usglen <= 0)
 					break;
 				if (ksglen > usglen) {
@@ -2025,6 +1912,9 @@
 					up += ksglen;
 					usglen -= ksglen;
 				}
+				++k;
+				if (k >= schp->k_use_sg)
+					return 0;
 			}
 		}
 	}
@@ -2151,11 +2041,8 @@
 			if (res)
 				return res;
 
-			for (; k < schp->k_use_sg; ++k, ++sclp) {
-				ksglen = (int) sclp->length;
-				p = sg_scatg2virt(sclp);
-				if (NULL == p)
-					break;
+			for (; p; ++sclp, ksglen = (int) sclp->length,
+				  p = sg_scatg2virt(sclp)) {
 				if (usglen <= 0)
 					break;
 				if (ksglen > usglen) {
@@ -2182,6 +2069,9 @@
 					up += ksglen;
 					usglen -= ksglen;
 				}
+				++k;
+				if (k >= schp->k_use_sg)
+					return 0;
 			}
 		}
 	}
diff -urN linux-2.5.70-bk8/drivers/scsi/sr.c linux-2.5.70-bk9/drivers/scsi/sr.c
--- linux-2.5.70-bk8/drivers/scsi/sr.c	2003-06-04 04:37:18.000000000 -0700
+++ linux-2.5.70-bk9/drivers/scsi/sr.c	2003-06-04 04:37:32.000000000 -0700
@@ -67,26 +67,20 @@
 	 CDC_PLAY_AUDIO|CDC_RESET|CDC_IOCTLS|CDC_DRIVE_STATUS| \
 	 CDC_CD_R|CDC_CD_RW|CDC_DVD|CDC_DVD_R|CDC_GENERIC_PACKET)
 
-static int sr_attach(struct scsi_device *);
-static void sr_detach(struct scsi_device *);
+static int sr_probe(struct device *);
+static int sr_remove(struct device *);
 static int sr_init_command(struct scsi_cmnd *);
 
-static struct Scsi_Device_Template sr_template = {
-	.module		= THIS_MODULE,
-	.list		= LIST_HEAD_INIT(sr_template.list),
-	.name		= "cdrom",
-	.scsi_type	= TYPE_ROM,
-	.attach		= sr_attach,
-	.detach		= sr_detach,
-	.init_command	= sr_init_command,
-	.scsi_driverfs_driver = {
-		.name   = "sr",
+static struct scsi_driver sr_template = {
+	.owner			= THIS_MODULE,
+	.gendrv = {
+		.name   	= "sr",
+		.probe		= sr_probe,
+		.remove		= sr_remove,
 	},
+	.init_command		= sr_init_command,
 };
 
-static LIST_HEAD(sr_devlist);
-static spinlock_t sr_devlist_lock = SPIN_LOCK_UNLOCKED;
-
 static unsigned long sr_index_bits[SR_DISKS / BITS_PER_LONG];
 static spinlock_t sr_index_lock = SPIN_LOCK_UNLOCKED;
 
@@ -99,37 +93,6 @@
 static int sr_media_change(struct cdrom_device_info *, int);
 static int sr_packet(struct cdrom_device_info *, struct cdrom_generic_command *);
 
-static Scsi_CD *sr_find_by_sdev(Scsi_Device *sd)
-{
-	struct list_head *p;
-	Scsi_CD *cd;
-
-	spin_lock(&sr_devlist_lock);
-	list_for_each(p, &sr_devlist) {
-		cd = list_entry(p, Scsi_CD, list);
-		if (cd->device == sd) {
-			spin_unlock(&sr_devlist_lock);
-			return cd;
-		}
-	}
-	spin_unlock(&sr_devlist_lock);
-	return NULL;
-}
-
-static inline void sr_devlist_insert(Scsi_CD *cd)
-{
-	spin_lock(&sr_devlist_lock);
-	list_add(&cd->list, &sr_devlist);
-	spin_unlock(&sr_devlist_lock);
-}
-
-static inline void sr_devlist_remove(Scsi_CD *cd)
-{
-	spin_lock(&sr_devlist_lock);
-	list_del(&cd->list);
-	spin_unlock(&sr_devlist_lock);
-}
-
 static struct cdrom_device_ops sr_dops = {
 	.open			= sr_open,
 	.release	 	= sr_release,
@@ -506,14 +469,16 @@
 	scsi_device_put(cd->device);
 }
 
-static int sr_attach(struct scsi_device *sdev)
+static int sr_probe(struct device *dev)
 {
+	struct scsi_device *sdev = to_scsi_device(dev);
 	struct gendisk *disk;
 	struct scsi_cd *cd;
 	int minor, error;
 
+	error = -ENODEV;
 	if (sdev->type != TYPE_ROM && sdev->type != TYPE_WORM)
-		return 1;
+		goto fail;
 
 	error = -ENOMEM;
 	cd = kmalloc(sizeof(*cd), GFP_KERNEL);
@@ -575,8 +540,8 @@
 	disk->private_data = &cd->driver;
 	disk->queue = sdev->request_queue;
 
+	dev_set_drvdata(dev, cd);
 	add_disk(disk);
-	sr_devlist_insert(cd);
 
 	printk(KERN_DEBUG
 	    "Attached scsi CD-ROM %s at scsi%d, channel %d, id %d, lun %d\n",
@@ -807,15 +772,10 @@
 	return cgc->stat;
 }
 
-static void sr_detach(struct scsi_device * SDp)
+static int sr_remove(struct device *dev)
 {
-	struct scsi_cd *cd;
+	struct scsi_cd *cd = dev_get_drvdata(dev);
 
-	cd = sr_find_by_sdev(SDp);
-	if (!cd)
-		return;
-
-	sr_devlist_remove(cd);
 	del_gendisk(cd->disk);
 
 	spin_lock(&sr_index_lock);
@@ -825,6 +785,8 @@
 	put_disk(cd->disk);
 	unregister_cdrom(&cd->cdi);
 	kfree(cd);
+
+	return 0;
 }
 
 static int __init init_sr(void)
@@ -834,12 +796,12 @@
 	rc = register_blkdev(SCSI_CDROM_MAJOR, "sr");
 	if (rc)
 		return rc;
-	return scsi_register_device(&sr_template);
+	return scsi_register_driver(&sr_template.gendrv);
 }
 
 static void __exit exit_sr(void)
 {
-	scsi_unregister_device(&sr_template);
+	scsi_unregister_driver(&sr_template.gendrv);
 	unregister_blkdev(SCSI_CDROM_MAJOR, "sr");
 }
 
diff -urN linux-2.5.70-bk8/drivers/scsi/sr.h linux-2.5.70-bk9/drivers/scsi/sr.h
--- linux-2.5.70-bk8/drivers/scsi/sr.h	2003-05-26 18:00:38.000000000 -0700
+++ linux-2.5.70-bk9/drivers/scsi/sr.h	2003-06-04 04:37:32.000000000 -0700
@@ -25,8 +25,7 @@
 #define IOCTL_TIMEOUT 30*HZ
 
 typedef struct scsi_cd {
-	struct Scsi_Device_Template *driver;
-	struct list_head list;
+	struct scsi_driver *driver;
 	unsigned capacity;	/* size in blocks                       */
 	Scsi_Device *device;
 	unsigned int vendor;	/* vendor code, see sr_vendor.c         */
diff -urN linux-2.5.70-bk8/drivers/scsi/st.c linux-2.5.70-bk9/drivers/scsi/st.c
--- linux-2.5.70-bk8/drivers/scsi/st.c	2003-05-26 18:00:42.000000000 -0700
+++ linux-2.5.70-bk9/drivers/scsi/st.c	2003-06-04 04:37:32.000000000 -0700
@@ -170,22 +170,19 @@
 			      unsigned long, size_t, int);
 static int sgl_unmap_user_pages(struct scatterlist *, const unsigned int, int);
 
-static int st_attach(Scsi_Device *);
-static void st_detach(Scsi_Device *);
+static int st_probe(struct device *);
+static int st_remove(struct device *);
 
 static void do_create_driverfs_files(void);
 static void do_remove_driverfs_files(void);
 
 
-static struct Scsi_Device_Template st_template = {
-	.module =	THIS_MODULE,
-	.list =		LIST_HEAD_INIT(st_template.list),
-	.name =		"tape", 
-	.scsi_type =	TYPE_TAPE,
-	.attach =	st_attach, 
-	.detach =	st_detach,
-	.scsi_driverfs_driver = {
-		.name = "st",
+static struct scsi_driver st_template = {
+	.owner			= THIS_MODULE,
+	.gendrv = {
+		.name		= "st",
+		.probe		= st_probe,
+		.remove		= st_remove,
 	},
 };
 
@@ -3704,8 +3701,9 @@
 	.release =	st_release,
 };
 
-static int st_attach(Scsi_Device * SDp)
+static int st_probe(struct device *dev)
 {
+	struct scsi_device *SDp = to_scsi_device(dev);
 	struct gendisk *disk;
 	Scsi_Tape *tpnt;
 	ST_mode *STm;
@@ -3716,13 +3714,13 @@
 	u64 bounce_limit;
 
 	if (SDp->type != TYPE_TAPE)
-		return 1;
+		return -ENODEV;
 	if ((stp = st_incompatible(SDp))) {
 		printk(KERN_INFO
 		       "st: Found incompatible tape at scsi%d, channel %d, id %d, lun %d\n",
 		       SDp->host->host_no, SDp->channel, SDp->id, SDp->lun);
 		printk(KERN_INFO "st: The suggested driver is %s.\n", stp);
-		return 1;
+		return -ENODEV;
 	}
 
 	i = SDp->host->sg_tablesize;
@@ -3862,43 +3860,11 @@
 	write_unlock(&st_dev_arr_lock);
 
 	for (mode = 0; mode < ST_NBR_MODES; ++mode) {
-	    char name[8];
-
 	    /*  Rewind entry  */
-	    sprintf(name, "mt%s", st_formats[mode]);
-	    
-	    sprintf(tpnt->driverfs_dev_r[mode].bus_id, "%s:%s", 
-		    SDp->sdev_driverfs_dev.bus_id, name);
-	    sprintf(tpnt->driverfs_dev_r[mode].name, "%s%s", 
-		    SDp->sdev_driverfs_dev.name, name);
-	    tpnt->driverfs_dev_r[mode].parent = &SDp->sdev_driverfs_dev;
-	    tpnt->driverfs_dev_r[mode].bus = SDp->sdev_driverfs_dev.bus;
-	    tpnt->driverfs_dev_r[mode].driver_data =
-			(void *)(long)__mkdev(SCSI_TAPE_MAJOR, dev_num + (mode << 5));
-	    device_register(&tpnt->driverfs_dev_r[mode]);
-	    device_create_file(&tpnt->driverfs_dev_r[mode], 
-			       &dev_attr_type);
-	    device_create_file(&tpnt->driverfs_dev_r[mode], &dev_attr_kdev);
 	    devfs_mk_cdev(MKDEV(SCSI_TAPE_MAJOR, dev_num + (mode << 5)),
 				S_IFCHR | S_IRUGO | S_IWUGO,
 				"%s/mt%s", SDp->devfs_name, st_formats[mode]);
-
 	    /*  No-rewind entry  */
-	    sprintf (name, "mt%sn", st_formats[mode]);
-
-	    sprintf(tpnt->driverfs_dev_n[mode].bus_id, "%s:%s", 
-		    SDp->sdev_driverfs_dev.bus_id, name);
-	    sprintf(tpnt->driverfs_dev_n[mode].name, "%s%s", 
-		    SDp->sdev_driverfs_dev.name, name);
-	    tpnt->driverfs_dev_n[mode].parent= &SDp->sdev_driverfs_dev;
-	    tpnt->driverfs_dev_n[mode].bus = SDp->sdev_driverfs_dev.bus;
-	    tpnt->driverfs_dev_n[mode].driver_data =
-			(void *)(long)__mkdev(SCSI_TAPE_MAJOR, dev_num + (mode << 5) + 128);
-	    device_register(&tpnt->driverfs_dev_n[mode]);
-	    device_create_file(&tpnt->driverfs_dev_n[mode], 
-			       &dev_attr_type);
-	    device_create_file(&tpnt->driverfs_dev_n[mode], 
-			       &dev_attr_kdev);
 	    devfs_mk_cdev(MKDEV(SCSI_TAPE_MAJOR, dev_num + (mode << 5) + 128),
 				S_IFCHR | S_IRUGO | S_IWUGO,
 				"%s/mt%sn", SDp->devfs_name, st_formats[mode]);
@@ -3918,11 +3884,12 @@
 out_buffer_free:
 	kfree(buffer);
 out:
-	return 1;
+	return -ENODEV;
 };
 
-static void st_detach(Scsi_Device * SDp)
+static int st_remove(struct device *dev)
 {
+	Scsi_Device *SDp = to_scsi_device(dev);
 	Scsi_Tape *tpnt;
 	int i, mode;
 
@@ -3937,16 +3904,6 @@
 			for (mode = 0; mode < ST_NBR_MODES; ++mode) {
 				devfs_remove("%s/mt%s", SDp->devfs_name, st_formats[mode]);
 				devfs_remove("%s/mt%sn", SDp->devfs_name, st_formats[mode]);
-				device_remove_file(&tpnt->driverfs_dev_r[mode],
-						   &dev_attr_type);
-				device_remove_file(&tpnt->driverfs_dev_r[mode],
-						   &dev_attr_kdev);
-				device_unregister(&tpnt->driverfs_dev_r[mode]);
-				device_remove_file(&tpnt->driverfs_dev_n[mode],
-						   &dev_attr_type);
-				device_remove_file(&tpnt->driverfs_dev_n[mode],
-						   &dev_attr_kdev);
-				device_unregister(&tpnt->driverfs_dev_n[mode]);
 			}
 			tpnt->device = NULL;
 
@@ -3957,12 +3914,12 @@
 			}
 			put_disk(tpnt->disk);
 			kfree(tpnt);
-			return;
+			return 0;
 		}
 	}
 
 	write_unlock(&st_dev_arr_lock);
-	return;
+	return 0;
 }
 
 static int __init init_st(void)
@@ -3974,7 +3931,7 @@
 		verstr, st_fixed_buffer_size, st_max_sg_segs);
 
 	if (register_chrdev(SCSI_TAPE_MAJOR, "st", &st_fops) >= 0) {
-		if (scsi_register_device(&st_template) == 0) {
+		if (scsi_register_driver(&st_template.gendrv) == 0) {
 			do_create_driverfs_files();
 			return 0;
 		}
@@ -3987,20 +3944,10 @@
 
 static void __exit exit_st(void)
 {
-	int i;
-
 	do_remove_driverfs_files();
-	scsi_unregister_device(&st_template);
+	scsi_unregister_driver(&st_template.gendrv);
 	unregister_chrdev(SCSI_TAPE_MAJOR, "st");
-	if (scsi_tapes != NULL) {
-		for (i=0; i < st_dev_max; ++i)
-			if (scsi_tapes[i]) {
-				printk(KERN_WARNING "st: scsi_tapes[] not "
-				    "empty after scsi_unregister_device\n");
-				st_detach(scsi_tapes[i]->device);
-			}
-		kfree(scsi_tapes);
-	}
+	kfree(scsi_tapes);
 	printk(KERN_INFO "st: Unloaded.\n");
 }
 
@@ -4035,7 +3982,7 @@
 
 static void do_create_driverfs_files(void)
 {
-	struct device_driver *driverfs = &st_template.scsi_driverfs_driver;
+	struct device_driver *driverfs = &st_template.gendrv;
 
 	driver_create_file(driverfs, &driver_attr_try_direct_io);
 	driver_create_file(driverfs, &driver_attr_fixed_buffer_size);
@@ -4045,7 +3992,7 @@
 
 static void do_remove_driverfs_files(void)
 {
-	struct device_driver *driverfs = &st_template.scsi_driverfs_driver;
+	struct device_driver *driverfs = &st_template.gendrv;
 
 	driver_remove_file(driverfs, &driver_attr_version);
 	driver_remove_file(driverfs, &driver_attr_max_sg_segs);
diff -urN linux-2.5.70-bk8/drivers/scsi/st.h linux-2.5.70-bk9/drivers/scsi/st.h
--- linux-2.5.70-bk8/drivers/scsi/st.h	2003-05-26 18:00:46.000000000 -0700
+++ linux-2.5.70-bk9/drivers/scsi/st.h	2003-06-04 04:37:32.000000000 -0700
@@ -70,7 +70,7 @@
 
 /* The tape drive descriptor */
 typedef struct {
-	struct Scsi_Device_Template *driver;
+	struct scsi_driver *driver;
 	Scsi_Device *device;
 	struct semaphore lock;	/* For serialization */
 	struct completion wait;	/* For SCSI commands */
@@ -103,8 +103,6 @@
 	/* Mode characteristics */
 	ST_mode modes[ST_NBR_MODES];
 	int current_mode;
-	struct device driverfs_dev_r[ST_NBR_MODES];
-	struct device driverfs_dev_n[ST_NBR_MODES];
 
 	/* Status variables */
 	int partition;
diff -urN linux-2.5.70-bk8/drivers/video/matrox/matroxfb_base.h linux-2.5.70-bk9/drivers/video/matrox/matroxfb_base.h
--- linux-2.5.70-bk8/drivers/video/matrox/matroxfb_base.h	2003-06-04 04:37:18.000000000 -0700
+++ linux-2.5.70-bk9/drivers/video/matrox/matroxfb_base.h	2003-06-04 04:37:35.000000000 -0700
@@ -52,7 +52,7 @@
 
 #include "../console/fbcon.h"
 
-#if defined(CONFIG_PPC)
+#if defined(CONFIG_ALL_PPC)
 #include <asm/prom.h>
 #include <asm/pci-bridge.h>
 #include <video/macmodes.h>
diff -urN linux-2.5.70-bk8/fs/bio.c linux-2.5.70-bk9/fs/bio.c
--- linux-2.5.70-bk8/fs/bio.c	2003-06-04 04:37:18.000000000 -0700
+++ linux-2.5.70-bk9/fs/bio.c	2003-06-04 04:37:35.000000000 -0700
@@ -53,7 +53,7 @@
  * unsigned short
  */
 
-#define BV(x) { x, "biovec-" #x }
+#define BV(x) { .nr_vecs = x, .name = "biovec-" #x }
 static struct biovec_pool bvec_array[BIOVEC_NR_POOLS] = {
 	BV(1), BV(4), BV(16), BV(64), BV(128), BV(BIO_MAX_PAGES),
 };
diff -urN linux-2.5.70-bk8/fs/dquot.c linux-2.5.70-bk9/fs/dquot.c
--- linux-2.5.70-bk8/fs/dquot.c	2003-05-26 18:00:43.000000000 -0700
+++ linux-2.5.70-bk9/fs/dquot.c	2003-06-04 04:37:35.000000000 -0700
@@ -1348,25 +1348,91 @@
 };
 
 static ctl_table fs_dqstats_table[] = {
-	{FS_DQ_LOOKUPS, "lookups", &dqstats.lookups, sizeof(int), 0444, NULL, &proc_dointvec},
-	{FS_DQ_DROPS, "drops", &dqstats.drops, sizeof(int), 0444, NULL, &proc_dointvec},
-	{FS_DQ_READS, "reads", &dqstats.reads, sizeof(int), 0444, NULL, &proc_dointvec},
-	{FS_DQ_WRITES, "writes", &dqstats.writes, sizeof(int), 0444, NULL, &proc_dointvec},
-	{FS_DQ_CACHE_HITS, "cache_hits", &dqstats.cache_hits, sizeof(int), 0444, NULL, &proc_dointvec},
-	{FS_DQ_ALLOCATED, "allocated_dquots", &dqstats.allocated_dquots, sizeof(int), 0444, NULL, &proc_dointvec},
-	{FS_DQ_FREE, "free_dquots", &dqstats.free_dquots, sizeof(int), 0444, NULL, &proc_dointvec},
-	{FS_DQ_SYNCS, "syncs", &dqstats.syncs, sizeof(int), 0444, NULL, &proc_dointvec},
-	{},
+	{
+		.ctl_name	= FS_DQ_LOOKUPS,
+		.procname	= "lookups",
+		.data		= &dqstats.lookups,
+		.maxlen		= sizeof(int),
+		.mode		= 0444,
+		.proc_handler	= &proc_dointvec,
+	},
+	{
+		.ctl_name	= FS_DQ_DROPS,
+		.procname	= "drops",
+		.data		= &dqstats.drops,
+		.maxlen		= sizeof(int),
+		.mode		= 0444,
+		.proc_handler	= &proc_dointvec,
+	},
+	{
+		.ctl_name	= FS_DQ_READS,
+		.procname	= "reads",
+		.data		= &dqstats.reads,
+		.maxlen		= sizeof(int),
+		.mode		= 0444,
+		.proc_handler	= &proc_dointvec,
+	},
+	{
+		.ctl_name	= FS_DQ_WRITES,
+		.procname	= "writes",
+		.data		= &dqstats.writes,
+		.maxlen		= sizeof(int),
+		.mode		= 0444,
+		.proc_handler	= &proc_dointvec,
+	},
+	{
+		.ctl_name	= FS_DQ_CACHE_HITS,
+		.procname	= "cache_hits",
+		.data		= &dqstats.cache_hits,
+		.maxlen		= sizeof(int),
+		.mode		= 0444,
+		.proc_handler	= &proc_dointvec,
+	},
+	{
+		.ctl_name	= FS_DQ_ALLOCATED,
+		.procname	= "allocated_dquots",
+		.data		= &dqstats.allocated_dquots,
+		.maxlen		= sizeof(int),
+		.mode		= 0444,
+		.proc_handler	= &proc_dointvec,
+	},
+	{
+		.ctl_name	= FS_DQ_FREE,
+		.procname	= "free_dquots",
+		.data		= &dqstats.free_dquots,
+		.maxlen		= sizeof(int),
+		.mode		= 0444,
+		.proc_handler	= &proc_dointvec,
+	},
+	{
+		.ctl_name	= FS_DQ_SYNCS,
+		.procname	= "syncs",
+		.data		= &dqstats.syncs,
+		.maxlen		= sizeof(int),
+		.mode		= 0444,
+		.proc_handler	= &proc_dointvec,
+	},
+	{ .ctl_name = 0 },
 };
 
 static ctl_table fs_table[] = {
-	{FS_DQSTATS, "quota", NULL, 0, 0555, fs_dqstats_table},
-	{},
+	{
+		.ctl_name	= FS_DQSTATS,
+		.procname	= "quota",
+		.mode		= 0555,
+		.child		= fs_dqstats_table,
+	},
+	{ .ctl_name = 0 },
 };
 
 static ctl_table sys_table[] = {
-	{CTL_FS, "fs", NULL, 0, 0555, fs_table},
-	{},
+	{
+		.ctl_name	= CTL_FS,
+		.procname	= "fs",
+		.mode		= 0555,
+		.child		= fs_table,
+	},
+	{ .ctl_name = 0 },
 };
 
 /* SLAB cache for dquot structures */
diff -urN linux-2.5.70-bk8/fs/libfs.c linux-2.5.70-bk9/fs/libfs.c
--- linux-2.5.70-bk8/fs/libfs.c	2003-05-26 18:00:20.000000000 -0700
+++ linux-2.5.70-bk9/fs/libfs.c	2003-06-04 04:37:35.000000000 -0700
@@ -336,7 +336,7 @@
 
 int simple_fill_super(struct super_block *s, int magic, struct tree_descr *files)
 {
-	static struct super_operations s_ops = {statfs:simple_statfs};
+	static struct super_operations s_ops = {.statfs = simple_statfs};
 	struct inode *inode;
 	struct dentry *root;
 	struct dentry *dentry;
diff -urN linux-2.5.70-bk8/fs/sysfs/bin.c linux-2.5.70-bk9/fs/sysfs/bin.c
--- linux-2.5.70-bk8/fs/sysfs/bin.c	2003-05-26 18:00:40.000000000 -0700
+++ linux-2.5.70-bk9/fs/sysfs/bin.c	2003-06-04 04:37:35.000000000 -0700
@@ -30,10 +30,15 @@
 	loff_t offs = *off;
 	int ret;
 
-	if (offs > size)
-		return 0;
-	if (offs + count > size)
-		count = size - offs;
+	if (count > PAGE_SIZE)
+		count = PAGE_SIZE;
+
+	if (size) {
+		if (offs > size)
+			return 0;
+		if (offs + count > size)
+			count = size - offs;
+	}
 
 	ret = fill_read(dentry, buffer, offs, count);
 	if (ret < 0) 
@@ -41,7 +46,7 @@
 	count = ret;
 
 	ret = -EFAULT;
-	if (copy_to_user(userbuf, buffer + offs, count) != 0)
+	if (copy_to_user(userbuf, buffer, count) != 0)
 		goto Done;
 
 	*off = offs + count;
@@ -69,19 +74,23 @@
 	loff_t offs = *off;
 	int ret;
 
-	if (offs > size)
-		return 0;
-	if (offs + count > size)
-		count = size - offs;
+	if (count > PAGE_SIZE)
+		count = PAGE_SIZE;
+	if (size) {
+		if (offs > size)
+			return 0;
+		if (offs + count > size)
+			count = size - offs;
+	}
 
 	ret = -EFAULT;
-	if (copy_from_user(buffer + offs, userbuf, count))
+	if (copy_from_user(buffer, userbuf, count))
 		goto Done;
 
 	count = flush_write(dentry, buffer, offs, count);
 	if (count > 0)
 		*off = offs + count;
-	ret = 0;
+	ret = count;
  Done:
 	return ret;
 }
@@ -102,7 +111,7 @@
 		goto Done;
 
 	error = -ENOMEM;
-	file->private_data = kmalloc(attr->size, GFP_KERNEL);
+	file->private_data = kmalloc(PAGE_SIZE, GFP_KERNEL);
 	if (!file->private_data)
 		goto Done;
 
diff -urN linux-2.5.70-bk8/fs/sysfs/inode.c linux-2.5.70-bk9/fs/sysfs/inode.c
--- linux-2.5.70-bk8/fs/sysfs/inode.c	2003-05-26 18:00:55.000000000 -0700
+++ linux-2.5.70-bk9/fs/sysfs/inode.c	2003-06-04 04:37:35.000000000 -0700
@@ -60,9 +60,10 @@
  Proceed:
 	if (init)
 		error = init(inode);
-	if (!error)
+	if (!error) {
 		d_instantiate(dentry, inode);
-	else
+		dget(dentry); /* Extra count - pin the dentry in core */
+	} else
 		iput(inode);
  Done:
 	return error;
diff -urN linux-2.5.70-bk8/include/asm-i386/smp.h linux-2.5.70-bk9/include/asm-i386/smp.h
--- linux-2.5.70-bk8/include/asm-i386/smp.h	2003-05-26 18:00:41.000000000 -0700
+++ linux-2.5.70-bk9/include/asm-i386/smp.h	2003-06-04 04:37:35.000000000 -0700
@@ -41,7 +41,6 @@
 extern void smp_flush_tlb(void);
 extern void smp_message_irq(int cpl, void *dev_id, struct pt_regs *regs);
 extern void smp_send_reschedule(int cpu);
-extern void smp_send_reschedule_all(void);
 extern void smp_invalidate_rcv(void);		/* Process an NMI */
 extern void (*mtrr_hook) (void);
 extern void zap_low_mappings (void);
diff -urN linux-2.5.70-bk8/include/asm-ia64/smp.h linux-2.5.70-bk9/include/asm-ia64/smp.h
--- linux-2.5.70-bk8/include/asm-ia64/smp.h	2003-05-26 18:00:40.000000000 -0700
+++ linux-2.5.70-bk9/include/asm-ia64/smp.h	2003-06-04 04:37:35.000000000 -0700
@@ -136,8 +136,6 @@
 extern int smp_call_function_single (int cpuid, void (*func) (void *info), void *info,
 				     int retry, int wait);
 extern void smp_send_reschedule (int cpu);
-extern void smp_send_reschedule_all (void);
-
 
 #endif /* CONFIG_SMP */
 #endif /* _ASM_IA64_SMP_H */
diff -urN linux-2.5.70-bk8/include/asm-ppc64/elf.h linux-2.5.70-bk9/include/asm-ppc64/elf.h
--- linux-2.5.70-bk8/include/asm-ppc64/elf.h	2003-05-26 18:00:45.000000000 -0700
+++ linux-2.5.70-bk9/include/asm-ppc64/elf.h	2003-06-04 04:37:35.000000000 -0700
@@ -97,18 +97,43 @@
 
 #define ELF_ET_DYN_BASE         (0x08000000)
 
+#ifdef __KERNEL__
+
 /* Common routine for both 32-bit and 64-bit processes */
-#define ELF_CORE_COPY_REGS(gregs, regs) ppc64_elf_core_copy_regs(gregs, regs);
-static inline void
-ppc64_elf_core_copy_regs(elf_gregset_t dstRegs, struct pt_regs* srcRegs)
+static inline void ppc64_elf_core_copy_regs(elf_gregset_t elf_regs,
+					    struct pt_regs *regs)
 {
 	int i;
+	int gprs = sizeof(struct pt_regs)/sizeof(elf_greg_t64);
 
-	int numGPRS = ((sizeof(struct pt_regs)/sizeof(elf_greg_t64)) < ELF_NGREG) ? (sizeof(struct pt_regs)/sizeof(elf_greg_t64)) : ELF_NGREG;
+	if (gprs > ELF_NGREG)
+		gprs = ELF_NGREG;
 
-	for (i=0; i < numGPRS; i++)
-		dstRegs[i] = (elf_greg_t)((elf_greg_t64 *)srcRegs)[i];
+	for (i=0; i < gprs; i++)
+		elf_regs[i] = (elf_greg_t)((elf_greg_t64 *)regs)[i];
 }
+#define ELF_CORE_COPY_REGS(gregs, regs) ppc64_elf_core_copy_regs(gregs, regs);
+
+static inline int dump_task_regs(struct task_struct *tsk,
+				 elf_gregset_t *elf_regs)
+{
+	struct pt_regs *regs = tsk->thread.regs;
+	if (regs)
+		ppc64_elf_core_copy_regs(*elf_regs, regs);
+
+	return 1;
+}
+#define ELF_CORE_COPY_TASK_REGS(tsk, elf_regs) dump_task_regs(tsk, elf_regs)
+
+extern int dump_task_fpu(struct task_struct *, elf_fpregset_t *); 
+#define ELF_CORE_COPY_FPREGS(tsk, elf_fpregs) dump_task_fpu(tsk, elf_fpregs)
+
+#ifdef CONFIG_SMP
+extern void dump_smp_unlazy_fpu(void);
+#define ELF_CORE_SYNC dump_smp_unlazy_fpu
+#endif
+
+#endif
 
 /* This yields a mask that user programs can use to figure out what
    instruction set this cpu supports.  This could be done in userspace,
diff -urN linux-2.5.70-bk8/include/asm-ppc64/paca.h linux-2.5.70-bk9/include/asm-ppc64/paca.h
--- linux-2.5.70-bk8/include/asm-ppc64/paca.h	2003-05-26 18:00:38.000000000 -0700
+++ linux-2.5.70-bk9/include/asm-ppc64/paca.h	2003-06-04 04:37:35.000000000 -0700
@@ -33,17 +33,6 @@
 #include	<asm/mmu.h>
 #include	<asm/processor.h>
 
-/* A paca entry is required for each logical processor.  On systems
- * that support hardware multi-threading, this is equal to twice the
- * number of physical processors.  On LPAR systems, we are required
- * to have space for the maximum number of logical processors we
- * could ever possibly have.  Currently, we are limited to allocating
- * 24 processors to a partition which gives 48 logical processors on
- * an HMT box.  Therefore, we reserve this many paca entries.
- */
-#define MAX_PROCESSORS 24
-#define MAX_PACAS MAX_PROCESSORS * 2
-
 extern struct paca_struct paca[];
 register struct paca_struct *local_paca asm("r13");
 #define get_paca()	local_paca
diff -urN linux-2.5.70-bk8/include/asm-ppc64/pci-bridge.h linux-2.5.70-bk9/include/asm-ppc64/pci-bridge.h
--- linux-2.5.70-bk8/include/asm-ppc64/pci-bridge.h	2003-05-26 18:00:22.000000000 -0700
+++ linux-2.5.70-bk9/include/asm-ppc64/pci-bridge.h	2003-06-04 04:37:35.000000000 -0700
@@ -77,7 +77,7 @@
 static inline struct device_node *pci_device_to_OF_node(struct pci_dev *dev)
 {
 	struct device_node *dn = (struct device_node *)(dev->sysdata);
-	if (dn->devfn == dev->devfn && dn->busno == dev->bus->number)
+	if (dn->devfn == dev->devfn && dn->busno == (dev->bus->number&0xff))
 		return dn;	/* fast path.  sysdata is good */
 	else
 		return fetch_dev_dn(dev);
diff -urN linux-2.5.70-bk8/include/asm-ppc64/signal.h linux-2.5.70-bk9/include/asm-ppc64/signal.h
--- linux-2.5.70-bk8/include/asm-ppc64/signal.h	2003-05-26 18:00:39.000000000 -0700
+++ linux-2.5.70-bk9/include/asm-ppc64/signal.h	2003-06-04 04:37:35.000000000 -0700
@@ -2,6 +2,7 @@
 #define _ASMPPC64_SIGNAL_H
 
 #include <linux/types.h>
+#include <asm/siginfo.h>
 
 /* Avoid too many header ordering problems.  */
 struct siginfo;
@@ -72,19 +73,19 @@
  * SA_ONESHOT and SA_NOMASK are the historical Linux names for the Single
  * Unix names RESETHAND and NODEFER respectively.
  */
-#define SA_NOCLDSTOP	0x00000001
-#define SA_NOCLDWAIT	0x00000002
-#define SA_SIGINFO	0x00000004
-#define SA_ONSTACK	0x08000000
-#define SA_RESTART	0x10000000
-#define SA_NODEFER	0x40000000
-#define SA_RESETHAND	0x80000000
+#define SA_NOCLDSTOP	0x00000001u
+#define SA_NOCLDWAIT	0x00000002u
+#define SA_SIGINFO	0x00000004u
+#define SA_ONSTACK	0x08000000u
+#define SA_RESTART	0x10000000u
+#define SA_NODEFER	0x40000000u
+#define SA_RESETHAND	0x80000000u
 
 #define SA_NOMASK	SA_NODEFER
 #define SA_ONESHOT	SA_RESETHAND
-#define SA_INTERRUPT	0x20000000 /* dummy -- ignored */
+#define SA_INTERRUPT	0x20000000u /* dummy -- ignored */
 
-#define SA_RESTORER	0x04000000
+#define SA_RESTORER	0x04000000u
 
 /* 
  * sigaltstack controls
@@ -143,6 +144,16 @@
 	size_t ss_size;
 } stack_t;
 
+struct pt_regs;
+struct timespec;
+extern int do_signal(sigset_t *oldset, struct pt_regs *regs);
+extern int do_signal32(sigset_t *oldset, struct pt_regs *regs);
+extern long sys_rt_sigprocmask(int how, sigset_t *set, sigset_t *oset,
+			       size_t sigsetsize);
+extern long sys_rt_sigpending(sigset_t *set, size_t sigsetsize);
+extern long sys_rt_sigtimedwait(const sigset_t *uthese, siginfo_t *uinfo,
+				const struct timespec *uts, size_t sigsetsize);
+extern long sys_rt_sigqueueinfo(int pid, int sig, siginfo_t *uinfo);
 #define ptrace_signal_deliver(regs, cookie) do { } while (0)
 
 struct pt_regs;
diff -urN linux-2.5.70-bk8/include/asm-ppc64/smp.h linux-2.5.70-bk9/include/asm-ppc64/smp.h
--- linux-2.5.70-bk8/include/asm-ppc64/smp.h	2003-05-26 18:00:19.000000000 -0700
+++ linux-2.5.70-bk9/include/asm-ppc64/smp.h	2003-06-04 04:37:35.000000000 -0700
@@ -34,7 +34,6 @@
 extern void smp_send_xmon_break(int cpu);
 struct pt_regs;
 extern void smp_message_recv(int, struct pt_regs *);
-extern void smp_send_reschedule_all(void);
 
 #define NO_PROC_ID		0xFF            /* No processor magic marker */
 
diff -urN linux-2.5.70-bk8/include/asm-ppc64/system.h linux-2.5.70-bk9/include/asm-ppc64/system.h
--- linux-2.5.70-bk8/include/asm-ppc64/system.h	2003-05-26 18:01:00.000000000 -0700
+++ linux-2.5.70-bk9/include/asm-ppc64/system.h	2003-06-04 04:37:35.000000000 -0700
@@ -83,6 +83,7 @@
 extern void flush_instruction_cache(void);
 extern int _get_PVR(void);
 extern void giveup_fpu(struct task_struct *);
+extern void disable_kernel_fp(void);
 extern void enable_kernel_fp(void);
 extern void cvt_fd(float *from, double *to, unsigned long *fpscr);
 extern void cvt_df(double *from, float *to, unsigned long *fpscr);
diff -urN linux-2.5.70-bk8/include/asm-ppc64/uaccess.h linux-2.5.70-bk9/include/asm-ppc64/uaccess.h
--- linux-2.5.70-bk8/include/asm-ppc64/uaccess.h	2003-05-26 18:00:40.000000000 -0700
+++ linux-2.5.70-bk9/include/asm-ppc64/uaccess.h	2003-06-04 04:37:35.000000000 -0700
@@ -206,6 +206,7 @@
 		return __copy_tofrom_user(to, from, n);
 	if ((unsigned long)from < TASK_SIZE) {
 		over = (unsigned long)from + n - TASK_SIZE;
+		memset(to + over, 0, over);
 		return __copy_tofrom_user(to, from, n - over) + over;
 	}
 	return n;
diff -urN linux-2.5.70-bk8/include/asm-x86_64/smp.h linux-2.5.70-bk9/include/asm-x86_64/smp.h
--- linux-2.5.70-bk8/include/asm-x86_64/smp.h	2003-05-26 18:00:20.000000000 -0700
+++ linux-2.5.70-bk9/include/asm-x86_64/smp.h	2003-06-04 04:37:35.000000000 -0700
@@ -42,7 +42,6 @@
 extern void smp_flush_tlb(void);
 extern void smp_message_irq(int cpl, void *dev_id, struct pt_regs *regs);
 extern void smp_send_reschedule(int cpu);
-extern void smp_send_reschedule_all(void);
 extern void smp_invalidate_rcv(void);		/* Process an NMI */
 extern void (*mtrr_hook) (void);
 extern void zap_low_mappings(void);
diff -urN linux-2.5.70-bk8/include/linux/device.h linux-2.5.70-bk9/include/linux/device.h
--- linux-2.5.70-bk8/include/linux/device.h	2003-05-26 18:00:57.000000000 -0700
+++ linux-2.5.70-bk9/include/linux/device.h	2003-06-04 04:37:35.000000000 -0700
@@ -3,21 +3,9 @@
  *
  * Copyright (c) 2001-2003 Patrick Mochel <mochel@osdl.org>
  *
- * This is a relatively simple centralized driver model.
- * The data structures were mainly lifted directly from the PCI
- * driver model. These are thought to be the common fields that
- * are relevant to all device buses.
+ * This file is released under the GPLv2
  *
- * All the devices are arranged in a tree. All devices should
- * have some sort of parent bus of whom they are children of.
- * Devices should not be direct children of the system root.
- *
- * Device drivers should not directly call the device_* routines
- * or access the contents of struct device directly. Instead,
- * abstract that from the drivers and write bus-specific wrappers
- * that do it for you.
- *
- * See Documentation/driver-model.txt for more information.
+ * See Documentation/driver-model/ for more information.
  */
 
 #ifndef _DEVICE_H_
@@ -169,6 +157,8 @@
 
 	int	(*hotplug)(struct class_device *dev, char **envp, 
 			   int num_envp, char *buffer, int buffer_size);
+
+	void	(*release)(struct class_device *dev);
 };
 
 extern int class_register(struct class *);
@@ -204,6 +194,7 @@
 	void			* class_data;	/* class-specific data */
 
 	char	class_id[BUS_ID_SIZE];	/* unique to this class */
+	void	(*release)(struct class_device * class_dev);
 };
 
 static inline void *
diff -urN linux-2.5.70-bk8/include/linux/fcdevice.h linux-2.5.70-bk9/include/linux/fcdevice.h
--- linux-2.5.70-bk8/include/linux/fcdevice.h	2003-05-26 18:00:27.000000000 -0700
+++ linux-2.5.70-bk9/include/linux/fcdevice.h	2003-06-04 04:37:35.000000000 -0700
@@ -33,11 +33,7 @@
 extern int		fc_rebuild_header(struct sk_buff *skb);
 extern unsigned short	fc_type_trans(struct sk_buff *skb, struct net_device *dev); 
 
-extern struct net_device *init_fcdev(struct net_device *dev, int sizeof_priv);
 extern struct net_device *alloc_fcdev(int sizeof_priv);
-extern int register_fcdev(struct net_device *dev);
-extern void unregister_fcdev(struct net_device *dev);
-
 #endif
 
 #endif	/* _LINUX_FCDEVICE_H */
diff -urN linux-2.5.70-bk8/include/linux/fddidevice.h linux-2.5.70-bk9/include/linux/fddidevice.h
--- linux-2.5.70-bk8/include/linux/fddidevice.h	2003-05-26 18:00:37.000000000 -0700
+++ linux-2.5.70-bk9/include/linux/fddidevice.h	2003-06-04 04:37:35.000000000 -0700
@@ -34,7 +34,6 @@
 extern int		fddi_rebuild_header(struct sk_buff *skb);
 extern unsigned short	fddi_type_trans(struct sk_buff *skb,
 				struct net_device *dev);
-extern struct net_device *init_fddidev(struct net_device *dev, int sizeof_priv);
 extern struct net_device *alloc_fddidev(int sizeof_priv);
 #endif
 
diff -urN linux-2.5.70-bk8/include/linux/hippidevice.h linux-2.5.70-bk9/include/linux/hippidevice.h
--- linux-2.5.70-bk8/include/linux/hippidevice.h	2003-05-26 18:01:01.000000000 -0700
+++ linux-2.5.70-bk9/include/linux/hippidevice.h	2003-06-04 04:37:35.000000000 -0700
@@ -49,12 +49,8 @@
 extern int hippi_header_parse(struct sk_buff *skb, unsigned char *haddr);
 
 extern void hippi_net_init(void);
-void hippi_setup(struct net_device *dev);
 
-extern struct net_device *init_hippi_dev(struct net_device *dev, int sizeof_priv);
 extern struct net_device *alloc_hippi_dev(int sizeof_priv);
-extern int register_hipdev(struct net_device *dev);
-extern void unregister_hipdev(struct net_device *dev);
 #endif
 
 #endif	/* _LINUX_HIPPIDEVICE_H */
diff -urN linux-2.5.70-bk8/include/linux/ide.h linux-2.5.70-bk9/include/linux/ide.h
--- linux-2.5.70-bk8/include/linux/ide.h	2003-06-04 04:37:18.000000000 -0700
+++ linux-2.5.70-bk9/include/linux/ide.h	2003-06-04 04:37:35.000000000 -0700
@@ -1115,7 +1115,6 @@
 #ifdef CONFIG_PROC_FS
 extern void proc_ide_create(void);
 extern void proc_ide_destroy(void);
-extern void recreate_proc_ide_device(ide_hwif_t *, ide_drive_t *);
 extern void destroy_proc_ide_device(ide_hwif_t *, ide_drive_t *);
 extern void destroy_proc_ide_drives(ide_hwif_t *);
 extern void create_proc_ide_interfaces(void);
diff -urN linux-2.5.70-bk8/include/linux/kobject.h linux-2.5.70-bk9/include/linux/kobject.h
--- linux-2.5.70-bk8/include/linux/kobject.h	2003-05-26 18:00:21.000000000 -0700
+++ linux-2.5.70-bk9/include/linux/kobject.h	2003-06-04 04:37:35.000000000 -0700
@@ -1,6 +1,15 @@
 /*
  * kobject.h - generic kernel object infrastructure.
  *
+ * Copyright (c) 2002-2003	Patrick Mochel
+ * Copyright (c) 2002-2003	Open Source Development Labs
+ *
+ * This file is released under the GPLv2.
+ *
+ * 
+ * Please read Documentation/kobject.txt before using the kobject
+ * interface, ESPECIALLY the parts about reference counts and object
+ * destructors. 
  */
 
 #if defined(__KERNEL__) && !defined(_KOBJECT_H_)
diff -urN linux-2.5.70-bk8/include/linux/signal.h linux-2.5.70-bk9/include/linux/signal.h
--- linux-2.5.70-bk8/include/linux/signal.h	2003-06-04 04:37:18.000000000 -0700
+++ linux-2.5.70-bk9/include/linux/signal.h	2003-06-04 04:37:35.000000000 -0700
@@ -1,9 +1,10 @@
 #ifndef _LINUX_SIGNAL_H
 #define _LINUX_SIGNAL_H
 
+#include <linux/list.h>
+#include <linux/spinlock.h>
 #include <asm/signal.h>
 #include <asm/siginfo.h>
-#include <linux/list.h>
 
 #ifdef __KERNEL__
 /*
diff -urN linux-2.5.70-bk8/include/linux/smp.h linux-2.5.70-bk9/include/linux/smp.h
--- linux-2.5.70-bk8/include/linux/smp.h	2003-05-26 18:00:40.000000000 -0700
+++ linux-2.5.70-bk9/include/linux/smp.h	2003-06-04 04:37:35.000000000 -0700
@@ -110,7 +110,6 @@
 #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) { }
-static inline void smp_send_reschedule_all(void) { }
 #define cpu_online_map				1
 #define cpu_online(cpu)				({ BUG_ON((cpu) != 0); 1; })
 #define num_online_cpus()			1
diff -urN linux-2.5.70-bk8/include/linux/sysfs.h linux-2.5.70-bk9/include/linux/sysfs.h
--- linux-2.5.70-bk8/include/linux/sysfs.h	2003-05-26 18:00:38.000000000 -0700
+++ linux-2.5.70-bk9/include/linux/sysfs.h	2003-06-04 04:37:35.000000000 -0700
@@ -23,6 +23,9 @@
 	ssize_t (*write)(struct kobject *, char *, loff_t, size_t);
 };
 
+int sysfs_create_bin_file(struct kobject * kobj, struct bin_attribute * attr);
+int sysfs_remove_bin_file(struct kobject * kobj, struct bin_attribute * attr);
+
 struct sysfs_ops {
 	ssize_t	(*show)(struct kobject *, struct attribute *,char *);
 	ssize_t	(*store)(struct kobject *,struct attribute *,const char *, size_t);
diff -urN linux-2.5.70-bk8/include/linux/trdevice.h linux-2.5.70-bk9/include/linux/trdevice.h
--- linux-2.5.70-bk8/include/linux/trdevice.h	2003-05-26 18:00:26.000000000 -0700
+++ linux-2.5.70-bk9/include/linux/trdevice.h	2003-06-04 04:37:35.000000000 -0700
@@ -34,10 +34,7 @@
 extern int		tr_rebuild_header(struct sk_buff *skb);
 extern unsigned short	tr_type_trans(struct sk_buff *skb, struct net_device *dev);
 extern void tr_source_route(struct sk_buff *skb, struct trh_hdr *trh, struct net_device *dev);
-extern struct net_device *init_trdev(struct net_device *dev, int sizeof_priv);
 extern struct net_device *alloc_trdev(int sizeof_priv);
-extern int register_trdev(struct net_device *dev);
-extern void unregister_trdev(struct net_device *dev);
 
 #endif
 
diff -urN linux-2.5.70-bk8/include/scsi/sg.h linux-2.5.70-bk9/include/scsi/sg.h
--- linux-2.5.70-bk8/include/scsi/sg.h	2003-05-26 18:00:38.000000000 -0700
+++ linux-2.5.70-bk9/include/scsi/sg.h	2003-06-04 04:37:35.000000000 -0700
@@ -9,11 +9,18 @@
 Original driver (sg.h):
 *       Copyright (C) 1992 Lawrence Foard
 Version 2 and 3 extensions to driver:
-*       Copyright (C) 1998 - 2002 Douglas Gilbert
+*       Copyright (C) 1998 - 2003 Douglas Gilbert
 
-    Version: 3.5.27 (20020812)
+    Version: 3.5.29 (20030529)
     This version is for 2.5 series kernels.
 
+    Changes since 3.5.28 (20030308)
+	- fix bug introduced in version 3.1.24 (last segment of sgat list)
+    Changes since 3.5.27 (20020812)
+    	- remove procfs entries: hosts, host_hdr + host_strs (now in sysfs)
+	- add sysfs sg driver params: def_reserved_size, allow_dio, version
+	- new boot option: "sg_allow_dio" and module parameter: "allow_dio"
+        - multiple internal changes due to scsi subsystem rework	
     Changes since 3.5.26 (20020708)
 	- re-add direct IO using Kai Makisara's work
 	- re-tab to 8, start using C99-isms
@@ -237,7 +244,7 @@
    read/written by a single scsi command. The user can find the value of
    PAGE_SIZE by calling getpagesize() defined in unistd.h . */
 
-#define SG_DEFAULT_RETRIES 1
+#define SG_DEFAULT_RETRIES 0
 
 /* Defaults, commented if they differ from original sg driver */
 #define SG_DEF_FORCE_LOW_DMA 0  /* was 1 -> memory below 16MB on i386 */
diff -urN linux-2.5.70-bk8/kernel/exec_domain.c linux-2.5.70-bk9/kernel/exec_domain.c
--- linux-2.5.70-bk8/kernel/exec_domain.c	2003-05-26 18:00:41.000000000 -0700
+++ linux-2.5.70-bk9/kernel/exec_domain.c	2003-06-04 04:37:35.000000000 -0700
@@ -32,11 +32,12 @@
 };
 
 struct exec_domain default_exec_domain = {
-	"Linux",		/* name */
-	default_handler,	/* lcall7 causes a seg fault. */
-	0, 0,			/* PER_LINUX personality. */
-	ident_map,		/* Identity map signals. */
-	ident_map,		/*  - both ways. */
+	.name		= "Linux",		/* name */
+	.handler	= default_handler,	/* lcall7 causes a seg fault. */
+	.pers_low	= 0, 			/* PER_LINUX personality. */
+	.pers_high	= 0,			/* PER_LINUX personality. */
+	.signal_map	= ident_map,		/* Identity map signals. */
+	.signal_invmap	= ident_map,		/*  - both ways. */
 };
 
 
@@ -247,24 +248,65 @@
 int abi_fake_utsname;
 
 static struct ctl_table abi_table[] = {
-	{ABI_DEFHANDLER_COFF, "defhandler_coff", &abi_defhandler_coff,
-		sizeof(int), 0644, NULL, &proc_doulongvec_minmax},
-	{ABI_DEFHANDLER_ELF, "defhandler_elf", &abi_defhandler_elf,
-		sizeof(int), 0644, NULL, &proc_doulongvec_minmax},
-	{ABI_DEFHANDLER_LCALL7, "defhandler_lcall7", &abi_defhandler_lcall7,
-		sizeof(int), 0644, NULL, &proc_doulongvec_minmax},
-	{ABI_DEFHANDLER_LIBCSO, "defhandler_libcso", &abi_defhandler_libcso,
-		sizeof(int), 0644, NULL, &proc_doulongvec_minmax},
-	{ABI_TRACE, "trace", &abi_traceflg,
-		sizeof(u_int), 0644, NULL, &proc_dointvec},
-	{ABI_FAKE_UTSNAME, "fake_utsname", &abi_fake_utsname,
-		sizeof(int), 0644, NULL, &proc_dointvec},
-	{0}
+	{
+		.ctl_name	= ABI_DEFHANDLER_COFF,
+		.procname	= "defhandler_coff",
+		.data		= &abi_defhandler_coff,
+		.maxlen		= sizeof(int),
+		.mode		= 0644,
+		.proc_handler	= &proc_doulongvec_minmax,
+	},
+	{
+		.ctl_name	= ABI_DEFHANDLER_ELF,
+		.procname	= "defhandler_elf",
+		.data		= &abi_defhandler_elf,
+		.maxlen		= sizeof(int),
+		.mode		= 0644,
+		.proc_handler	= &proc_doulongvec_minmax,
+	},
+	{
+		.ctl_name	= ABI_DEFHANDLER_LCALL7,
+		.procname	= "defhandler_lcall7",
+		.data		= &abi_defhandler_lcall7,
+		.maxlen		= sizeof(int),
+		.mode		= 0644,
+		.proc_handler	= &proc_doulongvec_minmax,
+	},
+	{
+		.ctl_name	= ABI_DEFHANDLER_LIBCSO,
+		.procname	= "defhandler_libcso",
+		.data		= &abi_defhandler_libcso,
+		.maxlen		= sizeof(int),
+		.mode		= 0644,
+		.proc_handler	= &proc_doulongvec_minmax,
+	},
+	{
+		.ctl_name	= ABI_TRACE,
+		.procname	= "trace",
+		.data		= &abi_traceflg,
+		.maxlen		= sizeof(u_int),
+		.mode		= 0644,
+		.proc_handler	= &proc_dointvec,
+	},
+	{
+		.ctl_name	= ABI_FAKE_UTSNAME,
+		.procname	= "fake_utsname",
+		.data		= &abi_fake_utsname,
+		.maxlen		= sizeof(int),
+		.mode		= 0644,
+		.proc_handler	= &proc_dointvec,
+	},
+	{ .ctl_name = 0 }
 };
 
 static struct ctl_table abi_root_table[] = {
-	{CTL_ABI, "abi", NULL, 0, 0555, abi_table},
-	{0}
+	{
+		.ctl_name	= CTL_ABI,
+		.procname	= "abi",
+		.mode		= 0555,
+		.child		= abi_table,
+	},
+	{ .ctl_name = 0 }
 };
 
 static int __init
diff -urN linux-2.5.70-bk8/kernel/resource.c linux-2.5.70-bk9/kernel/resource.c
--- linux-2.5.70-bk8/kernel/resource.c	2003-05-26 18:00:42.000000000 -0700
+++ linux-2.5.70-bk9/kernel/resource.c	2003-06-04 04:37:35.000000000 -0700
@@ -20,8 +20,19 @@
 #include <asm/io.h>
 
 
-struct resource ioport_resource = { "PCI IO", 0x0000, IO_SPACE_LIMIT, IORESOURCE_IO };
-struct resource iomem_resource = { "PCI mem", 0UL, ~0UL, IORESOURCE_MEM };
+struct resource ioport_resource = {
+	.name	= "PCI IO",
+	.start	= 0x0000,
+	.end	= IO_SPACE_LIMIT,
+	.flags	= IORESOURCE_IO,
+};
+
+struct resource iomem_resource = {
+	.name	= "PCI mem",
+	.start	= 0UL,
+	.end	= ~0UL,
+	.flags	= IORESOURCE_MEM,
+};
 
 static rwlock_t resource_lock = RW_LOCK_UNLOCKED;
 
diff -urN linux-2.5.70-bk8/kernel/sysctl.c linux-2.5.70-bk9/kernel/sysctl.c
--- linux-2.5.70-bk8/kernel/sysctl.c	2003-06-04 04:37:18.000000000 -0700
+++ linux-2.5.70-bk9/kernel/sysctl.c	2003-06-04 04:37:35.000000000 -0700
@@ -149,123 +149,408 @@
 /* The default sysctl tables: */
 
 static ctl_table root_table[] = {
-	{CTL_KERN, "kernel", NULL, 0, 0555, kern_table},
-	{CTL_VM, "vm", NULL, 0, 0555, vm_table},
+	{
+		.ctl_name	= CTL_KERN,
+		.procname	= "kernel",
+		.mode		= 0555,
+		.child		= kern_table,
+	},
+	{
+		.ctl_name	= CTL_VM,
+		.procname	= "vm",
+		.mode		= 0555,
+		.child		= vm_table,
+	},
 #ifdef CONFIG_NET
-	{CTL_NET, "net", NULL, 0, 0555, net_table},
+	{
+		.ctl_name	= CTL_NET,
+		.procname	= "net",
+		.mode		= 0555,
+		.child		= net_table,
+	},
 #endif
-	{CTL_PROC, "proc", NULL, 0, 0555, proc_table},
-	{CTL_FS, "fs", NULL, 0, 0555, fs_table},
-	{CTL_DEBUG, "debug", NULL, 0, 0555, debug_table},
-        {CTL_DEV, "dev", NULL, 0, 0555, dev_table},
-	{0}
+	{
+		.ctl_name	= CTL_PROC,
+		.procname	= "proc",
+		.mode		= 0555,
+		.child		= proc_table,
+	},
+	{
+		.ctl_name	= CTL_FS,
+		.procname	= "fs",
+		.mode		= 0555,
+		.child		= fs_table,
+	},
+	{
+		.ctl_name	= CTL_DEBUG,
+		.procname	= "debug",
+		.mode		= 0555,
+		.child		= debug_table,
+	},
+	{
+		.ctl_name	= CTL_DEV,
+		.procname	= "dev",
+		.mode		= 0555,
+		.child		= dev_table,
+	},
+	{ .ctl_name = 0 }
 };
 
 static ctl_table kern_table[] = {
-	{KERN_OSTYPE, "ostype", system_utsname.sysname, 64,
-	 0444, NULL, &proc_doutsstring, &sysctl_string},
-	{KERN_OSRELEASE, "osrelease", system_utsname.release, 64,
-	 0444, NULL, &proc_doutsstring, &sysctl_string},
-	{KERN_VERSION, "version", system_utsname.version, 64,
-	 0444, NULL, &proc_doutsstring, &sysctl_string},
-	{KERN_NODENAME, "hostname", system_utsname.nodename, 64,
-	 0644, NULL, &proc_doutsstring, &sysctl_string},
-	{KERN_DOMAINNAME, "domainname", system_utsname.domainname, 64,
-	 0644, NULL, &proc_doutsstring, &sysctl_string},
-	{KERN_PANIC, "panic", &panic_timeout, sizeof(int),
-	 0644, NULL, &proc_dointvec},
-	{KERN_CORE_USES_PID, "core_uses_pid", &core_uses_pid, sizeof(int),
-	 0644, NULL, &proc_dointvec},
-	{KERN_CORE_PATTERN, "core_pattern", core_pattern, 64,
-	 0644, NULL, &proc_dostring, &sysctl_string},
-	{KERN_TAINTED, "tainted", &tainted, sizeof(int),
-	 0644, NULL, &proc_dointvec},
-	{KERN_CAP_BSET, "cap-bound", &cap_bset, sizeof(kernel_cap_t),
-	 0600, NULL, &proc_dointvec_bset},
+	{
+		.ctl_name	= KERN_OSTYPE,
+		.procname	= "ostype",
+		.data		= system_utsname.sysname,
+		.maxlen		= 64,
+		.mode		= 0444,
+		.proc_handler	= &proc_doutsstring,
+		.strategy	= &sysctl_string,
+	},
+	{
+		.ctl_name	= KERN_OSRELEASE,
+		.procname	= "osrelease",
+		.data		= system_utsname.release,
+		.maxlen		= 64,
+		.mode		= 0444,
+		.proc_handler	= &proc_doutsstring,
+		.strategy	= &sysctl_string,
+	},
+	{
+		.ctl_name	= KERN_VERSION,
+		.procname	= "version",
+		.data		= system_utsname.version,
+		.maxlen		= 64,
+		.mode		= 0444,
+		.proc_handler	= &proc_doutsstring,
+		.strategy	= &sysctl_string,
+	},
+	{
+		.ctl_name	= KERN_NODENAME,
+		.procname	= "hostname",
+		.data		= system_utsname.nodename,
+		.maxlen		= 64,
+		.mode		= 0644,
+		.proc_handler	= &proc_doutsstring,
+		.strategy	= &sysctl_string,
+	},
+	{
+		.ctl_name	= KERN_DOMAINNAME,
+		.procname	= "domainname",
+		.data		= system_utsname.domainname,
+		.maxlen		= 64,
+		.mode		= 0644,
+		.proc_handler	= &proc_doutsstring,
+		.strategy	= &sysctl_string,
+	},
+	{
+		.ctl_name	= KERN_PANIC,
+		.procname	= "panic",
+		.data		= &panic_timeout,
+		.maxlen		= sizeof(int),
+		.mode		= 0644,
+		.proc_handler	= &proc_dointvec,
+	},
+	{
+		.ctl_name	= KERN_CORE_USES_PID,
+		.procname	= "core_uses_pid",
+		.data		= &core_uses_pid,
+		.maxlen		= sizeof(int),
+		.mode		= 0644,
+		.proc_handler	= &proc_dointvec,
+	},
+	{
+		.ctl_name	= KERN_CORE_PATTERN,
+		.procname	= "core_pattern",
+		.data		= core_pattern,
+		.maxlen		= 64,
+		.mode		= 0644,
+		.proc_handler	= &proc_dostring,
+		.strategy	= &sysctl_string,
+	},
+	{
+		.ctl_name	= KERN_TAINTED,
+		.procname	= "tainted",
+		.data		= &tainted,
+		.maxlen		= sizeof(int),
+		.mode		= 0644,
+		.proc_handler	= &proc_dointvec,
+	},
+	{
+		.ctl_name	= KERN_CAP_BSET,
+		.procname	= "cap-bound",
+		.data		= &cap_bset,
+		.maxlen		= sizeof(kernel_cap_t),
+		.mode		= 0600,
+		.proc_handler	= &proc_dointvec_bset,
+	},
 #ifdef CONFIG_BLK_DEV_INITRD
-	{KERN_REALROOTDEV, "real-root-dev", &real_root_dev, sizeof(int),
-	 0644, NULL, &proc_dointvec},
+	{
+		.ctl_name	= KERN_REALROOTDEV,
+		.procname	= "real-root-dev",
+		.data		= &real_root_dev,
+		.maxlen		= sizeof(int),
+		.mode		= 0644,
+		.proc_handler	= &proc_dointvec,
+	},
 #endif
 #ifdef __sparc__
-	{KERN_SPARC_REBOOT, "reboot-cmd", reboot_command,
-	 256, 0644, NULL, &proc_dostring, &sysctl_string },
-	{KERN_SPARC_STOP_A, "stop-a", &stop_a_enabled, sizeof (int),
-	 0644, NULL, &proc_dointvec},
+	{
+		.ctl_name	= KERN_SPARC_REBOOT,
+		.procname	= "reboot-cmd",
+		.data		= reboot_command,
+		.maxlen		= 256,
+		.mode		= 0644,
+		.proc_handler	= &proc_dostring,
+		.strategy	= &sysctl_string,
+	},
+	{
+		.ctl_name	= KERN_SPARC_STOP_A,
+		.procname	= "stop-a",
+		.data		= &stop_a_enabled,
+		.maxlen		= sizeof (int),
+		.mode		= 0644,
+		.proc_handler	= &proc_dointvec,
+	},
 #endif
 #if defined(CONFIG_PPC32) && defined(CONFIG_6xx)
-	{KERN_PPC_POWERSAVE_NAP, "powersave-nap", &powersave_nap, sizeof(int),
-	 0644, NULL, &proc_dointvec},
-	{KERN_PPC_L2CR, "l2cr", NULL, 0,
-	 0644, NULL, &proc_dol2crvec},
+	{
+		.ctl_name	= KERN_PPC_POWERSAVE_NAP,
+		.procname	= "powersave-nap",
+		.data		= &powersave_nap,
+		.maxlen		= sizeof(int),
+		.mode		= 0644,
+		.proc_handler	= &proc_dointvec,
+	},
+	{
+		.ctl_name	= KERN_PPC_L2CR,
+		.procname	= "l2cr",
+		.mode		= 0644,
+		.proc_handler	= &proc_dol2crvec,
+	},
 #endif
-	{KERN_CTLALTDEL, "ctrl-alt-del", &C_A_D, sizeof(int),
-	 0644, NULL, &proc_dointvec},
-	{KERN_PRINTK, "printk", &console_loglevel, 4*sizeof(int),
-	 0644, NULL, &proc_dointvec},
+	{
+		.ctl_name	= KERN_CTLALTDEL,
+		.procname	= "ctrl-alt-del",
+		.data		= &C_A_D,
+		.maxlen		= sizeof(int),
+		.mode		= 0644,
+		.proc_handler	= &proc_dointvec,
+	},
+	{
+		.ctl_name	= KERN_PRINTK,
+		.procname	= "printk",
+		.data		= &console_loglevel,
+		.maxlen		= 4*sizeof(int),
+		.mode		= 0644,
+		.proc_handler	= &proc_dointvec,
+	},
 #ifdef CONFIG_KMOD
-	{KERN_MODPROBE, "modprobe", &modprobe_path, 256,
-	 0644, NULL, &proc_dostring, &sysctl_string },
+	{
+		.ctl_name	= KERN_MODPROBE,
+		.procname	= "modprobe",
+		.data		= &modprobe_path,
+		.maxlen		= 256,
+		.mode		= 0644,
+		.proc_handler	= &proc_dostring,
+		.strategy	= &sysctl_string,
+	},
 #endif
 #ifdef CONFIG_HOTPLUG
-	{KERN_HOTPLUG, "hotplug", &hotplug_path, 256,
-	 0644, NULL, &proc_dostring, &sysctl_string },
+	{
+		.ctl_name	= KERN_HOTPLUG,
+		.procname	= "hotplug",
+		.data		= &hotplug_path,
+		.maxlen		= 256,
+		.mode		= 0644,
+		.proc_handler	= &proc_dostring,
+		.strategy	= &sysctl_string,
+	},
 #endif
 #ifdef CONFIG_CHR_DEV_SG
-	{KERN_SG_BIG_BUFF, "sg-big-buff", &sg_big_buff, sizeof (int),
-	 0444, NULL, &proc_dointvec},
+	{
+		.ctl_name	= KERN_SG_BIG_BUFF,
+		.procname	= "sg-big-buff",
+		.data		= &sg_big_buff,
+		.maxlen		= sizeof (int),
+		.mode		= 0444,
+		.proc_handler	= &proc_dointvec,
+	},
 #endif
 #ifdef CONFIG_BSD_PROCESS_ACCT
-	{KERN_ACCT, "acct", &acct_parm, 3*sizeof(int),
-	0644, NULL, &proc_dointvec},
+	{
+		.ctl_name	= KERN_ACCT,
+		.procname	= "acct",
+		.data		= &acct_parm,
+		.maxlen		= 3*sizeof(int),
+		.mode		= 0644,
+		.proc_handler	= &proc_dointvec,
+	},
 #endif
-	{KERN_RTSIGNR, "rtsig-nr", &nr_queued_signals, sizeof(int),
-	 0444, NULL, &proc_dointvec},
-	{KERN_RTSIGMAX, "rtsig-max", &max_queued_signals, sizeof(int),
-	 0644, NULL, &proc_dointvec},
+	{
+		.ctl_name	= KERN_RTSIGNR,
+		.procname	= "rtsig-nr",
+		.data		= &nr_queued_signals,
+		.maxlen		= sizeof(int),
+		.mode		= 0444,
+		.proc_handler	= &proc_dointvec,
+	},
+	{
+		.ctl_name	= KERN_RTSIGMAX,
+		.procname	= "rtsig-max",
+		.data		= &max_queued_signals,
+		.maxlen		= sizeof(int),
+		.mode		= 0644,
+		.proc_handler	= &proc_dointvec,
+	},
 #ifdef CONFIG_SYSVIPC
-	{KERN_SHMMAX, "shmmax", &shm_ctlmax, sizeof (size_t),
-	 0644, NULL, &proc_doulongvec_minmax},
-	{KERN_SHMALL, "shmall", &shm_ctlall, sizeof (size_t),
-	 0644, NULL, &proc_doulongvec_minmax},
-	{KERN_SHMMNI, "shmmni", &shm_ctlmni, sizeof (int),
-	 0644, NULL, &proc_dointvec},
-	{KERN_MSGMAX, "msgmax", &msg_ctlmax, sizeof (int),
-	 0644, NULL, &proc_dointvec},
-	{KERN_MSGMNI, "msgmni", &msg_ctlmni, sizeof (int),
-	 0644, NULL, &proc_dointvec},
-	{KERN_MSGMNB, "msgmnb", &msg_ctlmnb, sizeof (int),
-	 0644, NULL, &proc_dointvec},
-	{KERN_SEM, "sem", &sem_ctls, 4*sizeof (int),
-	 0644, NULL, &proc_dointvec},
+	{
+		.ctl_name	= KERN_SHMMAX,
+		.procname	= "shmmax",
+		.data		= &shm_ctlmax,
+		.maxlen		= sizeof (size_t),
+		.mode		= 0644,
+		.proc_handler	= &proc_doulongvec_minmax,
+	},
+	{
+		.ctl_name	= KERN_SHMALL,
+		.procname	= "shmall",
+		.data		= &shm_ctlall,
+		.maxlen		= sizeof (size_t),
+		.mode		= 0644,
+		.proc_handler	= &proc_doulongvec_minmax,
+	},
+	{
+		.ctl_name	= KERN_SHMMNI,
+		.procname	= "shmmni",
+		.data		= &shm_ctlmni,
+		.maxlen		= sizeof (int),
+		.mode		= 0644,
+		.proc_handler	= &proc_dointvec,
+	},
+	{
+		.ctl_name	= KERN_MSGMAX,
+		.procname	= "msgmax",
+		.data		= &msg_ctlmax,
+		.maxlen		= sizeof (int),
+		.mode		= 0644,
+		.proc_handler	= &proc_dointvec,
+	},
+	{
+		.ctl_name	= KERN_MSGMNI,
+		.procname	= "msgmni",
+		.data		= &msg_ctlmni,
+		.maxlen		= sizeof (int),
+		.mode		= 0644,
+		.proc_handler	= &proc_dointvec,
+	},
+	{
+		.ctl_name	= KERN_MSGMNB,
+		.procname	=  "msgmnb",
+		.data		= &msg_ctlmnb,
+		.maxlen		= sizeof (int),
+		.mode		= 0644,
+		.proc_handler	= &proc_dointvec,
+	},
+	{
+		.ctl_name	= KERN_SEM,
+		.procname	= "sem",
+		.data		= &sem_ctls,
+		.maxlen		= 4*sizeof (int),
+		.mode		= 0644,
+		.proc_handler	= &proc_dointvec,
+	},
 #endif
 #ifdef CONFIG_MAGIC_SYSRQ
-	{KERN_SYSRQ, "sysrq", &sysrq_enabled, sizeof (int),
-	 0644, NULL, &proc_dointvec},
-#endif	 
-	{KERN_CADPID, "cad_pid", &cad_pid, sizeof (int),
-	 0600, NULL, &proc_dointvec},
-	{KERN_MAX_THREADS, "threads-max", &max_threads, sizeof(int),
-	 0644, NULL, &proc_dointvec},
-	{KERN_RANDOM, "random", NULL, 0, 0555, random_table},
-	{KERN_OVERFLOWUID, "overflowuid", &overflowuid, sizeof(int), 0644, NULL,
-	 &proc_dointvec_minmax, &sysctl_intvec, NULL,
-	 &minolduid, &maxolduid},
-	{KERN_OVERFLOWGID, "overflowgid", &overflowgid, sizeof(int), 0644, NULL,
-	 &proc_dointvec_minmax, &sysctl_intvec, NULL,
-	 &minolduid, &maxolduid},
+	{
+		.ctl_name	= KERN_SYSRQ,
+		.procname	= "sysrq",
+		.data		= &sysrq_enabled,
+		.maxlen		= sizeof (int),
+		.mode		= 0644,
+		.proc_handler	= &proc_dointvec,
+	},
+#endif
+	{
+		.ctl_name	= KERN_CADPID,
+		.procname	= "cad_pid",
+		.data		= &cad_pid,
+		.maxlen		= sizeof (int),
+		.mode		= 0600,
+		.proc_handler	= &proc_dointvec,
+	},
+	{
+		.ctl_name	= KERN_MAX_THREADS,
+		.procname	= "threads-max",
+		.data		= &max_threads,
+		.maxlen		= sizeof(int),
+		.mode		= 0644,
+		.proc_handler	= &proc_dointvec,
+	},
+	{
+		.ctl_name	= KERN_RANDOM,
+		.procname	= "random",
+		.mode		= 0555,
+		.child		= random_table,
+	},
+	{
+		.ctl_name	= KERN_OVERFLOWUID,
+		.procname	= "overflowuid",
+		.data		= &overflowuid,
+		.maxlen		= sizeof(int),
+		.mode		= 0644,
+		.proc_handler	= &proc_dointvec_minmax,
+		.strategy	= &sysctl_intvec,
+		.extra1		= &minolduid,
+		.extra2		= &maxolduid,
+	},
+	{
+		.ctl_name	= KERN_OVERFLOWGID,
+		.procname	= "overflowgid",
+		.data		= &overflowgid,
+		.maxlen		= sizeof(int),
+		.mode		= 0644,
+		.proc_handler	= &proc_dointvec_minmax,
+		.strategy	= &sysctl_intvec,
+		.extra1		= &minolduid,
+		.extra2		= &maxolduid,
+	},
 #ifdef CONFIG_ARCH_S390
 #ifdef CONFIG_MATHEMU
-	{KERN_IEEE_EMULATION_WARNINGS,"ieee_emulation_warnings",
-	 &sysctl_ieee_emulation_warnings,sizeof(int),0644,NULL,&proc_dointvec},
+	{
+		.ctl_name	= KERN_IEEE_EMULATION_WARNINGS,
+		.procname	= "ieee_emulation_warnings",
+		.data		= &sysctl_ieee_emulation_warnings,
+		.maxlen		= sizeof(int),
+		.mode		= 0644,
+		.proc_handler	= &proc_dointvec,
+	},
 #endif
-	{KERN_S390_USER_DEBUG_LOGGING,"userprocess_debug",
-	 &sysctl_userprocess_debug,sizeof(int),0644,NULL,&proc_dointvec},
+	{
+		.ctl_name	= KERN_S390_USER_DEBUG_LOGGING,
+		.procname	= "userprocess_debug",
+		.data		= &sysctl_userprocess_debug,
+		.maxlen		= sizeof(int),
+		.mode		= 0644,
+		.proc_handler	= &proc_dointvec,
+	},
 #endif
-	{KERN_PIDMAX, "pid_max", &pid_max, sizeof (int),
-	 0600, NULL, &proc_dointvec},
-	{KERN_PANIC_ON_OOPS,"panic_on_oops",
-	 &panic_on_oops,sizeof(int),0644,NULL,&proc_dointvec},
-	{0}
+	{
+		.ctl_name	= KERN_PIDMAX,
+		.procname	= "pid_max",
+		.data		= &pid_max,
+		.maxlen		= sizeof (int),
+		.mode		= 0600,
+		.proc_handler	= &proc_dointvec,
+	},
+	{
+		.ctl_name	= KERN_PANIC_ON_OOPS,
+		.procname	= "panic_on_oops",
+		.data		= &panic_on_oops,
+		.maxlen		= sizeof(int),
+		.mode		= 0644,
+		.proc_handler	= &proc_dointvec,
+	},
+	{ .ctl_name = 0 }
 };
 
 /* Constants for minimum and maximum testing in vm_table.
@@ -275,79 +560,210 @@
 
 
 static ctl_table vm_table[] = {
-	{VM_OVERCOMMIT_MEMORY, "overcommit_memory", &sysctl_overcommit_memory,
-	 sizeof(sysctl_overcommit_memory), 0644, NULL, &proc_dointvec},
-	{VM_OVERCOMMIT_RATIO, "overcommit_ratio",
-	 &sysctl_overcommit_ratio, sizeof(sysctl_overcommit_ratio), 0644,
-	 NULL, &proc_dointvec},
-	{VM_PAGE_CLUSTER, "page-cluster", 
-	 &page_cluster, sizeof(int), 0644, NULL, &proc_dointvec},
-	{VM_DIRTY_BACKGROUND, "dirty_background_ratio",
-	 &dirty_background_ratio, sizeof(dirty_background_ratio),
-	 0644, NULL, &proc_dointvec_minmax,  &sysctl_intvec, NULL,
-	 &zero, &one_hundred },
-	{VM_DIRTY_RATIO, "dirty_ratio", &vm_dirty_ratio,
-	 sizeof(vm_dirty_ratio), 0644, NULL, &proc_dointvec_minmax,
-	 &sysctl_intvec, NULL, &zero, &one_hundred },
-	{VM_DIRTY_WB_CS, "dirty_writeback_centisecs",
-	 &dirty_writeback_centisecs, sizeof(dirty_writeback_centisecs), 0644,
-	 NULL, dirty_writeback_centisecs_handler },
-	{VM_DIRTY_EXPIRE_CS, "dirty_expire_centisecs",
-	 &dirty_expire_centisecs, sizeof(dirty_expire_centisecs), 0644,
-	 NULL, &proc_dointvec},
-	{ VM_NR_PDFLUSH_THREADS, "nr_pdflush_threads",
-	  &nr_pdflush_threads, sizeof nr_pdflush_threads,
-	  0444 /* read-only*/, NULL, &proc_dointvec},
-	{VM_SWAPPINESS, "swappiness", &vm_swappiness, sizeof(vm_swappiness),
-	 0644, NULL, &proc_dointvec_minmax, &sysctl_intvec, NULL, &zero,
-	 &one_hundred },
+	{
+		.ctl_name	= VM_OVERCOMMIT_MEMORY,
+		.procname	= "overcommit_memory",
+		.data		= &sysctl_overcommit_memory,
+		.maxlen		= sizeof(sysctl_overcommit_memory),
+		.mode		= 0644,
+		.proc_handler	= &proc_dointvec,
+	},
+	{
+		.ctl_name	= VM_OVERCOMMIT_RATIO,
+		.procname	= "overcommit_ratio",
+		.data		= &sysctl_overcommit_ratio,
+		.maxlen		= sizeof(sysctl_overcommit_ratio),
+		.mode		= 0644,
+		.proc_handler	= &proc_dointvec,
+	},
+	{
+		.ctl_name	= VM_PAGE_CLUSTER,
+		.procname	= "page-cluster", 
+		.data		= &page_cluster,
+		.maxlen		= sizeof(int),
+		.mode		= 0644,
+		.proc_handler	= &proc_dointvec,
+	},
+	{
+		.ctl_name	= VM_DIRTY_BACKGROUND,
+		.procname	= "dirty_background_ratio",
+		.data		= &dirty_background_ratio,
+		.maxlen		= sizeof(dirty_background_ratio),
+		.mode		= 0644,
+		.proc_handler	= &proc_dointvec_minmax,
+		.strategy	= &sysctl_intvec,
+		.extra1		= &zero,
+		.extra2		= &one_hundred,
+	},
+	{
+		.ctl_name	= VM_DIRTY_RATIO,
+		.procname	= "dirty_ratio",
+		.data		= &vm_dirty_ratio,
+		.maxlen		= sizeof(vm_dirty_ratio),
+		.mode		= 0644,
+		.proc_handler	= &proc_dointvec_minmax,
+		.strategy	= &sysctl_intvec,
+		.extra1		= &zero,
+		.extra2		= &one_hundred,
+	},
+	{
+		.ctl_name	= VM_DIRTY_WB_CS,
+		.procname	= "dirty_writeback_centisecs",
+		.data		= &dirty_writeback_centisecs,
+		.maxlen		= sizeof(dirty_writeback_centisecs),
+		.mode		= 0644,
+		.proc_handler	= dirty_writeback_centisecs_handler,
+	},
+	{
+		.ctl_name	= VM_DIRTY_EXPIRE_CS,
+		.procname	= "dirty_expire_centisecs",
+		.data		= &dirty_expire_centisecs,
+		.maxlen		= sizeof(dirty_expire_centisecs),
+		.mode		= 0644,
+		.proc_handler	= &proc_dointvec,
+	},
+	{
+		.ctl_name	= VM_NR_PDFLUSH_THREADS,
+		.procname	= "nr_pdflush_threads",
+		.data		= &nr_pdflush_threads,
+		.maxlen		= sizeof nr_pdflush_threads,
+		.mode		= 0444 /* read-only*/,
+		.proc_handler	= &proc_dointvec,
+	},
+	{
+		.ctl_name	= VM_SWAPPINESS,
+		.procname	= "swappiness",
+		.data		= &vm_swappiness,
+		.maxlen		= sizeof(vm_swappiness),
+		.mode		= 0644,
+		.proc_handler	= &proc_dointvec_minmax,
+		.strategy	= &sysctl_intvec,
+		.extra1		= &zero,
+		.extra2		= &one_hundred,
+	},
 #ifdef CONFIG_HUGETLB_PAGE
-	 {VM_HUGETLB_PAGES, "nr_hugepages", &htlbpage_max, sizeof(int), 0644,
-	  NULL, &hugetlb_sysctl_handler},
+	 {
+		.ctl_name	= VM_HUGETLB_PAGES,
+		.procname	= "nr_hugepages",
+		.data		= &htlbpage_max,
+		.maxlen		= sizeof(int),
+		.mode		= 0644,
+		.proc_handler	= &hugetlb_sysctl_handler,
+	 },
 #endif
-	{VM_LOWER_ZONE_PROTECTION, "lower_zone_protection",
-	 &sysctl_lower_zone_protection, sizeof(sysctl_lower_zone_protection),
-	 0644, NULL, &proc_dointvec_minmax, &sysctl_intvec, NULL, &zero,
-	 NULL, },
-	{0}
+	{
+		.ctl_name	= VM_LOWER_ZONE_PROTECTION,
+		.procname	= "lower_zone_protection",
+		.data		= &sysctl_lower_zone_protection,
+		.maxlen		= sizeof(sysctl_lower_zone_protection),
+		.mode		= 0644,
+		.proc_handler	= &proc_dointvec_minmax,
+		.strategy	= &sysctl_intvec,
+		.extra1		= &zero,
+	},
+	{ .ctl_name = 0 }
 };
 
 static ctl_table proc_table[] = {
-	{0}
+	{ .ctl_name = 0 }
 };
 
 static ctl_table fs_table[] = {
-	{FS_NRINODE, "inode-nr", &inodes_stat, 2*sizeof(int),
-	 0444, NULL, &proc_dointvec},
-	{FS_STATINODE, "inode-state", &inodes_stat, 7*sizeof(int),
-	 0444, NULL, &proc_dointvec},
-	{FS_NRFILE, "file-nr", &files_stat, 3*sizeof(int),
-	 0444, NULL, &proc_dointvec},
-	{FS_MAXFILE, "file-max", &files_stat.max_files, sizeof(int),
-	 0644, NULL, &proc_dointvec},
-	{FS_DENTRY, "dentry-state", &dentry_stat, 6*sizeof(int),
-	 0444, NULL, &proc_dointvec},
-	{FS_OVERFLOWUID, "overflowuid", &fs_overflowuid, sizeof(int), 0644, NULL,
-	 &proc_dointvec_minmax, &sysctl_intvec, NULL,
-	 &minolduid, &maxolduid},
-	{FS_OVERFLOWGID, "overflowgid", &fs_overflowgid, sizeof(int), 0644, NULL,
-	 &proc_dointvec_minmax, &sysctl_intvec, NULL,
-	 &minolduid, &maxolduid},
-	{FS_LEASES, "leases-enable", &leases_enable, sizeof(int),
-	 0644, NULL, &proc_dointvec},
-	{FS_DIR_NOTIFY, "dir-notify-enable", &dir_notify_enable,
-	 sizeof(int), 0644, NULL, &proc_dointvec},
-	{FS_LEASE_TIME, "lease-break-time", &lease_break_time, sizeof(int),
-	 0644, NULL, &proc_dointvec},
-	{0}
+	{
+		.ctl_name	= FS_NRINODE,
+		.procname	= "inode-nr",
+		.data		= &inodes_stat,
+		.maxlen		= 2*sizeof(int),
+		.mode		= 0444,
+		.proc_handler	= &proc_dointvec,
+	},
+	{
+		.ctl_name	= FS_STATINODE,
+		.procname	= "inode-state",
+		.data		= &inodes_stat,
+		.maxlen		= 7*sizeof(int),
+		.mode		= 0444,
+		.proc_handler	= &proc_dointvec,
+	},
+	{
+		.ctl_name	= FS_NRFILE,
+		.procname	= "file-nr",
+		.data		= &files_stat,
+		.maxlen		= 3*sizeof(int),
+		.mode		= 0444,
+		.proc_handler	= &proc_dointvec,
+	},
+	{
+		.ctl_name	= FS_MAXFILE,
+		.procname	= "file-max",
+		.data		= &files_stat.max_files,
+		.maxlen		= sizeof(int),
+		.mode		= 0644,
+		.proc_handler	= &proc_dointvec,
+	},
+	{
+		.ctl_name	= FS_DENTRY,
+		.procname	= "dentry-state",
+		.data		= &dentry_stat,
+		.maxlen		= 6*sizeof(int),
+		.mode		= 0444,
+		.proc_handler	= &proc_dointvec,
+	},
+	{
+		.ctl_name	= FS_OVERFLOWUID,
+		.procname	= "overflowuid",
+		.data		= &fs_overflowuid,
+		.maxlen		= sizeof(int),
+		.mode		= 0644,
+		.proc_handler	= &proc_dointvec_minmax,
+		.strategy	= &sysctl_intvec,
+		.extra1		= &minolduid,
+		.extra2		= &maxolduid,
+	},
+	{
+		.ctl_name	= FS_OVERFLOWGID,
+		.procname	= "overflowgid",
+		.data		= &fs_overflowgid,
+		.maxlen		= sizeof(int),
+		.mode		= 0644,
+		.proc_handler	= &proc_dointvec_minmax,
+		.strategy	= &sysctl_intvec,
+		.extra1		= &minolduid,
+		.extra2		= &maxolduid,
+	},
+	{
+		.ctl_name	= FS_LEASES,
+		.procname	= "leases-enable",
+		.data		= &leases_enable,
+		.maxlen		= sizeof(int),
+		.mode		= 0644,
+		.proc_handler	= &proc_dointvec,
+	},
+	{
+		.ctl_name	= FS_DIR_NOTIFY,
+		.procname	= "dir-notify-enable",
+		.data		= &dir_notify_enable,
+		.maxlen		= sizeof(int),
+		.mode		= 0644,
+		.proc_handler	= &proc_dointvec,
+	},
+	{
+		.ctl_name	= FS_LEASE_TIME,
+		.procname	= "lease-break-time",
+		.data		= &lease_break_time,
+		.maxlen		= sizeof(int),
+		.mode		= 0644,
+		.proc_handler	= &proc_dointvec,
+	},
+	{ .ctl_name = 0 }
 };
 
 static ctl_table debug_table[] = {
-	{0}
+	{ .ctl_name = 0 }
 };
 
 static ctl_table dev_table[] = {
-	{0}
+	{ .ctl_name = 0 }
 };  
 
 extern void init_irq_proc (void);
diff -urN linux-2.5.70-bk8/lib/kobject.c linux-2.5.70-bk9/lib/kobject.c
--- linux-2.5.70-bk8/lib/kobject.c	2003-05-26 18:00:57.000000000 -0700
+++ linux-2.5.70-bk9/lib/kobject.c	2003-06-04 04:37:35.000000000 -0700
@@ -3,6 +3,11 @@
  *
  * Copyright (c) 2002-2003 Patrick Mochel <mochel@osdl.org>
  *
+ * This file is released under the GPLv2.
+ *
+ *
+ * Please see the file Documentation/kobject.txt for critical information
+ * about using the kobject interface.
  */
 
 #undef DEBUG
diff -urN linux-2.5.70-bk8/net/atm/lec.c linux-2.5.70-bk9/net/atm/lec.c
--- linux-2.5.70-bk8/net/atm/lec.c	2003-06-04 04:37:18.000000000 -0700
+++ linux-2.5.70-bk9/net/atm/lec.c	2003-06-04 04:37:35.000000000 -0700
@@ -861,12 +861,7 @@
         for (i = 0; i < MAX_LEC_ITF; i++) {
                 if (dev_lec[i] != NULL) {
                         priv = (struct lec_priv *)dev_lec[i]->priv;
-#if defined(CONFIG_TR)
-                	if (priv->is_trdev)
-                        	unregister_trdev(dev_lec[i]);
-                	else
-#endif
-				unregister_netdev(dev_lec[i]);
+			unregister_netdev(dev_lec[i]);
                         kfree(dev_lec[i]);
                         dev_lec[i] = NULL;
                 }
diff -urN linux-2.5.70-bk8/net/ipv4/tcp_input.c linux-2.5.70-bk9/net/ipv4/tcp_input.c
--- linux-2.5.70-bk8/net/ipv4/tcp_input.c	2003-06-04 04:37:18.000000000 -0700
+++ linux-2.5.70-bk9/net/ipv4/tcp_input.c	2003-06-04 04:37:35.000000000 -0700
@@ -556,8 +556,8 @@
 			if (m >= dst_metric(dst, RTAX_RTTVAR))
 				dst->metrics[RTAX_RTTVAR-1] = m;
 			else
-				dst->metrics[RTAX_RTT-1] -=
-					(dst->metrics[RTAX_RTT-1] - m)>>2;
+				dst->metrics[RTAX_RTTVAR-1] -=
+					(dst->metrics[RTAX_RTTVAR-1] - m)>>2;
 		}
 
 		if (tp->snd_ssthresh >= 0xFFFF) {
diff -urN linux-2.5.70-bk8/net/ipv6/addrconf.c linux-2.5.70-bk9/net/ipv6/addrconf.c
--- linux-2.5.70-bk8/net/ipv6/addrconf.c	2003-06-04 04:37:19.000000000 -0700
+++ linux-2.5.70-bk9/net/ipv6/addrconf.c	2003-06-04 04:37:35.000000000 -0700
@@ -347,6 +347,11 @@
 			return NULL;
 		}
 
+		/* One reference from device.  We must do this before
+		 * we invoke __ipv6_regen_rndid().
+		 */
+		in6_dev_hold(ndev);
+
 #ifdef CONFIG_IPV6_PRIVACY
 		get_random_bytes(ndev->rndid, sizeof(ndev->rndid));
 		get_random_bytes(ndev->entropy, sizeof(ndev->entropy));
@@ -367,8 +372,6 @@
 
 		write_lock_bh(&addrconf_lock);
 		dev->ip6_ptr = ndev;
-		/* One reference from device */
-		in6_dev_hold(ndev);
 		write_unlock_bh(&addrconf_lock);
 
 		ipv6_mc_init_dev(ndev);
