]> git.neil.brown.name Git - history.git/commitdiff
- Kai Germaschewski: ymfpci cleanups and resource leak fixes 2.4.0-test12pre7
authorLinus Torvalds <torvalds@linuxfoundation.org>
Fri, 23 Nov 2007 20:40:37 +0000 (15:40 -0500)
committerLinus Torvalds <torvalds@linuxfoundation.org>
Fri, 23 Nov 2007 20:40:37 +0000 (15:40 -0500)
- Linus: UHCI drivers really need to enable bus mastering.
- Trond Myklebust: fix up nfs_writepage_sync() to not require "filp".
- Andrew Morton: "tq_scheduler" is no more. We have keventd.
- Nils Faerber: cs46xx sounddriver update

76 files changed:
CREDITS
MAINTAINERS
arch/parisc/hpux/gate.S
arch/parisc/kernel/ccio-dma.c
arch/parisc/kernel/drivers.c
arch/parisc/kernel/entry.S
arch/parisc/kernel/inventory.c
arch/parisc/kernel/iosapic.c
arch/parisc/kernel/irq.c
arch/parisc/kernel/lba_pci.c
arch/parisc/kernel/led.c
arch/parisc/kernel/pci.c
arch/parisc/kernel/process.c
arch/parisc/kernel/setup.c
arch/parisc/kernel/signal.c
arch/parisc/kernel/time.c
arch/parisc/kernel/traps.c
arch/parisc/lib/bitops.c
arch/ppc/8260_io/uart.c
arch/ppc/8xx_io/fec.c
arch/ppc/8xx_io/uart.c
drivers/block/paride/pseudo.h
drivers/char/README.epca
drivers/char/epca.c
drivers/char/esp.c
drivers/char/isicom.c
drivers/char/istallion.c
drivers/char/moxa.c
drivers/char/mxser.c
drivers/char/riscom8.c
drivers/char/serial.c
drivers/char/specialix.c
drivers/char/stallion.c
drivers/char/tpqic02.c
drivers/char/tty_io.c
drivers/i2o/i2o_lan.c
drivers/ide/ide.c
drivers/isdn/avmb1/b1capi.c
drivers/isdn/avmb1/kcapi.c
drivers/net/lasi_82596.c
drivers/net/wan/sdlamain.c
drivers/sbus/char/aurora.c
drivers/sbus/char/sab82532.c
drivers/scsi/megaraid.c
drivers/scsi/qla1280.c
drivers/sound/Config.in
drivers/sound/cs461x_image.h
drivers/sound/cs46xx.c
drivers/sound/ymfpci.c
drivers/sound/ymfpci.h
drivers/usb/serial/digi_acceleport.c
drivers/usb/serial/keyspan_pda.c
drivers/usb/uhci.c
drivers/usb/usb-uhci.c
drivers/video/sticon-bmode.c
drivers/video/sticore.c
fs/nfs/read.c
fs/nfs/write.c
fs/smbfs/sock.c
include/asm-parisc/atomic.h
include/asm-parisc/bugs.h
include/asm-parisc/cache.h
include/asm-parisc/gsc.h
include/asm-parisc/io.h
include/asm-parisc/pgtable.h
include/asm-parisc/smp.h
include/asm-parisc/system.h
include/asm-parisc/timex.h
include/asm-parisc/uaccess.h
include/linux/compatmac.h
include/linux/sched.h
include/linux/tqueue.h
kernel/context.c
kernel/ksyms.c
kernel/sched.c
kernel/timer.c

diff --git a/CREDITS b/CREDITS
index a9ad20d9d45dcd07b185cba4128b6b5240f2c45d..287a21415ac1813eada880297dfb7f31033447ca 100644 (file)
--- a/CREDITS
+++ b/CREDITS
@@ -767,6 +767,7 @@ N: Nils Faerber
 E: nils@kernelconcepts.de
 D: i810 TCO watchdog driver author
 D: Mitsumi LU005 tests and fixes
+D: port and fixes of cs46xx sounddriver
 S: Dreisbachstrasse 24
 S: D-57250 Netphen
 S: Germany
index a6ae5d123e20d594c0f2adf4f8309b05563b7e01..5fd8361cfac440614605eb7cffae862fcf1d26cc 100644 (file)
@@ -216,6 +216,13 @@ M: jgarzik@mandrakesoft.com
 L:     linux-fbdev@vuser.vu.union.edu
 S:     Odd Fixes
 
+CIRRUS LOGIC CS4280/CS461x SOUNDDRIVER
+P:     Cirrus Logic Corporation (kernel 2.2 driver)
+M:     Cirrus Logic Corporation, Thomas Woller <twoller@crystal.cirrus.com>
+P:     Nils Faerber (port to kernel 2.4)
+M:     Nils Faerber <nils@kernelconcepts.de>
+S:     Maintained
+
 COMPAQ FIBRE CHANNEL 64-bit/66MHz PCI non-intelligent HBA
 P:      Amy Vanzant-Hodge 
 M:      Amy Vanzant-Hodge (fibrechannel@compaq.com)
index 5e0bf3c663ad975f026c6e348df54eb09af50c96..0b897638631507687198c5ce6c7d2869c9d76860 100644 (file)
@@ -13,8 +13,6 @@
 #include <asm/offset.h>
 #include <asm/unistd.h>
 #include <asm/errno.h>
-#define __ASSEMBLY__
-#include <asm/assembly.h>      /* for STREG/LDREG */
 
        .text
 
index 2dcd325b4e7f828382312e3e1daf5a2bd849fcd0..c8f72c81303724f1131b37618b8f207360d3a405 100644 (file)
@@ -31,6 +31,7 @@
 **        the coherency design originally worked out. Only PCX-W does.
 */
 
+#include <linux/config.h>
 #include <linux/types.h>
 #include <linux/init.h>
 #include <linux/mm.h>
index c2d9f825e40d5ec0d393c177d94a567fcd485353..ba93bbda019eeba5185a9fd40146e37ae84a72aa 100644 (file)
@@ -10,7 +10,6 @@ in a system, and register device drivers.
 */
 
 #include <linux/slab.h>
-#include <linux/config.h>
 #include <linux/types.h>
 #include <linux/kernel.h>
 #include <asm/hardware.h>
index 437df8231cef090d21b4e9be6fa2fadb99bf6478..0839e0bbb4f209b2b1e79cbb047f26d56e1aeef3 100644 (file)
@@ -22,6 +22,7 @@
  *    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
+#include <linux/config.h>
 #include <asm/offset.h>
 
 /* the following is the setup i think we should follow:
index f625381452959e97fc995e21a87a674541203284..ab97cff1e9117f8f324bb8ae21c3eb2a0209d828 100644 (file)
@@ -2,7 +2,6 @@
 /* Copyright (c) 1999 The Puffin Group */
 /* Written by David Kennedy and Alex deVries */
 
-#include <linux/config.h>
 #include <linux/types.h>
 #include <linux/kernel.h>
 #include <asm/hardware.h>
index c38fe0bce2eb55a0c3c7eb1651965b06ac5d8219..688cbf9bb6b5d08285bc3238a215a66f43b3f6b2 100644 (file)
 
 
 /* FIXME: determine which include files are really needed */
-#include <linux/config.h>
 #include <linux/types.h>
 #include <linux/kernel.h>
 #include <linux/spinlock.h>
index 0fdf3b08377ffa562e7f515651850e2d49e8a8c7..aec36f7ccc0068120aeb64967da73bedffb237cb 100644 (file)
@@ -23,6 +23,7 @@
  *    along with this program; if not, write to the Free Software
  *    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
+#include <linux/config.h>
 #include <linux/bitops.h>
 #include <asm/bitops.h>
 #include <asm/pdc.h>
index b81e6b2e2a1b2bee9604fe70afda293c14b20518..6096d01531a248401c4acaa956efca6d493a95dd 100644 (file)
@@ -29,7 +29,6 @@
 ** FIXME: Add support for PCI card hot-plug (OLARD).
 */
 
-#include <linux/config.h>
 #include <linux/delay.h>
 #include <linux/types.h>
 #include <linux/kernel.h>
index 6e6ee77688240905ea7ac3ed63166e703fd6f753..a375423f32bd2c20ec0ae4655bbb702ff025c345 100644 (file)
@@ -11,6 +11,7 @@
  *
  */
 
+#include <linux/config.h>
 #include <linux/init.h>
 #include <linux/kernel_stat.h>
 #include <linux/types.h>
index ad9d9d41fce39ee17a2a880b6f779780b33f151f..a46f69832b60b9a7735ee7f86a6ceccb72725071 100644 (file)
@@ -9,6 +9,7 @@
  * Copyright (C) 1999 Hewlett-Packard Company
  * Copyright (C) 1999, 2000 Grant Grundler
  */
+#include <linux/config.h>
 #include <linux/types.h>
 #include <linux/kernel.h>
 #include <linux/init.h>                /* for __init and __devinit */
index 4094638daad334f0223d8b19da464496040e5073..a8d7a707e88b0b370b9c83c6d0a6f29e9f6eeba1 100644 (file)
 #include <linux/malloc.h>
 #include <linux/vmalloc.h>
 #include <linux/interrupt.h>
-#include <linux/config.h>
-#include <linux/unistd.h>
-#include <linux/smp.h>
 #include <linux/reboot.h>
 #include <linux/init.h>
-#include <linux/sched.h>
 #include <linux/version.h>
 #include <linux/elf.h>
 
index ec8f3cf36818246da4c3536366d604c186e40774..16a35df3081fbdd2f3cd3633472eef41ee7bccc5 100644 (file)
 #include <asm/machdep.h>       /* for pa7300lc_init() proto */
 
 #include <asm/irq.h>           /* for struct irq_region */
-#include <asm/pdc.h>           /* for mem_pdc_call() proto */
 #include <asm/pdcpat.h>                /* for PA_VIEW PDC_PAT_CPU_GET_NUMBER etc */
 
 #include <linux/proc_fs.h>
-#include <asm/cache.h>          /* for get_cache_info() proto */
 
 #define COMMAND_LINE_SIZE 1024
 char   saved_command_line[COMMAND_LINE_SIZE];
index a910f43da54c2d77109393ca9f330f8147af7711..fec670ab875919d63f96a1b21ae536a03363c573 100644 (file)
@@ -13,8 +13,6 @@
  *  arch/parisc/hpux/signal.c when we figure out how to do them.
  */
 
-#include <linux/config.h>
-
 #include <linux/version.h>
 #include <linux/sched.h>
 #include <linux/mm.h>
index c9d3e5034320f2f60121345ab953353e0a49f8fc..7b3de0e0ada37722e093000ca73f66e51da153c7 100644 (file)
@@ -20,7 +20,6 @@
 #include <linux/time.h>
 #include <linux/init.h>
 #include <linux/smp.h>
-#include <linux/init.h>
 
 #include <asm/uaccess.h>
 #include <asm/io.h>
index b61591b55913a1c6130589911afb85fb6b18f38c..d8555370208aadcfa9847ecebfdfc778f36d44d8 100644 (file)
@@ -10,7 +10,6 @@
  * state in 'asm.s'.
  */
 
-#include <linux/autoconf.h>    /* for CONFIG_KWDB */
 #include <linux/config.h>
 #include <linux/sched.h>
 #include <linux/kernel.h>
index 37797eec5c9bd43d144edc76f4c3a36722226d3c..c275c4246067c13306647c8f676174e14c5e318a 100644 (file)
@@ -3,6 +3,7 @@
  * 
  * Copyright 1999 Philipp Rumpf (prumpf@tux.org */
 
+#include <linux/config.h>
 #include <linux/kernel.h>
 #include <linux/spinlock.h>
 #include <asm/system.h>
index f7ce9da03230c296bd885dba885508afa725e3b5..e6e223b61304d64ddb755a6d5ead6b6ccdbe7bef 100644 (file)
@@ -496,8 +496,9 @@ static _INLINE_ void check_modem_status(struct async_struct *info)
 #ifdef SERIAL_DEBUG_OPEN
                        printk("scheduling hangup...");
 #endif
-                       queue_task(&info->tqueue_hangup,
-                                          &tq_scheduler);
+                       MOD_INC_USE_COUNT;
+                       if (schedule_task(&info->tqueue_hangup) == 0)
+                               MOD_DEC_USE_COUNT;
                }
        }
        if (info->flags & ASYNC_CTS_FLOW) {
@@ -624,10 +625,9 @@ static void do_serial_hangup(void *private_)
        struct tty_struct       *tty;
        
        tty = info->tty;
-       if (!tty)
-               return;
-
-       tty_hangup(tty);
+       if (tty)
+               tty_hangup(tty);
+       MOD_DEC_USE_COUNT;
 }
 
 /*static void rs_8xx_timer(void)
index 45f10b6359b43b7be4a2e720292bced5901901ca..659576e8ce5bbfa7c3ed7995d28b52944b5870a6 100644 (file)
@@ -1214,7 +1214,7 @@ static void mii_queue_relink(uint mii_reg, struct net_device *dev)
 
        fep->phy_task.routine = (void *)mii_relink;
        fep->phy_task.data = dev;
-       queue_task(&fep->phy_task, &tq_scheduler);
+       schedule_task(&fep->phy_task);
 }
 
 static void mii_queue_config(uint mii_reg, struct net_device *dev)
@@ -1223,7 +1223,7 @@ static void mii_queue_config(uint mii_reg, struct net_device *dev)
 
        fep->phy_task.routine = (void *)mii_display_config;
        fep->phy_task.data = dev;
-       queue_task(&fep->phy_task, &tq_scheduler);
+       schedule_task(&fep->phy_task);
 }
 
 
index 7c05954c24b7c49cd5f4e4834b062b56905d96a5..598e13ac0625426236f1064da806ed21b6a72d90 100644 (file)
@@ -514,8 +514,9 @@ static _INLINE_ void check_modem_status(struct async_struct *info)
 #ifdef SERIAL_DEBUG_OPEN
                        printk("scheduling hangup...");
 #endif
-                       queue_task(&info->tqueue_hangup,
-                                          &tq_scheduler);
+                       MOD_INC_USE_COUNT;
+                       if (schedule_task(&info->tqueue_hangup) == 0)
+                               MOD_DEC_USE_COUNT;
                }
        }
        if (info->flags & ASYNC_CTS_FLOW) {
@@ -645,10 +646,9 @@ static void do_serial_hangup(void *private_)
        struct tty_struct       *tty;
        
        tty = info->tty;
-       if (!tty)
-               return;
-
-       tty_hangup(tty);
+       if (tty)
+               tty_hangup(tty);
+       MOD_DEC_USE_COUNT;
 }
 
 /*static void rs_8xx_timer(void)
index 35ca3f45861c9c1d9d3f468b336cb531b3b6fef1..d1155a8aa187756d3ea6ffe4c458b31bb0f75c79 100644 (file)
@@ -71,7 +71,7 @@ static void ps_set_intr( void (*continuation)(void),
                 disable_hlt();
 #endif
                ps_tq_active = 1;
-                queue_task(&ps_tq,&tq_scheduler);
+                schedule_task(&ps_tq);
        }
 
         if (!ps_timer_active) {
@@ -114,7 +114,7 @@ static void ps_tq_int( void *data )
 #endif
 
         ps_tq_active = 1;
-       queue_task(&ps_tq,&tq_scheduler);
+       schedule_task(&ps_tq);
         spin_unlock_irqrestore(&ps_spinlock,flags);
 }
 
index d95ff1fed635fced9b010fb950d5cdd65eed3516..83dadc4ceaffd533d20f7f285a178d5284e2276c 100644 (file)
@@ -495,7 +495,7 @@ Release version       : 1.1.0
 Programmer            : Daniel Taylor
 Date                  : April 25, 1997
 Description (Verbose) : Updated driver:
-                        1.  Fixed DCD bug. (&tq_scheduler)
+                        1.  Fixed DCD bug. (&tq scheduler)
                         2.  Removed BH handler code, as it was only handling
                             hangups, and not being called for that.
                         3.  Namespace cleanup (DIGI_TIMER2 => DIGI_TIMER)
index 8991f65bb6e621ab23ecf4ea0c5ef545af9a6960..7a1d5471d4c0744e3bb527c52eae8ddacb714f11 100644 (file)
@@ -483,7 +483,9 @@ static inline void pc_sched_event(struct channel *ch, int event)
        -------------------------------------------------------------------------*/
 
        ch->event |= 1 << event;
-       queue_task(&ch->tqueue, &tq_scheduler);
+       MOD_INC_USE_COUNT;
+       if (schedule_task(&ch->tqueue) == 0)
+               MOD_DEC_USE_COUNT;
 
 
 } /* End pc_sched_event */
@@ -3435,7 +3437,7 @@ static void do_softint(void *private_)
                        if (test_and_clear_bit(EPCA_EVENT_HANGUP, &ch->event)) 
                        { /* Begin if clear_bit */
 
-                               tty_hangup(tty);
+                               tty_hangup(tty);        /* FIXME: module removal race here - AKPM */
                                wake_up_interruptible(&ch->open_wait);
                                ch->asyncflags &= ~(ASYNC_NORMAL_ACTIVE | ASYNC_CALLOUT_ACTIVE);
 
@@ -3443,7 +3445,7 @@ static void do_softint(void *private_)
                }
 
        } /* End EPCA_MAGIC */
-
+       MOD_DEC_USE_COUNT;
 } /* End do_softint */
 
 /* ------------------------------------------------------------
index 478b05aa55873ed00c0ad7c9fef4056722555da2..6e575c3dd4b015d33709c1d99e0d4ca4f187e2e6 100644 (file)
@@ -640,7 +640,9 @@ static _INLINE_ void check_modem_status(struct esp_struct *info)
 #ifdef SERIAL_DEBUG_OPEN
                        printk("scheduling hangup...");
 #endif
-                       queue_task(&info->tqueue_hangup, &tq_scheduler);
+                       MOD_INC_USE_COUNT;
+                       if (schedule_task(&info->tqueue_hangup) == 0)
+                               MOD_DEC_USE_COUNT;
                }
        }
 }
@@ -802,10 +804,9 @@ static void do_serial_hangup(void *private_)
        struct tty_struct       *tty;
        
        tty = info->tty;
-       if (!tty)
-               return;
-
-       tty_hangup(tty);
+       if (tty)
+               tty_hangup(tty);
+       MOD_DEC_USE_COUNT;
 }
 
 /*
index 52c6b5f1950ed0672d3aa4d09a08bc1db9d10aaa..5f5a94fbc5ecd9466ecf2f8c18bfef284dcb932e 100644 (file)
@@ -582,9 +582,11 @@ static void isicom_interrupt(int irq, void * dev_id, struct pt_regs * regs)
 #endif                                                 
                                                        port->status &= ~ISI_DCD;
                                                        if (!((port->flags & ASYNC_CALLOUT_ACTIVE) &&
-                                                               (port->flags & ASYNC_CALLOUT_NOHUP)))
-                                                               queue_task(&port->hangup_tq,
-                                                                       &tq_scheduler);
+                                                               (port->flags & ASYNC_CALLOUT_NOHUP))) {
+                                                               MOD_INC_USE_COUNT;
+                                                               if (schedule_task(&port->hangup_tq) == 0)
+                                                                       MOD_DEC_USE_COUNT;
+                                                       }
                                                }
                                        }
                                        else {
@@ -1630,10 +1632,9 @@ static void do_isicom_hangup(void * data)
        struct tty_struct * tty;
        
        tty = port->tty;
-       if (!tty)
-               return;
-               
-       tty_hangup(tty);        
+       if (tty)
+               tty_hangup(tty);        /* FIXME: module removal race here - AKPM */
+       MOD_DEC_USE_COUNT;
 }
 
 static void isicom_hangup(struct tty_struct * tty)
index 0bcc63a436af241851a9ae6844f834c64459a40a..bd6caa775cfdf4b44b7a556de2025f5d3fcd786b 100644 (file)
@@ -2363,12 +2363,18 @@ static void stli_dohangup(void *arg)
        printk("stli_dohangup(portp=%x)\n", (int) arg);
 #endif
 
+       /*
+        * FIXME: There's a module removal race here: tty_hangup
+        * calls schedule_task which will call into this
+        * driver later.
+        */
        portp = (stliport_t *) arg;
-       if (portp == (stliport_t *) NULL)
-               return;
-       if (portp->tty == (struct tty_struct *) NULL)
-               return;
-       tty_hangup(portp->tty);
+       if (portp != (stliport_t *) NULL) {
+               if (portp->tty != (struct tty_struct *) NULL) {
+                       tty_hangup(portp->tty);
+               }
+       }
+       MOD_DEC_USE_COUNT;
 }
 
 /*****************************************************************************/
@@ -2999,8 +3005,11 @@ static inline int stli_hostcmd(stlibrd_t *brdp, stliport_t *portp)
                                if (portp->flags & ASYNC_CHECK_CD) {
                                        if (! ((portp->flags & ASYNC_CALLOUT_ACTIVE) &&
                                            (portp->flags & ASYNC_CALLOUT_NOHUP))) {
-                                               if (tty != (struct tty_struct *) NULL)
-                                                       queue_task(&portp->tqhangup, &tq_scheduler);
+                                               if (tty != (struct tty_struct *) NULL) {
+                                                       MOD_INC_USE_COUNT;
+                                                       if (schedule_task(&portp->tqhangup) == 0)
+                                                               MOD_DEC_USE_COUNT;
+                                               }
                                        }
                                }
                        }
index 7ceccdcbc44362bc631edb7bd065fcbb00315303..d002c2e44b7474535d6ee977c14c59d88b489e18 100644 (file)
@@ -540,13 +540,14 @@ static void do_moxa_softint(void *private_)
        struct moxa_str *ch = (struct moxa_str *) private_;
        struct tty_struct *tty;
 
-       if (!ch || !(tty = ch->tty))
-               return;
-       if (test_and_clear_bit(MOXA_EVENT_HANGUP, &ch->event)) {
-               tty_hangup(tty);
-               wake_up_interruptible(&ch->open_wait);
-               ch->asyncflags &= ~(ASYNC_NORMAL_ACTIVE | ASYNC_CALLOUT_ACTIVE);
+       if (ch && (tty = ch->tty)) {
+               if (test_and_clear_bit(MOXA_EVENT_HANGUP, &ch->event)) {
+                       tty_hangup(tty);        /* FIXME: module removal race here - AKPM */
+                       wake_up_interruptible(&ch->open_wait);
+                       ch->asyncflags &= ~(ASYNC_NORMAL_ACTIVE | ASYNC_CALLOUT_ACTIVE);
+               }
        }
+       MOD_DEC_USE_COUNT;
 }
 
 static int moxa_open(struct tty_struct *tty, struct file *filp)
@@ -1013,7 +1014,9 @@ static void moxa_poll(unsigned long ignored)
                                                wake_up_interruptible(&ch->open_wait);
                                        else {
                                                set_bit(MOXA_EVENT_HANGUP, &ch->event);
-                                               queue_task(&ch->tqueue, &tq_scheduler);
+                                               MOD_DEC_USE_COUNT;
+                                               if (schedule_task(&ch->tqueue) == 0)
+                                                       MOD_INC_USE_COUNT;
                                        }
                                }
                        }
index 2ab0563c20e6b9864946268fc4475357fb300cea..c0eeab2f098ef80c567c6ddf4f52d46e1556c5f0 100644 (file)
@@ -690,17 +690,18 @@ static void mxser_do_softint(void *private_)
        struct tty_struct *tty;
 
        tty = info->tty;
-       if (!tty)
-               return;
-       if (test_and_clear_bit(MXSER_EVENT_TXLOW, &info->event)) {
-               if ((tty->flags & (1 << TTY_DO_WRITE_WAKEUP)) &&
-                   tty->ldisc.write_wakeup)
-                       (tty->ldisc.write_wakeup) (tty);
-               wake_up_interruptible(&tty->write_wait);
-       }
-       if (test_and_clear_bit(MXSER_EVENT_HANGUP, &info->event)) {
-               tty_hangup(tty);
+       if (tty) {
+               if (test_and_clear_bit(MXSER_EVENT_TXLOW, &info->event)) {
+                       if ((tty->flags & (1 << TTY_DO_WRITE_WAKEUP)) &&
+                           tty->ldisc.write_wakeup)
+                               (tty->ldisc.write_wakeup) (tty);
+                       wake_up_interruptible(&tty->write_wait);
+               }
+               if (test_and_clear_bit(MXSER_EVENT_HANGUP, &info->event)) {
+                       tty_hangup(tty);        /* FIXME: module removal race here - AKPM */
+               }
        }
+       MOD_DEC_USE_COUNT;
 }
 
 /*
@@ -1456,7 +1457,7 @@ static inline void mxser_transmit_chars(struct mxser_struct *info)
 
        if (info->xmit_cnt < WAKEUP_CHARS) {
                set_bit(MXSER_EVENT_TXLOW, &info->event);
-               queue_task(&info->tqueue, &tq_scheduler);
+               schedule_task(&info->tqueue);
        }
        if (info->xmit_cnt <= 0) {
                info->IER &= ~UART_IER_THRI;
@@ -1485,7 +1486,7 @@ static inline void mxser_check_modem_status(struct mxser_struct *info,
                else if (!((info->flags & ASYNC_CALLOUT_ACTIVE) &&
                           (info->flags & ASYNC_CALLOUT_NOHUP)))
                        set_bit(MXSER_EVENT_HANGUP, &info->event);
-               queue_task(&info->tqueue, &tq_scheduler);
+               schedule_task(&info->tqueue);
 
        }
        if (info->flags & ASYNC_CTS_FLOW) {
@@ -1496,7 +1497,9 @@ static inline void mxser_check_modem_status(struct mxser_struct *info,
                                outb(info->IER, info->base + UART_IER);
 
                                set_bit(MXSER_EVENT_TXLOW, &info->event);
-                               queue_task(&info->tqueue, &tq_scheduler);
+                               MOD_INC_USE_COUNT;
+                               if (schedule_task(&info->tqueue) == 0)
+                                       MOD_DEC_USE_COUNT;
                        }
                } else {
                        if (!(status & UART_MSR_CTS)) {
index c4511137c0785b9b22625f73b0c338b82a62582b..b60df303b11c004127fa3be97b7779cd0c7870b0 100644 (file)
@@ -537,8 +537,11 @@ static inline void rc_check_modem(struct riscom_board const * bp)
                if (rc_in(bp, CD180_MSVR) & MSVR_CD) 
                        wake_up_interruptible(&port->open_wait);
                else if (!((port->flags & ASYNC_CALLOUT_ACTIVE) &&
-                          (port->flags & ASYNC_CALLOUT_NOHUP)))
-                       queue_task(&port->tqueue_hangup,  &tq_scheduler);      
+                          (port->flags & ASYNC_CALLOUT_NOHUP))) {
+                       MOD_INC_USE_COUNT;
+                       if (schedule_task(&port->tqueue_hangup) == 0)
+                               MOD_DEC_USE_COUNT;
+               }
        }
        
 #ifdef RISCOM_BRAIN_DAMAGED_CTS
@@ -1648,10 +1651,9 @@ static void do_rc_hangup(void *private_)
        struct tty_struct       *tty;
        
        tty = port->tty;
-       if (!tty)
-               return;
-
-       tty_hangup(tty);
+       if (tty)
+               tty_hangup(tty);        /* FIXME: module removal race still here */
+       MOD_DEC_USE_COUNT;
 }
 
 static void rc_hangup(struct tty_struct * tty)
index a4e34cb1f730c71c81d357551610bfa49e60be75..2f0d81617051de1117f4e2466423a2c310be7f12 100644 (file)
@@ -673,7 +673,7 @@ static _INLINE_ void receive_chars(struct async_struct *info,
 #if (LINUX_VERSION_CODE > 131394) /* 2.1.66 */
        tty_flip_buffer_push(tty);
 #else
-       queue_task_irq_off(&tty->flip.tqueue, &tq_timer);
+       queue_task(&tty->flip.tqueue, &tq_timer);
 #endif 
 }
 
index 6e3c6a99c3773355f85db23d708f7a13f82595f3..a08de5cad365ed4e050357d3a87eb2c3740a7c00 100644 (file)
@@ -834,8 +834,9 @@ extern inline void sx_check_modem(struct specialix_board * bp)
 #ifdef SPECIALIX_DEBUG
                        printk ( "Sending HUP.\n");
 #endif
-                       queue_task(&port->tqueue_hangup,  
-                                  &tq_scheduler);      
+                       MOD_INC_USE_COUNT;
+                       if (schedule_task(&port->tqueue_hangup) == 0)
+                               MOD_DEC_USE_COUNT;
                } else {
 #ifdef SPECIALIX_DEBUG
                        printk ( "Don't need to send HUP.\n");
@@ -2121,10 +2122,9 @@ static void do_sx_hangup(void *private_)
        struct tty_struct       *tty;
        
        tty = port->tty;
-       if (!tty)
-               return;
-
-       tty_hangup(tty);
+       if (tty)
+               tty_hangup(tty);        /* FIXME: module removal race here */
+       MOD_DEC_USE_COUNT;
 }
 
 
index 8907fdeab9a6fc3aa2cf56c02b36a13e2c1b7d0e..dbd51e51a11b11350d07d28b6b0a77c2c3214105 100644 (file)
@@ -2231,11 +2231,11 @@ static void stl_offintr(void *private)
 #endif
 
        if (portp == (stlport_t *) NULL)
-               return;
+               goto out;
 
        tty = portp->tty;
        if (tty == (struct tty_struct *) NULL)
-               return;
+               goto out;
 
        lock_kernel();
        if (test_bit(ASYI_TXLOW, &portp->istate)) {
@@ -2254,12 +2254,14 @@ static void stl_offintr(void *private)
                        if (portp->flags & ASYNC_CHECK_CD) {
                                if (! ((portp->flags & ASYNC_CALLOUT_ACTIVE) &&
                                    (portp->flags & ASYNC_CALLOUT_NOHUP))) {
-                                       tty_hangup(tty);
+                                       tty_hangup(tty);        /* FIXME: module removal race here - AKPM */
                                }
                        }
                }
        }
        unlock_kernel();
+out:
+       MOD_DEC_USE_COUNT;
 }
 
 /*****************************************************************************/
@@ -4108,7 +4110,9 @@ static void stl_cd1400txisr(stlpanel_t *panelp, int ioaddr)
        if ((len == 0) || ((len < STL_TXBUFLOW) &&
            (test_bit(ASYI_TXLOW, &portp->istate) == 0))) {
                set_bit(ASYI_TXLOW, &portp->istate);
-               queue_task(&portp->tqueue, &tq_scheduler);
+               MOD_INC_USE_COUNT;
+               if (schedule_task(&portp->tqueue) == 0)
+                       MOD_DEC_USE_COUNT;
        }
 
        if (len == 0) {
@@ -4288,7 +4292,9 @@ static void stl_cd1400mdmisr(stlpanel_t *panelp, int ioaddr)
        misr = inb(ioaddr + EREG_DATA);
        if (misr & MISR_DCD) {
                set_bit(ASYI_DCDCHANGE, &portp->istate);
-               queue_task(&portp->tqueue, &tq_scheduler);
+               MOD_INC_USE_COUNT;
+               if (schedule_task(&portp->tqueue) == 0)
+                       MOD_DEC_USE_COUNT;
                portp->stats.modem++;
        }
 
@@ -5085,7 +5091,9 @@ static void stl_sc26198txisr(stlport_t *portp)
        if ((len == 0) || ((len < STL_TXBUFLOW) &&
            (test_bit(ASYI_TXLOW, &portp->istate) == 0))) {
                set_bit(ASYI_TXLOW, &portp->istate);
-               queue_task(&portp->tqueue, &tq_scheduler);
+               MOD_INC_USE_COUNT;
+               if (schedule_task(&portp->tqueue) == 0)
+                       MOD_DEC_USE_COUNT;
        }
 
        if (len == 0) {
@@ -5302,7 +5310,9 @@ static void stl_sc26198otherisr(stlport_t *portp, unsigned int iack)
                ipr = stl_sc26198getreg(portp, IPR);
                if (ipr & IPR_DCDCHANGE) {
                        set_bit(ASYI_DCDCHANGE, &portp->istate);
-                       queue_task(&portp->tqueue, &tq_scheduler);
+                       MOD_INC_USE_COUNT;
+                       if (schedule_task(&portp->tqueue) == 0)
+                               MOD_DEC_USE_COUNT;
                        portp->stats.modem++;
                }
                break;
index cf521edfe418d9a0887e0831f9fef3c5ac7d71b2..536942f413984833023d7bcb66a9d98d506535f4 100644 (file)
@@ -760,7 +760,7 @@ static int rdstatus(char *stp, unsigned size, char qcmd)
 static int get_status(volatile struct tpstatus *stp)
 {
        int stat = rdstatus((char *) stp, TPSTATSIZE, QCMD_RD_STAT);
-#if defined(i386) || defined(i486)
+#ifdef __i386__
        byte_swap_w(&(stp->dec));
        byte_swap_w(&(stp->urc));
 #else
index 30de22081c81e2aaf09d5826d9b08ce20209de98..33f5bc879af259dfe27e702a57b594510efb8f6b 100644 (file)
@@ -425,11 +425,9 @@ static struct file_operations hung_up_tty_fops = {
 };
 
 /*
- * This can be called through the "tq_scheduler" 
- * task-list. That is process synchronous, but
- * doesn't hold any locks, so we need to make
- * sure we have the appropriate locks for what
- * we're doing..
+ * This can be called by the "eventd" kernel thread.  That is process synchronous,
+ * but doesn't hold any locks, so we need to make sure we have the appropriate
+ * locks for what we're doing..
  */
 void do_tty_hangup(void *data)
 {
@@ -541,7 +539,7 @@ void tty_hangup(struct tty_struct * tty)
        
        printk("%s hangup...\n", tty_name(tty, buf));
 #endif
-       queue_task(&tty->tq_hangup, &tq_scheduler);
+       schedule_task(&tty->tq_hangup);
 }
 
 void tty_vhangup(struct tty_struct * tty)
@@ -1264,7 +1262,7 @@ static void release_dev(struct file * filp)
         * Make sure that the tty's task queue isn't activated. 
         */
        run_task_queue(&tq_timer);
-       run_task_queue(&tq_scheduler);
+       run_schedule_tasks();
 
        /* 
         * The release_mem function takes care of the details of clearing
index 9bc7d825f88fdb61594ff3c4d242b157d8482357..d47323c9375d341648aa96a80090ad8ae777214a 100644 (file)
@@ -846,6 +846,7 @@ static void i2o_lan_batch_send(struct net_device *dev)
        }
        priv->send_active = 0;
        spin_unlock_irq(&priv->tx_lock);
+       MOD_DEC_USE_COUNT;
 }
 
 #ifdef CONFIG_NET_FC
@@ -900,7 +901,9 @@ static int i2o_lan_sdu_send(struct sk_buff *skb, struct net_device *dev)
 
                if ((priv->tx_batch_mode & 0x01) && !priv->send_active) {
                        priv->send_active = 1;
-                       queue_task(&priv->i2o_batch_send_task, &tq_scheduler);
+                       MOD_INC_USE_COUNT;
+                       if (schedule_task(&priv->i2o_batch_send_task) == 0)
+                               MOD_DEC_USE_COUNT;
                }
        } else {  /* Add new SGL element to the previous message frame */
 
@@ -986,7 +989,9 @@ static int i2o_lan_packet_send(struct sk_buff *skb, struct net_device *dev)
 
                if ((priv->tx_batch_mode & 0x01) && !priv->send_active) {
                        priv->send_active = 1;
-                       queue_task(&priv->i2o_batch_send_task, &tq_scheduler);
+                       MOD_INC_USE_COUNT;
+                       if (schedule_task(&priv->i2o_batch_send_task) == 0)
+                               MOD_DEC_USE_COUNT;
                }
        } else {  /* Add new SGL element to the previous message frame */
 
index ece650b5d0f42cb29297ebe7e59464b9257f0987..95640895a22b04f55c9940f05776f67528d73606 100644 (file)
@@ -1324,7 +1324,7 @@ static void ide_do_request(ide_hwgroup_t *hwgroup, int masked_irq)
                                mod_timer(&hwgroup->timer, sleep);
                                /* we purposely leave hwgroup->busy==1 while sleeping */
                        } else {
-                               /* Ugly, but how can we sleep for the lock otherwise? perhaps from tq_scheduler? */
+                               /* Ugly, but how can we sleep for the lock otherwise? perhaps from tq_disk? */
                                ide_release_lock(&ide_lock);    /* for atari only */
                                hwgroup->busy = 0;
                        }
index ea4aeb369ebf6c9d11ca8bcdf5ea8bf3486c0faf..117701a90f86b16f7c88635f68877b5ac4cef565 100644 (file)
@@ -468,6 +468,7 @@ static void notify_handler(void *dummy)
        for (contr=1; VALID_CARD(contr); contr++)
                 if (test_and_clear_bit(contr, &notify_down_set))
                         notify_down(contr);
+       MOD_DEC_USE_COUNT;
 }
 
 /* -------- card ready callback ------------------------------- */
@@ -508,7 +509,9 @@ void avmb1_card_ready(avmb1_card * card)
        }
 
         set_bit(CARDNR(card), &notify_up_set);
-        queue_task(&tq_state_notify, &tq_scheduler);
+       MOD_INC_USE_COUNT;
+        if (schedule_task(&tq_state_notify) == 0)
+               MOD_DEC_USE_COUNT;
 
         flag = ((__u8 *)(profp->manu))[1];
         switch (flag) {
@@ -568,7 +571,9 @@ static void avmb1_card_down(avmb1_card * card, int notify)
                }
        }
        set_bit(CARDNR(card), &notify_down_set);
-       queue_task(&tq_state_notify, &tq_scheduler);
+       MOD_INC_USE_COUNT;
+       if (schedule_task(&tq_state_notify) == 0)
+               MOD_DEC_USE_COUNT;
        printk(KERN_NOTICE "b1capi: card %d down.\n", CARDNR(card));
 }
 
index dad74175eb3715d8a11f91ac2ca3d6698942703c..bf6571856f7b752d40e38875a5d644f04f1dc560 100644 (file)
@@ -30,7 +30,7 @@
  * Revision 1.15  2000/04/06 15:01:25  calle
  * Bugfix: crash in capidrv.c when reseting a capi controller.
  * - changed code order on remove of controller.
- * - using tq_schedule for notifier in kcapi.c.
+ * - using tq schedule for notifier in kcapi.c.
  * - now using spin_lock_irqsave() and spin_unlock_irqrestore().
  * strange: sometimes even MP hang on unload of isdn.o ...
  *
@@ -630,7 +630,9 @@ static int notify_push(unsigned int cmd, __u32 controller,
         * of devices. Devices can only removed in
         * user process, not in bh.
         */
-       queue_task(&tq_state_notify, &tq_scheduler);
+       MOD_INC_USE_COUNT;
+       if (schedule_task(&tq_state_notify) == 0)
+               MOD_DEC_USE_COUNT;
        return 0;
 }
 
@@ -726,6 +728,7 @@ static void notify_handler(void *dummy)
                kfree(np);
                MOD_DEC_USE_COUNT;
        }
+       MOD_DEC_USE_COUNT;
 }
        
 /* -------- NCCI Handling ------------------------------------- */
index 049ebccb78a462fa9bac528e9bf067b1f39c60ea..0fe5f5c2542fd12628ec1946dfbb84a14ec3b98f 100644 (file)
@@ -70,7 +70,6 @@
 
 static const char *version = "82596.c $Revision: 1.14 $\n";
 
-#include <linux/config.h>
 #include <linux/module.h>
 
 #include <linux/kernel.h>
index 520b1341adb64ef42f05691aaf1496a6bb6591b0..57f800d03b82396e84bec22fdcd3c0f0be63ac9a 100644 (file)
@@ -480,8 +480,11 @@ static int setup (wan_device_t* wandev, wandev_conf_t* conf)
         if(card->hw.type != SDLA_S514 && !card->wandev.piggyback)
                 request_region(card->hw.port, card->hw.io_range, wandev->name);
 
-       if (++active == 1)
-               queue_task(&sdla_tq, &tq_scheduler);
+       if (++active == 1) {
+               MOD_INC_USE_COUNT;
+               if (schedule_task(&sdla_tq) == 0)
+                       MOD_DEC_USE_COUNT;
+       }
                
        wandev->critical = 0;
        return 0;
@@ -859,8 +862,12 @@ STATIC void sdla_poll (void* data)
                        card->poll(card);
                }
        }
-       if (active)
-               queue_task(&sdla_tq, &tq_scheduler);
+       if (active) {
+               MOD_INC_USE_COUNT;
+               if (schedule_task(&sdla_tq) == 0)       /* Surely not? */
+                       MOD_DEC_USE_COUNT;
+       }
+       MOD_DEC_USE_COUNT;
 }
 
 /*============================================================================
index f2ee5ccc38b8550715b773b92d57683dcbd6053d..b305ef12710d960b1760e4681b15859fdba6353b 100644 (file)
@@ -666,9 +666,11 @@ static void aurora_check_modem(struct Aurora_board const * bp, int chip)
                if (sbus_readb(&bp->r[chip]->r[CD180_MSVR]) & MSVR_CD) 
                        wake_up_interruptible(&port->open_wait);
                else if (!((port->flags & ASYNC_CALLOUT_ACTIVE) &&
-                          (port->flags & ASYNC_CALLOUT_NOHUP)))
-                       queue_task(&port->tqueue_hangup,  
-                                          &tq_scheduler);      
+                          (port->flags & ASYNC_CALLOUT_NOHUP))) {
+                       MOD_INC_USE_COUNT;
+                       if (schedule_task(&port->tqueue_hangup) == 0)
+                               MOD_DEC_USE_COUNT;
+               }
        }
        
 /* We don't have such things yet. My aurora board has DTR and RTS swapped, but that doesn't count in this driver. Let's hope
@@ -2211,13 +2213,13 @@ static void do_aurora_hangup(void *private_)
        printk("do_aurora_hangup: start\n");
 #endif
        tty = port->tty;
-       if (tty == NULL)
-               return;
-
-       tty_hangup(tty);
+       if (tty != NULL) {
+               tty_hangup(tty);        /* FIXME: module removal race - AKPM */
 #ifdef AURORA_DEBUG
-       printk("do_aurora_hangup: end\n");
+               printk("do_aurora_hangup: end\n");
 #endif
+       }
+       MOD_DEC_USE_COUNT;
 }
 
 static void aurora_hangup(struct tty_struct * tty)
index fa5f383c305f4ff3c4734558db584495030e2b2a..7aa23b8b0bec0910cb5456860657bfb836ed94e2 100644 (file)
@@ -527,8 +527,9 @@ check_modem:
 #ifdef SERIAL_DEBUG_OPEN
                        printk("scheduling hangup...");
 #endif
-
-                       queue_task(&info->tqueue_hangup, &tq_scheduler);
+                       MOD_INC_USE_COUNT;
+                       if (schedule_task(&info->tqueue_hangup) == 0)
+                               MOD_DEC_USE_COUNT;
                }
        }
 
@@ -676,10 +677,9 @@ static void do_serial_hangup(void *private_)
        struct tty_struct *tty;
 
        tty = info->tty;
-       if (!tty)
-               return;
-
-       tty_hangup(tty);
+       if (tty)
+               tty_hangup(tty);
+       MOD_DEC_USE_COUNT;
 }
 
 static void
index 0e1dec16938219820c0c285661bc41deb1deff13..264ae2fe04c6659f58f513f03e845394c4e571ce 100644 (file)
@@ -194,9 +194,6 @@ MODULE_DESCRIPTION ("AMI MegaRAID driver");
  *================================================================
  */
 
-#define queue_task_irq(a,b)     queue_task(a,b)
-#define queue_task_irq_off(a,b) queue_task(a,b)
-
 #define MAX_SERBUF 160
 #define COM_BASE 0x2f8
 
index 12c0c925641b7d2e71c501ce061e1cf0758631c1..50db38c9742af234656c24f0388d18b75fc66609 100644 (file)
@@ -312,7 +312,7 @@ STATIC void qla1280_abort_queue_single(scsi_qla_host_t *,uint32_t,uint32_t,uint3
 STATIC int qla1280_return_status( sts_entry_t *sts, Scsi_Cmnd       *cp);
 STATIC void qla1280_removeq(scsi_lu_t *q, srb_t *sp);
 STATIC void qla1280_mem_free(scsi_qla_host_t *ha);
-void qla1280_do_dpc(void *p);
+static void qla1280_do_dpc(void *p);
 #ifdef  QLA1280_UNUSED 
 static void qla1280_set_flags(char * s);
 #endif
@@ -1082,7 +1082,8 @@ qla1280_queuecommand(Scsi_Cmnd *cmd, void (*fn)(Scsi_Cmnd *))
         {
             CMD_RESULT(cmd) = (int) (DID_BUS_BUSY << 16);
             qla1280_done_q_put(sp, &ha->done_q_first, &ha->done_q_last);
-            queue_task(&ha->run_qla_bh,&tq_scheduler); 
+
+            schedule_task(&ha->run_qla_bh);
             ha->flags.dpc_sched = TRUE;
             DRIVER_UNLOCK
             return(0);
@@ -1580,7 +1581,7 @@ void qla1280_intr_handler(int irq, void *dev_id, struct pt_regs *regs)
             ha->run_qla_bh.routine = qla1280_do_dpc; 
 
              COMTRACE('P') 
-            queue_task_irq(&ha->run_qla_bh,&tq_scheduler); 
+            schedule_task(&ha->run_qla_bh);
             ha->flags.dpc_sched = TRUE;
         }
         clear_bit(QLA1280_IN_ISR_BIT, (int *)&ha->flags);
@@ -1604,7 +1605,7 @@ void qla1280_intr_handler(int irq, void *dev_id, struct pt_regs *regs)
  * "host->can_queue". This can cause a panic if we were in our interrupt
  * code .
  **************************************************************************/
-void qla1280_do_dpc(void *p)
+static void qla1280_do_dpc(void *p)
 {
     scsi_qla_host_t *ha = (scsi_qla_host_t *) p;
 #if LINUX_VERSION_CODE > KERNEL_VERSION(2,1,95)
index e9926fffb6be1a3e570a5c267f64d678a37bbd2b..9fd35efcbb4886c0732fc16eb073d6e6eeeb4104 100644 (file)
@@ -142,9 +142,9 @@ if [ "$CONFIG_SOUND_OSS" = "y" -o "$CONFIG_SOUND_OSS" = "m" ]; then
    dep_tristate '    Yamaha FM synthesizer (YM3812/OPL-3) support' CONFIG_SOUND_YM3812 $CONFIG_SOUND_OSS
    dep_tristate '    Yamaha OPL3-SA1 audio controller' CONFIG_SOUND_OPL3SA1 $CONFIG_SOUND_OSS
    dep_tristate '    Yamaha OPL3-SA2, SA3, and SAx based PnP cards' CONFIG_SOUND_OPL3SA2 $CONFIG_SOUND_OSS
-   dep_tristate '    Yamaha PCI legacy mode support' CONFIG_SOUND_YMPCI $CONFIG_SOUND_OSS $CONFIG_PCI
+   dep_tristate '    Yamaha YMF7xx PCI audio (legacy mode)' CONFIG_SOUND_YMPCI $CONFIG_SOUND_OSS $CONFIG_PCI
    if [ "$CONFIG_SOUND_YMPCI" = "n" ]; then
-     dep_tristate 'Yamaha PCI native mode support (EXPERIMENTAL)' CONFIG_SOUND_YMFPCI $CONFIG_SOUND_OSS
+      dep_tristate '    Yamaha YMF7xx PCI audio (native mode) (EXPERIMENTAL)' CONFIG_SOUND_YMFPCI $CONFIG_SOUND_OSS $CONFIG_PCI $CONFIG_EXPERIMENTAL
    fi
    dep_tristate '    6850 UART support' CONFIG_SOUND_UART6850 $CONFIG_SOUND_OSS
   
index 36d3ed18f06602d715b9e3c8029c12d7a6b6039f..cef60057ed8fe323bdcea4b728efb589cd3b0e9c 100644 (file)
-struct BA1struct BA1Struct __initdata = {\r
-{{ 0x00000000, 0x00003000 },{ 0x00010000, 0x00003800 },{ 0x00020000, 0x00007000 }},\r
-{0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000163,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00200040,0x00008010,0x00000000,\r
-0x00000000,0x80000001,0x00000001,0x00060000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00900080,0x00000173,0x00000000,\r
-0x00000000,0x00000010,0x00800000,0x00900000,\r
-0xf2c0000f,0x00000200,0x00000000,0x00010600,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000163,0x330300c2,\r
-0x06000000,0x00000000,0x80008000,0x80008000,\r
-0x3fc0000f,0x00000301,0x00010400,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00b00000,0x00d0806d,0x330480c3,\r
-0x04800000,0x00000001,0x00800001,0x0000ffff,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x066a0600,0x06350070,0x0000929d,0x929d929d,\r
-0x00000000,0x0000735a,0x00000600,0x00000000,\r
-0x929d735a,0x8734abfe,0x00010000,0x735a735a,\r
-0xa431ac75,0xa431ac75,0xa431ac75,0xa431ac75,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x0000804f,0x000000c3,\r
-0x05000000,0x00a00010,0x00000000,0x80008000,\r
-0x00000000,0x00000000,0x00000700,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000080,0x00a00000,0x0000809a,0x000000c2,\r
-0x07400000,0x00000000,0x80008000,0xffffffff,\r
-0x00c80028,0x00005555,0x00000000,0x000107a0,\r
-0x00c80028,0x000000c2,0x06800000,0x00000000,\r
-0x06e00080,0x00300000,0x000080bb,0x000000c9,\r
-0x07a00000,0x04000000,0x80008000,0xffffffff,\r
-0x00c80028,0x00005555,0x00000000,0x00000780,\r
-0x00c80028,0x000000c5,0xff800000,0x00000000,\r
-0x00640080,0x00c00000,0x00008197,0x000000c9,\r
-0x07800000,0x04000000,0x80008000,0xffffffff,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x0000805e,0x000000c1,\r
-0x00000000,0x00800000,0x80008000,0x80008000,\r
-0x00020000,0x0000ffff,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x929d0600,0x929d929d,0x929d929d,0x929d0000,\r
-0x929d929d,0x929d929d,0x929d929d,0x929d929d,\r
-0x929d929d,0x00100635,0x060b013f,0x00000004,\r
-0x00000001,0x007a0002,0x00000000,0x066e0610,\r
-0x0105929d,0x929d929d,0x929d929d,0x929d929d,\r
-0x929d929d,0xa431ac75,0x0001735a,0xa431ac75,\r
-0xa431ac75,0xa431ac75,0xa431ac75,0xa431ac75,\r
-0xa431ac75,0xa431ac75,0xa431ac75,0xa431ac75,\r
-0xa431ac75,0xa431ac75,0xa431ac75,0xa431ac75,\r
-0xa431ac75,0xa431ac75,0xa431ac75,0xa431ac75,\r
-0xa431ac75,0xa431ac75,0xa431ac75,0xa431ac75,\r
-0xa431ac75,0xa431ac75,0xa431ac75,0xa431ac75,\r
-0xa431ac75,0xa431ac75,0xa431ac75,0x735a0051,\r
-0x00000000,0x929d929d,0x929d929d,0x929d929d,\r
-0x929d929d,0x929d929d,0x929d929d,0x929d929d,\r
-0x929d929d,0x929d929d,0x00000000,0x06400136,\r
-0x0000270f,0x00010000,0x007a0000,0x00000000,\r
-0x068e0645,0x0105929d,0x929d929d,0x929d929d,\r
-0x929d929d,0x929d929d,0xa431ac75,0x0001735a,\r
-0xa431ac75,0xa431ac75,0xa431ac75,0xa431ac75,\r
-0xa431ac75,0xa431ac75,0xa431ac75,0xa431ac75,\r
-0xa431ac75,0xa431ac75,0xa431ac75,0xa431ac75,\r
-0xa431ac75,0xa431ac75,0xa431ac75,0xa431ac75,\r
-0xa431ac75,0xa431ac75,0xa431ac75,0xa431ac75,\r
-0xa431ac75,0xa431ac75,0xa431ac75,0xa431ac75,\r
-0xa431ac75,0xa431ac75,0xa431ac75,0xa431ac75,\r
-0x735a0100,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00010004,\r
-0x00040730,0x00001002,0x000f619e,0x00001003,\r
-0x00001705,0x00001400,0x000a411e,0x00001003,\r
-0x00040730,0x00001002,0x000f619e,0x00001003,\r
-0x00009705,0x00001400,0x000a411e,0x00001003,\r
-0x00040730,0x00001002,0x000f619e,0x00001003,\r
-0x00011705,0x00001400,0x000a411e,0x00001003,\r
-0x00040730,0x00001002,0x000f619e,0x00001003,\r
-0x00019705,0x00001400,0x000a411e,0x00001003,\r
-0x00040730,0x00001002,0x000f619e,0x00001003,\r
-0x00021705,0x00001400,0x000a411e,0x00001003,\r
-0x00040730,0x00001002,0x000f619e,0x00001003,\r
-0x00029705,0x00001400,0x000a411e,0x00001003,\r
-0x00040730,0x00001002,0x000f619e,0x00001003,\r
-0x00031705,0x00001400,0x000a411e,0x00001003,\r
-0x00040730,0x00001002,0x000f619e,0x00001003,\r
-0x00039705,0x00001400,0x000a411e,0x00001003,\r
-0x000fe19e,0x00001003,0x0009c730,0x00001003,\r
-0x0008e19c,0x00001003,0x000083c1,0x00093040,\r
-0x00098730,0x00001002,0x000ee19e,0x00001003,\r
-0x00009705,0x00001400,0x000a211e,0x00001003,\r
-0x00098730,0x00001002,0x000ee19e,0x00001003,\r
-0x00011705,0x00001400,0x000a211e,0x00001003,\r
-0x00098730,0x00001002,0x000ee19e,0x00001003,\r
-0x00019705,0x00001400,0x000a211e,0x00001003,\r
-0x00098730,0x00001002,0x000ee19e,0x00001003,\r
-0x00021705,0x00001400,0x000a211e,0x00001003,\r
-0x00098730,0x00001002,0x000ee19e,0x00001003,\r
-0x00029705,0x00001400,0x000a211e,0x00001003,\r
-0x00098730,0x00001002,0x000ee19e,0x00001003,\r
-0x00031705,0x00001400,0x000a211e,0x00001003,\r
-0x00098730,0x00001002,0x000ee19e,0x00001003,\r
-0x00039705,0x00001400,0x000a211e,0x00001003,\r
-0x0000a730,0x00001008,0x000e2730,0x00001002,\r
-0x0000a731,0x00001002,0x0000a731,0x00001002,\r
-0x0000a731,0x00001002,0x0000a731,0x00001002,\r
-0x0000a731,0x00001002,0x0000a731,0x00001002,\r
-0x00000000,0x00000000,0x000f619c,0x00001003,\r
-0x0007f801,0x000c0000,0x00000037,0x00001000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x000c0000,0x00000000,0x00000000,\r
-0x0000373c,0x00001000,0x00000000,0x00000000,\r
-0x000ee19c,0x00001003,0x0007f801,0x000c0000,\r
-0x00000037,0x00001000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x0000273c,0x00001000,\r
-0x00000033,0x00001000,0x000e679e,0x00001003,\r
-0x00007705,0x00001400,0x000ac71e,0x00001003,\r
-0x00087fc1,0x000c3be0,0x0007f801,0x000c0000,\r
-0x00000037,0x00001000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x0000a730,0x00001003,\r
-0x00000033,0x00001000,0x0007f801,0x000c0000,\r
-0x00000037,0x00001000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x000c0000,\r
-0x00000032,0x00001000,0x0000273d,0x00001000,\r
-0x0004a730,0x00001003,0x00000f41,0x00097140,\r
-0x0000a841,0x0009b240,0x0000a0c1,0x0009f040,\r
-0x0001c641,0x00093540,0x0001cec1,0x0009b5c0,\r
-0x00000000,0x00000000,0x0001bf05,0x0003fc40,\r
-0x00002725,0x000aa400,0x00013705,0x00093a00,\r
-0x0000002e,0x0009d6c0,0x00038630,0x00001004,\r
-0x0004ef0a,0x000eb785,0x0003fc8a,0x00000000,\r
-0x00000000,0x000c70e0,0x0007d182,0x0002c640,\r
-0x00000630,0x00001004,0x000799b8,0x0002c6c0,\r
-0x00031705,0x00092240,0x00039f05,0x000932c0,\r
-0x0003520a,0x00000000,0x00040731,0x0000100b,\r
-0x00010705,0x000b20c0,0x00000000,0x000eba44,\r
-0x00032108,0x000c60c4,0x00065208,0x000c2917,\r
-0x000406b0,0x00001007,0x00012f05,0x00036880,\r
-0x0002818e,0x000c0000,0x0004410a,0x00000000,\r
-0x00040630,0x00001007,0x00029705,0x000c0000,\r
-0x00000000,0x00000000,0x00003fc1,0x0003fc40,\r
-0x000037c1,0x00091b40,0x00003fc1,0x000911c0,\r
-0x000037c1,0x000957c0,0x00003fc1,0x000951c0,\r
-0x000037c1,0x00000000,0x00003fc1,0x000991c0,\r
-0x000037c1,0x00000000,0x00003fc1,0x0009d1c0,\r
-0x000037c1,0x00000000,0x0001ccc1,0x000915c0,\r
-0x0001c441,0x0009d800,0x0009cdc1,0x00091240,\r
-0x0001c541,0x00091d00,0x0009cfc1,0x00095240,\r
-0x0001c741,0x00095c80,0x000e8ca9,0x00099240,\r
-0x000e85ad,0x00095640,0x00069ca9,0x00099d80,\r
-0x000e952d,0x00099640,0x000eaca9,0x0009d6c0,\r
-0x000ea5ad,0x00091a40,0x0006bca9,0x0009de80,\r
-0x000eb52d,0x00095a40,0x000ecca9,0x00099ac0,\r
-0x000ec5ad,0x0009da40,0x000edca9,0x0009d300,\r
-0x000a6e0a,0x00001000,0x000ed52d,0x00091e40,\r
-0x000eeca9,0x00095ec0,0x000ee5ad,0x00099e40,\r
-0x0006fca9,0x00002500,0x000fb208,0x000c59a0,\r
-0x000ef52d,0x0009de40,0x00068ca9,0x000912c1,\r
-0x000683ad,0x00095241,0x00020f05,0x000991c1,\r
-0x00000000,0x00000000,0x00086f88,0x00001000,\r
-0x0009cf81,0x000b5340,0x0009c701,0x000b92c0,\r
-0x0009de81,0x000bd300,0x0009d601,0x000b1700,\r
-0x0001fd81,0x000b9d80,0x0009f501,0x000b57c0,\r
-0x000a0f81,0x000bd740,0x00020701,0x000b5c80,\r
-0x000a1681,0x000b97c0,0x00021601,0x00002500,\r
-0x000a0701,0x000b9b40,0x000a0f81,0x000b1bc0,\r
-0x00021681,0x00002d00,0x00020f81,0x000bd800,\r
-0x000a0701,0x000b5bc0,0x00021601,0x00003500,\r
-0x000a0f81,0x000b5f40,0x000a0701,0x000bdbc0,\r
-0x00021681,0x00003d00,0x00020f81,0x000b1d00,\r
-0x000a0701,0x000b1fc0,0x00021601,0x00020500,\r
-0x00020f81,0x000b1341,0x000a0701,0x000b9fc0,\r
-0x00021681,0x00020d00,0x00020f81,0x000bde80,\r
-0x000a0701,0x000bdfc0,0x00021601,0x00021500,\r
-0x00020f81,0x000b9341,0x00020701,0x000b53c1,\r
-0x00021681,0x00021d00,0x000a0f81,0x000d0380,\r
-0x0000b601,0x000b15c0,0x00007b01,0x00000000,\r
-0x00007b81,0x000bd1c0,0x00007b01,0x00000000,\r
-0x00007b81,0x000b91c0,0x00007b01,0x000b57c0,\r
-0x00007b81,0x000b51c0,0x00007b01,0x000b1b40,\r
-0x00007b81,0x000b11c0,0x00087b01,0x000c3dc0,\r
-0x0007e488,0x000d7e45,0x00000000,0x000d7a44,\r
-0x0007e48a,0x00000000,0x00011f05,0x00084080,\r
-0x00000000,0x00000000,0x00001705,0x000b3540,\r
-0x00008a01,0x000bf040,0x00007081,0x000bb5c0,\r
-0x00055488,0x00000000,0x0000d482,0x0003fc40,\r
-0x0003fc88,0x00000000,0x0001e401,0x000b3a00,\r
-0x0001ec81,0x000bd6c0,0x0004ef08,0x000eb784,\r
-0x000c86b0,0x00001007,0x00008281,0x000bb240,\r
-0x0000b801,0x000b7140,0x00007888,0x00000000,\r
-0x0000073c,0x00001000,0x0007f188,0x000c0000,\r
-0x00000000,0x00000000,0x00055288,0x000c555c,\r
-0x0005528a,0x000c0000,0x0009fa88,0x000c5d00,\r
-0x0000fa88,0x00000000,0x00000032,0x00001000,\r
-0x0000073d,0x00001000,0x0007f188,0x000c0000,\r
-0x00000000,0x00000000,0x0008c01c,0x00001003,\r
-0x00002705,0x00001008,0x0008b201,0x000c1392,\r
-0x0000ba01,0x00000000,0x00008731,0x00001400,\r
-0x0004c108,0x000fe0c4,0x00057488,0x00000000,\r
-0x000a6388,0x00001001,0x0008b334,0x000bc141,\r
-0x0003020e,0x00000000,0x000886b0,0x00001008,\r
-0x00003625,0x000c5dfa,0x000a638a,0x00001001,\r
-0x0008020e,0x00001002,0x0008a6b0,0x00001008,\r
-0x0007f301,0x00000000,0x00000000,0x00000000,\r
-0x00002725,0x000a8c40,0x000000ae,0x00000000,\r
-0x000d8630,0x00001008,0x00000000,0x000c74e0,\r
-0x0007d182,0x0002d640,0x000a8630,0x00001008,\r
-0x000799b8,0x0002d6c0,0x0000748a,0x000c3ec5,\r
-0x0007420a,0x000c0000,0x00062208,0x000c4117,\r
-0x00070630,0x00001009,0x00000000,0x000c0000,\r
-0x0001022e,0x00000000,0x0003a630,0x00001009,\r
-0x00000000,0x000c0000,0x00000036,0x00001000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x0002a730,0x00001008,0x0007f801,0x000c0000,\r
-0x00000037,0x00001000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x0002a730,0x00001008,\r
-0x00000033,0x00001000,0x0002a705,0x00001008,\r
-0x00007a01,0x000c0000,0x000e6288,0x000d550a,\r
-0x0006428a,0x00000000,0x00060730,0x0000100a,\r
-0x00000000,0x000c0000,0x00000000,0x00000000,\r
-0x0007aab0,0x00034880,0x00078fb0,0x0000100b,\r
-0x00057488,0x00000000,0x00033b94,0x00081140,\r
-0x000183ae,0x00000000,0x000786b0,0x0000100b,\r
-0x00022f05,0x000c3545,0x0000eb8a,0x00000000,\r
-0x00042731,0x00001003,0x0007aab0,0x00034880,\r
-0x00048fb0,0x0000100a,0x00057488,0x00000000,\r
-0x00033b94,0x00081140,0x000183ae,0x00000000,\r
-0x000806b0,0x0000100b,0x00022f05,0x00000000,\r
-0x00007401,0x00091140,0x00048f05,0x000951c0,\r
-0x00042731,0x00001003,0x0000473d,0x00001000,\r
-0x000f19b0,0x000bbc47,0x00080000,0x000bffc7,\r
-0x000fe19e,0x00001003,0x00000000,0x00000000,\r
-0x0008e19c,0x00001003,0x000083c1,0x00093040,\r
-0x00000f41,0x00097140,0x0000a841,0x0009b240,\r
-0x0000a0c1,0x0009f040,0x0001c641,0x00093540,\r
-0x0001cec1,0x0009b5c0,0x00000000,0x000fdc44,\r
-0x00055208,0x00000000,0x00010705,0x000a2880,\r
-0x0000a23a,0x00093a00,0x0003fc8a,0x000df6c5,\r
-0x0004ef0a,0x000c0000,0x00012f05,0x00036880,\r
-0x00065308,0x000c2997,0x000d86b0,0x0000100a,\r
-0x0004410a,0x000d40c7,0x00000000,0x00000000,\r
-0x00080730,0x00001004,0x00056f0a,0x000ea105,\r
-0x00000000,0x00000000,0x0000473d,0x00001000,\r
-0x000f19b0,0x000bbc47,0x00080000,0x000bffc7,\r
-0x0000273d,0x00001000,0x00000000,0x000eba44,\r
-0x00048f05,0x0000f440,0x00007401,0x0000f7c0,\r
-0x00000734,0x00001000,0x00010705,0x000a6880,\r
-0x00006a88,0x000c75c4,0x00000000,0x000e5084,\r
-0x00000000,0x000eba44,0x00087401,0x000e4782,\r
-0x00000734,0x00001000,0x00010705,0x000a6880,\r
-0x00006a88,0x000c75c4,0x0007c108,0x000c0000,\r
-0x0007e721,0x000bed40,0x00005f25,0x000badc0,\r
-0x0003ba97,0x000beb80,0x00065590,0x000b2e00,\r
-0x00033217,0x00003ec0,0x00065590,0x000b8e40,\r
-0x0003ed80,0x000491c0,0x00073fb0,0x00074c80,\r
-0x000283a0,0x0000100c,0x000ee388,0x00042970,\r
-0x00008301,0x00021ef2,0x000b8f14,0x0000000f,\r
-0x000c4d8d,0x0000001b,0x000d6dc2,0x000e06c6,\r
-0x000032ac,0x000c3916,0x0004edc2,0x00074c80,\r
-0x00078898,0x00001000,0x00038894,0x00000032,\r
-0x000c4d8d,0x00092e1b,0x000d6dc2,0x000e06c6,\r
-0x0004edc2,0x000c1956,0x0000722c,0x00034a00,\r
-0x00041705,0x0009ed40,0x00058730,0x00001400,\r
-0x000d7488,0x000c3a00,0x00048f05,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000,\r
-0x00000000,0x00000000,0x00000000,0x00000000}\r
- };\r
+/****************************************************************************
+ * "CWCIMAGE.H"-- For CS46XX. Ver 1.04
+ *      Copyright 1998-2000 (c) Cirrus Logic Corp.
+ *      Version 1.04
+ ****************************************************************************
+ */
+#define CLEAR__COUNT     3
+#define FILL__COUNT      4
+#define BA1__DWORD_SIZE  13*1024+512
+
+static struct
+{
+        unsigned BA1__DestByteOffset;
+        unsigned BA1__SourceSize;
+} ClrStat[CLEAR__COUNT] ={ {0x00000000, 0x00003000 },
+                           {0x00010000, 0x00003800 },
+                           {0x00020000, 0x00007000 } };
+
+static u32 FillArray1[]={
+0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000163,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00200040,0x00008010,0x00000000,
+0x00000000,0x80000001,0x00000001,0x00060000,
+0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00900080,0x00000173,0x00000000,
+0x00000000,0x00000010,0x00800000,0x00900000,
+0xf2c0000f,0x00000200,0x00000000,0x00010600,
+0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000163,0x330300c2,
+0x06000000,0x00000000,0x80008000,0x80008000,
+0x3fc0000f,0x00000301,0x00010400,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00b00000,0x00d0806d,0x330480c3,
+0x04800000,0x00000001,0x00800001,0x0000ffff,
+0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,
+0x066a0600,0x06350070,0x0000929d,0x929d929d,
+0x00000000,0x0000735a,0x00000600,0x00000000,
+0x929d735a,0x00000000,0x00010000,0x735a735a,
+0xa431ac75,0xa431ac75,0xa431ac75,0xa431ac75,
+0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x0000804f,0x000000c3,
+0x05000000,0x00a00010,0x00000000,0x80008000,
+0x00000000,0x00000000,0x00000700,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000080,0x00a00000,0x0000809a,0x000000c2,
+0x07400000,0x00000000,0x80008000,0xffffffff,
+0x00c80028,0x00005555,0x00000000,0x000107a0,
+0x00c80028,0x000000c2,0x06800000,0x00000000,
+0x06e00080,0x00300000,0x000080bb,0x000000c9,
+0x07a00000,0x04000000,0x80008000,0xffffffff,
+0x00c80028,0x00005555,0x00000000,0x00000780,
+0x00c80028,0x000000c5,0xff800000,0x00000000,
+0x00640080,0x00c00000,0x00008197,0x000000c9,
+0x07800000,0x04000000,0x80008000,0xffffffff,
+0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x0000805e,0x000000c1,
+0x00000000,0x00800000,0x80008000,0x80008000,
+0x00020000,0x0000ffff,0x00000000,0x00000000};
+
+static u32 FillArray2[]={
+0x929d0600,0x929d929d,0x929d929d,0x929d0000,
+0x929d929d,0x929d929d,0x929d929d,0x929d929d,
+0x929d929d,0x00100635,0x060b013f,0x00000004,
+0x00000001,0x007a0002,0x00000000,0x066e0610,
+0x0105929d,0x929d929d,0x929d929d,0x929d929d,
+0x929d929d,0xa431ac75,0x0001735a,0xa431ac75,
+0xa431ac75,0xa431ac75,0xa431ac75,0xa431ac75,
+0xa431ac75,0xa431ac75,0xa431ac75,0xa431ac75,
+0xa431ac75,0xa431ac75,0xa431ac75,0xa431ac75,
+0xa431ac75,0xa431ac75,0xa431ac75,0xa431ac75,
+0xa431ac75,0xa431ac75,0xa431ac75,0xa431ac75,
+0xa431ac75,0xa431ac75,0xa431ac75,0xa431ac75,
+0xa431ac75,0xa431ac75,0xa431ac75,0x735a0051,
+0x00000000,0x929d929d,0x929d929d,0x929d929d,
+0x929d929d,0x929d929d,0x929d929d,0x929d929d,
+0x929d929d,0x929d929d,0x00000000,0x06400136,
+0x0000270f,0x00010000,0x007a0000,0x00000000,
+0x068e0645,0x0105929d,0x929d929d,0x929d929d,
+0x929d929d,0x929d929d,0xa431ac75,0x0001735a,
+0xa431ac75,0xa431ac75,0xa431ac75,0xa431ac75,
+0xa431ac75,0xa431ac75,0xa431ac75,0xa431ac75,
+0xa431ac75,0xa431ac75,0xa431ac75,0xa431ac75,
+0xa431ac75,0xa431ac75,0xa431ac75,0xa431ac75,
+0xa431ac75,0xa431ac75,0xa431ac75,0xa431ac75,
+0xa431ac75,0xa431ac75,0xa431ac75,0xa431ac75,
+0xa431ac75,0xa431ac75,0xa431ac75,0xa431ac75,
+0x735a0100,0x00000000,0x00000000,0x00000000};
+
+static u32 FillArray3[]={
+0x00000000,0x00000000,0x00000000,0x00010004};
+
+static u32 FillArray4[]={
+0x00040730,0x00001002,0x000f619e,0x00001003,
+0x00001705,0x00001400,0x000a411e,0x00001003,
+0x00040730,0x00001002,0x000f619e,0x00001003,
+0x00009705,0x00001400,0x000a411e,0x00001003,
+0x00040730,0x00001002,0x000f619e,0x00001003,
+0x00011705,0x00001400,0x000a411e,0x00001003,
+0x00040730,0x00001002,0x000f619e,0x00001003,
+0x00019705,0x00001400,0x000a411e,0x00001003,
+0x00040730,0x00001002,0x000f619e,0x00001003,
+0x00021705,0x00001400,0x000a411e,0x00001003,
+0x00040730,0x00001002,0x000f619e,0x00001003,
+0x00029705,0x00001400,0x000a411e,0x00001003,
+0x00040730,0x00001002,0x000f619e,0x00001003,
+0x00031705,0x00001400,0x000a411e,0x00001003,
+0x00040730,0x00001002,0x000f619e,0x00001003,
+0x00039705,0x00001400,0x000a411e,0x00001003,
+0x000fe19e,0x00001003,0x0009c730,0x00001003,
+0x0008e19c,0x00001003,0x000083c1,0x00093040,
+0x00098730,0x00001002,0x000ee19e,0x00001003,
+0x00009705,0x00001400,0x000a211e,0x00001003,
+0x00098730,0x00001002,0x000ee19e,0x00001003,
+0x00011705,0x00001400,0x000a211e,0x00001003,
+0x00098730,0x00001002,0x000ee19e,0x00001003,
+0x00019705,0x00001400,0x000a211e,0x00001003,
+0x00098730,0x00001002,0x000ee19e,0x00001003,
+0x00021705,0x00001400,0x000a211e,0x00001003,
+0x00098730,0x00001002,0x000ee19e,0x00001003,
+0x00029705,0x00001400,0x000a211e,0x00001003,
+0x00098730,0x00001002,0x000ee19e,0x00001003,
+0x00031705,0x00001400,0x000a211e,0x00001003,
+0x00098730,0x00001002,0x000ee19e,0x00001003,
+0x00039705,0x00001400,0x000a211e,0x00001003,
+0x0000a730,0x00001008,0x000e2730,0x00001002,
+0x0000a731,0x00001002,0x0000a731,0x00001002,
+0x0000a731,0x00001002,0x0000a731,0x00001002,
+0x0000a731,0x00001002,0x0000a731,0x00001002,
+0x00000000,0x00000000,0x000f619c,0x00001003,
+0x0007f801,0x000c0000,0x00000037,0x00001000,
+0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x000c0000,0x00000000,0x00000000,
+0x0000373c,0x00001000,0x00000000,0x00000000,
+0x000ee19c,0x00001003,0x0007f801,0x000c0000,
+0x00000037,0x00001000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x0000273c,0x00001000,
+0x00000033,0x00001000,0x000e679e,0x00001003,
+0x00007705,0x00001400,0x000ac71e,0x00001003,
+0x00087fc1,0x000c3be0,0x0007f801,0x000c0000,
+0x00000037,0x00001000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x0000a730,0x00001003,
+0x00000033,0x00001000,0x0007f801,0x000c0000,
+0x00000037,0x00001000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x000c0000,
+0x00000032,0x00001000,0x0000273d,0x00001000,
+0x0004a730,0x00001003,0x00000f41,0x00097140,
+0x0000a841,0x0009b240,0x0000a0c1,0x0009f040,
+0x0001c641,0x00093540,0x0001cec1,0x0009b5c0,
+0x00000000,0x00000000,0x0001bf05,0x0003fc40,
+0x00002725,0x000aa400,0x00013705,0x00093a00,
+0x0000002e,0x0009d6c0,0x00038630,0x00001004,
+0x0004ef0a,0x000eb785,0x0003fc8a,0x00000000,
+0x00000000,0x000c70e0,0x0007d182,0x0002c640,
+0x00000630,0x00001004,0x000799b8,0x0002c6c0,
+0x00031705,0x00092240,0x00039f05,0x000932c0,
+0x0003520a,0x00000000,0x00040731,0x0000100b,
+0x00010705,0x000b20c0,0x00000000,0x000eba44,
+0x00032108,0x000c60c4,0x00065208,0x000c2917,
+0x000406b0,0x00001007,0x00012f05,0x00036880,
+0x0002818e,0x000c0000,0x0004410a,0x00000000,
+0x00040630,0x00001007,0x00029705,0x000c0000,
+0x00000000,0x00000000,0x00003fc1,0x0003fc40,
+0x000037c1,0x00091b40,0x00003fc1,0x000911c0,
+0x000037c1,0x000957c0,0x00003fc1,0x000951c0,
+0x000037c1,0x00000000,0x00003fc1,0x000991c0,
+0x000037c1,0x00000000,0x00003fc1,0x0009d1c0,
+0x000037c1,0x00000000,0x0001ccc1,0x000915c0,
+0x0001c441,0x0009d800,0x0009cdc1,0x00091240,
+0x0001c541,0x00091d00,0x0009cfc1,0x00095240,
+0x0001c741,0x00095c80,0x000e8ca9,0x00099240,
+0x000e85ad,0x00095640,0x00069ca9,0x00099d80,
+0x000e952d,0x00099640,0x000eaca9,0x0009d6c0,
+0x000ea5ad,0x00091a40,0x0006bca9,0x0009de80,
+0x000eb52d,0x00095a40,0x000ecca9,0x00099ac0,
+0x000ec5ad,0x0009da40,0x000edca9,0x0009d300,
+0x000a6e0a,0x00001000,0x000ed52d,0x00091e40,
+0x000eeca9,0x00095ec0,0x000ee5ad,0x00099e40,
+0x0006fca9,0x00002500,0x000fb208,0x000c59a0,
+0x000ef52d,0x0009de40,0x00068ca9,0x000912c1,
+0x000683ad,0x00095241,0x00020f05,0x000991c1,
+0x00000000,0x00000000,0x00086f88,0x00001000,
+0x0009cf81,0x000b5340,0x0009c701,0x000b92c0,
+0x0009de81,0x000bd300,0x0009d601,0x000b1700,
+0x0001fd81,0x000b9d80,0x0009f501,0x000b57c0,
+0x000a0f81,0x000bd740,0x00020701,0x000b5c80,
+0x000a1681,0x000b97c0,0x00021601,0x00002500,
+0x000a0701,0x000b9b40,0x000a0f81,0x000b1bc0,
+0x00021681,0x00002d00,0x00020f81,0x000bd800,
+0x000a0701,0x000b5bc0,0x00021601,0x00003500,
+0x000a0f81,0x000b5f40,0x000a0701,0x000bdbc0,
+0x00021681,0x00003d00,0x00020f81,0x000b1d00,
+0x000a0701,0x000b1fc0,0x00021601,0x00020500,
+0x00020f81,0x000b1341,0x000a0701,0x000b9fc0,
+0x00021681,0x00020d00,0x00020f81,0x000bde80,
+0x000a0701,0x000bdfc0,0x00021601,0x00021500,
+0x00020f81,0x000b9341,0x00020701,0x000b53c1,
+0x00021681,0x00021d00,0x000a0f81,0x000d0380,
+0x0000b601,0x000b15c0,0x00007b01,0x00000000,
+0x00007b81,0x000bd1c0,0x00007b01,0x00000000,
+0x00007b81,0x000b91c0,0x00007b01,0x000b57c0,
+0x00007b81,0x000b51c0,0x00007b01,0x000b1b40,
+0x00007b81,0x000b11c0,0x00087b01,0x000c3dc0,
+0x0007e488,0x000d7e45,0x00000000,0x000d7a44,
+0x0007e48a,0x00000000,0x00011f05,0x00084080,
+0x00000000,0x00000000,0x00001705,0x000b3540,
+0x00008a01,0x000bf040,0x00007081,0x000bb5c0,
+0x00055488,0x00000000,0x0000d482,0x0003fc40,
+0x0003fc88,0x00000000,0x0001e401,0x000b3a00,
+0x0001ec81,0x000bd6c0,0x0004ef08,0x000eb784,
+0x000c86b0,0x00001007,0x00008281,0x000bb240,
+0x0000b801,0x000b7140,0x00007888,0x00000000,
+0x0000073c,0x00001000,0x0007f188,0x000c0000,
+0x00000000,0x00000000,0x00055288,0x000c555c,
+0x0005528a,0x000c0000,0x0009fa88,0x000c5d00,
+0x0000fa88,0x00000000,0x00000032,0x00001000,
+0x0000073d,0x00001000,0x0007f188,0x000c0000,
+0x00000000,0x00000000,0x0008c01c,0x00001003,
+0x00002705,0x00001008,0x0008b201,0x000c1392,
+0x0000ba01,0x00000000,0x00008731,0x00001400,
+0x0004c108,0x000fe0c4,0x00057488,0x00000000,
+0x000a6388,0x00001001,0x0008b334,0x000bc141,
+0x0003020e,0x00000000,0x000886b0,0x00001008,
+0x00003625,0x000c5dfa,0x000a638a,0x00001001,
+0x0008020e,0x00001002,0x0008a6b0,0x00001008,
+0x0007f301,0x00000000,0x00000000,0x00000000,
+0x00002725,0x000a8c40,0x000000ae,0x00000000,
+0x000d8630,0x00001008,0x00000000,0x000c74e0,
+0x0007d182,0x0002d640,0x000a8630,0x00001008,
+0x000799b8,0x0002d6c0,0x0000748a,0x000c3ec5,
+0x0007420a,0x000c0000,0x00062208,0x000c4117,
+0x00070630,0x00001009,0x00000000,0x000c0000,
+0x0001022e,0x00000000,0x0003a630,0x00001009,
+0x00000000,0x000c0000,0x00000036,0x00001000,
+0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,
+0x0002a730,0x00001008,0x0007f801,0x000c0000,
+0x00000037,0x00001000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x0002a730,0x00001008,
+0x00000033,0x00001000,0x0002a705,0x00001008,
+0x00007a01,0x000c0000,0x000e6288,0x000d550a,
+0x0006428a,0x00000000,0x00060730,0x0000100a,
+0x00000000,0x000c0000,0x00000000,0x00000000,
+0x0007aab0,0x00034880,0x00078fb0,0x0000100b,
+0x00057488,0x00000000,0x00033b94,0x00081140,
+0x000183ae,0x00000000,0x000786b0,0x0000100b,
+0x00022f05,0x000c3545,0x0000eb8a,0x00000000,
+0x00042731,0x00001003,0x0007aab0,0x00034880,
+0x00048fb0,0x0000100a,0x00057488,0x00000000,
+0x00033b94,0x00081140,0x000183ae,0x00000000,
+0x000806b0,0x0000100b,0x00022f05,0x00000000,
+0x00007401,0x00091140,0x00048f05,0x000951c0,
+0x00042731,0x00001003,0x0000473d,0x00001000,
+0x000f19b0,0x000bbc47,0x00080000,0x000bffc7,
+0x000fe19e,0x00001003,0x00000000,0x00000000,
+0x0008e19c,0x00001003,0x000083c1,0x00093040,
+0x00000f41,0x00097140,0x0000a841,0x0009b240,
+0x0000a0c1,0x0009f040,0x0001c641,0x00093540,
+0x0001cec1,0x0009b5c0,0x00000000,0x000fdc44,
+0x00055208,0x00000000,0x00010705,0x000a2880,
+0x0000a23a,0x00093a00,0x0003fc8a,0x000df6c5,
+0x0004ef0a,0x000c0000,0x00012f05,0x00036880,
+0x00065308,0x000c2997,0x000d86b0,0x0000100a,
+0x0004410a,0x000d40c7,0x00000000,0x00000000,
+0x00080730,0x00001004,0x00056f0a,0x000ea105,
+0x00000000,0x00000000,0x0000473d,0x00001000,
+0x000f19b0,0x000bbc47,0x00080000,0x000bffc7,
+0x0000273d,0x00001000,0x00000000,0x000eba44,
+0x00048f05,0x0000f440,0x00007401,0x0000f7c0,
+0x00000734,0x00001000,0x00010705,0x000a6880,
+0x00006a88,0x000c75c4,0x00000000,0x000e5084,
+0x00000000,0x000eba44,0x00087401,0x000e4782,
+0x00000734,0x00001000,0x00010705,0x000a6880,
+0x00006a88,0x000c75c4,0x0007c108,0x000c0000,
+0x0007e721,0x000bed40,0x00005f25,0x000badc0,
+0x0003ba97,0x000beb80,0x00065590,0x000b2e00,
+0x00033217,0x00003ec0,0x00065590,0x000b8e40,
+0x0003ed80,0x000491c0,0x00073fb0,0x00074c80,
+0x000283a0,0x0000100c,0x000ee388,0x00042970,
+0x00008301,0x00021ef2,0x000b8f14,0x0000000f,
+0x000c4d8d,0x0000001b,0x000d6dc2,0x000e06c6,
+0x000032ac,0x000c3916,0x0004edc2,0x00074c80,
+0x00078898,0x00001000,0x00038894,0x00000032,
+0x000c4d8d,0x00092e1b,0x000d6dc2,0x000e06c6,
+0x0004edc2,0x000c1956,0x0000722c,0x00034a00,
+0x00041705,0x0009ed40,0x00058730,0x00001400,
+0x000d7488,0x000c3a00,0x00048f05,0x00000000};
+
+static struct
+{   u32 Offset;
+    u32 Size;
+    u32 *pFill;
+} FillStat[FILL__COUNT] = {
+                            {0x00000000, sizeof(FillArray1), FillArray1},
+                            {0x00001800, sizeof(FillArray2), FillArray2},
+                            {0x000137f0, sizeof(FillArray3), FillArray3},
+                            {0x00020000, sizeof(FillArray4), FillArray4}
+                          };
index 5a4632a6bcc2a315f54d897586522e7552e8c3dc..c0bf7c382864caff59d7489a024d75406d3aeee0 100644 (file)
@@ -1,6 +1,7 @@
 /*
  *     Crystal SoundFusion CS46xx driver
  *
+ *     Copyright 1998-2000 Cirrus Logic Corporation <audio@crystal.cirrus.com>
  *     Copyright 1999-2000 Jaroslav Kysela <perex@suse.cz>
  *     Copyright 2000 Alan Cox <alan@redhat.com>
  *
  *     along with this program; if not, write to the Free Software
  *     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  *
- * Changes:
- *     20000815        Updated driver to kernel 2.4, some cleanups/fixes
- *                     Nils Faerber <nils@kernelconcepts.de>
+ *     Current maintainers:
+ *             Cirrus Logic Corporation, Thomas Woller (tw)
+ *                     <twoller@crystal.cirrus.com>
+ *             Nils Faerber (nf)
+ *                     <nils@kernelconcepts.de>
+ *             Thanks to David Pollard for testing.
  *
- *     20000909        Changed cs_read, cs_write and drain_dac
- *                     Nils Faerber <nils@kernelconcepts.de>
+ *     Changes:
+ *     20000909-nf     Changed cs_read, cs_write and drain_dac
+ *     20001025-tw     Separate Playback/Capture structs and buffers.
+ *                     Added Scatter/Gather support for Playback.
+ *                     Added Capture.
+ *     20001027-nf     Port to kernel 2.4.0-test9, some clean-ups
+ *                     Start of powermanagement support (CS46XX_PM).
+ *     20001128-tw     Add module parm for default buffer order.
+ *                     added DMA_GFP flag to kmalloc dma buffer allocs.
+ *                     backfill silence to eliminate stuttering on
+ *                     underruns.
+ *     20001201-tw     add resyncing of swptr on underruns.
+ *     20001205-tw-nf  fixed GETOSPACE ioctl() after open()
  *
- *     20001110        Added __initdata to BA1Struct in cs461x_image.h
- *                     and three more __init here
- *                     Bartlomiej Zolnierkiewicz <bkz@linux-ide.org>
- *
- *     20001023        Ported to Linux 2.4 PCI interface, some cleanups
- *                     Christoph Hellwig <hch@caldera.de>
  *
+ *     Status:
+ *     Playback/Capture supported from 8k-48k.
+ *     16Bit Signed LE & 8Bit Unsigned, with Mono or Stereo supported.
  */
  
 #include <linux/module.h>
@@ -49,6 +61,9 @@
 #include <linux/malloc.h>
 #include <linux/soundcard.h>
 #include <linux/pci.h>
+#ifdef CS46XX_PM
+#include <linux/pm.h>
+#endif
 #include <asm/io.h>
 #include <asm/dma.h>
 #include <linux/init.h>
 
 #include "cs461x.h"
 
+
+/* MIDI buffer sizes */
+#define CS_MIDIINBUF  500
+#define CS_MIDIOUTBUF 500
+
 #define ADC_RUNNING    1
 #define DAC_RUNNING    2
 
@@ -68,6 +88,8 @@
 #define CS_FMT_STEREO  2
 #define CS_FMT_MASK    3
 
+#define CS_TYPE_ADC    1
+#define CS_TYPE_DAC    2
 /*
  *     CS461x definitions
  */
 
 #define GOF_PER_SEC    200
 
+#define CSDEBUG_INTERFACE 1
+#define CSDEBUG 1
+/*
+ * Turn on/off debugging compilation by using 1/0 respectively for CSDEBUG
+ *
+ *
+ * CSDEBUG is usual mode is set to 1, then use the
+ * cs_debuglevel and cs_debugmask to turn on or off debugging.
+ * Debug level of 1 has been defined to be kernel errors and info
+ * that should be printed on any released driver.
+ */
+#if CSDEBUG
+#define CS_DBGOUT(mask,level,x) if((cs_debuglevel >= (level)) && ((mask) & cs_debugmask)) {x;} 
+#else
+#define CS_DBGOUT(mask,level,x) 
+#endif
+/*
+ * cs_debugmask areas
+ */
+#define CS_INIT                0x00000001              /* initialization and probe functions */
+#define CS_ERROR       0x00000002              /* tmp debugging bit placeholder */
+#define CS_INTERRUPT   0x00000004              /* interrupt handler (separate from all other) */
+#define CS_FUNCTION    0x00000008              /* enter/leave functions */
+#define CS_WAVE_WRITE  0x00000010              /* write information for wave */
+#define CS_WAVE_READ   0x00000020              /* read information for wave */
+#define CS_MIDI_WRITE  0x00000040              /* write information for midi */
+#define CS_MIDI_READ   0x00000080              /* read information for midi */
+#define CS_MPU401_WRITE 0x00000100             /* write information for mpu401 */
+#define CS_MPU401_READ         0x00000200              /* read information for mpu401 */
+#define CS_OPEN                0x00000400              /* all open functions in the driver */
+#define CS_RELEASE     0x00000800              /* all release functions in the driver */
+#define CS_PARMS       0x00001000              /* functional and operational parameters */
+#define CS_IOCTL       0x00002000              /* ioctl (non-mixer) */
+#define CS_TMP         0x10000000              /* tmp debug mask bit */
+
+#if CSDEBUG
+static unsigned long cs_debuglevel=1;                  /* levels range from 1-9 */
+static unsigned long cs_debugmask=CS_INIT | CS_ERROR;  /* use CS_DBGOUT with various mask values */
+#endif
+#define DMABUF_DEFAULTORDER 3
+static unsigned long defaultorder=DMABUF_DEFAULTORDER;
+#if MODULE
+MODULE_PARM(defaultorder, "i");
+MODULE_PARM(cs_debuglevel, "i");
+MODULE_PARM(cs_debugmask, "i");
+#endif
+
 static int external_amp = 0;
 static int thinkpad = 0;
 
@@ -93,11 +162,11 @@ struct cs_channel
        void *state;
 };
 
-#define DRIVER_VERSION "0.14"
+#define DRIVER_VERSION "1.10"
 
 /* magic numbers to protect our data structures */
-#define CS_CARD_MAGIC          0x46524F4D /* "FROM" */
-#define CS_STATE_MAGIC         0x414c5341 /* "ALSA" */
+#define CS_CARD_MAGIC          0x43525553 /* "CRUS" */
+#define CS_STATE_MAGIC         0x4c4f4749 /* "LOGI" */
 #define NR_HW_CH               3
 
 /* maxinum number of AC97 codecs connected, AC97 2.0 defined 4 */
@@ -129,7 +198,6 @@ struct cs_state {
                /* hardware channel */
                struct cs_channel *channel;
                int pringbuf;           /* Software ring slot */
-               int ppingbuf;           /* Hardware ring slot */
                void *pbuf;             /* 4K hardware DMA buffer */
 
                /* OSS buffer management stuff */
@@ -138,14 +206,21 @@ struct cs_state {
                unsigned buforder;
                unsigned numfrag;
                unsigned fragshift;
+               unsigned divisor;
+               unsigned type;
+               void *tmpbuff;                  /* tmp buffer for sample conversions */
+               dma_addr_t dma_handle_tmpbuff;
+               unsigned buforder_tmpbuff;      /* Log base 2 of size in bytes.. */
 
                /* our buffer acts like a circular ring */
                unsigned hwptr;         /* where dma last started, updated by update_ptr */
                unsigned swptr;         /* where driver last clear/filled, updated by read/write */
                int count;              /* bytes to be comsumed or been generated by dma machine */
                unsigned total_bytes;   /* total bytes dmaed by hardware */
+               unsigned blocks;        /* total blocks */
 
                unsigned error;         /* number of over/underruns */
+               unsigned underrun;      /* underrun pending before next write has occurred */
                wait_queue_head_t wait; /* put process on wait queue when no more space in buffer */
 
                /* redundant, but makes calculations easier */
@@ -157,6 +232,7 @@ struct cs_state {
                unsigned mapped:1;
                unsigned ready:1;
                unsigned endcleared:1;
+               unsigned SGok:1;
                unsigned update_flag;
                unsigned ossfragshift;
                int ossmaxfrags;
@@ -170,7 +246,7 @@ struct cs_card {
        unsigned int magic;
 
        /* We keep cs461x cards in a linked list */
-       struct list_head devs;
+       struct cs_card *next;
 
        /* The cs461x has a certain amount of cross channel interaction
           so we use a single per card lock */
@@ -183,16 +259,17 @@ struct cs_card {
 
        /* soundcore stuff */
        int dev_audio;
+       int dev_midi;
 
        /* structures for abstraction of hardware facilities, codecs, banks and channels*/
        struct ac97_codec *ac97_codec[NR_AC97];
-       struct cs_state *states[NR_HW_CH];
+       struct cs_state *states[2];
 
        u16 ac97_features;
-
+       
        int amplifier;                  /* Amplifier control */
        void (*amplifier_ctrl)(struct cs_card *, int);
-
+       
        int active;                     /* Active clocking */
        void (*active_ctrl)(struct cs_card *, int);
        
@@ -219,9 +296,23 @@ struct cs_card {
        struct cs_channel *(*alloc_pcm_channel)(struct cs_card *);
        struct cs_channel *(*alloc_rec_pcm_channel)(struct cs_card *);
        void (*free_pcm_channel)(struct cs_card *, int chan);
+
+       /* /dev/midi stuff */
+       struct {
+               unsigned ird, iwr, icnt;
+               unsigned ord, owr, ocnt;
+               wait_queue_head_t open_wait;
+               wait_queue_head_t iwait;
+               wait_queue_head_t owait;
+               spinlock_t lock;
+               unsigned char ibuf[CS_MIDIINBUF];
+               unsigned char obuf[CS_MIDIOUTBUF];
+               mode_t open_mode;
+               struct semaphore open_sem;
+       } midi;
 };
 
-static LIST_HEAD(devs);
+static struct cs_card *devs = NULL;
 
 static int cs_open_mixdev(struct inode *inode, struct file *file);
 static int cs_release_mixdev(struct inode *inode, struct file *file);
@@ -254,6 +345,224 @@ extern __inline__ unsigned ld2(unsigned int x)
        return r;
 }
 
+#if CSDEBUG
+
+/* DEBUG ROUTINES */
+
+#define SOUND_MIXER_CS_GETDBGLEVEL     _SIOWR('M',120, int)
+#define SOUND_MIXER_CS_SETDBGLEVEL     _SIOWR('M',121, int)
+#define SOUND_MIXER_CS_GETDBGMASK      _SIOWR('M',122, int)
+#define SOUND_MIXER_CS_SETDBGMASK      _SIOWR('M',123, int)
+
+#define SNDCTL_DSP_CS_GETDBGLEVEL      _SIOWR('P', 50, int)
+#define SNDCTL_DSP_CS_SETDBGLEVEL      _SIOWR('P', 51, int)
+#define SNDCTL_DSP_CS_GETDBGMASK       _SIOWR('P', 52, int)
+#define SNDCTL_DSP_CS_SETDBGMASK       _SIOWR('P', 53, int)
+
+void printioctl(unsigned int x)
+{
+    unsigned int i;
+    unsigned char vidx;
+       /* these values are incorrect for the ac97 driver, fix.
+         * Index of mixtable1[] member is Device ID 
+         * and must be <= SOUND_MIXER_NRDEVICES.
+         * Value of array member is index into s->mix.vol[]
+         */
+        static const unsigned char mixtable1[SOUND_MIXER_NRDEVICES] = {
+                [SOUND_MIXER_PCM]     = 1,   /* voice */
+                [SOUND_MIXER_LINE1]   = 2,   /* AUX */
+                [SOUND_MIXER_CD]      = 3,   /* CD */
+                [SOUND_MIXER_LINE]    = 4,   /* Line */
+                [SOUND_MIXER_SYNTH]   = 5,   /* FM */
+                [SOUND_MIXER_MIC]     = 6,   /* Mic */
+                [SOUND_MIXER_SPEAKER] = 7,   /* Speaker */
+                [SOUND_MIXER_RECLEV]  = 8,   /* Recording level */
+                [SOUND_MIXER_VOLUME]  = 9    /* Master Volume */
+        };
+        
+    switch(x) 
+    {
+       case SOUND_MIXER_CS_GETDBGMASK:
+               CS_DBGOUT(CS_IOCTL, 4, printk("SOUND_MIXER_CS_GETDBGMASK: ") );
+               break;
+       case SOUND_MIXER_CS_GETDBGLEVEL:
+               CS_DBGOUT(CS_IOCTL, 4, printk("SOUND_MIXER_CS_GETDBGLEVEL: ") );
+               break;
+       case SOUND_MIXER_CS_SETDBGMASK:
+               CS_DBGOUT(CS_IOCTL, 4, printk("SOUND_MIXER_CS_SETDBGMASK: ") );
+               break;
+       case SOUND_MIXER_CS_SETDBGLEVEL:
+               CS_DBGOUT(CS_IOCTL, 4, printk("SOUND_MIXER_CS_SETDBGLEVEL: ") );
+               break;
+        case OSS_GETVERSION:
+               CS_DBGOUT(CS_IOCTL, 4, printk("OSS_GETVERSION: ") );
+               break;
+        case SNDCTL_DSP_SYNC:
+               CS_DBGOUT(CS_IOCTL, 4, printk("SNDCTL_DSP_SYNC: ") );
+               break;
+        case SNDCTL_DSP_SETDUPLEX:
+               CS_DBGOUT(CS_IOCTL, 4, printk("SNDCTL_DSP_SETDUPLEX: ") );
+               break;
+        case SNDCTL_DSP_GETCAPS:
+               CS_DBGOUT(CS_IOCTL, 4, printk("SNDCTL_DSP_GETCAPS: ") );
+               break;
+        case SNDCTL_DSP_RESET:
+               CS_DBGOUT(CS_IOCTL, 4, printk("SNDCTL_DSP_RESET: ") );
+               break;
+        case SNDCTL_DSP_SPEED:
+               CS_DBGOUT(CS_IOCTL, 4, printk("SNDCTL_DSP_SPEED: ") );
+               break;
+        case SNDCTL_DSP_STEREO:
+               CS_DBGOUT(CS_IOCTL, 4, printk("SNDCTL_DSP_STEREO: ") );
+               break;
+        case SNDCTL_DSP_CHANNELS:
+               CS_DBGOUT(CS_IOCTL, 4, printk("SNDCTL_DSP_CHANNELS: ") );
+               break;
+        case SNDCTL_DSP_GETFMTS: 
+               CS_DBGOUT(CS_IOCTL, 4, printk("SNDCTL_DSP_GETFMTS: ") );
+               break;
+        case SNDCTL_DSP_SETFMT: 
+               CS_DBGOUT(CS_IOCTL, 4, printk("SNDCTL_DSP_SETFMT: ") );
+               break;
+        case SNDCTL_DSP_POST:
+               CS_DBGOUT(CS_IOCTL, 4, printk("SNDCTL_DSP_POST: ") );
+               break;
+        case SNDCTL_DSP_GETTRIGGER:
+               CS_DBGOUT(CS_IOCTL, 4, printk("SNDCTL_DSP_GETTRIGGER: ") );
+               break;
+        case SNDCTL_DSP_SETTRIGGER:
+               CS_DBGOUT(CS_IOCTL, 4, printk("SNDCTL_DSP_SETTRIGGER: ") );
+               break;
+        case SNDCTL_DSP_GETOSPACE:
+               CS_DBGOUT(CS_IOCTL, 4, printk("SNDCTL_DSP_GETOSPACE: ") );
+               break;
+        case SNDCTL_DSP_GETISPACE:
+               CS_DBGOUT(CS_IOCTL, 4, printk("SNDCTL_DSP_GETISPACE: ") );
+               break;
+        case SNDCTL_DSP_NONBLOCK:
+               CS_DBGOUT(CS_IOCTL, 4, printk("SNDCTL_DSP_NONBLOCK: ") );
+               break;
+        case SNDCTL_DSP_GETODELAY:
+               CS_DBGOUT(CS_IOCTL, 4, printk("SNDCTL_DSP_GETODELAY: ") );
+               break;
+        case SNDCTL_DSP_GETIPTR:
+               CS_DBGOUT(CS_IOCTL, 4, printk("SNDCTL_DSP_GETIPTR: ") );
+               break;
+        case SNDCTL_DSP_GETOPTR:
+               CS_DBGOUT(CS_IOCTL, 4, printk("SNDCTL_DSP_GETOPTR: ") );
+               break;
+        case SNDCTL_DSP_GETBLKSIZE:
+               CS_DBGOUT(CS_IOCTL, 4, printk("SNDCTL_DSP_GETBLKSIZE: ") );
+               break;
+        case SNDCTL_DSP_SETFRAGMENT:
+               CS_DBGOUT(CS_IOCTL, 4, printk("SNDCTL_DSP_SETFRAGMENT: ") );
+               break;
+        case SNDCTL_DSP_SUBDIVIDE:
+               CS_DBGOUT(CS_IOCTL, 4, printk("SNDCTL_DSP_SUBDIVIDE: ") );
+               break;
+        case SOUND_PCM_READ_RATE:
+               CS_DBGOUT(CS_IOCTL, 4, printk("SOUND_PCM_READ_RATE: ") );
+               break;
+        case SOUND_PCM_READ_CHANNELS:
+               CS_DBGOUT(CS_IOCTL, 4, printk("SOUND_PCM_READ_CHANNELS: ") );
+               break;
+        case SOUND_PCM_READ_BITS:
+               CS_DBGOUT(CS_IOCTL, 4, printk("SOUND_PCM_READ_BITS: ") );
+               break;
+        case SOUND_PCM_WRITE_FILTER:
+               CS_DBGOUT(CS_IOCTL, 4, printk("SOUND_PCM_WRITE_FILTER: ") );
+               break;
+        case SNDCTL_DSP_SETSYNCRO:
+               CS_DBGOUT(CS_IOCTL, 4, printk("SNDCTL_DSP_SETSYNCRO: ") );
+               break;
+        case SOUND_PCM_READ_FILTER:
+               CS_DBGOUT(CS_IOCTL, 4, printk("SOUND_PCM_READ_FILTER: ") );
+               break;
+        case SNDCTL_DSP_CS_GETDBGMASK:
+               CS_DBGOUT(CS_IOCTL, 4, printk("SNDCTL_DSP_CS_GETDBGMASK: ") );
+               break;
+        case SNDCTL_DSP_CS_GETDBGLEVEL:
+               CS_DBGOUT(CS_IOCTL, 4, printk("SNDCTL_DSP_CS_GETDBGLEVEL: ") );
+               break;
+        case SNDCTL_DSP_CS_SETDBGMASK:
+               CS_DBGOUT(CS_IOCTL, 4, printk("SNDCTL_DSP_CS_SETDBGMASK: ") );
+               break;
+        case SNDCTL_DSP_CS_SETDBGLEVEL:
+               CS_DBGOUT(CS_IOCTL, 4, printk("SNDCTL_DSP_CS_SETDBGLEVEL: ") );
+               break;
+
+        case SOUND_MIXER_PRIVATE1:
+               CS_DBGOUT(CS_IOCTL, 4, printk("SOUND_MIXER_PRIVATE1: ") );
+               break;
+        case SOUND_MIXER_PRIVATE2:
+               CS_DBGOUT(CS_IOCTL, 4, printk("SOUND_MIXER_PRIVATE2: ") );
+               break;
+        case SOUND_MIXER_PRIVATE3:
+               CS_DBGOUT(CS_IOCTL, 4, printk("SOUND_MIXER_PRIVATE3: ") );
+               break;
+        case SOUND_MIXER_PRIVATE4:
+               CS_DBGOUT(CS_IOCTL, 4, printk("SOUND_MIXER_PRIVATE4: ") );
+               break;
+        case SOUND_MIXER_PRIVATE5:
+               CS_DBGOUT(CS_IOCTL, 4, printk("SOUND_MIXER_PRIVATE5: ") );
+               break;
+        case SOUND_MIXER_INFO:
+               CS_DBGOUT(CS_IOCTL, 4, printk("SOUND_MIXER_INFO: ") );
+               break;
+        case SOUND_OLD_MIXER_INFO:
+               CS_DBGOUT(CS_IOCTL, 4, printk("SOUND_OLD_MIXER_INFO: ") );
+               break;
+
+       default:
+               switch (_IOC_NR(x)) 
+               {
+                       case SOUND_MIXER_VOLUME:
+                               CS_DBGOUT(CS_IOCTL, 4, printk("SOUND_MIXER_VOLUME: ") );
+                               break;
+                       case SOUND_MIXER_SPEAKER:
+                               CS_DBGOUT(CS_IOCTL, 4, printk("SOUND_MIXER_SPEAKER: ") );
+                               break;
+                       case SOUND_MIXER_RECLEV:
+                               CS_DBGOUT(CS_IOCTL, 4, printk("SOUND_MIXER_RECLEV: ") );
+                               break;
+                       case SOUND_MIXER_MIC:
+                               CS_DBGOUT(CS_IOCTL, 4, printk("SOUND_MIXER_MIC: ") );
+                               break;
+                       case SOUND_MIXER_SYNTH:
+                               CS_DBGOUT(CS_IOCTL, 4, printk("SOUND_MIXER_SYNTH: ") );
+                               break;
+                       case SOUND_MIXER_RECSRC: 
+                               CS_DBGOUT(CS_IOCTL, 4, printk("SOUND_MIXER_RECSRC: ") );
+                               break;
+                       case SOUND_MIXER_DEVMASK:
+                               CS_DBGOUT(CS_IOCTL, 4, printk("SOUND_MIXER_DEVMASK: ") );
+                               break;
+                       case SOUND_MIXER_RECMASK:
+                               CS_DBGOUT(CS_IOCTL, 4, printk("SOUND_MIXER_RECMASK: ") );
+                               break;
+                       case SOUND_MIXER_STEREODEVS: 
+                               CS_DBGOUT(CS_IOCTL, 4, printk("SOUND_MIXER_STEREODEVS: ") );
+                               break;
+                       case SOUND_MIXER_CAPS:
+                               CS_DBGOUT(CS_IOCTL, 4, printk("SOUND_MIXER_CAPS:") );
+                               break;
+                       default:
+                               i = _IOC_NR(x);
+                               if (i >= SOUND_MIXER_NRDEVICES || !(vidx = mixtable1[i]))
+                               {
+                                       CS_DBGOUT(CS_IOCTL, 4, printk("UNKNOWN IOCTL: 0x%.8x NR=%d ",x,i) );
+                               }
+                               else
+                               {
+                                       CS_DBGOUT(CS_IOCTL, 4, printk("SOUND_MIXER_IOCTL AC9x: 0x%.8x NR=%d ",
+                                                       x,i) );
+                               }
+                               break;
+               }
+    }
+    CS_DBGOUT(CS_IOCTL, 4, printk("command = 0x%x IOC_NR=%d\n",x, _IOC_NR(x)) );
+}
+#endif
 
 /*
  *  common I/O routines
@@ -307,6 +616,34 @@ static void cs_free_pcm_channel(struct cs_card *card, int channel)
        card->channel[channel].used=0;
 }
 
+/*
+ * setup a divisor value to help with conversion from
+ * 16bit Stereo, down to 8bit stereo/mono or 16bit mono.
+ * assign a divisor of 1 if using 16bit Stereo as that is
+ * the only format that the static image will capture.
+ */
+static void cs_set_divisor(struct dmabuf *dmabuf)
+{
+       if(dmabuf->type == CS_TYPE_DAC)
+               dmabuf->divisor = 1;
+       else if( !(dmabuf->fmt & CS_FMT_STEREO) && 
+           (dmabuf->fmt & CS_FMT_16BIT))
+               dmabuf->divisor = 2;
+       else if( (dmabuf->fmt & CS_FMT_STEREO) && 
+           !(dmabuf->fmt & CS_FMT_16BIT))
+               dmabuf->divisor = 2;
+       else if( !(dmabuf->fmt & CS_FMT_STEREO) && 
+           !(dmabuf->fmt & CS_FMT_16BIT))
+               dmabuf->divisor = 4;
+       else
+               dmabuf->divisor = 1;
+
+       CS_DBGOUT(CS_PARMS | CS_FUNCTION, 8, printk(
+               "cs46xx: cs_set_divisor()- %s %d\n",
+                       (dmabuf->type == CS_TYPE_ADC) ? "ADC" : "DAC", 
+                       dmabuf->divisor) );
+}
+
 /* set playback sample rate */
 static unsigned int cs_set_dac_rate(struct cs_state * state, unsigned int rate)
 {      
@@ -314,6 +651,7 @@ static unsigned int cs_set_dac_rate(struct cs_state * state, unsigned int rate)
        unsigned int tmp1, tmp2;
        unsigned int phiIncr;
        unsigned int correctionPerGOF, correctionPerSec;
+       CS_DBGOUT(CS_FUNCTION, 2, printk("cs46xx: cs_set_dac_rate()+ %d\n",rate) );
 
        /*
         *  Compute the values used to drive the actual sample rate conversion.
@@ -355,6 +693,7 @@ static unsigned int cs_set_dac_rate(struct cs_state * state, unsigned int rate)
        spin_unlock_irq(&state->card->lock);
        dmabuf->rate = rate;
        
+       CS_DBGOUT(CS_FUNCTION, 2, printk("cs46xx: cs_set_dac_rate()- %d\n",rate) );
        return rate;
 }
 
@@ -366,6 +705,7 @@ static unsigned int cs_set_adc_rate(struct cs_state * state, unsigned int rate)
        unsigned int phiIncr, coeffIncr, tmp1, tmp2;
        unsigned int correctionPerGOF, correctionPerSec, initialDelay;
        unsigned int frameGroupLength, cnt;
+       CS_DBGOUT(CS_FUNCTION, 2, printk("cs46xx: cs_set_adc_rate()+ %d\n",rate) );
 
        /*
         *  We can only decimate by up to a factor of 1/9th the hardware rate.
@@ -465,6 +805,7 @@ static unsigned int cs_set_adc_rate(struct cs_state * state, unsigned int rate)
        cs461x_poke(card, (BA1_CSPB + 4), 0x0000FFFF);
        spin_unlock_irq(&card->lock);
        dmabuf->rate = rate;
+       CS_DBGOUT(CS_FUNCTION, 2, printk("cs46xx: cs_set_adc_rate()- %d\n",rate) );
        return rate;
 }
 
@@ -473,27 +814,69 @@ static void cs_play_setup(struct cs_state *state)
 {
        struct dmabuf *dmabuf = &state->dmabuf;
        struct cs_card *card = state->card;
-       unsigned int tmp, tmp1;
+        unsigned int tmp, Count, playFormat;
+
+       CS_DBGOUT(CS_FUNCTION, 2, printk("cs46xx: cs_play_setup()+\n") );
+        cs461x_poke(card, BA1_PVOL, 0x80008000);
+        if(!dmabuf->SGok)
+               cs461x_poke(card, BA1_PBA, virt_to_bus(dmabuf->pbuf));
+    
+        Count = 4;                                                          
+        playFormat=cs461x_peek(card, BA1_PFIE);                             
+        if ((dmabuf->fmt & CS_FMT_STEREO)) {                                
+                playFormat &= ~DMA_RQ_C2_AC_MONO_TO_STEREO;                 
+                Count *= 2;                                                 
+        }                                                                   
+        else                                                                
+                playFormat |= DMA_RQ_C2_AC_MONO_TO_STEREO;                  
+                                                                            
+        if ((dmabuf->fmt & CS_FMT_16BIT)) {                                 
+                playFormat &= ~(DMA_RQ_C2_AC_8_TO_16_BIT                    
+                           | DMA_RQ_C2_AC_SIGNED_CONVERT);                  
+                Count *= 2;                                                 
+        }                                                                   
+        else                                                                
+                playFormat |= (DMA_RQ_C2_AC_8_TO_16_BIT                     
+                           | DMA_RQ_C2_AC_SIGNED_CONVERT);                  
+                                                                            
+        cs461x_poke(card, BA1_PFIE, playFormat);                            
+                                                                            
+        tmp = cs461x_peek(card, BA1_PDTC);                                  
+        tmp &= 0xfffffe00;                                                  
+        cs461x_poke(card, BA1_PDTC, tmp | --Count);                         
+
+       CS_DBGOUT(CS_FUNCTION, 2, printk("cs46xx: cs_play_setup()-\n") );
 
-       tmp1=16;
-       if (!(dmabuf->fmt & CS_FMT_STEREO))
-               tmp1>>=1;
-       cs461x_poke(card, BA1_PVOL, 0x80008000);
-       cs461x_poke(card, BA1_PBA, virt_to_bus(dmabuf->pbuf));
-       
-       tmp=cs461x_peek(card, BA1_PDTC);
-       tmp&=~0x000003FF;
-       tmp|=tmp1-1;
-       cs461x_poke(card, BA1_PDTC, tmp);
-       
-       tmp=cs461x_peek(card, BA1_PFIE);
-       tmp&=~0x0000F03F;
-       if(!(dmabuf->fmt & CS_FMT_STEREO))
+}
+
+struct InitStruct
+{
+    u32 long off;
+    u32 long val;
+} InitArray[] = { {0x00000040, 0x3fc0000f},
+                  {0x0000004c, 0x04800000},
+
+                  {0x000000b3, 0x00000780},
+                  {0x000000b7, 0x00000000},
+                  {0x000000bc, 0x07800000},
+
+                  {0x000000cd, 0x00800000},
+                };
+
+/*
+ * "SetCaptureSPValues()" -- Initialize record task values before each
+ *     capture startup.  
+ */
+void SetCaptureSPValues(struct cs_card *card)
+{
+       unsigned i, offset;
+       CS_DBGOUT(CS_FUNCTION, 8, printk("cs46xx: SetCaptureSPValues()+\n") );
+       for(i=0; i<sizeof(InitArray)/sizeof(struct InitStruct); i++)
        {
-               tmp|=0x00002000;
+               offset = InitArray[i].off*4; /* 8bit to 32bit offset value */
+               cs461x_poke(card, offset, InitArray[i].val );
        }
-       cs461x_poke(card, BA1_PFIE, tmp);
-
+       CS_DBGOUT(CS_FUNCTION, 8, printk("cs46xx: SetCaptureSPValues()-\n") );
 }
 
 /* prepare channel attributes for recording */
@@ -501,9 +884,21 @@ static void cs_rec_setup(struct cs_state *state)
 {
        struct cs_card *card = state->card;
        struct dmabuf *dmabuf = &state->dmabuf;
-       /* set the attenuation to 0dB */
+       CS_DBGOUT(CS_FUNCTION, 2, printk("cs46xx: cs_rec_setup()+\n") );
+
+       SetCaptureSPValues(card);
+
+       /*
+        * set the attenuation to 0dB 
+        */
        cs461x_poke(card, BA1_CVOL, 0x80008000);
-       cs461x_poke(card, BA1_CBA, virt_to_bus(dmabuf->pbuf));
+
+       /*
+        * set the physical address of the capture buffer into the SP
+        */
+       cs461x_poke(card, BA1_CBA, virt_to_bus(dmabuf->rawbuf));
+
+       CS_DBGOUT(CS_FUNCTION, 2, printk("cs46xx: cs_rec_setup()-\n") );
 }
 
 
@@ -515,10 +910,30 @@ extern __inline__ unsigned cs_get_dma_addr(struct cs_state *state)
        struct dmabuf *dmabuf = &state->dmabuf;
        u32 offset;
        
-       if (!dmabuf->enable)
+       if ( (!(dmabuf->enable & DAC_RUNNING)) &&
+            (!(dmabuf->enable & ADC_RUNNING) ) )
+       {
+               CS_DBGOUT(CS_ERROR, 2, printk(
+                       "cs46xx: ERROR cs_get_dma_addr(): not enabled \n") );
                return 0;
+       }
                
-       offset = dmabuf->pringbuf * 2048;
+       /*
+        * ganularity is byte boundry, good part.
+        */
+       if(dmabuf->enable & DAC_RUNNING)
+       {
+               offset = cs461x_peek(state->card, BA1_PBA);                                  
+       }
+       else /* ADC_RUNNING must be set */
+       {
+               offset = cs461x_peek(state->card, BA1_CBA);                                  
+       }
+       CS_DBGOUT(CS_PARMS | CS_FUNCTION, 9, 
+               printk("cs46xx: cs_get_dma_addr() %d\n",offset) );
+       offset = (u32)bus_to_virt((unsigned long)offset) - (u32)dmabuf->rawbuf;
+       CS_DBGOUT(CS_PARMS | CS_FUNCTION, 8, 
+               printk("cs46xx: cs_get_dma_addr()- %d\n",offset) );
        return offset;
 }
 
@@ -527,14 +942,11 @@ static void resync_dma_ptrs(struct cs_state *state)
        struct dmabuf *dmabuf = &state->dmabuf;
        int offset;
        
+       CS_DBGOUT(CS_FUNCTION, 2, printk("cs46xx: resync_dma_ptrs()+ \n") );
        offset = 0;
        dmabuf->hwptr=dmabuf->swptr = 0;
-       dmabuf->ppingbuf = dmabuf->pringbuf = 0;
-       dmabuf->ppingbuf = 1;
-       if(dmabuf->fmt&CS_FMT_16BIT)
-               memset(dmabuf->pbuf, 0, PAGE_SIZE);
-       else
-               memset(dmabuf->pbuf, 0x80, PAGE_SIZE);
+       dmabuf->pringbuf = 0;
+       CS_DBGOUT(CS_FUNCTION, 2, printk("cs46xx: resync_dma_ptrs()- \n") );
 }
        
 /* Stop recording (lock held) */
@@ -546,20 +958,20 @@ extern __inline__ void __stop_adc(struct cs_state *state)
        
        dmabuf->enable &= ~ADC_RUNNING;
        
-       tmp=cs461x_peek(card, BA1_CCTL);
-       tmp&=0xFFFF;
-       cs461x_poke(card, BA1_CCTL, tmp);
-       
+       tmp = cs461x_peek(card, BA1_CCTL);
+       tmp &= 0xFFFF0000;
+       cs461x_poke(card, BA1_CCTL, tmp );
 }
 
 static void stop_adc(struct cs_state *state)
 {
-       struct cs_card *card = state->card;
        unsigned long flags;
 
-       spin_lock_irqsave(&card->lock, flags);
+       CS_DBGOUT(CS_FUNCTION, 2, printk("cs46xx: stop_adc()+ \n") );
+       spin_lock_irqsave(&state->card->lock, flags);
        __stop_adc(state);
-       spin_unlock_irqrestore(&card->lock, flags);
+       spin_unlock_irqrestore(&state->card->lock, flags);
+       CS_DBGOUT(CS_FUNCTION, 2, printk("cs46xx: stop_adc()- \n") );
 }
 
 static void start_adc(struct cs_state *state)
@@ -570,11 +982,17 @@ static void start_adc(struct cs_state *state)
        unsigned int tmp;
 
        spin_lock_irqsave(&card->lock, flags);
-       if ((dmabuf->mapped || dmabuf->count < (signed)dmabuf->dmasize) && dmabuf->ready) {
+       if (!(dmabuf->enable & ADC_RUNNING) && 
+            ((dmabuf->mapped || dmabuf->count < (signed)dmabuf->dmasize) 
+              && dmabuf->ready)) 
+       {
                dmabuf->enable |= ADC_RUNNING;
-               tmp=cs461x_peek(card, BA1_CCTL);
-               tmp&=0xFFFF;
-               tmp|=card->cctl;
+               cs_set_divisor(dmabuf);
+               tmp = cs461x_peek(card, BA1_CCTL);
+               tmp &= 0xFFFF0000;
+               tmp |= card->cctl;
+               CS_DBGOUT(CS_FUNCTION, 2, printk(
+                       "cs46xx: start_adc() poke 0x%x \n",tmp) );
                cs461x_poke(card, BA1_CCTL, tmp);
        }
        spin_unlock_irqrestore(&card->lock, flags);
@@ -596,12 +1014,13 @@ extern __inline__ void __stop_dac(struct cs_state *state)
 
 static void stop_dac(struct cs_state *state)
 {
-       struct cs_card *card = state->card;
        unsigned long flags;
 
-       spin_lock_irqsave(&card->lock, flags);
+       CS_DBGOUT(CS_FUNCTION, 2, printk("cs46xx: stop_dac()+ \n") );
+       spin_lock_irqsave(&state->card->lock, flags);
        __stop_dac(state);
-       spin_unlock_irqrestore(&card->lock, flags);
+       spin_unlock_irqrestore(&state->card->lock, flags);
+       CS_DBGOUT(CS_FUNCTION, 2, printk("cs46xx: stop_dac()- \n") );
 }      
 
 static void start_dac(struct cs_state *state)
@@ -611,53 +1030,79 @@ static void start_dac(struct cs_state *state)
        unsigned long flags;
        int tmp;
 
+       CS_DBGOUT(CS_FUNCTION, 2, printk("cs46xx: start_dac()+ \n") );
        spin_lock_irqsave(&card->lock, flags);
-       if ((dmabuf->mapped || dmabuf->count > 0) && dmabuf->ready) {
-               if(!(dmabuf->enable&DAC_RUNNING))
-               {
-                       dmabuf->enable |= DAC_RUNNING;
-                       tmp = cs461x_peek(card, BA1_PCTL);
-                       tmp &= 0xFFFF;
-                       tmp |= card->pctl;
-                       cs461x_poke(card, BA1_PCTL, tmp);
-               }
+       if (!(dmabuf->enable & DAC_RUNNING) && 
+           ((dmabuf->mapped || dmabuf->count > 0) && dmabuf->ready)) {
+               dmabuf->enable |= DAC_RUNNING;
+               tmp = cs461x_peek(card, BA1_PCTL);
+               tmp &= 0xFFFF;
+               tmp |= card->pctl;
+               CS_DBGOUT(CS_PARMS, 6, printk(
+                   "cs46xx: start_dac() poke card=0x%.08x tmp=0x%.08x addr=0x%.08x \n",
+                   (unsigned)card, (unsigned)tmp, 
+                   (unsigned)card->ba1.idx[(BA1_PCTL >> 16) & 3]+(BA1_PCTL&0xffff) ) );
+               cs461x_poke(card, BA1_PCTL, tmp);
        }
        spin_unlock_irqrestore(&card->lock, flags);
+       CS_DBGOUT(CS_FUNCTION, 2, printk("cs46xx: start_dac()- \n") );
 }
 
-#define DMABUF_DEFAULTORDER (15-PAGE_SHIFT)
 #define DMABUF_MINORDER 1
 
-/* allocate DMA buffer, playback and recording buffer should be allocated seperately */
+/*
+ * allocate DMA buffer, playback and recording buffers are separate.
+ */
 static int alloc_dmabuf(struct cs_state *state)
 {
        struct dmabuf *dmabuf = &state->dmabuf;
        void *rawbuf = NULL;
+       void *tmpbuff = NULL;
        int order;
        struct page *page, *pend;
 
        /* alloc as big a chunk as we can */
-       for (order = DMABUF_DEFAULTORDER; order >= DMABUF_MINORDER; order--)
-               if((rawbuf = (void *)__get_free_pages(GFP_KERNEL|GFP_DMA, order)))
+       for (order = defaultorder; order >= DMABUF_MINORDER; order--)
+               if((rawbuf = (void *)__get_free_pages(GFP_KERNEL | GFP_DMA, order)))
                        break;
 
        if (!rawbuf)
                return -ENOMEM;
 
-#ifdef DEBUG
-       printk("cs461x: allocated %ld (order = %d) bytes at %p\n",
-              PAGE_SIZE << order, order, rawbuf);
-#endif
-
-       dmabuf->ready  = dmabuf->mapped = 0;
-       dmabuf->rawbuf = rawbuf;
        dmabuf->buforder = order;
-       
+       dmabuf->rawbuf = rawbuf;
+
        /* now mark the pages as reserved; otherwise remap_page_range doesn't do what we want */
        pend = virt_to_page(rawbuf + (PAGE_SIZE << order) - 1);
        for (page = virt_to_page(rawbuf); page <= pend; page++)
                mem_map_reserve(page);
 
+       CS_DBGOUT(CS_PARMS, 9, printk("cs461x: allocated %ld (order = %d) bytes at %p\n",
+              PAGE_SIZE << order, order, rawbuf) );
+/*
+ * now the temp buffer for 16/8 conversions
+ */
+       for (order = defaultorder; order >= DMABUF_MINORDER; order--)
+               if((tmpbuff = (void *)__get_free_pages(GFP_KERNEL | GFP_DMA, order)))
+                       break;
+       if (!tmpbuff)
+               return -ENOMEM;
+       CS_DBGOUT(CS_PARMS, 9, printk("cs461x: allocated %ld (order = %d) bytes at %p\n",
+              PAGE_SIZE << order, order, tmpbuff) );
+
+       dmabuf->tmpbuff = tmpbuff;
+       dmabuf->buforder_tmpbuff = order;
+       
+       /* now mark the pages as reserved; otherwise remap_page_range doesn't do what we want */
+       pend = virt_to_page(tmpbuff + (PAGE_SIZE << order) - 1);
+       for (page = virt_to_page(tmpbuff); page <= pend; page++)
+               mem_map_reserve(page);
+
+       CS_DBGOUT(CS_PARMS, 9, printk("cs461x: allocated %ld (order = %d) bytes at %p\n",
+              PAGE_SIZE << order, order, tmpbuff) );
+
+       dmabuf->ready  = dmabuf->mapped = 0;
+       dmabuf->SGok = 0;
        return 0;
 }
 
@@ -668,85 +1113,208 @@ static void dealloc_dmabuf(struct cs_state *state)
        struct page *page, *pend;
 
        if (dmabuf->rawbuf) {
-               /* undo marking the pages as reserved */
                pend = virt_to_page(dmabuf->rawbuf + (PAGE_SIZE << dmabuf->buforder) - 1);
                for (page = virt_to_page(dmabuf->rawbuf); page <= pend; page++)
                        mem_map_unreserve(page);
                pci_free_consistent(state->card->pci_dev, PAGE_SIZE << dmabuf->buforder,
-                                   dmabuf->rawbuf, dmabuf->dma_handle);
+                                   dmabuf->rawbuf, dmabuf->dma_handle);
        }
        dmabuf->rawbuf = NULL;
+
+       if (dmabuf->tmpbuff) {
+               /* undo marking the pages as reserved */
+               pend = virt_to_page(dmabuf->tmpbuff + (PAGE_SIZE << dmabuf->buforder_tmpbuff) - 1);
+               for (page = virt_to_page(dmabuf->tmpbuff); page <= pend; page++)
+                       mem_map_unreserve(page);
+               pci_free_consistent(state->card->pci_dev, PAGE_SIZE << dmabuf->buforder_tmpbuff,
+                                   dmabuf->tmpbuff, dmabuf->dma_handle_tmpbuff);
+       }
+
+       dmabuf->rawbuf = NULL;
+       dmabuf->tmpbuff = NULL;
        dmabuf->mapped = dmabuf->ready = 0;
+       dmabuf->SGok = 0;
 }
 
-static int prog_dmabuf(struct cs_state *state, unsigned rec)
+static int prog_dmabuf(struct cs_state *state)
 {
-       struct dmabuf *dmabuf = &state->dmabuf;
-       unsigned bytepersec;
-       unsigned bufsize;
-       unsigned long flags;
-       int ret;
-       
-       spin_lock_irqsave(&state->card->lock, flags);
-       resync_dma_ptrs(state);
-       dmabuf->total_bytes = 0;
-       dmabuf->count = dmabuf->error = 0;
-       spin_unlock_irqrestore(&state->card->lock, flags);
-
-       /* allocate DMA buffer if not allocated yet */
-       if (!dmabuf->rawbuf)
-               if ((ret = alloc_dmabuf(state)))
-                       return ret;
+        struct dmabuf *dmabuf = &state->dmabuf;
+        unsigned long flags;
+        unsigned long allocated_pages, allocated_bytes;                     
+        unsigned long tmp1, tmp2, fmt=0;                                           
+        unsigned long *ptmp = (unsigned long *) dmabuf->pbuf;               
+        unsigned long SGarray[9], nSGpages=0;                               
+        int ret;
+
+       CS_DBGOUT(CS_FUNCTION, 4, printk("cs46xx: prog_dmabuf()+ \n"));
+/*
+ * check for CAPTURE and use only non-sg for initial release
+ */
+       if(dmabuf->type == CS_TYPE_ADC)
+       {
+               CS_DBGOUT(CS_FUNCTION, 4, printk("cs46xx: prog_dmabuf() ADC\n"));
+               /* 
+                * add in non-sg support for capture.
+                */
+               spin_lock_irqsave(&state->card->lock, flags);
+       /* add code to reset the rawbuf memory. TRW */
+               resync_dma_ptrs(state);
+               dmabuf->total_bytes = dmabuf->blocks = 0;
+               dmabuf->count = dmabuf->error = dmabuf->underrun = 0;
 
-       /* FIXME: figure out all this OSS fragment stuff */
-       bytepersec = dmabuf->rate << sample_shift[dmabuf->fmt];
-       bufsize = PAGE_SIZE << dmabuf->buforder;
-       if (dmabuf->ossfragshift) {
-               if ((1000 << dmabuf->ossfragshift) < bytepersec)
-                       dmabuf->fragshift = ld2(bytepersec/1000);
-               else
-                       dmabuf->fragshift = dmabuf->ossfragshift;
-       } else {
-               /* lets hand out reasonable big ass buffers by default */
-               dmabuf->fragshift = (dmabuf->buforder + PAGE_SHIFT -2);
-       }
-       dmabuf->numfrag = bufsize >> dmabuf->fragshift;
-       while (dmabuf->numfrag < 4 && dmabuf->fragshift > 3) {
-               dmabuf->fragshift--;
-               dmabuf->numfrag = bufsize >> dmabuf->fragshift;
-       }
-       dmabuf->fragsize = 1 << dmabuf->fragshift;
-       if (dmabuf->ossmaxfrags >= 4 && dmabuf->ossmaxfrags < dmabuf->numfrag)
-               dmabuf->numfrag = dmabuf->ossmaxfrags;
-       dmabuf->fragsamples = dmabuf->fragsize >> sample_shift[dmabuf->fmt];
-       dmabuf->dmasize = dmabuf->numfrag << dmabuf->fragshift;
+               dmabuf->SGok = 0;                                                   
 
-       memset(dmabuf->rawbuf, (dmabuf->fmt & CS_FMT_16BIT) ? 0 : 0x80,
-              dmabuf->dmasize);
+               spin_unlock_irqrestore(&state->card->lock, flags);
 
+               /* allocate DMA buffer if not allocated yet */
+               if (!dmabuf->rawbuf || !dmabuf->tmpbuff)
+                       if ((ret = alloc_dmabuf(state)))
+                               return ret; 
        /*
-        *      Now set up the ring 
+        * static image only supports 16Bit signed, stereo - hard code fmt
         */
+               fmt = CS_FMT_16BIT | CS_FMT_STEREO;
 
-       spin_lock_irqsave(&state->card->lock, flags);
-       if (rec) {
+               dmabuf->numfrag = 2;                                        
+               dmabuf->fragsize = 2048;                                    
+               dmabuf->fragsamples = 2048 >> sample_shift[fmt];    
+               dmabuf->dmasize = 4096;                                     
+               dmabuf->fragshift = 11;                                     
+
+               memset(dmabuf->rawbuf, (fmt & CS_FMT_16BIT) ? 0 : 0x80,
+                      dmabuf->dmasize);
+               memset(dmabuf->tmpbuff, (fmt & CS_FMT_16BIT) ? 0 : 0x80, 
+                       PAGE_SIZE<<dmabuf->buforder_tmpbuff);      
+
+               /*
+                *      Now set up the ring
+                */
+
+               spin_lock_irqsave(&state->card->lock, flags);
                cs_rec_setup(state);
-       } else {
-               cs_play_setup(state);
+               spin_unlock_irqrestore(&state->card->lock, flags);
+
+               /* set the ready flag for the dma buffer */
+               dmabuf->ready = 1;
+
+               CS_DBGOUT(CS_PARMS, 4, printk(
+                       "cs461x: prog_dmabuf(): CAPTURE rate=%d fmt=0x%x numfrag=%d "
+                       "fragsize=%d dmasize=%d\n",
+                           dmabuf->rate, dmabuf->fmt, dmabuf->numfrag,
+                           dmabuf->fragsize, dmabuf->dmasize) );
+
+               CS_DBGOUT(CS_FUNCTION, 4, printk("cs46xx: prog_dmabuf()- 0 \n"));
+               return 0;
        }
-       spin_unlock_irqrestore(&state->card->lock, flags);
+       else if (dmabuf->type == CS_TYPE_DAC)
+       {
+       /*
+        * Must be DAC
+        */
+               CS_DBGOUT(CS_FUNCTION, 4, printk("cs46xx: prog_dmabuf() DAC\n"));
+               spin_lock_irqsave(&state->card->lock, flags);
+               resync_dma_ptrs(state);
+               dmabuf->total_bytes = dmabuf->blocks = 0;
+               dmabuf->count = dmabuf->error = dmabuf->underrun = 0;
 
-       /* set the ready flag for the dma buffer */
-       dmabuf->ready = 1;
+               dmabuf->SGok = 0;                                                   
 
-#ifdef DEBUG
-       printk("cs461x: prog_dmabuf, sample rate = %d, format = %d, numfrag = %d, "
-              "fragsize = %d dmasize = %d\n",
-              dmabuf->rate, dmabuf->fmt, dmabuf->numfrag,
-              dmabuf->fragsize, dmabuf->dmasize);
-#endif
+               spin_unlock_irqrestore(&state->card->lock, flags);
 
-       return 0;
+               /* allocate DMA buffer if not allocated yet */
+               if (!dmabuf->rawbuf)
+                       if ((ret = alloc_dmabuf(state)))
+                               return ret;
+
+               allocated_pages = 1 << dmabuf->buforder;                            
+               allocated_bytes = allocated_pages*PAGE_SIZE;                        
+                                                                                   
+               if(allocated_pages < 2)                                             
+               {
+                       CS_DBGOUT(CS_FUNCTION, 4, printk(
+                           "cs46xx: prog_dmabuf() Error: allocated_pages too small (%d)\n",
+                               (unsigned)allocated_pages));
+                       return -ENOMEM;
+               }
+                                                                                   
+               /* Use all the pages allocated, fragsize 4k. */
+               /* Use 'pbuf' for S/G page map table. */
+               dmabuf->SGok = 1;           /* Use S/G. */
+
+               nSGpages = allocated_bytes/4096;    /* S/G pages always 4k. */
+                                                                                   
+                    /* Set up S/G variables. */
+               *ptmp = virt_to_bus(dmabuf->rawbuf);                                
+               *(ptmp+1) = 0x00000008;                                             
+               for(tmp1= 1; tmp1 < nSGpages; tmp1++) {                             
+                       *(ptmp+2*tmp1) = virt_to_bus( (dmabuf->rawbuf)+4096*tmp1);  
+                       if( tmp1 == nSGpages-1)                                     
+                               tmp2 = 0xbfff0000;
+                       else                                                        
+                               tmp2 = 0x80000000+8*(tmp1+1);                       
+                       *(ptmp+2*tmp1+1) = tmp2;                                    
+               }                                                                   
+               SGarray[0] = 0x82c0200d;                                            
+               SGarray[1] = 0xffff0000;                                            
+               SGarray[2] = *ptmp;                                                 
+               SGarray[3] = 0x00010600;                                            
+               SGarray[4] = *(ptmp+2);                                             
+               SGarray[5] = 0x80000010;                                            
+               SGarray[6] = *ptmp;                                                 
+               SGarray[7] = *(ptmp+2);                                             
+               SGarray[8] = (virt_to_bus(dmabuf->pbuf) & 0xffff000) | 0x10;        
+
+               if (dmabuf->SGok) {                                                 
+                       dmabuf->numfrag = nSGpages;                                 
+                       dmabuf->fragsize = 4096;                                    
+                       dmabuf->fragsamples = 4096 >> sample_shift[dmabuf->fmt];    
+                       dmabuf->fragshift = 12;                                     
+                       dmabuf->dmasize = dmabuf->numfrag*4096;                     
+               }                                                                   
+               else {                                                              
+                       SGarray[0] = 0xf2c0000f;                                    
+                       SGarray[1] = 0x00000200;                                    
+                       SGarray[2] = 0;                                             
+                       SGarray[3] = 0x00010600;                                    
+                       SGarray[4]=SGarray[5]=SGarray[6]=SGarray[7]=SGarray[8] = 0; 
+                       dmabuf->numfrag = 2;                                        
+                       dmabuf->fragsize = 2048;                                    
+                       dmabuf->fragsamples = 2048 >> sample_shift[dmabuf->fmt];    
+                       dmabuf->dmasize = 4096;                                     
+                       dmabuf->fragshift = 11;                                     
+               }
+               for(tmp1 = 0; tmp1 < sizeof(SGarray)/4; tmp1++)                     
+                       cs461x_poke( state->card, BA1_PDTC+tmp1*4, SGarray[tmp1]);  
+
+               memset(dmabuf->rawbuf, (dmabuf->fmt & CS_FMT_16BIT) ? 0 : 0x80,
+                      dmabuf->dmasize);
+
+               /*
+                *      Now set up the ring
+                */
+
+               spin_lock_irqsave(&state->card->lock, flags);
+               cs_play_setup(state);
+               spin_unlock_irqrestore(&state->card->lock, flags);
+
+               /* set the ready flag for the dma buffer */
+               dmabuf->ready = 1;
+
+               CS_DBGOUT(CS_PARMS, 4, printk(
+                       "cs461x: prog_dmabuf(): PLAYBACK rate=%d fmt=0x%x numfrag=%d "
+                       "fragsize=%d dmasize=%d\n",
+                           dmabuf->rate, dmabuf->fmt, dmabuf->numfrag,
+                           dmabuf->fragsize, dmabuf->dmasize) );
+
+               CS_DBGOUT(CS_FUNCTION, 4, printk("cs46xx: prog_dmabuf()- \n"));
+               return 0;
+       }
+       else
+       {
+               CS_DBGOUT(CS_FUNCTION, 4, printk("cs46xx: prog_dmabuf()- Invalid Type %d\n",
+                       dmabuf->type));
+       }
+       return 1;
 }
 
 static void cs_clear_tail(struct cs_state *state)
@@ -789,7 +1357,7 @@ static int drain_dac(struct cs_state *state, int nonblock)
                tmo = (dmabuf->dmasize * HZ) / dmabuf->rate;
                tmo >>= sample_shift[dmabuf->fmt];
                tmo += (2048*HZ)/dmabuf->rate;
-
+               
                if (!schedule_timeout(tmo ? tmo : 1) && tmo){
                        printk(KERN_ERR "cs461x: drain_dac, dma timeout? %d\n", count);
                        break;
@@ -803,93 +1371,149 @@ static int drain_dac(struct cs_state *state, int nonblock)
        return 0;
 }
 
+
 /* update buffer manangement pointers, especially, dmabuf->count and dmabuf->hwptr */
-static void cs_update_ptr(struct cs_state *state)
+static void cs_update_ptr(void)
 {
-       struct dmabuf *dmabuf = &state->dmabuf;
-       unsigned hwptr, swptr;
-       int clear_cnt = 0;
+       struct cs_card *card=devs;
+       struct cs_state *state;
+       struct dmabuf *dmabuf;
+       unsigned hwptr;
        int diff;
-       unsigned char silence;
-
-       /* update hardware pointer */
-       hwptr = cs_get_dma_addr(state);
-       diff = (dmabuf->dmasize + hwptr - dmabuf->hwptr) % dmabuf->dmasize;
-       dmabuf->hwptr = hwptr;
-       dmabuf->total_bytes += diff;
-
-       /* error handling and process wake up for DAC */
-       if (dmabuf->enable == ADC_RUNNING) {
-               if (dmabuf->mapped) {
-                       dmabuf->count -= diff;
-                       if (dmabuf->count >= (signed)dmabuf->fragsize)
-                               wake_up(&dmabuf->wait);
-               } else {
+
+       /* error handling and process wake up for ADC */
+       state = card->states[0];
+       if(state)
+       {
+               dmabuf = &state->dmabuf;
+               if (dmabuf->enable & ADC_RUNNING) {
+                       /* update hardware pointer */
+                       hwptr = cs_get_dma_addr(state);
+
+                       diff = (dmabuf->dmasize + hwptr - dmabuf->hwptr) % dmabuf->dmasize;
+                       CS_DBGOUT(CS_PARMS, 9, printk(
+                               "cs46xx: cs_update_ptr()+ ADC hwptr=%d diff=%d\n", 
+                               hwptr,diff) );
+                       dmabuf->hwptr = hwptr;
+                       dmabuf->total_bytes += diff;
                        dmabuf->count += diff;
+                       if (dmabuf->count > dmabuf->dmasize)
+                               dmabuf->count = dmabuf->dmasize;
 
-                       if (dmabuf->count < 0 || dmabuf->count > dmabuf->dmasize) {
-                               /* buffer underrun or buffer overrun, we have no way to recover
-                                  it here, just stop the machine and let the process force hwptr
-                                  and swptr to sync */
-                               __stop_adc(state);
-                               dmabuf->error++;
-                       }
-                       else if (!dmabuf->endcleared) {
-                               swptr = dmabuf->swptr;
-                               silence = (dmabuf->fmt & CS_FMT_16BIT ? 0 : 0x80);
-                               if (dmabuf->count < (signed) dmabuf->fragsize) 
-                               {
-                                       clear_cnt = dmabuf->fragsize;
-                                       if ((swptr + clear_cnt) > dmabuf->dmasize)
-                                               clear_cnt = dmabuf->dmasize - swptr;
-                                       memset (dmabuf->rawbuf + swptr, silence, clear_cnt);
-                                       dmabuf->endcleared = 1;
-                               }
+                       if(dmabuf->mapped)
+                       {
+                               if (dmabuf->count >= (signed)dmabuf->fragsize)
+                                       wake_up(&dmabuf->wait);
+                       } else 
+                       {
+                               if (dmabuf->count > 0)
+                                       wake_up(&dmabuf->wait);
                        }
-                       if (dmabuf->count < (signed)dmabuf->dmasize/2)
-                               wake_up(&dmabuf->wait);
                }
        }
-       /* error handling and process wake up for DAC */
-       if (dmabuf->enable == DAC_RUNNING) {
-               if (dmabuf->mapped) {
-                       dmabuf->count += diff;
-                       if (dmabuf->count >= (signed)dmabuf->fragsize)
-                               wake_up(&dmabuf->wait);
-               } else {
-                       dmabuf->count -= diff;
-
-                       if (dmabuf->count < 0 || dmabuf->count > dmabuf->dmasize) {
-                               /* buffer underrun or buffer overrun, we have no way to recover
-                                  it here, just stop the machine and let the process force hwptr
-                                  and swptr to sync */
-                               __stop_dac(state);
-                               dmabuf->error++;
+
+/*
+ * Now the DAC
+ */
+       state = card->states[1];
+       if(state)
+       {
+               dmabuf = &state->dmabuf;
+               /* error handling and process wake up for DAC */
+               if (dmabuf->enable & DAC_RUNNING) {
+                       /* update hardware pointer */
+                       hwptr = cs_get_dma_addr(state);
+
+                       diff = (dmabuf->dmasize + hwptr - dmabuf->hwptr) % dmabuf->dmasize;
+                       CS_DBGOUT(CS_PARMS, 9, printk(
+                               "cs46xx: cs_update_ptr()+ DAC hwptr=%d diff=%d\n", 
+                               hwptr,diff) );
+                       dmabuf->hwptr = hwptr;
+                       dmabuf->total_bytes += diff;
+                       if (dmabuf->mapped) {
+                               dmabuf->count += diff;
+                               if (dmabuf->count >= (signed)dmabuf->fragsize)
+                                       wake_up(&dmabuf->wait);
+                               /*
+                                * other drivers use fragsize, but don't see any sense
+                                * in that, since dmasize is the buffer asked for
+                                * via mmap.
+                                */
+                               if( dmabuf->count > dmabuf->dmasize)
+                                       dmabuf->count &= dmabuf->dmasize-1;
+                       } else {
+                               dmabuf->count -= diff;
+                               /*
+                                * backfill with silence and clear out the last 
+                                * "diff" number of bytes.
+                                */
+                               if(hwptr >= diff)
+                               {
+                                       memset(dmabuf->rawbuf + hwptr - diff, 
+                                               (dmabuf->fmt & CS_FMT_16BIT) ? 0 : 0x80, diff);
+                               }
+                               else
+                               {
+                                       memset(dmabuf->rawbuf, 
+                                               (dmabuf->fmt & CS_FMT_16BIT) ? 0 : 0x80,
+                                               (unsigned)hwptr);
+                                       memset((void *)((unsigned)dmabuf->rawbuf + 
+                                                       dmabuf->dmasize + hwptr - diff),
+                                               (dmabuf->fmt & CS_FMT_16BIT) ? 0 : 0x80, 
+                                               diff - hwptr); 
+                               }
+
+                               if (dmabuf->count < 0 || dmabuf->count > dmabuf->dmasize) {
+                                       CS_DBGOUT(CS_ERROR, 2, printk(
+                                         "cs46xx: ERROR DAC count<0 or count > dmasize (%d)\n",
+                                               dmabuf->count));
+                                       /* 
+                                       * buffer underrun or buffer overrun, reset the
+                                       * count of bytes written back to 0.
+                                       */
+                                       if(dmabuf->count < 0)
+                                               dmabuf->underrun=1;
+                                       dmabuf->count = 0;
+                                       dmabuf->error++;
+                               }
+                               if (dmabuf->count < (signed)dmabuf->dmasize/2)
+                                       wake_up(&dmabuf->wait);
                        }
-                       if (dmabuf->count < (signed)dmabuf->dmasize/2)
-                               wake_up(&dmabuf->wait);
                }
        }
 }
 
-static void cs_record_interrupt(struct cs_state *state)
-{
-       memcpy(state->dmabuf.rawbuf + (2048*state->dmabuf.pringbuf++),
-               state->dmabuf.pbuf+2048*state->dmabuf.ppingbuf++, 2048);
-       state->dmabuf.ppingbuf&=1;
-       if(state->dmabuf.pringbuf >= (PAGE_SIZE<<state->dmabuf.buforder)/2048)
-               state->dmabuf.pringbuf=0;
-       cs_update_ptr(state);
-}
 
-static void cs_play_interrupt(struct cs_state *state)
+/* hold spinlock for the following! */
+static void cs_handle_midi(struct cs_card *card)
 {
-       memcpy(state->dmabuf.pbuf+2048*state->dmabuf.ppingbuf++,
-               state->dmabuf.rawbuf + (2048*state->dmabuf.pringbuf++), 2048);
-       state->dmabuf.ppingbuf&=1;
-       if(state->dmabuf.pringbuf >= (PAGE_SIZE<<state->dmabuf.buforder)/2048)
-               state->dmabuf.pringbuf=0;
-       cs_update_ptr(state);
+        unsigned char ch;
+        int wake;
+        unsigned temp1;
+
+        wake = 0;
+        while (!(cs461x_peekBA0(card,  BA0_MIDSR) & MIDSR_RBE)) {
+                ch = cs461x_peekBA0(card, BA0_MIDRP);
+                if (card->midi.icnt < CS_MIDIINBUF) {
+                        card->midi.ibuf[card->midi.iwr] = ch;
+                        card->midi.iwr = (card->midi.iwr + 1) % CS_MIDIINBUF;
+                        card->midi.icnt++;
+                }
+                wake = 1;
+        }
+        if (wake)
+                wake_up(&card->midi.iwait);
+        wake = 0;
+        while (!(cs461x_peekBA0(card,  BA0_MIDSR) & MIDSR_TBF) && card->midi.ocnt > 0) {
+                temp1 = ( card->midi.obuf[card->midi.ord] ) & 0x000000ff;
+                cs461x_pokeBA0(card, BA0_MIDWP,temp1);
+                card->midi.ord = (card->midi.ord + 1) % CS_MIDIOUTBUF;
+                card->midi.ocnt--;
+                if (card->midi.ocnt < CS_MIDIOUTBUF-16)
+                        wake = 1;
+        }
+        if (wake)
+                wake_up(&card->midi.owait);
 }
 
 static void cs_interrupt(int irq, void *dev_id, struct pt_regs *regs)
@@ -900,67 +1524,437 @@ static void cs_interrupt(int irq, void *dev_id, struct pt_regs *regs)
        struct cs_state *playstate = card->channel[1].state;
        u32 status;
 
+       CS_DBGOUT(CS_INTERRUPT, 4, printk("cs46xx: cs_interrupt()+ \n"));
+
        spin_lock(&card->lock);
 
        status = cs461x_peekBA0(card, BA0_HISR);
        
-       if((status&0x7fffffff)==0)
+       if ((status & 0x7fffffff) == 0)
        {
                cs461x_pokeBA0(card, BA0_HICR, HICR_CHGM|HICR_IEV);
                spin_unlock(&card->lock);
                return;
        }
        
-       if((status & HISR_VC0) && playstate && playstate->dmabuf.ready)
-               cs_play_interrupt(playstate);
-       if((status & HISR_VC1) && recstate && recstate->dmabuf.ready)
-               cs_record_interrupt(recstate);
+       /*
+        * check for playback or capture interrupt only
+        */
+       if( ((status & HISR_VC0) && playstate && playstate->dmabuf.ready) || 
+           (((status & HISR_VC1) && recstate && recstate->dmabuf.ready)) )
+       {
+               CS_DBGOUT(CS_INTERRUPT, 8, printk(
+                       "cs46xx: cs_interrupt() interrupt bit(s) set (0x%x)\n",status));
+               cs_update_ptr();
+       }
+
+        if( status & HISR_MIDI )
+                cs_handle_midi(card);
        
        /* clear 'em */
        cs461x_pokeBA0(card, BA0_HICR, HICR_CHGM|HICR_IEV);
        spin_unlock(&card->lock);
+       CS_DBGOUT(CS_INTERRUPT, 4, printk("cs46xx: cs_interrupt()- \n"));
 }
 
-static loff_t cs_llseek(struct file *file, loff_t offset, int origin)
+
+/**********************************************************************/
+
+static ssize_t cs_midi_read(struct file *file, char *buffer, size_t count, loff_t *ppos)
 {
-       return -ESPIPE;
+        struct cs_card *card = (struct cs_card *)file->private_data;
+        ssize_t ret;
+        unsigned long flags;
+        unsigned ptr;
+        int cnt;
+
+        if (ppos != &file->f_pos)
+                return -ESPIPE;
+        if (!access_ok(VERIFY_WRITE, buffer, count))
+                return -EFAULT;
+        ret = 0;
+        while (count > 0) {
+                spin_lock_irqsave(&card->lock, flags);
+                ptr = card->midi.ird;
+                cnt = CS_MIDIINBUF - ptr;
+                if (card->midi.icnt < cnt)
+                        cnt = card->midi.icnt;
+                spin_unlock_irqrestore(&card->lock, flags);
+                if (cnt > count)
+                        cnt = count;
+                if (cnt <= 0) {
+                        if (file->f_flags & O_NONBLOCK)
+                                return ret ? ret : -EAGAIN;
+                        interruptible_sleep_on(&card->midi.iwait);
+                        if (signal_pending(current))
+                                return ret ? ret : -ERESTARTSYS;
+                        continue;
+                }
+                if (copy_to_user(buffer, card->midi.ibuf + ptr, cnt))
+                        return ret ? ret : -EFAULT;
+                ptr = (ptr + cnt) % CS_MIDIINBUF;
+                spin_lock_irqsave(&card->lock, flags);
+                card->midi.ird = ptr;
+                card->midi.icnt -= cnt;
+                spin_unlock_irqrestore(&card->lock, flags);
+                count -= cnt;
+                buffer += cnt;
+                ret += cnt;
+        }
+        return ret;
 }
 
-/* in this loop, dmabuf.count signifies the amount of data that is waiting to be copied to
-   the user's buffer.  it is filled by the dma machine and drained by this loop. */
-static ssize_t cs_read(struct file *file, char *buffer, size_t count, loff_t *ppos)
+
+static ssize_t cs_midi_write(struct file *file, const char *buffer, size_t count, loff_t *ppos)
 {
-       struct cs_state *state = (struct cs_state *)file->private_data;
-       struct dmabuf *dmabuf = &state->dmabuf;
-       DECLARE_WAITQUEUE(wait, current);
-       ssize_t ret;
-       unsigned long flags;
-       unsigned swptr;
-       int cnt;
+        struct cs_card *card = (struct cs_card *)file->private_data;
+        ssize_t ret;
+        unsigned long flags;
+        unsigned ptr;
+        int cnt;
+
+        if (ppos != &file->f_pos)
+                return -ESPIPE;
+        if (!access_ok(VERIFY_READ, buffer, count))
+                return -EFAULT;
+        ret = 0;
+        while (count > 0) {
+                spin_lock_irqsave(&card->lock, flags);
+                ptr = card->midi.owr;
+                cnt = CS_MIDIOUTBUF - ptr;
+                if (card->midi.ocnt + cnt > CS_MIDIOUTBUF)
+                        cnt = CS_MIDIOUTBUF - card->midi.ocnt;
+                if (cnt <= 0)
+                        cs_handle_midi(card);
+                spin_unlock_irqrestore(&card->lock, flags);
+                if (cnt > count)
+                        cnt = count;
+                if (cnt <= 0) {
+                        if (file->f_flags & O_NONBLOCK)
+                                return ret ? ret : -EAGAIN;
+                        interruptible_sleep_on(&card->midi.owait);
+                        if (signal_pending(current))
+                                return ret ? ret : -ERESTARTSYS;
+                        continue;
+                }
+                if (copy_from_user(card->midi.obuf + ptr, buffer, cnt))
+                        return ret ? ret : -EFAULT;
+                ptr = (ptr + cnt) % CS_MIDIOUTBUF;
+                spin_lock_irqsave(&card->lock, flags);
+                card->midi.owr = ptr;
+                card->midi.ocnt += cnt;
+                spin_unlock_irqrestore(&card->lock, flags);
+                count -= cnt;
+                buffer += cnt;
+                ret += cnt;
+                spin_lock_irqsave(&card->lock, flags);
+                cs_handle_midi(card);
+                spin_unlock_irqrestore(&card->lock, flags);
+        }
+        return ret;
+}
 
-#ifdef DEBUG
-       printk("cs461x: cs_read called, count = %d\n", count);
-#endif
 
-       if (ppos != &file->f_pos)
-               return -ESPIPE;
-       if (dmabuf->mapped)
-               return -ENXIO;
-       if (!dmabuf->ready && (ret = prog_dmabuf(state, 1)))
-               return ret;
-       if (!access_ok(VERIFY_WRITE, buffer, count))
-               return -EFAULT;
-       ret = 0;
+static unsigned int cs_midi_poll(struct file *file, struct poll_table_struct *wait)
+{
+        struct cs_card *card = (struct cs_card *)file->private_data;
+        unsigned long flags;
+        unsigned int mask = 0;
+
+        if (file->f_flags & FMODE_WRITE)
+                poll_wait(file, &card->midi.owait, wait);
+        if (file->f_flags & FMODE_READ)
+                poll_wait(file, &card->midi.iwait, wait);
+        spin_lock_irqsave(&card->lock, flags);
+        if (file->f_flags & FMODE_READ) {
+                if (card->midi.icnt > 0)
+                        mask |= POLLIN | POLLRDNORM;
+        }
+        if (file->f_flags & FMODE_WRITE) {
+                if (card->midi.ocnt < CS_MIDIOUTBUF)
+                        mask |= POLLOUT | POLLWRNORM;
+        }
+        spin_unlock_irqrestore(&card->lock, flags);
+        return mask;
+}
 
-       add_wait_queue(&state->dmabuf.wait, &wait);
-       while (count > 0) {
-               spin_lock_irqsave(&state->card->lock, flags);
-               if (dmabuf->count > (signed) dmabuf->dmasize) {
-                       /* buffer overrun, we are recovering from sleep_on_timeout,
-                          resync hwptr and swptr, make process flush the buffer */
-                       dmabuf->count = dmabuf->dmasize;
-                       dmabuf->swptr = dmabuf->hwptr;
-               }
+
+static int cs_midi_open(struct inode *inode, struct file *file)
+{
+        int minor = MINOR(inode->i_rdev);
+        struct cs_card *card = devs;
+        unsigned long flags;
+        while (card && card->dev_midi != minor)
+                card = card->next;
+        if (!card)
+                return -ENODEV;
+        file->private_data = card;
+        /* wait for device to become free */
+        down(&card->midi.open_sem);
+        while (card->midi.open_mode & file->f_mode) {
+                if (file->f_flags & O_NONBLOCK) {
+                        up(&card->midi.open_sem);
+                        return -EBUSY;
+                }
+                up(&card->midi.open_sem);
+                interruptible_sleep_on(&card->midi.open_wait);
+                if (signal_pending(current))
+                        return -ERESTARTSYS;
+                down(&card->midi.open_sem);
+        }
+        spin_lock_irqsave(&card->midi.lock, flags);
+        if (!(card->midi.open_mode & (FMODE_READ | FMODE_WRITE))) {
+                card->midi.ird = card->midi.iwr = card->midi.icnt = 0;
+                card->midi.ord = card->midi.owr = card->midi.ocnt = 0;
+                card->midi.ird = card->midi.iwr = card->midi.icnt = 0;
+                cs461x_pokeBA0(card, BA0_MIDCR, 0x0000000f);            /* Enable xmit, rcv. */
+                cs461x_pokeBA0(card, BA0_HICR, HICR_IEV | HICR_CHGM);   /* Enable interrupts */
+        }
+        if (file->f_mode & FMODE_READ) {
+                card->midi.ird = card->midi.iwr = card->midi.icnt = 0;
+        }
+        if (file->f_mode & FMODE_WRITE) {
+                card->midi.ord = card->midi.owr = card->midi.ocnt = 0;
+        }
+        spin_unlock_irqrestore(&card->midi.lock, flags);
+        card->midi.open_mode |= (file->f_mode & (FMODE_READ | FMODE_WRITE));
+        up(&card->midi.open_sem);
+        MOD_INC_USE_COUNT;
+        return 0;
+}
+
+
+static int cs_midi_release(struct inode *inode, struct file *file)
+{
+        struct cs_card *card = (struct cs_card *)file->private_data;
+        DECLARE_WAITQUEUE(wait, current);
+        unsigned long flags;
+        unsigned count, tmo;
+
+        if (file->f_mode & FMODE_WRITE) {
+                current->state = TASK_INTERRUPTIBLE;
+                add_wait_queue(&card->midi.owait, &wait);
+                for (;;) {
+                        spin_lock_irqsave(&card->midi.lock, flags);
+                        count = card->midi.ocnt;
+                        spin_unlock_irqrestore(&card->midi.lock, flags);
+                        if (count <= 0)
+                                break;
+                        if (signal_pending(current))
+                                break;
+                        if (file->f_flags & O_NONBLOCK) {
+                                remove_wait_queue(&card->midi.owait, &wait);
+                                current->state = TASK_RUNNING;
+                                return -EBUSY;
+                        }                      
+                        tmo = (count * HZ) / 3100;
+                        if (!schedule_timeout(tmo ? : 1) && tmo)
+                                printk(KERN_DEBUG "cs46xx: midi timed out??\n");
+                }
+                remove_wait_queue(&card->midi.owait, &wait);
+                current->state = TASK_RUNNING;
+        }
+        down(&card->midi.open_sem);
+        card->midi.open_mode &= (~(file->f_mode & (FMODE_READ | FMODE_WRITE)));
+        up(&card->midi.open_sem);
+        wake_up(&card->midi.open_wait);
+        MOD_DEC_USE_COUNT;
+        return 0;
+}
+
+/*
+ *   Midi file operations struct.
+ */
+static /*const*/ struct file_operations cs_midi_fops = {
+        llseek:                cs_llseek,
+        read:          cs_midi_read,
+        write:         cs_midi_write,
+        poll:          cs_midi_poll,
+        open:          cs_midi_open,
+        release:       cs_midi_release,
+};
+
+static loff_t cs_llseek(struct file *file, loff_t offset, int origin)
+{
+       return -ESPIPE;
+}
+
+/*
+ *
+ * CopySamples copies 16-bit stereo signed samples from the source to the
+ * destination, possibly converting down to unsigned 8-bit and/or mono.
+ * count specifies the number of output bytes to write.
+ *
+ *  Arguments:
+ *
+ *  dst             - Pointer to a destination buffer.
+ *  src             - Pointer to a source buffer
+ *  count           - The number of bytes to copy into the destination buffer.
+ *  fmt             - CS_FMT_16BIT and/or CS_FMT_STEREO bits
+ *  dmabuf          - pointer to the dma buffer structure
+ *
+ * NOTES: only call this routine if the output desired is not 16 Signed Stereo
+ *     
+ *
+ */
+static void CopySamples(char *dst, char *src, int count, unsigned fmt, 
+               struct dmabuf *dmabuf)
+{
+
+    s32 s32AudioSample;
+    s16 *psSrc=(s16 *)src;
+    s16 *psDst=(s16 *)dst;
+    u8 *pucDst=(u8 *)dst;
+
+    CS_DBGOUT(CS_FUNCTION, 2, printk(KERN_INFO "cs4281: CopySamples()+ ") );
+    CS_DBGOUT(CS_WAVE_READ, 8, printk(KERN_INFO
+       " dst=0x%x src=0x%x count=%d fmt=0x%x\n",
+       (unsigned)dst,(unsigned)src,(unsigned)count,(unsigned)fmt) );
+
+    /*
+     * See if the data should be output as 8-bit unsigned stereo.
+     */
+    if((fmt & CS_FMT_STEREO) && !(fmt & CS_FMT_16BIT))
+    {
+        /*
+         * Convert each 16-bit signed stereo sample to 8-bit unsigned 
+        * stereo using rounding.
+         */
+        psSrc = (s16 *)src;
+       count = count/2;
+        while(count--)
+        {
+            *(pucDst++) = (u8)(((s16)(*psSrc++) + (s16)0x8000) >> 8);
+        }
+    }
+    /*
+     * See if the data should be output at 8-bit unsigned mono.
+     */
+    else if(!(fmt & CS_FMT_STEREO) && !(fmt & CS_FMT_16BIT))
+    {
+        /*
+         * Convert each 16-bit signed stereo sample to 8-bit unsigned 
+        * mono using averaging and rounding.
+         */
+        psSrc = (s16 *)src;
+       count = count/2;
+        while(count--)
+        {
+           s32AudioSample = ((*psSrc)+(*(psSrc + 1)))/2 + (s32)0x80;
+           if(s32AudioSample > 0x7fff)
+               s32AudioSample = 0x7fff;
+            *(pucDst++) = (u8)(((s16)s32AudioSample + (s16)0x8000) >> 8);
+           psSrc += 2;
+        }
+    }
+    /*
+     * See if the data should be output at 16-bit signed mono.
+     */
+    else if(!(fmt & CS_FMT_STEREO) && (fmt & CS_FMT_16BIT))
+    {
+        /*
+         * Convert each 16-bit signed stereo sample to 16-bit signed 
+        * mono using averaging.
+         */
+        psSrc = (s16 *)src;
+       count = count/2;
+        while(count--)
+        {
+            *(psDst++) = (s16)((*psSrc)+(*(psSrc + 1)))/2;
+           psSrc += 2;
+        }
+    }
+}
+
+/*
+ * cs_copy_to_user()
+ * replacement for the standard copy_to_user, to allow for a conversion from
+ * 16 bit to 8 bit and from stereo to mono, if the record conversion is active.  
+ * The current CS46xx/CS4280 static image only records in 16bit unsigned Stereo, 
+ * so we convert from any of the other format combinations.
+ */
+static unsigned cs_copy_to_user(
+       struct cs_state *s, 
+       void *dest, 
+       void *hwsrc, 
+       unsigned cnt, 
+       unsigned *copied)
+{
+       struct dmabuf *dmabuf = &s->dmabuf;
+       void *src = hwsrc;  /* default to the standard destination buffer addr */
+
+       CS_DBGOUT(CS_FUNCTION, 6, printk(KERN_INFO 
+               "cs_copy_to_user()+ fmt=0x%x cnt=%d dest=0x%.8x\n",
+               dmabuf->fmt,(unsigned)cnt,(unsigned)dest) );
+
+       if(cnt > dmabuf->dmasize)
+       {
+               cnt = dmabuf->dmasize;
+       }
+       if(!cnt)
+       {
+               *copied = 0;
+               return 0;
+       }
+       if(dmabuf->divisor != 1)
+       {
+               if(!dmabuf->tmpbuff)
+               {
+                       *copied = cnt/dmabuf->divisor;
+                       return 0;
+               }
+
+               CopySamples((char *)dmabuf->tmpbuff, (char *)hwsrc, cnt, 
+                       dmabuf->fmt, dmabuf);
+               src = dmabuf->tmpbuff;
+               cnt = cnt/dmabuf->divisor;
+       }
+        if (copy_to_user(dest, src, cnt))
+       {
+               CS_DBGOUT(CS_FUNCTION, 2, printk(KERN_ERR 
+                       "cs4281: cs_copy_to_user()- fault dest=0x%x src=0x%x cnt=%d\n",
+                               (unsigned)dest,(unsigned)src,cnt) );
+               *copied = 0;
+               return -EFAULT;
+       }
+       *copied = cnt;
+       CS_DBGOUT(CS_FUNCTION, 2, printk(KERN_INFO 
+               "cs4281: cs_copy_to_user()- copied bytes is %d \n",cnt) );
+       return 0;
+}
+
+/* in this loop, dmabuf.count signifies the amount of data that is waiting to be copied to
+   the user's buffer.  it is filled by the dma machine and drained by this loop. */
+static ssize_t cs_read(struct file *file, char *buffer, size_t count, loff_t *ppos)
+{
+       struct cs_card *card=devs;
+       struct cs_state *state;
+       DECLARE_WAITQUEUE(wait, current);
+       struct dmabuf *dmabuf;
+       ssize_t ret = 0;
+       unsigned long flags;
+       unsigned swptr;
+       int cnt;
+       unsigned copied=0;
+
+       CS_DBGOUT(CS_WAVE_READ, 4, printk("cs461x: cs_read()+ %d\n",count) );
+       state = (struct cs_state *)card->states[0];
+       if(!state)
+               return -ENODEV;
+       dmabuf = &state->dmabuf;
+
+       if (ppos != &file->f_pos)
+               return -ESPIPE;
+       if (dmabuf->mapped)
+               return -ENXIO;
+       if (!dmabuf->ready && (ret = prog_dmabuf(state)))
+               return ret;
+       if (!access_ok(VERIFY_WRITE, buffer, count))
+               return -EFAULT;
+
+       add_wait_queue(&state->dmabuf.wait, &wait);
+       while (count > 0) {
+               spin_lock_irqsave(&state->card->lock, flags);
                swptr = dmabuf->swptr;
                cnt = dmabuf->dmasize - swptr;
                if (dmabuf->count < cnt)
@@ -969,18 +1963,17 @@ static ssize_t cs_read(struct file *file, char *buffer, size_t count, loff_t *pp
                        __set_current_state(TASK_INTERRUPTIBLE);
                spin_unlock_irqrestore(&state->card->lock, flags);
 
-               if (cnt > count)
-                       cnt = count;
+               if (cnt > (count * dmabuf->divisor))
+                       cnt = count * dmabuf->divisor;
                if (cnt <= 0) {
                        /* buffer is empty, start the dma machine and wait for data to be
                           recorded */
                        start_adc(state);
                        if (file->f_flags & O_NONBLOCK) {
-                               if (!ret)
-                                       ret = -EAGAIN;
+                               if (!ret) ret = -EAGAIN;
                                remove_wait_queue(&state->dmabuf.wait, &wait);
                                break;
-                       }
+                       }
                        schedule();
                        if (signal_pending(current)) {
                                ret = ret ? ret : -ERESTARTSYS;
@@ -989,26 +1982,31 @@ static ssize_t cs_read(struct file *file, char *buffer, size_t count, loff_t *pp
                        continue;
                }
 
-               if (copy_to_user(buffer, dmabuf->rawbuf + swptr, cnt)) {
-                       if (!ret)
-                               ret = -EFAULT;
+               CS_DBGOUT(CS_WAVE_READ, 2, printk(KERN_INFO 
+                       "_read() copy_to cnt=%d count=%d ", cnt,count) );
+               CS_DBGOUT(CS_WAVE_READ, 8, printk(KERN_INFO 
+                       " .dmasize=%d .count=%d buffer=0x%.8x ret=%d\n",
+                       dmabuf->dmasize,dmabuf->count,(unsigned)buffer,ret) );
+
+                if (cs_copy_to_user(state, buffer, 
+                       (void *)((unsigned)dmabuf->rawbuf + swptr), cnt, &copied))
+               {
+                       if (!ret) ret = -EFAULT;
                        break;
                }
-
-               swptr = (swptr + cnt) % dmabuf->dmasize;
-
-               spin_lock_irqsave(&state->card->lock, flags);
-               dmabuf->swptr = swptr;
-               dmabuf->count -= cnt;
-               spin_unlock_irqrestore(&state->card->lock, flags);
-
-               count -= cnt;
-               buffer += cnt;
-               ret += cnt;
-               start_adc(state);
+                swptr = (swptr + cnt) % dmabuf->dmasize;
+                spin_lock_irqsave(&card->lock, flags);
+                dmabuf->swptr = swptr;
+                dmabuf->count -= cnt;
+                spin_unlock_irqrestore(&card->lock, flags);
+                count -= copied;
+                buffer += copied;
+                ret += copied;
+                start_adc(state);
        }
        remove_wait_queue(&state->dmabuf.wait, &wait);
        set_current_state(TASK_RUNNING);
+       CS_DBGOUT(CS_WAVE_READ, 4, printk("cs461x: cs_read()- %d\n",ret) );
        return ret;
 }
 
@@ -1016,27 +2014,30 @@ static ssize_t cs_read(struct file *file, char *buffer, size_t count, loff_t *pp
    the soundcard.  it is drained by the dma machine and filled by this loop. */
 static ssize_t cs_write(struct file *file, const char *buffer, size_t count, loff_t *ppos)
 {
-       struct cs_state *state = (struct cs_state *)file->private_data;
-       struct dmabuf *dmabuf = &state->dmabuf;
+       struct cs_card *card=devs;
+       struct cs_state *state;
        DECLARE_WAITQUEUE(wait, current);
+       struct dmabuf *dmabuf;
        ssize_t ret = 0;
        unsigned long flags;
        unsigned swptr;
        int cnt;
 
-#ifdef DEBUG
-       printk("cs461x: cs_write called, count = %d\n", count);
-#endif
+       CS_DBGOUT(CS_WAVE_WRITE | CS_FUNCTION, 4,
+               printk("cs461x: cs_write called, count = %d\n", count) );
+       state = (struct cs_state *)card->states[1];
+       if(!state)
+               return -ENODEV;
+       dmabuf = &state->dmabuf;
 
        if (ppos != &file->f_pos)
                return -ESPIPE;
        if (dmabuf->mapped)
                return -ENXIO;
-       if (!dmabuf->ready && (ret = prog_dmabuf(state, 0)))
+       if (!dmabuf->ready && (ret = prog_dmabuf(state)))
                return ret;
        if (!access_ok(VERIFY_READ, buffer, count))
                return -EFAULT;
-
        add_wait_queue(&state->dmabuf.wait, &wait);
        while (count > 0) {
                spin_lock_irqsave(&state->card->lock, flags);
@@ -1046,6 +2047,12 @@ static ssize_t cs_write(struct file *file, const char *buffer, size_t count, lof
                        dmabuf->count = 0;
                        dmabuf->swptr = dmabuf->hwptr;
                }
+               if (dmabuf->underrun)
+               {
+                       dmabuf->underrun = 0;
+                       dmabuf->hwptr = cs_get_dma_addr(state);
+                       dmabuf->swptr = dmabuf->hwptr;
+               }
                swptr = dmabuf->swptr;
                cnt = dmabuf->dmasize - swptr;
                if (dmabuf->count + cnt > dmabuf->dmasize)
@@ -1061,23 +2068,19 @@ static ssize_t cs_write(struct file *file, const char *buffer, size_t count, lof
                           played */
                        start_dac(state);
                        if (file->f_flags & O_NONBLOCK) {
-                               if (!ret)
-                                       ret = -EAGAIN;
-                               remove_wait_queue(&state->dmabuf.wait, &wait);
+                               if (!ret) ret = -EAGAIN;
                                break;
-                       }
+                       }
                        schedule();
-                       if (signal_pending(current)) {
-                               if (!ret)
-                                       ret = -ERESTARTSYS;
+                       if (signal_pending(current)) {
+                               ret = ret ? ret : -ERESTARTSYS;
                                break;
-                       }
-                       continue;
-               }
+                       }
+                       continue;
+               }
                if (copy_from_user(dmabuf->rawbuf + swptr, buffer, cnt)) {
-                       if (!ret)
-                               ret = -EFAULT;
-                       break;
+                       if (!ret) ret = -EFAULT;
+                       return ret;
                }
 
                swptr = (swptr + cnt) % dmabuf->dmasize;
@@ -1085,6 +2088,12 @@ static ssize_t cs_write(struct file *file, const char *buffer, size_t count, lof
                spin_lock_irqsave(&state->card->lock, flags);
                dmabuf->swptr = swptr;
                dmabuf->count += cnt;
+               if(dmabuf->count > dmabuf->dmasize)
+               {
+                       CS_DBGOUT(CS_WAVE_WRITE | CS_ERROR, 2, printk(
+                           "cs46xx: cs_write() d->count > dmasize - resetting\n"));
+                       dmabuf->count = dmabuf->dmasize;
+               }
                dmabuf->endcleared = 0;
                spin_unlock_irqrestore(&state->card->lock, flags);
 
@@ -1093,70 +2102,142 @@ static ssize_t cs_write(struct file *file, const char *buffer, size_t count, lof
                ret += cnt;
                start_dac(state);
        }
+       remove_wait_queue(&state->dmabuf.wait, &wait);
+       set_current_state(TASK_RUNNING);
+
+       CS_DBGOUT(CS_WAVE_WRITE | CS_FUNCTION, 2, 
+               printk("cs46xx: cs_write()- ret=0x%x\n", ret) );
        return ret;
 }
 
 static unsigned int cs_poll(struct file *file, struct poll_table_struct *wait)
 {
-       struct cs_state *state = (struct cs_state *)file->private_data;
-       struct dmabuf *dmabuf = &state->dmabuf;
+       struct cs_card *card = (struct cs_card *)file->private_data;
+       struct dmabuf *dmabuf;
+       struct cs_state *state;
+
        unsigned long flags;
        unsigned int mask = 0;
 
+       CS_DBGOUT(CS_FUNCTION, 2, printk("cs46xx: cs_poll()+ \n"));
+       if (!(file->f_mode & (FMODE_WRITE | FMODE_READ)))
+       {
+               return -EINVAL;
+       }
        if (file->f_mode & FMODE_WRITE)
-               poll_wait(file, &dmabuf->wait, wait);
+       {
+               state = card->states[1];
+               if(state)
+               {
+                       dmabuf = &state->dmabuf;
+                       poll_wait(file, &dmabuf->wait, wait);
+               }
+       }
        if (file->f_mode & FMODE_READ)
-               poll_wait(file, &dmabuf->wait, wait);
+       {
+               state = card->states[0];
+               if(state)
+               {
+                       dmabuf = &state->dmabuf;
+                       poll_wait(file, &dmabuf->wait, wait);
+               }
+       }
 
-       spin_lock_irqsave(&state->card->lock, flags);
-       cs_update_ptr(state);
+       spin_lock_irqsave(&card->lock, flags);
+       cs_update_ptr();
        if (file->f_mode & FMODE_READ) {
-               if (dmabuf->count >= (signed)dmabuf->fragsize)
-                       mask |= POLLIN | POLLRDNORM;
+               state = card->states[0];
+               if(state)
+               {
+                       dmabuf = &state->dmabuf;
+                       if (dmabuf->count >= (signed)dmabuf->fragsize)
+                               mask |= POLLIN | POLLRDNORM;
+               }
        }
        if (file->f_mode & FMODE_WRITE) {
-               if (dmabuf->mapped) {
-                       if (dmabuf->count >= (signed)dmabuf->fragsize)
-                               mask |= POLLOUT | POLLWRNORM;
-               } else {
-                       if ((signed)dmabuf->dmasize >= dmabuf->count + (signed)dmabuf->fragsize)
-                               mask |= POLLOUT | POLLWRNORM;
+               state = card->states[1];
+               if(state)
+               {
+                       dmabuf = &state->dmabuf;
+                       if (dmabuf->mapped) {
+                               if (dmabuf->count >= (signed)dmabuf->fragsize)
+                                   mask |= POLLOUT | POLLWRNORM;
+                       } else {
+                               if ((signed)dmabuf->dmasize >= dmabuf->count 
+                                       + (signed)dmabuf->fragsize)
+                                   mask |= POLLOUT | POLLWRNORM;
+                       }
                }
        }
-       spin_unlock_irqrestore(&state->card->lock, flags);
+       spin_unlock_irqrestore(&card->lock, flags);
 
+       CS_DBGOUT(CS_FUNCTION, 2, printk("cs46xx: cs_poll()- \n"));
        return mask;
 }
 
-
 /*
- * We let users mmap the ring buffer. Its not the real DMA buffer but
- * that side of the code is hidden in the IRQ handling. We do a software
- * emulation of DMA from a 64K or so buffer into a 2K FIFO.
- * (the hardware probably deserves a moan here but Crystal send me nice
- * toys ;)).
+ *     We let users mmap the ring buffer. Its not the real DMA buffer but
+ *     that side of the code is hidden in the IRQ handling. We do a software
+ *     emulation of DMA from a 64K or so buffer into a 2K FIFO. 
+ *     (the hardware probably deserves a moan here but Crystal send me nice
+ *     toys ;)).
  */
-
 static int cs_mmap(struct file *file, struct vm_area_struct *vma)
 {
-       struct cs_state *state = (struct cs_state *)file->private_data;
-       struct dmabuf *dmabuf = &state->dmabuf;
+       struct cs_card *card=devs;
+       struct cs_state *state;
+       struct dmabuf *dmabuf;
        int ret;
        unsigned long size;
        
+       CS_DBGOUT(CS_FUNCTION | CS_PARMS, 2, printk("cs46xx: cs_mmap()+ file=0x%x %s %s\n", 
+               (unsigned)file, vma->vm_flags & VM_WRITE ? "VM_WRITE" : "",
+               vma->vm_flags & VM_READ ? "VM_READ" : "") );
 
        if (vma->vm_flags & VM_WRITE) {
-               if ((ret = prog_dmabuf(state, 0)) != 0)
-                       return ret;
+               state = card->states[1];
+               if(state)
+               {
+                       CS_DBGOUT(CS_OPEN, 2, printk(
+                         "cs46xx: cs_mmap() VM_WRITE - state TRUE prog_dmabuf DAC\n") );
+                       if ((ret = prog_dmabuf(state)) != 0)
+                               return ret;
+               }
        } else if (vma->vm_flags & VM_READ) {
-               if ((ret = prog_dmabuf(state, 1)) != 0)
-                       return ret;
-       } else 
+               state = card->states[0];
+               if(state)
+               {
+                       CS_DBGOUT(CS_OPEN, 2, printk(
+                         "cs46xx: cs_mmap() VM_READ - state TRUE prog_dmabuf ADC\n") );
+                       if ((ret = prog_dmabuf(state)) != 0)
+                               return ret;
+               }
+       } else {
+               CS_DBGOUT(CS_ERROR, 2, printk(
+                 "cs46xx: cs_mmap() return -EINVAL\n") );
+               return -EINVAL;
+       }
+
+/*
+ * For now ONLY support playback, but seems like the only way to use
+ * mmap() is to open an FD with RDWR, just read or just write access
+ * does not function, get an error back from the kernel.
+ * Also, QuakeIII opens with RDWR!  So, there must be something
+ * to needing read/write access mapping.  So, allow read/write but 
+ * use the DAC only.
+ */
+       state = card->states[1];  
+       if(!(unsigned)state)
                return -EINVAL;
 
+       dmabuf = &state->dmabuf;
        if (vma->vm_pgoff != 0)
                return -EINVAL;
        size = vma->vm_end - vma->vm_start;
+
+       CS_DBGOUT(CS_PARMS, 2, printk("cs46xx: cs_mmap(): size=%d\n",(unsigned)size) );
+
        if (size > (PAGE_SIZE << dmabuf->buforder))
                return -EINVAL;
        if (remap_page_range(vma->vm_start, virt_to_phys(dmabuf->rawbuf),
@@ -1164,23 +2245,35 @@ static int cs_mmap(struct file *file, struct vm_area_struct *vma)
                return -EAGAIN;
        dmabuf->mapped = 1;
 
+       CS_DBGOUT(CS_FUNCTION, 2, printk("cs46xx: cs_mmap()-\n") );
        return 0;
 }
 
 static int cs_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
 {
-       struct cs_state *state = (struct cs_state *)file->private_data;
-       struct dmabuf *dmabuf = &state->dmabuf;
+       struct cs_card *card = (struct cs_card *)file->private_data;
+       struct cs_state *state;
+       struct dmabuf *dmabuf=0;
        unsigned long flags;
        audio_buf_info abinfo;
        count_info cinfo;
-       int val, mapped, ret;
+       int val, valsave, mapped, ret;
 
-       mapped = ((file->f_mode & FMODE_WRITE) && dmabuf->mapped) ||
-               ((file->f_mode & FMODE_READ) && dmabuf->mapped);
-#ifdef DEBUG
-       printk("cs461x: cs_ioctl, command = %2d, arg = 0x%08x\n",
-              _IOC_NR(cmd), arg ? *(int *)arg : 0);
+       state = (struct cs_state *)card->states[0];
+       if(state)
+       {
+               dmabuf = &state->dmabuf;
+               mapped = (file->f_mode & FMODE_READ) && dmabuf->mapped;
+       }
+       state = (struct cs_state *)card->states[1];
+       if(state)
+       {
+               dmabuf = &state->dmabuf;
+               mapped |= (file->f_mode & FMODE_WRITE) && dmabuf->mapped;
+       }
+               
+#if CSDEBUG
+       printioctl(cmd);
 #endif
 
        switch (cmd) 
@@ -1191,21 +2284,36 @@ static int cs_ioctl(struct inode *inode, struct file *file, unsigned int cmd, un
        case SNDCTL_DSP_RESET:
                /* FIXME: spin_lock ? */
                if (file->f_mode & FMODE_WRITE) {
-                       stop_dac(state);
-                       synchronize_irq();
-                       dmabuf->ready = 0;
-                       resync_dma_ptrs(state);
-                       dmabuf->swptr = dmabuf->hwptr = 0;
-                       dmabuf->count = dmabuf->total_bytes = 0;
+                       state = (struct cs_state *)card->states[1];
+                       if(state)
+                       {
+                               dmabuf = &state->dmabuf;
+                               stop_dac(state);
+                               synchronize_irq();
+                               dmabuf->ready = 0;
+                               resync_dma_ptrs(state);
+                               dmabuf->swptr = dmabuf->hwptr = 0;
+                               dmabuf->count = dmabuf->total_bytes = 0;
+                               dmabuf->blocks = 0;
+                               dmabuf->SGok = 0;
+                       }
                }
                if (file->f_mode & FMODE_READ) {
-                       stop_adc(state);
-                       synchronize_irq();
-                       resync_dma_ptrs(state);
-                       dmabuf->ready = 0;
-                       dmabuf->swptr = dmabuf->hwptr = 0;
-                       dmabuf->count = dmabuf->total_bytes = 0;
+                       state = (struct cs_state *)card->states[0];
+                       if(state)
+                       {
+                               dmabuf = &state->dmabuf;
+                               stop_adc(state);
+                               synchronize_irq();
+                               resync_dma_ptrs(state);
+                               dmabuf->ready = 0;
+                               dmabuf->swptr = dmabuf->hwptr = 0;
+                               dmabuf->count = dmabuf->total_bytes = 0;
+                               dmabuf->blocks = 0;
+                               dmabuf->SGok = 0;
+                       }
                }
+               CS_DBGOUT(CS_IOCTL, 2, printk("cs46xx: DSP_RESET()-\n") );
                return 0;
 
        case SNDCTL_DSP_SYNC:
@@ -1213,170 +2321,335 @@ static int cs_ioctl(struct inode *inode, struct file *file, unsigned int cmd, un
                        return drain_dac(state, file->f_flags & O_NONBLOCK);
                return 0;
 
-       case SNDCTL_DSP_SPEED: /* set smaple rate */
+       case SNDCTL_DSP_SPEED: /* set sample rate */
                if (get_user(val, (int *)arg))
                        return -EFAULT;
                if (val >= 0) {
-                       if (file->f_mode & FMODE_WRITE) {
-                               stop_dac(state);
-                               dmabuf->ready = 0;
-                               cs_set_dac_rate(state, val);
-                       }
                        if (file->f_mode & FMODE_READ) {
-                               stop_adc(state);
-                               dmabuf->ready = 0;
-                               cs_set_adc_rate(state, val);
+                               state = (struct cs_state *)card->states[0];
+                               if(state)
+                               {
+                                       dmabuf = &state->dmabuf;
+                                       stop_adc(state);
+                                       dmabuf->ready = 0;
+                                       dmabuf->SGok = 0;
+                                       cs_set_adc_rate(state, val);
+                                       cs_set_divisor(dmabuf);
+                               }
                        }
+                       if (file->f_mode & FMODE_WRITE) {
+                               state = (struct cs_state *)card->states[1];
+                               if(state)
+                               {
+                                       dmabuf = &state->dmabuf;
+                                       stop_dac(state);
+                                       dmabuf->ready = 0;
+                                       dmabuf->SGok = 0;
+                                       cs_set_dac_rate(state, val);
+                                       cs_set_divisor(dmabuf);
+                               }
+                       }
+                       CS_DBGOUT(CS_IOCTL | CS_PARMS, 4, printk(
+                           "cs46xx: cs_ioctl() DSP_SPEED %s %s %d\n",
+                               file->f_mode & FMODE_WRITE ? "DAC" : "",
+                               file->f_mode & FMODE_READ ? "ADC" : "",
+                               dmabuf->rate ) );
+                       return put_user(dmabuf->rate, (int *)arg);
                }
-               return put_user(dmabuf->rate, (int *)arg);
+               return put_user(0, (int *)arg);
 
        case SNDCTL_DSP_STEREO: /* set stereo or mono channel */
                if (get_user(val, (int *)arg))
                        return -EFAULT;
                if (file->f_mode & FMODE_WRITE) {
-                       stop_dac(state);
-                       dmabuf->ready = 0;
-                       if(val)
-                               dmabuf->fmt |= CS_FMT_STEREO;
-                       else
-                               dmabuf->fmt &= ~CS_FMT_STEREO;
+                       state = (struct cs_state *)card->states[1];
+                       if(state)
+                       {
+                               dmabuf = &state->dmabuf;
+                               stop_dac(state);
+                               dmabuf->ready = 0;
+                               dmabuf->SGok = 0;
+                               if(val)
+                                       dmabuf->fmt |= CS_FMT_STEREO;
+                               else
+                                       dmabuf->fmt &= ~CS_FMT_STEREO;
+                               cs_set_divisor(dmabuf);
+                               CS_DBGOUT(CS_IOCTL | CS_PARMS, 4, printk(
+                                   "cs46xx: DSP_STEREO() DAC %s\n",
+                                   (dmabuf->fmt & CS_FMT_STEREO) ?
+                                       "STEREO":"MONO") );
+                       }
                }
                if (file->f_mode & FMODE_READ) {
-                       stop_adc(state);
-                       dmabuf->ready = 0;
-                       if(val)
+                       state = (struct cs_state *)card->states[0];
+                       if(state)
                        {
-                               dmabuf->fmt |= CS_FMT_STEREO;
-                               return put_user(1, (int *)arg);
+                               dmabuf = &state->dmabuf;
+                               stop_adc(state);
+                               dmabuf->ready = 0;
+                               dmabuf->SGok = 0;
+                               if(val)
+                                       dmabuf->fmt |= CS_FMT_STEREO;
+                               else
+                                       dmabuf->fmt &= ~CS_FMT_STEREO;
+                               cs_set_divisor(dmabuf);
+                               CS_DBGOUT(CS_IOCTL | CS_PARMS, 4, printk(
+                                   "cs46xx: DSP_STEREO() ADC %s\n",
+                                   (dmabuf->fmt & CS_FMT_STEREO) ?
+                                       "STEREO":"MONO") );
                        }
-#if 0
-                       /* Needs extra work to support this */
-
-                       else
-                               dmabuf->fmt &= ~CS_FMT_STEREO;
-#endif
                }
                return 0;
 
        case SNDCTL_DSP_GETBLKSIZE:
                if (file->f_mode & FMODE_WRITE) {
-                       if ((val = prog_dmabuf(state, 0)))
-                               return val;
-                       return put_user(dmabuf->fragsize, (int *)arg);
+                       state = (struct cs_state *)card->states[1];
+                       if(state)
+                       {
+                               dmabuf = &state->dmabuf;
+                               if ((val = prog_dmabuf(state)))
+                                       return val;
+                               return put_user(dmabuf->fragsize, (int *)arg);
+                       }
                }
                if (file->f_mode & FMODE_READ) {
-                       if ((val = prog_dmabuf(state, 1)))
-                               return val;
-                       return put_user(dmabuf->fragsize, (int *)arg);
+                       state = (struct cs_state *)card->states[0];
+                       if(state)
+                       {
+                               dmabuf = &state->dmabuf;
+                               if ((val = prog_dmabuf(state)))
+                                       return val;
+                               return put_user(dmabuf->fragsize/dmabuf->divisor, 
+                                               (int *)arg);
+                       }
                }
+               return put_user(0, (int *)arg);
 
        case SNDCTL_DSP_GETFMTS: /* Returns a mask of supported sample format*/
-               return put_user(AFMT_S16_LE, (int *)arg);
+               return put_user(AFMT_S16_LE | AFMT_U8, (int *)arg);
 
        case SNDCTL_DSP_SETFMT: /* Select sample format */
                if (get_user(val, (int *)arg))
                        return -EFAULT;
+               CS_DBGOUT(CS_IOCTL | CS_PARMS, 4, printk(
+                   "cs46xx: cs_ioctl() DSP_SETFMT %s %s %s %s\n",
+                       file->f_mode & FMODE_WRITE ? "DAC" : "",
+                       file->f_mode & FMODE_READ ? "ADC" : "",
+                       val == AFMT_S16_LE ? "16Bit Signed" : "",
+                       val == AFMT_U8 ? "8Bit Unsigned" : "") );
+               valsave = val;
                if (val != AFMT_QUERY) {
-                       if(val==AFMT_S16_LE/* || val==AFMT_U8*/)
+                       if(val==AFMT_S16_LE || val==AFMT_U8)
                        {
                                if (file->f_mode & FMODE_WRITE) {
-                                       stop_dac(state);
-                                       dmabuf->ready = 0;
+                                       state = (struct cs_state *)card->states[1];
+                                       if(state)
+                                       {
+                                               dmabuf = &state->dmabuf;
+                                               stop_dac(state);
+                                               dmabuf->ready = 0;
+                                               dmabuf->SGok = 0;
+                                               if(val==AFMT_S16_LE)
+                                                       dmabuf->fmt |= CS_FMT_16BIT;
+                                               else
+                                                       dmabuf->fmt &= ~CS_FMT_16BIT;
+                                               cs_set_divisor(dmabuf);
+                                               if((ret = prog_dmabuf(state)))
+                                                       return ret;
+                                       }
                                }
                                if (file->f_mode & FMODE_READ) {
-                                       stop_adc(state);
-                                       dmabuf->ready = 0;
+                                       val = valsave;
+                                       state = (struct cs_state *)card->states[0];
+                                       if(state)
+                                       {
+                                               dmabuf = &state->dmabuf;
+                                               stop_adc(state);
+                                               dmabuf->ready = 0;
+                                               dmabuf->SGok = 0;
+                                               if(val==AFMT_S16_LE)
+                                                       dmabuf->fmt |= CS_FMT_16BIT;
+                                               else
+                                                       dmabuf->fmt &= ~CS_FMT_16BIT;
+                                               cs_set_divisor(dmabuf);
+                                               if((ret = prog_dmabuf(state)))
+                                                       return ret;
+                                       }
                                }
-                               if(val==AFMT_S16_LE)
-                                       dmabuf->fmt |= CS_FMT_16BIT;
-                               else
-                                       dmabuf->fmt &= ~CS_FMT_16BIT;
+                       }
+                       else
+                       {
+                               CS_DBGOUT(CS_IOCTL | CS_ERROR, 2, printk(
+                                   "cs46xx: DSP_SETFMT() Unsupported format (0x%x)\n",
+                                       valsave) );
                        }
                }
-               if(dmabuf->fmt&CS_FMT_16BIT)
-                       return put_user(AFMT_S16_LE, (int *)arg);
                else
-                       return put_user(AFMT_U8, (int *)arg);
+               {
+                       if(file->f_mode & FMODE_WRITE)
+                       {
+                               state = (struct cs_state *)card->states[1];
+                               if(state)
+                                       dmabuf = &state->dmabuf;
+                       }
+                       else if(file->f_mode & FMODE_READ)
+                       {
+                               state = (struct cs_state *)card->states[0];
+                               if(state)
+                                       dmabuf = &state->dmabuf;
+                       }
+               }
+               if(dmabuf)
+               {
+                       if(dmabuf->fmt & CS_FMT_16BIT)
+                               return put_user(AFMT_S16_LE, (int *)arg);
+                       else
+                               return put_user(AFMT_U8, (int *)arg);
+               }
+               return put_user(0, (int *)arg);
 
        case SNDCTL_DSP_CHANNELS:
                if (get_user(val, (int *)arg))
                        return -EFAULT;
                if (val != 0) {
                        if (file->f_mode & FMODE_WRITE) {
-                               stop_dac(state);
-                               dmabuf->ready = 0;
-                               if (val > 1)
-                                       dmabuf->fmt |= CS_FMT_STEREO;
-                               else
-                                       dmabuf->fmt &= ~CS_FMT_STEREO;
+                               state = (struct cs_state *)card->states[1];
+                               if(state)
+                               {
+                                       dmabuf = &state->dmabuf;
+                                       stop_dac(state);
+                                       dmabuf->ready = 0;
+                                       dmabuf->SGok = 0;
+                                       if(val>1)
+                                               dmabuf->fmt |= CS_FMT_STEREO;
+                                       else
+                                               dmabuf->fmt &= ~CS_FMT_STEREO;
+                                       cs_set_divisor(dmabuf);
+                                       if (prog_dmabuf(state))
+                                               return 0;
+                               }
                        }
                        if (file->f_mode & FMODE_READ) {
-                               stop_adc(state);
-                               dmabuf->ready = 0;
+                               state = (struct cs_state *)card->states[0];
+                               if(state)
+                               {
+                                       dmabuf = &state->dmabuf;
+                                       stop_adc(state);
+                                       dmabuf->ready = 0;
+                                       dmabuf->SGok = 0;
+                                       if(val>1)
+                                               dmabuf->fmt |= CS_FMT_STEREO;
+                                       else
+                                               dmabuf->fmt &= ~CS_FMT_STEREO;
+                                       cs_set_divisor(dmabuf);
+                                       if (prog_dmabuf(state))
+                                               return 0;
+                               }
                        }
                }
                return put_user((dmabuf->fmt & CS_FMT_STEREO) ? 2 : 1,
                                (int *)arg);
 
        case SNDCTL_DSP_POST:
-               /* FIXME: the same as RESET ?? */
+               /*
+                * There will be a longer than normal pause in the data.
+                * so... do nothing, because there is nothing that we can do.
+                */
                return 0;
 
        case SNDCTL_DSP_SUBDIVIDE:
-               if (dmabuf->subdivision)
-                       return -EINVAL;
-               if (get_user(val, (int *)arg))
-                       return -EFAULT;
-               if (val != 1 && val != 2)
-                       return -EINVAL;
-               dmabuf->subdivision = val;
+               if (file->f_mode & FMODE_WRITE) {
+                       state = (struct cs_state *)card->states[1];
+                       if(state)
+                       {
+                               dmabuf = &state->dmabuf;
+                               if (dmabuf->subdivision)
+                                       return -EINVAL;
+                               if (get_user(val, (int *)arg))
+                                       return -EFAULT;
+                               if (val != 1 && val != 2)
+                                       return -EINVAL;
+                               dmabuf->subdivision = val;
+                       }
+               }
+               if (file->f_mode & FMODE_READ) {
+                       state = (struct cs_state *)card->states[0];
+                       if(state)
+                       {
+                               dmabuf = &state->dmabuf;
+                               if (dmabuf->subdivision)
+                                       return -EINVAL;
+                               if (get_user(val, (int *)arg))
+                                       return -EFAULT;
+                               if (val != 1 && val != 2)
+                                       return -EINVAL;
+                               dmabuf->subdivision = val;
+                       }
+               }
                return 0;
 
        case SNDCTL_DSP_SETFRAGMENT:
                if (get_user(val, (int *)arg))
                        return -EFAULT;
 
-               dmabuf->ossfragshift = val & 0xffff;
-               dmabuf->ossmaxfrags = (val >> 16) & 0xffff;
-               switch(dmabuf->ossmaxfrags)
-               {
-                       case 1:
-                               dmabuf->ossfragshift=12;
-                               return 0;
-                       default:
-                               /* Fragments must be 2K long */
-                               dmabuf->ossfragshift = 11;
-                               dmabuf->ossmaxfrags=2;
+               if (file->f_mode & FMODE_WRITE) {
+                       state = (struct cs_state *)card->states[1];
+                       if(state)
+                       {
+                               dmabuf = &state->dmabuf;
+                               dmabuf->ossfragshift = val & 0xffff;
+                               dmabuf->ossmaxfrags = (val >> 16) & 0xffff;
+                       }
+               }
+               if (file->f_mode & FMODE_READ) {
+                       state = (struct cs_state *)card->states[0];
+                       if(state)
+                       {
+                               dmabuf = &state->dmabuf;
+                               dmabuf->ossfragshift = val & 0xffff;
+                               dmabuf->ossmaxfrags = (val >> 16) & 0xffff;
+                       }
                }
                return 0;
 
        case SNDCTL_DSP_GETOSPACE:
-               if (!(file->f_mode & FMODE_WRITE))
-                       return -EINVAL;
-               if (!dmabuf->enable && (val = prog_dmabuf(state, 0)) != 0)
-                       return val;
-               spin_lock_irqsave(&state->card->lock, flags);
-               cs_update_ptr(state);
-               abinfo.fragsize = dmabuf->fragsize;
-               abinfo.bytes = dmabuf->dmasize - dmabuf->count;
-               abinfo.fragstotal = dmabuf->numfrag;
-               abinfo.fragments = abinfo.bytes >> dmabuf->fragshift;
-               spin_unlock_irqrestore(&state->card->lock, flags);
-               return copy_to_user((void *)arg, &abinfo, sizeof(abinfo)) ? -EFAULT : 0;
+               state = (struct cs_state *)card->states[1];
+               if(state)
+               {
+                       dmabuf = &state->dmabuf;
+                       spin_lock_irqsave(&state->card->lock, flags);
+                       cs_update_ptr();
+                       abinfo.fragsize = dmabuf->fragsize;
+                       abinfo.fragstotal = dmabuf->numfrag;
+               /*
+                * for mmap we always have total space available
+                */
+                       if (dmabuf->mapped)
+                               abinfo.bytes = dmabuf->dmasize;
+                       else
+                               abinfo.bytes = dmabuf->dmasize - dmabuf->count;
+
+                       abinfo.fragments = abinfo.bytes >> dmabuf->fragshift;
+                       spin_unlock_irqrestore(&state->card->lock, flags);
+                       return copy_to_user((void *)arg, &abinfo, sizeof(abinfo)) ? -EFAULT : 0;
+               }
+               return -ENODEV;
 
        case SNDCTL_DSP_GETISPACE:
-               if (!(file->f_mode & FMODE_READ))
-                       return -EINVAL;
-               if (!dmabuf->enable && (val = prog_dmabuf(state, 1)) != 0)
-                       return val;
-               spin_lock_irqsave(&state->card->lock, flags);
-               cs_update_ptr(state);
-               abinfo.fragsize = dmabuf->fragsize;
-               abinfo.bytes = dmabuf->count;
-               abinfo.fragstotal = dmabuf->numfrag;
-               abinfo.fragments = abinfo.bytes >> dmabuf->fragshift;
-               spin_unlock_irqrestore(&state->card->lock, flags);
-               return copy_to_user((void *)arg, &abinfo, sizeof(abinfo)) ? -EFAULT : 0;
+               state = (struct cs_state *)card->states[0];
+               if(state)
+               {
+                       dmabuf = &state->dmabuf;
+                       spin_lock_irqsave(&state->card->lock, flags);
+                       cs_update_ptr();
+                       abinfo.fragsize = dmabuf->fragsize/dmabuf->divisor;
+                       abinfo.bytes = dmabuf->count/dmabuf->divisor;
+                       abinfo.fragstotal = dmabuf->numfrag;
+                       abinfo.fragments = abinfo.bytes >> dmabuf->fragshift;
+                       spin_unlock_irqrestore(&state->card->lock, flags);
+                       return copy_to_user((void *)arg, &abinfo, sizeof(abinfo)) ? -EFAULT : 0;
+               }
+               return -ENODEV;
 
        case SNDCTL_DSP_NONBLOCK:
                file->f_flags |= O_NONBLOCK;
@@ -1388,58 +2661,106 @@ static int cs_ioctl(struct inode *inode, struct file *file, unsigned int cmd, un
 
        case SNDCTL_DSP_GETTRIGGER:
                val = 0;
-               if (file->f_mode & FMODE_READ && dmabuf->enable)
-                       val |= PCM_ENABLE_INPUT;
-               if (file->f_mode & FMODE_WRITE && dmabuf->enable)
-                       val |= PCM_ENABLE_OUTPUT;
+               CS_DBGOUT(CS_IOCTL, 2, printk("cs46xx: DSP_GETTRIGGER()+\n") );
+               if (file->f_mode & FMODE_WRITE)
+               {
+                       state = (struct cs_state *)card->states[1];
+                       if(state)
+                       {
+                               dmabuf = &state->dmabuf;
+                               if(dmabuf->enable & DAC_RUNNING)
+                                       val |= PCM_ENABLE_INPUT;
+                       }
+               }
+               if (file->f_mode & FMODE_READ)
+               {
+                       if(state)
+                       {
+                               state = (struct cs_state *)card->states[0];
+                               dmabuf = &state->dmabuf;
+                               if(dmabuf->enable & ADC_RUNNING)
+                                       val |= PCM_ENABLE_OUTPUT;
+                       }
+               }
+               CS_DBGOUT(CS_IOCTL, 2, printk("cs46xx: DSP_GETTRIGGER()- val=0x%x\n",val) );
                return put_user(val, (int *)arg);
 
        case SNDCTL_DSP_SETTRIGGER:
                if (get_user(val, (int *)arg))
                        return -EFAULT;
                if (file->f_mode & FMODE_READ) {
-                       if (val & PCM_ENABLE_INPUT) {
-                               if (!dmabuf->ready && (ret = prog_dmabuf(state, 1)))
-                                       return ret;
-                               start_adc(state);
-                       } else
-                               stop_adc(state);
+                       state = (struct cs_state *)card->states[0];
+                       if(state)
+                       {
+                               dmabuf = &state->dmabuf;
+                               if (val & PCM_ENABLE_INPUT) {
+                                       if (!dmabuf->ready && (ret = prog_dmabuf(state)))
+                                               return ret;
+                                       start_adc(state);
+                               } else
+                                       stop_adc(state);
+                       }
                }
                if (file->f_mode & FMODE_WRITE) {
-                       if (val & PCM_ENABLE_OUTPUT) {
-                               if (!dmabuf->ready && (ret = prog_dmabuf(state, 0)))
-                                       return ret;
-                               start_dac(state);
-                       } else
-                               stop_dac(state);
+                       state = (struct cs_state *)card->states[1];
+                       if(state)
+                       {
+                               dmabuf = &state->dmabuf;
+                               if (val & PCM_ENABLE_OUTPUT) {
+                                       if (!dmabuf->ready && (ret = prog_dmabuf(state)))
+                                               return ret;
+                                       start_dac(state);
+                               } else
+                                       stop_dac(state);
+                       }
                }
                return 0;
 
        case SNDCTL_DSP_GETIPTR:
-               if (!(file->f_mode & FMODE_READ))
-                       return -EINVAL;
-               spin_lock_irqsave(&state->card->lock, flags);
-               cs_update_ptr(state);
-               cinfo.bytes = dmabuf->total_bytes;
-               cinfo.blocks = dmabuf->count >> dmabuf->fragshift;
-               cinfo.ptr = dmabuf->hwptr;
-               if (dmabuf->mapped)
-                       dmabuf->count &= dmabuf->fragsize-1;
-               spin_unlock_irqrestore(&state->card->lock, flags);
-               return copy_to_user((void *)arg, &cinfo, sizeof(cinfo));
+               state = (struct cs_state *)card->states[0];
+               if(state)
+               {
+                       dmabuf = &state->dmabuf;
+                       spin_lock_irqsave(&state->card->lock, flags);
+                       cs_update_ptr();
+                       cinfo.bytes = dmabuf->total_bytes/dmabuf->divisor;
+                       cinfo.blocks = dmabuf->count/dmabuf->divisor >> dmabuf->fragshift;
+                       cinfo.ptr = dmabuf->hwptr/dmabuf->divisor;
+                       spin_unlock_irqrestore(&state->card->lock, flags);
+                       return copy_to_user((void *)arg, &cinfo, sizeof(cinfo));
+               }
+               return -ENODEV;
 
        case SNDCTL_DSP_GETOPTR:
-               if (!(file->f_mode & FMODE_WRITE))
-                       return -EINVAL;
-               spin_lock_irqsave(&state->card->lock, flags);
-               cs_update_ptr(state);
-               cinfo.bytes = dmabuf->total_bytes;
-               cinfo.blocks = dmabuf->count >> dmabuf->fragshift;
-               cinfo.ptr = dmabuf->hwptr;
-               if (dmabuf->mapped)
-                       dmabuf->count &= dmabuf->fragsize-1;
-               spin_unlock_irqrestore(&state->card->lock, flags);
-               return copy_to_user((void *)arg, &cinfo, sizeof(cinfo));
+               state = (struct cs_state *)card->states[1];
+               if(state)
+               {
+                       dmabuf = &state->dmabuf;
+                       spin_lock_irqsave(&state->card->lock, flags);
+                       cs_update_ptr();
+                       cinfo.bytes = dmabuf->total_bytes;
+                       if (dmabuf->mapped)
+                       {
+                               cinfo.blocks = (cinfo.bytes >> dmabuf->fragshift) 
+                                                       - dmabuf->blocks;
+                               CS_DBGOUT(CS_PARMS, 8, 
+                                       printk("total_bytes=%d blocks=%d dmabuf->blocks=%d\n", 
+                                       cinfo.bytes,cinfo.blocks,dmabuf->blocks) );
+                               dmabuf->blocks = cinfo.bytes >> dmabuf->fragshift;
+                       }
+                       else
+                       {
+                               cinfo.blocks = dmabuf->count >> dmabuf->fragshift;
+                       }
+                       cinfo.ptr = dmabuf->hwptr;
+
+                       CS_DBGOUT(CS_PARMS, 4, printk(
+                           "cs46xx: GETOPTR bytes=%d blocks=%d ptr=%d\n",
+                               cinfo.bytes,cinfo.blocks,cinfo.ptr) );
+                       spin_unlock_irqrestore(&state->card->lock, flags);
+                       return copy_to_user((void *)arg, &cinfo, sizeof(cinfo));
+               }
+               return -ENODEV;
 
        case SNDCTL_DSP_SETDUPLEX:
                return -EINVAL;
@@ -1447,21 +2768,47 @@ static int cs_ioctl(struct inode *inode, struct file *file, unsigned int cmd, un
        case SNDCTL_DSP_GETODELAY:
                if (!(file->f_mode & FMODE_WRITE))
                        return -EINVAL;
-               spin_lock_irqsave(&state->card->lock, flags);
-               cs_update_ptr(state);
-               val = dmabuf->count;
-               spin_unlock_irqrestore(&state->card->lock, flags);
+               state = (struct cs_state *)card->states[1];
+               if(state)
+               {
+                       dmabuf = &state->dmabuf;
+                       spin_lock_irqsave(&state->card->lock, flags);
+                       cs_update_ptr();
+                       val = dmabuf->count;
+                       spin_unlock_irqrestore(&state->card->lock, flags);
+               }
+               else
+                       val = 0;
                return put_user(val, (int *)arg);
 
        case SOUND_PCM_READ_RATE:
-               return put_user(dmabuf->rate, (int *)arg);
+               state = (struct cs_state *)card->states[0];
+               if(state)
+               {
+                       dmabuf = &state->dmabuf;
+                       return put_user(dmabuf->rate, (int *)arg);
+               }
+               return put_user(0, (int *)arg);
+               
 
        case SOUND_PCM_READ_CHANNELS:
-               return put_user((dmabuf->fmt & CS_FMT_STEREO) ? 2 : 1,
+               state = (struct cs_state *)card->states[0];
+               if(state)
+               {
+                       dmabuf = &state->dmabuf;
+                       return put_user((dmabuf->fmt & CS_FMT_STEREO) ? 2 : 1,
                                (int *)arg);
+               }
+               return put_user(0, (int *)arg);
 
        case SOUND_PCM_READ_BITS:
-               return put_user(AFMT_S16_LE, (int *)arg);
+               state = (struct cs_state *)card->states[0];
+               if(state)
+               {
+                       dmabuf = &state->dmabuf;
+                       return put_user(AFMT_S16_LE | AFMT_U8, (int *)arg);
+               }
+               return put_user(0, (int *)arg);
 
        case SNDCTL_DSP_MAPINBUF:
        case SNDCTL_DSP_MAPOUTBUF:
@@ -1477,20 +2824,22 @@ static int cs_ioctl(struct inode *inode, struct file *file, unsigned int cmd, un
 /*
  *     AMP control - null AMP
  */
-
 static void amp_none(struct cs_card *card, int change)
-{      
+{      
 }
 
 /*
  *     Crystal EAPD mode
  */
-
 static void amp_voyetra(struct cs_card *card, int change)
 {
-       /* Manage the EAPD bit on the Crystal 4297 and the Analog AD1885 */
+       /* Manage the EAPD bit on the Crystal 4297 
+          and the Analog AD1885 */
+          
        int old=card->amplifier;
-
+       
        card->amplifier+=change;
        if(card->amplifier && !old)
        {
@@ -1509,14 +2858,15 @@ static void amp_voyetra(struct cs_card *card, int change)
 }
 
 
+
 /*
  *     Untested
  */
-#if 0
 static void amp_voyetra_4294(struct cs_card *card, int change)
 {
        struct ac97_codec *c=card->ac97_codec[0];
-
+       
        card->amplifier+=change;
 
        if(card->amplifier)
@@ -1532,7 +2882,6 @@ static void amp_voyetra_4294(struct cs_card *card, int change)
                cs_ac97_set(c, 0x54, cs_ac97_get(c, 0x54) | 0x0180);
        }
 }
-#endif
 
 /*
  *     Handle the CLKRUN on a thinkpad. We must disable CLKRUN support
@@ -1542,7 +2891,7 @@ static void amp_voyetra_4294(struct cs_card *card, int change)
  *     Linuxcare. Perhaps one day Crystal will document their chips well
  *     enough to make them useful.
  */
-
 static void clkrun_hack(struct cs_card *card, int change)
 {
        struct pci_dev *acpi_dev;
@@ -1550,20 +2899,19 @@ static void clkrun_hack(struct cs_card *card, int change)
        u8 pp;
        unsigned long port;
        int old=card->amplifier;
-
-       card->amplifier += change;
-
+       
+       card->amplifier+=change;
+       
        acpi_dev = pci_find_device(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371AB_3, NULL);
        if(acpi_dev == NULL)
                return;         /* Not a thinkpad thats for sure */
 
-
-       /* Find the control port */             
+       /* Find the control port */             
        pci_read_config_byte(acpi_dev, 0x41, &pp);
-       port = pp<<8;
+       port=pp<<8;
 
-       /* Read ACPI port */    
-       control = inw(port+0x10);
+       /* Read ACPI port */    
+       control=inw(port+0x10);
 
        /* Flip CLKRUN off while running */
        if(!card->amplifier && old)
@@ -1572,144 +2920,227 @@ static void clkrun_hack(struct cs_card *card, int change)
                outw(control&~0x2000, port+0x10);
 }
 
-
+       
 static int cs_open(struct inode *inode, struct file *file)
 {
-       int i = 0;
-       struct cs_card *card;
+       struct cs_card *card = devs;
        struct cs_state *state = NULL;
        struct dmabuf *dmabuf = NULL;
-       struct list_head *list;
+       int ret=0;
 
-#ifndef CS46XX_ENABLE_RECORD
-       if (file->f_mode & FMODE_READ)
-               return -ENODEV;
-#endif
+       CS_DBGOUT(CS_OPEN | CS_FUNCTION, 2, printk("cs46xx: cs_open()+ file=0x%x %s %s\n",
+               (unsigned)file, file->f_mode & FMODE_WRITE ? "FMODE_WRITE" : "",
+               file->f_mode & FMODE_READ ? "FMODE_READ" : "") );
 
-       for (list = devs.next; ; list = list->next) {
-               if (list == &devs)
-                       return -ENODEV;
-               card = list_entry(list, struct cs_card, devs);
-               for (i = 0; i < NR_HW_CH; i++) {
-                       if (card->states[i] == NULL) {
-                               state = card->states[i] = (struct cs_state *)
-                                       kmalloc(sizeof(struct cs_state), GFP_KERNEL);
-                               if (state == NULL)
-                                       return -ENOMEM;
-                               memset(state, 0, sizeof(struct cs_state));
-                               dmabuf = &state->dmabuf;
-                               dmabuf->pbuf = (void *)get_free_page(GFP_KERNEL);
-                               if(dmabuf->pbuf==NULL)
-                               {
-                                       kfree(state);
-                                       card->states[i]=NULL;
-                                       return -ENOMEM;
-                               }
-                               goto found_virt;
+       /*
+        * hardcode state[0] for capture, [1] for playback
+        */
+       if(file->f_mode & FMODE_READ)
+       {
+               CS_DBGOUT(CS_WAVE_READ, 2, printk("cs46xx: cs_open() FMODE_READ\n") );
+               if (card->states[0] == NULL) {
+                       state = card->states[0] = (struct cs_state *)
+                               kmalloc(sizeof(struct cs_state), GFP_KERNEL);
+                       if (state == NULL)
+                               return -ENOMEM;
+                       memset(state, 0, sizeof(struct cs_state));
+                       dmabuf = &state->dmabuf;
+                       dmabuf->pbuf = (void *)get_free_page(GFP_KERNEL | GFP_DMA);
+                       if(dmabuf->pbuf==NULL)
+                       {
+                               kfree(state);
+                               card->states[0]=NULL;
+                               return -ENOMEM;
                        }
                }
-       }
-       /* no more virtual channel avaiable */
-       if (!state)
-               return -ENODEV;
-
- found_virt:
-       /* found a free virtual channel, allocate hardware channels */
-       if(file->f_mode & FMODE_READ)
+               else
+               {
+                       state = card->states[0];
+                       if(state->open_mode & FMODE_READ)
+                               return -EBUSY;
+               }
                dmabuf->channel = card->alloc_rec_pcm_channel(card);
-       else
-               dmabuf->channel = card->alloc_pcm_channel(card);
-               
-       if (dmabuf->channel == NULL) {
-               kfree (card->states[i]);
-               card->states[i] = NULL;;
-               return -ENODEV;
-       }
+                       
+               if (dmabuf->channel == NULL) {
+                       kfree (card->states[0]);
+                       card->states[0] = NULL;;
+                       return -ENODEV;
+               }
 
-       /* Now turn on external AMP if needed */
-       state->card = card;
-       state->card->active_ctrl(state->card,1);
-       state->card->amplifier_ctrl(state->card,1);
+               /* Now turn on external AMP if needed */
+               state->card = card;
+               state->card->active_ctrl(state->card,1);
+               state->card->amplifier_ctrl(state->card,1);
+               
+               dmabuf->channel->state = state;
+               /* initialize the virtual channel */
+               state->virt = 0;
+               state->magic = CS_STATE_MAGIC;
+               init_waitqueue_head(&dmabuf->wait);
+               init_MUTEX(&state->open_sem);
+               file->private_data = card;
 
-       dmabuf->channel->state = state;
-       /* initialize the virtual channel */
-       state->virt = i;
-       state->magic = CS_STATE_MAGIC;
-       init_waitqueue_head(&dmabuf->wait);
-       init_MUTEX(&state->open_sem);
-       file->private_data = state;
+               down(&state->open_sem);
 
-       down(&state->open_sem);
+               /* set default sample format. According to OSS Programmer's Guide  /dev/dsp
+                  should be default to unsigned 8-bits, mono, with sample rate 8kHz and
+                  /dev/dspW will accept 16-bits sample */
 
-       /* set default sample format. According to OSS Programmer's Guide  /dev/dsp
-          should be default to unsigned 8-bits, mono, with sample rate 8kHz and
-          /dev/dspW will accept 16-bits sample */
-       if (file->f_mode & FMODE_WRITE) {
-               /* Output is 16bit only mono or stereo */
+               /* Default input is 8bit mono */
                dmabuf->fmt &= ~CS_FMT_MASK;
-               dmabuf->fmt |= CS_FMT_16BIT;
+               dmabuf->type = CS_TYPE_ADC;
                dmabuf->ossfragshift = 0;
                dmabuf->ossmaxfrags  = 0;
                dmabuf->subdivision  = 0;
-               cs_set_dac_rate(state, 8000);
+               cs_set_adc_rate(state, 8000);
+               cs_set_divisor(dmabuf);
+
+               state->open_mode |= FMODE_READ;
+               up(&state->open_sem);
+               MOD_INC_USE_COUNT;
        }
+       if(file->f_mode & FMODE_WRITE)
+       {
+               CS_DBGOUT(CS_OPEN, 2, printk("cs46xx: cs_open() FMODE_WRITE\n") );
+               if (card->states[1] == NULL) {
+                       state = card->states[1] = (struct cs_state *)
+                               kmalloc(sizeof(struct cs_state), GFP_KERNEL);
+                       if (state == NULL)
+                               return -ENOMEM;
+                       memset(state, 0, sizeof(struct cs_state));
+                       dmabuf = &state->dmabuf;
+                       dmabuf->pbuf = (void *)get_free_page(GFP_KERNEL | GFP_DMA);
+                       if(dmabuf->pbuf==NULL)
+                       {
+                               kfree(state);
+                               card->states[1]=NULL;
+                               return -ENOMEM;
+                       }
+               }
+               else
+               {
+                       state = card->states[1];
+                       if(state->open_mode & FMODE_WRITE)
+                               return -EBUSY;
+               }
+               dmabuf->channel = card->alloc_pcm_channel(card);
+                       
+               if (dmabuf->channel == NULL) {
+                       kfree (card->states[1]);
+                       card->states[1] = NULL;;
+                       return -ENODEV;
+               }
 
-       if (file->f_mode & FMODE_READ) {
-               /* Input is 16bit stereo only */
+               /* Now turn on external AMP if needed */
+               state->card = card;
+               state->card->active_ctrl(state->card,1);
+               state->card->amplifier_ctrl(state->card,1);
+               
+               dmabuf->channel->state = state;
+               /* initialize the virtual channel */
+               state->virt = 1;
+               state->magic = CS_STATE_MAGIC;
+               init_waitqueue_head(&dmabuf->wait);
+               init_MUTEX(&state->open_sem);
+               file->private_data = card;
+
+               down(&state->open_sem);
+
+               /* set default sample format. According to OSS Programmer's Guide  /dev/dsp
+                  should be default to unsigned 8-bits, mono, with sample rate 8kHz and
+                  /dev/dspW will accept 16-bits sample */
+
+               /* Default output is 8bit mono. */
                dmabuf->fmt &= ~CS_FMT_MASK;
-               dmabuf->fmt |= CS_FMT_16BIT|CS_FMT_STEREO;
+               dmabuf->type = CS_TYPE_DAC;
                dmabuf->ossfragshift = 0;
                dmabuf->ossmaxfrags  = 0;
                dmabuf->subdivision  = 0;
-               cs_set_adc_rate(state, 8000);
-       }
-
-       state->open_mode |= file->f_mode & (FMODE_READ | FMODE_WRITE);
-       up(&state->open_sem);
+               cs_set_dac_rate(state, 8000);
+               cs_set_divisor(dmabuf);
 
+               state->open_mode |= FMODE_WRITE;
+               up(&state->open_sem);
+               MOD_INC_USE_COUNT;
+               if((ret = prog_dmabuf(state)))
+                       return ret;
+       }
 
-       MOD_INC_USE_COUNT;
+       CS_DBGOUT(CS_OPEN | CS_FUNCTION, 2, printk("cs46xx: cs_open()- 0\n") );
        return 0;
 }
 
 static int cs_release(struct inode *inode, struct file *file)
 {
-       struct cs_state *state = (struct cs_state *)file->private_data;
-       struct dmabuf *dmabuf = &state->dmabuf;
-
-       if (file->f_mode & FMODE_WRITE) {
-               /* FIXME :.. */
-               cs_clear_tail(state);
-               drain_dac(state, file->f_flags & O_NONBLOCK);
+       struct cs_card *card = (struct cs_card *)file->private_data;
+       struct dmabuf *dmabuf;
+       struct cs_state *state;
+       CS_DBGOUT(CS_RELEASE | CS_FUNCTION, 2, printk("cs46xx: cs_release()+ file=0x%x %s %s\n",
+               (unsigned)file, file->f_mode & FMODE_WRITE ? "FMODE_WRITE" : "",
+               file->f_mode & FMODE_READ ? "FMODE_READ" : "") );
+
+       if (!(file->f_mode & (FMODE_WRITE | FMODE_READ)))
+       {
+               return -EINVAL;
        }
+       state = card->states[1];
+       if(state)
+       {
+               if ( (state->open_mode & FMODE_WRITE) & (file->f_mode & FMODE_WRITE) )
+               {
+                       CS_DBGOUT(CS_RELEASE, 2, printk("cs46xx: cs_release() FMODE_WRITE\n") );
+                       dmabuf = &state->dmabuf;
+                       cs_clear_tail(state);
+                       drain_dac(state, file->f_flags & O_NONBLOCK);
+                       /* stop DMA state machine and free DMA buffers/channels */
+                       down(&state->open_sem);
+                       stop_dac(state);
+                       dealloc_dmabuf(state);
+                       state->card->free_pcm_channel(state->card, dmabuf->channel->num);
+                       free_page((unsigned long)state->dmabuf.pbuf);
 
-       /* stop DMA state machine and free DMA buffers/channels */
-       down(&state->open_sem);
+                       /* we're covered by the open_sem */
+                       up(&state->open_sem);
+                       state->card->states[state->virt] = NULL;
+                       state->open_mode &= (~file->f_mode) & (FMODE_READ|FMODE_WRITE);
 
-       if (file->f_mode & FMODE_WRITE) {
-               stop_dac(state);
-               dealloc_dmabuf(state);
-               state->card->free_pcm_channel(state->card, dmabuf->channel->num);
-       }
-       if (file->f_mode & FMODE_READ) {
-               stop_adc(state);
-               dealloc_dmabuf(state);
-               state->card->free_pcm_channel(state->card, dmabuf->channel->num);
+                       /* Now turn off external AMP if needed */
+                       state->card->amplifier_ctrl(state->card, -1);
+                       state->card->active_ctrl(state->card, -1);
+
+                       kfree(state);
+               }
+               MOD_DEC_USE_COUNT;
        }
 
-       free_page((unsigned long)state->dmabuf.pbuf);
+       state = card->states[0];
+       if(state)
+       {
+               if ( (state->open_mode & FMODE_READ) & (file->f_mode & FMODE_READ) )
+               {
+                       CS_DBGOUT(CS_RELEASE, 2, printk("cs46xx: cs_release() FMODE_READ\n") );
+                       dmabuf = &state->dmabuf;
+                       down(&state->open_sem);
+                       stop_adc(state);
+                       dealloc_dmabuf(state);
+                       state->card->free_pcm_channel(state->card, dmabuf->channel->num);
+                       free_page((unsigned long)state->dmabuf.pbuf);
+
+                       /* we're covered by the open_sem */
+                       up(&state->open_sem);
+                       state->card->states[state->virt] = NULL;
+                       state->open_mode &= (~file->f_mode) & (FMODE_READ|FMODE_WRITE);
 
-       /* we're covered by the open_sem */
-       up(&state->open_sem);
-       state->card->states[state->virt] = NULL;
-       state->open_mode &= (~file->f_mode) & (FMODE_READ|FMODE_WRITE);
+                       /* Now turn off external AMP if needed */
+                       state->card->amplifier_ctrl(state->card, -1);
+                       state->card->active_ctrl(state->card, -1);
 
-       /* Now turn off external AMP if needed */
-       state->card->amplifier_ctrl(state->card, -1);
-       state->card->active_ctrl(state->card, -1);
+                       kfree(state);
+               }
+               MOD_DEC_USE_COUNT;
+       }
 
-       kfree(state);
-       MOD_DEC_USE_COUNT;
+       CS_DBGOUT(CS_FUNCTION | CS_RELEASE, 2, printk("cs46xx: cs_release()- 0\n") );
        return 0;
 }
 
@@ -1826,11 +3257,13 @@ static void cs_ac97_set(struct ac97_codec *dev, u8 reg, u16 val)
 {
        struct cs_card *card = dev->private_data;
        int count;
-       int val2;
+       int val2 = 0;
        
-       if (reg == AC97_CD_VOL)
+       if(reg == AC97_CD_VOL)
+       {
                val2 = cs_ac97_get(dev, AC97_CD_VOL);
-
+       }
+       
        /*
         *  1. Write ACCAD = Command Address Register = 46Ch for AC97 register address
         *  2. Write ACCDA = Command Data Register = 470h    for data to write to AC97
@@ -1887,24 +3320,27 @@ static void cs_ac97_set(struct ac97_codec *dev, u8 reg, u16 val)
         *      When the CD mute changes we adjust the power level if the
         *      CD was a valid input.
         *
-        *      We also check for CD volume != 0, as the CD mute isn't
-        *      normally tweaked from userspace.
+        *      We also check for CD volume != 0, as the CD mute isn't
+        *      normally tweaked from userspace.
         */
-
+        
        /* CD mute change ? */
-       if (reg == AC97_CD_VOL) {
+       
+       if(reg==AC97_CD_VOL)
+       {
                /* Mute bit change ? */
-               if ((val2^val) & 0x8000 || ((val2 == 0x1f1f || val == 0x1f1f) && val2 != val)) {
+               if((val2^val)&0x8000 || ((val2 == 0x1f1f || val == 0x1f1f) && val2 != val))
+               {
                        /* This is a hack but its cleaner than the alternatives.
                           Right now card->ac97_codec[0] might be NULL as we are
                           still doing codec setup. This does an early assignment
                           to avoid the problem if it occurs */
-
-                       if (card->ac97_codec[0] == NULL)
-                               card->ac97_codec[0] = dev;
-
+                          
+                       if(card->ac97_codec[0]==NULL)
+                               card->ac97_codec[0]=dev;
+                               
                        /* Mute on */
-                       if(val & 0x8000 || val == 0x1f1f)
+                       if(val&0x8000 || val == 0x1f1f)
                                card->amplifier_ctrl(card, -1);
                        else /* Mute off power on */
                                card->amplifier_ctrl(card, 1);
@@ -1919,19 +3355,13 @@ static int cs_open_mixdev(struct inode *inode, struct file *file)
 {
        int i;
        int minor = MINOR(inode->i_rdev);
-       struct cs_card *card;
-       struct list_head *list;
+       struct cs_card *card = devs;
 
-       for (list = devs.next; ; list = list->next) {
-               if (list == &devs)
-                       return -ENODEV;
-               card = list_entry(list, struct cs_card, devs);
+       for (card = devs; card != NULL; card = card->next)
                for (i = 0; i < NR_AC97; i++)
                        if (card->ac97_codec[i] != NULL &&
                            card->ac97_codec[i]->dev_mixer == minor)
                                goto match;
-       }
-
 
        if (!card)
                return -ENODEV;
@@ -1940,31 +3370,27 @@ static int cs_open_mixdev(struct inode *inode, struct file *file)
        file->private_data = card->ac97_codec[i];
 
        card->active_ctrl(card,1);
+       MOD_INC_USE_COUNT;
        return 0;
 }
 
 static int cs_release_mixdev(struct inode *inode, struct file *file)
 {
        int minor = MINOR(inode->i_rdev);
-       struct cs_card *card;
-       struct list_head *list;
+       struct cs_card *card = devs;
        int i;
        
-       for (list = devs.next; ; list = list->next) {
-               if (list == &devs)
-                       return -ENODEV;
-               card = list_entry(list, struct cs_card, devs);
+       for (card = devs; card != NULL; card = card->next)
                for (i = 0; i < NR_AC97; i++)
                        if (card->ac97_codec[i] != NULL &&
                            card->ac97_codec[i]->dev_mixer == minor)
                                goto match;
-       }
 
        if (!card)
                return -ENODEV;
 match:
        card->active_ctrl(card, -1);
-
+       MOD_DEC_USE_COUNT;
        return 0;
 }
 
@@ -1973,6 +3399,41 @@ static int cs_ioctl_mixdev(struct inode *inode, struct file *file, unsigned int
 {
        struct ac97_codec *codec = (struct ac97_codec *)file->private_data;
 
+#if CSDEBUG_INTERFACE
+        int val;
+
+       if(     (cmd == SOUND_MIXER_CS_GETDBGMASK) || 
+               (cmd == SOUND_MIXER_CS_SETDBGMASK) ||
+               (cmd == SOUND_MIXER_CS_GETDBGLEVEL) ||
+               (cmd == SOUND_MIXER_CS_SETDBGLEVEL) )
+       {
+           switch(cmd)
+           {
+
+               case SOUND_MIXER_CS_GETDBGMASK:
+                       return put_user(cs_debugmask, (unsigned long *)arg);
+               
+               case SOUND_MIXER_CS_GETDBGLEVEL:
+                       return put_user(cs_debuglevel, (unsigned long *)arg);
+
+               case SOUND_MIXER_CS_SETDBGMASK:
+                       if (get_user(val, (unsigned long *)arg))
+                               return -EFAULT;
+                       cs_debugmask = val;
+                       return 0;
+
+               case SOUND_MIXER_CS_SETDBGLEVEL:
+                       if (get_user(val, (unsigned long *)arg))
+                               return -EFAULT;
+                       cs_debuglevel = val;
+                       return 0;
+               default:
+                       CS_DBGOUT(CS_ERROR, 1, printk(KERN_INFO 
+                               "cs4281: mixer_ioctl(): ERROR unknown debug cmd\n") );
+                       return 0;
+           }
+       }
+#endif
        return codec->mixer_ioctl(codec, cmd, arg);
 }
 
@@ -2017,7 +3478,6 @@ static int __init cs_ac97_init(struct cs_card *card)
                }
                
                card->ac97_features = eid;
-                               
                        
                if ((codec->dev_mixer = register_sound_mixer(&cs_mixer_fops, -1)) < 0) {
                        printk(KERN_ERR "cs461x: couldn't register mixer!\n");
@@ -2034,47 +3494,35 @@ static int __init cs_ac97_init(struct cs_card *card)
        return num_ac97;
 }
 
-/* Boot the card
+/*
+ * load the static image into the DSP
  */
-static void __init cs461x_download(struct cs_card *card, u32 *src, unsigned long offset, unsigned long len)
-{
-       unsigned long counter;
-       void *dst;
-       
-       dst = card->ba1.idx[(offset>>16)&3];
-       dst += (offset&0xFFFF)<<2;
-       for(counter=0;counter<len;counter+=4)
-               writel(*src++, dst+counter);
-}
-
-/* 3*1024 parameter, 3.5*1024 sample, 2*3.5*1024 code */
-#define BA1_DWORD_SIZE         (13 * 1024 + 512)
-#define BA1_MEMORY_COUNT       3
-
-struct BA1struct {
-       struct {
-               unsigned long offset;
-               unsigned long size;
-       } memory[BA1_MEMORY_COUNT];
-       unsigned int map[BA1_DWORD_SIZE];
-};
-
 #include "cs461x_image.h"
-
-static void __init cs461x_download_image(struct cs_card *card)
+static void cs461x_download_image(struct cs_card *card)
 {
-       int idx;
-       unsigned long offset = 0;
-       
-       for (idx = 0; idx < BA1_MEMORY_COUNT; idx++) {
-               cs461x_download(card,&BA1Struct.map[offset],
-                              BA1Struct.memory[idx].offset,
-                              BA1Struct.memory[idx].size);
-               offset += BA1Struct.memory[idx].size >> 2;
-       }       
+    unsigned i, j, temp1, temp2, offset, count;
+    unsigned char *pBA1 = ioremap(card->ba1_addr, 0x40000);
+    for( i=0; i < CLEAR__COUNT; i++)
+    {
+        offset = ClrStat[i].BA1__DestByteOffset;
+        count  = ClrStat[i].BA1__SourceSize;
+        for(  temp1 = offset; temp1<(offset+count); temp1+=4 );
+              writel(0, pBA1+temp1);
+    }
+
+    for(i=0; i<FILL__COUNT; i++)
+    {
+        temp2 = FillStat[i].Offset;
+        for(j=0; j<(FillStat[i].Size)/4; j++)
+        {
+            temp1 = (FillStat[i]).pFill[j];
+            writel(temp1, pBA1+temp2+j*4);
+        }
+    }
+    iounmap(pBA1);
 }
 
+
 /*
  *  Chip reset
  */
@@ -2278,7 +3726,7 @@ static void cs461x_proc_stop(struct cs_card *card)
 
 
 
-static int __init cs_hardware_init(struct cs_card *card)
+static int cs_hardware_init(struct cs_card *card)
 {
        unsigned long end_time;
        unsigned int tmp;
@@ -2320,7 +3768,7 @@ static int __init cs_hardware_init(struct cs_card *card)
         *  generating bit clock (so we don't try to start the PLL without an
         *  input clock).
         */
-       mdelay(5);              /* 1 should be enough ?? */
+       mdelay(5);              /* 1 should be enough ?? (and pigs might fly) */
 
        /*
         *  Set the serial port timing configuration, so that
@@ -2501,14 +3949,15 @@ static int __init cs_hardware_init(struct cs_card *card)
 }
 
 /* install the driver, we do not allocate hardware channel nor DMA buffer now, they are defered 
-   until "ACCESS" time (in prog_dmabuf called by open/read/write/ioctl/mmap) */
-
-
+   untill "ACCESS" time (in prog_dmabuf called by open/read/write/ioctl/mmap) */
+   
+   
 /*
  *     Card subid table
  */
-
-struct cs_card_type {
+struct cs_card_type
+{
        u16 vendor;
        u16 id;
        char *name;
@@ -2516,11 +3965,10 @@ struct cs_card_type {
        void (*active)(struct cs_card *, int);
 };
 
-static struct cs_card_type __devinitdata cards[]={
+static struct cs_card_type __initdata cards[]={
        {0x1489, 0x7001, "Genius Soundmaker 128 value", amp_none, NULL},
        {0x5053, 0x3357, "Voyetra", amp_voyetra, NULL},
-       /* MI6020/21 use the same chipset as the Thinkpads, maybe needed */
-       {0x1071, 0x6003, "Mitac MI6020/21", amp_none, clkrun_hack},
+       {0x1071, 0x6003, "Mitac MI6020/21", amp_voyetra, NULL},
        /* Not sure if the 570 needs the clkrun hack */
        {PCI_VENDOR_ID_IBM, 0x0132, "Thinkpad 570", amp_none, clkrun_hack},
        {PCI_VENDOR_ID_IBM, 0x0153, "Thinkpad 600X/A20/T20", amp_none, clkrun_hack},
@@ -2529,10 +3977,41 @@ static struct cs_card_type __devinitdata cards[]={
        {0, 0, NULL, NULL, NULL}
 };
 
-static int __devinit cs_probe(struct pci_dev * pci_dev, const struct pci_device_id * id)
+#ifdef CS46XX_PM
+static int cs46xx_pm_callback(struct pm_dev *dev, pm_request_t rqst, void *data)
+{
+struct cs_state *state = (struct cs_state *) dev->data;
+
+       if (state) {
+               switch(rqst) {
+                       case PM_RESUME:
+                               printk( KERN_DEBUG "cs46xx: PM resume request\n");
+                               cs_hardware_init(state->card);
+                               break;
+                       case PM_SUSPEND:
+                               printk( KERN_DEBUG "cs46xx: PM suspend request\n");
+                               stop_dac(state);
+                               resync_dma_ptrs(state);
+                               break;
+               }
+       }
+
+return 0;
+}
+#endif
+
+static int __init cs_install(struct pci_dev *pci_dev)
 {
        struct cs_card *card;
        struct cs_card_type *cp = &cards[0];
+#ifdef CS46XX_PM
+       struct pm_dev *pmdev;
+#endif
+       u16 ss_card, ss_vendor;
+       
+       
+       pci_read_config_word(pci_dev, PCI_SUBSYSTEM_VENDOR_ID, &ss_vendor);
+       pci_read_config_word(pci_dev, PCI_SUBSYSTEM_ID, &ss_card);
 
        if ((card = kmalloc(sizeof(struct cs_card), GFP_KERNEL)) == NULL) {
                printk(KERN_ERR "cs461x: out of memory\n");
@@ -2540,8 +4019,8 @@ static int __devinit cs_probe(struct pci_dev * pci_dev, const struct pci_device_
        }
        memset(card, 0, sizeof(*card));
 
-       card->ba0_addr = pci_resource_start(pci_dev, 0);
-       card->ba1_addr = pci_resource_start(pci_dev, 1);
+       card->ba0_addr = pci_dev->resource[0].start&PCI_BASE_ADDRESS_MEM_MASK;
+       card->ba1_addr = pci_dev->resource[1].start&PCI_BASE_ADDRESS_MEM_MASK;
        card->pci_dev = pci_dev;
        card->irq = pci_dev->irq;
        card->magic = CS_CARD_MAGIC;
@@ -2557,10 +4036,10 @@ static int __devinit cs_probe(struct pci_dev * pci_dev, const struct pci_device_
        card->free_pcm_channel = cs_free_pcm_channel;
        card->amplifier_ctrl = amp_none;
        card->active_ctrl = amp_none;
-
-       while(cp->name)
+       
+       while (cp->name)
        {
-               if(cp->vendor == id->subvendor && cp->id == id->subdevice)
+               if(cp->vendor == ss_vendor && cp->id == ss_card)
                {
                        card->amplifier_ctrl = cp->amp;
                        if(cp->active)
@@ -2569,38 +4048,37 @@ static int __devinit cs_probe(struct pci_dev * pci_dev, const struct pci_device_
                }
                cp++;
        }
-       if(cp->name==NULL)
+       if (cp->name==NULL)
        {
-       printk(KERN_INFO "cs461x: Unknown card (%04X:%04X) at 0x%08lx/0x%08lx, IRQ %d\n",
-               id->subvendor, id->subdevice, card->ba0_addr, card->ba1_addr,  card->irq);
+               printk(KERN_INFO "cs461x: Unknown card (%04X:%04X) at 0x%08lx/0x%08lx, IRQ %d\n",
+                       ss_vendor, ss_card, card->ba0_addr, card->ba1_addr,  card->irq);
        }
        else
        {
                printk(KERN_INFO "cs461x: %s at 0x%08lx/0x%08lx, IRQ %d\n",
                        cp->name, card->ba0_addr, card->ba1_addr, card->irq);
        }
-
-       if(card->amplifier_ctrl==NULL)
+       
+       if (card->amplifier_ctrl==NULL)
        {
-               printk(KERN_ERR "cs461x: Unsupported configuration due to lack of documentation.\n");
-               kfree(card);
-               return -EINVAL;
-       }
-
-       if(external_amp == 1)
+               card->amplifier_ctrl = amp_none;
+               card->active_ctrl = clkrun_hack;
+       }               
+                      
+       if (external_amp == 1)
        {
                printk(KERN_INFO "cs461x: Crystal EAPD support forced on.\n");
                card->amplifier_ctrl = amp_voyetra;
        }
 
-       if(thinkpad == 1)
+       if (thinkpad == 1)
        {
                card->active_ctrl = clkrun_hack;
                printk(KERN_INFO "cs461x: Activating CLKRUN hack for Thinkpad.\n");
        }
-
+       
        card->active_ctrl(card, 1);
-
+       
        /* claim our iospace and irq */
        
        card->ba0 = ioremap(card->ba0_addr, CS461X_BA0_SIZE);
@@ -2609,6 +4087,13 @@ static int __devinit cs_probe(struct pci_dev * pci_dev, const struct pci_device_
        card->ba1.name.pmem = ioremap(card->ba1_addr + BA1_SP_PMEM, CS461X_BA1_PRG_SIZE);
        card->ba1.name.reg = ioremap(card->ba1_addr + BA1_SP_REG, CS461X_BA1_REG_SIZE);
        
+       CS_DBGOUT(CS_INIT, 4, printk("card->ba0=0x%.08x\n",(unsigned)card->ba0) );
+       CS_DBGOUT(CS_INIT, 4, printk("card->ba1=0x%.08x 0x%.08x 0x%.08x 0x%.08x\n",
+               (unsigned)card->ba1.name.data0,
+               (unsigned)card->ba1.name.data1,
+               (unsigned)card->ba1.name.pmem,
+               (unsigned)card->ba1.name.reg) );
+
        if(card->ba0 == 0 || card->ba1.name.data0 == 0 ||
                card->ba1.name.data1 == 0 || card->ba1.name.pmem == 0 ||
                card->ba1.name.reg == 0)
@@ -2624,19 +4109,34 @@ static int __devinit cs_probe(struct pci_dev * pci_dev, const struct pci_device_
                goto fail;
        }
 
-       if (cs_hardware_init(card)<0)
-       {
-               unregister_sound_dsp(card->dev_audio);
-               goto fail;
-       }
-
-       pci_set_drvdata (pci_dev, card);
-
-       list_add_tail(&card->devs, &devs);
+        /* register /dev/midi */
+        if((card->dev_midi = register_sound_midi(&cs_midi_fops, -1)) < 0)
+                printk(KERN_ERR "cs461x: unable to register midi\n");
+                
+        if (cs_hardware_init(card)<0)
+        {
+                unregister_sound_dsp(card->dev_audio);
+                if(card->dev_midi)
+                        unregister_sound_midi(card->dev_midi);
+                goto fail;
+        }
+        init_waitqueue_head(&card->midi.open_wait);
+        init_MUTEX(&card->midi.open_sem);
+        init_waitqueue_head(&card->midi.iwait);
+        init_waitqueue_head(&card->midi.owait);
+        card->next = devs;
+        devs = card;
+        cs461x_pokeBA0(card, BA0_MIDCR, MIDCR_MRST);   
+        cs461x_pokeBA0(card, BA0_MIDCR, 0);   
+        
+        card->active_ctrl(card, -1);
+#ifdef CS46XX_PM
+        pmdev = pm_register(PM_PCI_DEV, PM_PCI_ID(pci_dev), cs46xx_pm_callback);
+        if (pmdev)
+               pmdev->data = card;
+#endif
+        return 0;
 
-       card->active_ctrl(card, -1);
-       return 0;
-       
 fail:
        free_irq(card->irq, card);
 fail2:
@@ -2655,15 +4155,13 @@ fail2:
 
 }
 
-static void __devexit cs_remove(struct pci_dev * pci_dev)
+static void cs_remove(struct cs_card *card)
 {
-       struct cs_card * card = pci_get_drvdata (pci_dev);
        int i;
        unsigned int tmp;
-
-       list_del(&card->devs);
+       
        card->active_ctrl(card,1);
-
+       
        tmp = cs461x_peek(card, BA1_PFIE);
        tmp &= ~0x0000f03f;
        tmp |=  0x00000010;
@@ -2728,44 +4226,63 @@ static void __devexit cs_remove(struct pci_dev * pci_dev)
                        kfree (card->ac97_codec[i]);
                }
        unregister_sound_dsp(card->dev_audio);
+        if(card->dev_midi)
+                unregister_sound_midi(card->dev_midi);
        kfree(card);
 }
 
-MODULE_AUTHOR("Alan Cox <alan@redhat.com>, Jaroslav Kysela");
+MODULE_AUTHOR("Alan Cox <alan@redhat.com>, Jaroslav Kysela, <audio@crystal.cirrus.com>");
 MODULE_DESCRIPTION("Crystal SoundFusion Audio Support");
-MODULE_PARM(external_amp, "i");
-MODULE_PARM(thinkpad, "i");
-
-static struct pci_device_id cs_pci_tbl[] __devinitdata = {
-       { PCI_VENDOR_ID_CIRRUS, 0x6001, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
-       { PCI_VENDOR_ID_CIRRUS, 0x6003, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
-       { PCI_VENDOR_ID_CIRRUS, 0x6004, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
-       { 0, }
-};
-MODULE_DEVICE_TABLE (pci, cs_pci_tbl);
 
-static struct pci_driver cs_pci_driver = {
-       name:           "cs46xx",
-       id_table:       cs_pci_tbl,
-       probe:          cs_probe,
-       remove:         cs_remove,
-};
-
-static int __init cs_init(void)
+int __init cs_probe(void)
 {
+       struct pci_dev *pcidev = NULL;
        int foundone=0;
        
+       if (!pci_present())   /* No PCI bus in this machine! */
+               return -ENODEV;
+               
        printk(KERN_INFO "Crystal 4280/461x + AC97 Audio, version "
               DRIVER_VERSION ", " __TIME__ " " __DATE__ "\n");
 
-       return pci_module_init(&cs_pci_driver);
+       while( (pcidev = pci_find_device(PCI_VENDOR_ID_CIRRUS, 0x6001 , pcidev))!=NULL ) {
+               if (cs_install(pcidev)==0)
+                       foundone++;
+       }
+       while( (pcidev = pci_find_device(PCI_VENDOR_ID_CIRRUS, 0x6003 , pcidev))!=NULL ) {
+               if (cs_install(pcidev)==0)
+                       foundone++;
+       }
+       while( (pcidev = pci_find_device(PCI_VENDOR_ID_CIRRUS, 0x6004 , pcidev))!=NULL ) {
+               if (cs_install(pcidev)==0)
+                       foundone++;
+       }
+
+       printk(KERN_INFO "cs461x: Found %d audio device(s).\n",
+               foundone);
+       return foundone;
 }
 
-static void __exit cs_exit(void)
+int __init init_module(void)
 {
-       pci_unregister_driver(&cs_pci_driver);
+       if(cs_probe()==0)
+               printk(KERN_ERR "cs461x: No devices found.\n");
+       return 0;
 }
 
-module_init(cs_init);
-module_exit(cs_exit);
+void __exit cleanup_module (void)
+{
+       struct cs_card *next;
+#ifdef CS46XX_PM
+       pm_unregister_all(cs46xx_pm_callback);
+#endif
+       while(devs)
+       {
+               next=devs->next;
+               cs_remove(devs);
+               devs=next;
+       }
+}
 
+MODULE_PARM(external_amp, "i");
+MODULE_PARM(thinkpad, "i");
index d66d24e240e0e6da80c956f18bedbfb81c7c15cc..e970737d1c41b090b3ac5d74c5358713250114d8 100644 (file)
@@ -54,7 +54,6 @@
 /* Channels, such as play and record. I do only play a.t.m. XXX */
 #define NR_HW_CH       1
 
-static void ymfpci_free(ymfpci_t *codec);
 static int ymf_playback_trigger(ymfpci_t *codec, ymfpci_pcm_t *ypcm, int cmd);
 static int ymfpci_voice_alloc(ymfpci_t *codec, ymfpci_voice_type_t type,
     int pair, ymfpci_voice_t **rvoice);
@@ -62,23 +61,25 @@ static int ymfpci_voice_free(ymfpci_t *codec, ymfpci_voice_t *pvoice);
 static int ymf_playback_prepare(ymfpci_t *codec, struct ymf_state *state);
 static int ymf_state_alloc(ymfpci_t *unit, int nvirt, int instance);
 
-static ymfpci_t *ymf_devs = NULL;
+static LIST_HEAD(ymf_devs);
 
 /*
  *  constants
  */
 
-static struct ymf_devid {
-       int id;
-       char *name;
-} ymf_devv[] = {
-       { PCI_DEVICE_ID_YAMAHA_724,  "YMF724" },
-       { PCI_DEVICE_ID_YAMAHA_724F, "YMF724F" },
-       { PCI_DEVICE_ID_YAMAHA_740,  "YMF740" },
-       { PCI_DEVICE_ID_YAMAHA_740C, "YMF740C" },
-       { PCI_DEVICE_ID_YAMAHA_744,  "YMF744" },
-       { PCI_DEVICE_ID_YAMAHA_754,  "YMF754" },
+static struct pci_device_id ymf_id_tbl[] __devinitdata = {
+#define DEV(v, d, data) \
+  { PCI_VENDOR_ID_##v, PCI_DEVICE_ID_##v##_##d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, (unsigned long)data }
+       DEV (YAMAHA, 724,  "YMF724"),
+       DEV (YAMAHA, 724F, "YMF724F"),
+       DEV (YAMAHA, 740,  "YMF740"),
+       DEV (YAMAHA, 740C, "YMF740C"),
+       DEV (YAMAHA, 744,  "YMF744"),
+       DEV (YAMAHA, 754,  "YMF754"),
+#undef DEV
+       { }
 };
+MODULE_DEVICE_TABLE(pci, ymf_id_tbl);
 
 /*
  * Mindlessly copied from cs46xx XXX
@@ -181,7 +182,7 @@ static u16 ymfpci_codec_read(struct ac97_codec *dev, u8 reg)
        ymfpci_writew(codec, YDSXGR_AC97CMDADR, YDSXG_AC97READCMD | reg);
        if (ymfpci_codec_ready(codec, 0, 0))
                return ~0;
-       if (codec->device_id == PCI_DEVICE_ID_YAMAHA_744 && codec->rev < 2) {
+       if (codec->pci->device == PCI_DEVICE_ID_YAMAHA_744 && codec->rev < 2) {
                int i;
                for (i = 0; i < 600; i++)
                        ymfpci_readw(codec, YDSXGR_PRISTATUSDATA);
@@ -1870,7 +1871,7 @@ static int ymf_ioctl(struct inode *inode, struct file *file,
                return -ENOTTY;
 
        default:
-       /* P3 */ printk("ymfpci: ioctl cmd 0x%x\n", cmd);
+       /* P3 */ printk(KERN_WARNING "ymfpci: unknown ioctl cmd 0x%x\n", cmd);
                /*
                 * Some programs mix up audio devices and ioctls
                 * or perhaps they expect "universal" ioctls,
@@ -1883,6 +1884,7 @@ static int ymf_ioctl(struct inode *inode, struct file *file,
 
 static int ymf_open(struct inode *inode, struct file *file)
 {
+       struct list_head *list;
        ymfpci_t *unit;
        int minor, instance;
        struct ymf_state *state;
@@ -1905,10 +1907,13 @@ static int ymf_open(struct inode *inode, struct file *file)
        nvirt = 0;                      /* Such is the partitioning of minor */
 
        /* XXX Semaphore here! */
-       for (unit = ymf_devs; unit != NULL; unit = unit->next) {
-               if (unit->inst == instance) break;
+       for (list = ymf_devs.next; list != &ymf_devs; list = list->next) {
+               unit = list_entry(list, ymfpci_t, ymf_devs);
+               if (unit->inst == instance)
+                       break;
        }
-       if (unit == NULL) return -ENODEV;
+       if (list == &ymf_devs)
+               return -ENODEV;
 
        if (unit->states[nvirt] != NULL) {
                /* P3 */ printk("ymfpci%d: busy\n", unit->inst);
@@ -1987,20 +1992,22 @@ static int ymf_open_mixdev(struct inode *inode, struct file *file)
 {
        int i;
        int minor = MINOR(inode->i_rdev);
-       ymfpci_t *codec;
+       struct list_head *list;
+       ymfpci_t *unit;
 
-       for (codec = ymf_devs; codec != NULL; codec = codec->next) {
+       for (list = ymf_devs.next; list != &ymf_devs; list = list->next) {
+               unit = list_entry(list, ymfpci_t, ymf_devs);
                for (i = 0; i < NR_AC97; i++) {
-                       if (codec->ac97_codec[i] != NULL &&
-                           codec->ac97_codec[i]->dev_mixer == minor)
+                       if (unit->ac97_codec[i] != NULL &&
+                           unit->ac97_codec[i]->dev_mixer == minor) {
                                goto match;
+                       }
                }
        }
-       if (!codec)
-               return -ENODEV;
+       return -ENODEV;
 
  match:
-       file->private_data = codec->ac97_codec[i];
+       file->private_data = unit->ac97_codec[i];
 
        MOD_INC_USE_COUNT;
        return 0;
@@ -2097,7 +2104,7 @@ static void ymfpci_download_image(ymfpci_t *codec)
        for (i = 0; i < YDSXG_DSPLENGTH; i++)
                ymfpci_writel(codec, YDSXGR_DSPINSTRAM + i, DspInst[i >> 2]);
 
-       switch (codec->device_id) {
+       switch (codec->pci->device) {
        case PCI_DEVICE_ID_YAMAHA_724F:
        case PCI_DEVICE_ID_YAMAHA_740C:
        case PCI_DEVICE_ID_YAMAHA_744:
@@ -2200,6 +2207,16 @@ static int ymfpci_memalloc(ymfpci_t *codec)
        return 0;
 }
 
+static void ymfpci_memfree(ymfpci_t *codec)
+{
+       ymfpci_writel(codec, YDSXGR_PLAYCTRLBASE, 0);
+       ymfpci_writel(codec, YDSXGR_RECCTRLBASE, 0);
+       ymfpci_writel(codec, YDSXGR_EFFCTRLBASE, 0);
+       ymfpci_writel(codec, YDSXGR_WORKBASE, 0);
+       ymfpci_writel(codec, YDSXGR_WORKSIZE, 0);
+       kfree(codec->work_ptr);
+}
+
 static int ymf_ac97_init(ymfpci_t *card, int num_ac97)
 {
        struct ac97_codec *codec;
@@ -2220,38 +2237,43 @@ static int ymf_ac97_init(ymfpci_t *card, int num_ac97)
        if (ac97_probe_codec(codec) == 0) {
                /* Alan does not have this printout. P3 */
                printk("ymfpci: ac97_probe_codec failed\n");
-               return -ENODEV;
+               goto out_kfree;
        }
 
        eid = ymfpci_codec_read(codec, AC97_EXTENDED_ID);
-
-       if (eid==0xFFFFFF)
-       {
+       if (eid==0xFFFFFF) {
                printk(KERN_WARNING "ymfpci: no codec attached ?\n");
-               kfree(codec);
-               return -ENODEV;
+               goto out_kfree;
        }
 
        card->ac97_features = eid;
 
        if ((codec->dev_mixer = register_sound_mixer(&ymf_mixer_fops, -1)) < 0) {
                printk(KERN_ERR "ymfpci: couldn't register mixer!\n");
-               kfree(codec);
-               return -ENODEV;
+               goto out_kfree;
        }
 
        card->ac97_codec[num_ac97] = codec;
 
        return 0;
+ out_kfree:
+       kfree(codec);
+       return -ENODEV;
 }
 
-static int /* __init */
-ymf_install(struct pci_dev *pcidev, int instance, int devx)
+static int __devinit ymf_probe_one(struct pci_dev *pcidev, const struct pci_device_id *ent)
 {
+       u16 ctrl;
+       static int ymf_instance; /* = 0 */
        ymfpci_t *codec;
 
        int err;
 
+       if (pci_enable_device(pcidev) < 0) {
+               printk(KERN_ERR "ymfpci: pci_enable_device failed\n");
+               return -ENODEV;
+       }
+
        if ((codec = kmalloc(sizeof(ymfpci_t), GFP_KERNEL)) == NULL) {
                printk(KERN_ERR "ymfpci: no core\n");
                return -ENOMEM;
@@ -2261,153 +2283,108 @@ ymf_install(struct pci_dev *pcidev, int instance, int devx)
        spin_lock_init(&codec->reg_lock);
        spin_lock_init(&codec->voice_lock);
        codec->pci = pcidev;
-       codec->inst = instance;
-       codec->irq = pcidev->irq;
-       codec->device_id = pcidev->device;
-
-       pci_enable_device(pcidev);
-       pci_set_master(pcidev);
+       codec->inst = ymf_instance;
 
        pci_read_config_byte(pcidev, PCI_REVISION_ID, (u8 *)&codec->rev);
-       codec->reg_area_phys = pci_resource_start(pcidev, 0);
-       codec->reg_area_virt = (unsigned long)ioremap(codec->reg_area_phys, 0x8000);
+       codec->reg_area_virt = ioremap(pci_resource_start(pcidev, 0), 0x8000);
 
-       /* XXX KERN_INFO */
-       printk("ymfpci%d: %s at 0x%lx IRQ %d\n", instance,
-           ymf_devv[devx].name, codec->reg_area_phys, codec->irq);
+       printk(KERN_INFO "ymfpci%d: %s at 0x%lx IRQ %d\n", ymf_instance,
+           (char *)ent->driver_data, pci_resource_start(pcidev, 0), pcidev->irq);
 
        ymfpci_aclink_reset(pcidev);
-       if (ymfpci_codec_ready(codec, 0, 1) < 0) {
-               ymfpci_free(codec);
-               return -ENODEV;
-       }
+       if (ymfpci_codec_ready(codec, 0, 1) < 0)
+               goto out_unmap;
 
        ymfpci_download_image(codec);
 
        udelay(100); /* seems we need some delay after downloading image.. */
 
-       if (ymfpci_memalloc(codec) < 0) {
-               ymfpci_free(codec);
-               return -ENODEV;
-       }
+       if (ymfpci_memalloc(codec) < 0)
+               goto out_disable_dsp;
 
        /* ymfpci_proc_init(card, codec); */
 
-       if (request_irq(codec->irq, ymf_interrupt, SA_SHIRQ, "ymfpci", codec) != 0) {
+       if (request_irq(pcidev->irq, ymf_interrupt, SA_SHIRQ, "ymfpci", codec) != 0) {
                printk(KERN_ERR "ymfpci%d: unable to request IRQ %d\n",
-                   codec->inst, codec->irq);
-               ymfpci_free(codec);
-               return -ENODEV;
+                      codec->inst, pcidev->irq);
+               goto out_memfree;
        }
 
        /* register /dev/dsp */
        if ((codec->dev_audio = register_sound_dsp(&ymf_fops, -1)) < 0) {
                printk(KERN_ERR "ymfpci%d: unable to register dsp\n", codec->inst);
-               free_irq(codec->irq, codec);
-               ymfpci_free(codec);
-               return -ENODEV;
+               goto out_free_irq;
        }
 
        /*
         * Poke just the primary for the moment.
         */
-       if ((err = ymf_ac97_init(codec, 0)) != 0) {
-               unregister_sound_dsp(codec->dev_audio);
-               free_irq(codec->irq, codec);
-               ymfpci_free(codec);
-               return err;
-       }
+       if ((err = ymf_ac97_init(codec, 0)) != 0)
+               goto out_unregister_sound_dsp;
 
-       codec->next = ymf_devs;
-       ymf_devs = codec;
+       /* put it into driver list */
+       list_add_tail(&codec->ymf_devs, &ymf_devs);
+       pci_set_drvdata(pcidev, codec);
+       ymf_instance++;
 
        return 0;
+
+ out_unregister_sound_dsp:
+       unregister_sound_dsp(codec->dev_audio);
+ out_free_irq:
+       free_irq(pcidev->irq, codec);
+ out_memfree:
+       ymfpci_memfree(codec);
+ out_disable_dsp:
+       ymfpci_disable_dsp(codec);
+       ctrl = ymfpci_readw(codec, YDSXGR_GLOBALCTRL);
+       ymfpci_writew(codec, YDSXGR_GLOBALCTRL, ctrl & ~0x0007);
+       ymfpci_writel(codec, YDSXGR_STATUS, ~0);
+ out_unmap:
+       iounmap(codec->reg_area_virt);
+       kfree(codec);
+       return -ENODEV;
 }
 
-static void
-ymfpci_free(ymfpci_t *codec)
+static void __devexit ymf_remove_one(struct pci_dev *pcidev)
 {
-       u16 ctrl;
+       __u16 ctrl;
+       ymfpci_t *codec = pci_get_drvdata(pcidev);
 
-       /* ymfpci_proc_done(codec); */
+       /* remove from list of devices */
+       list_del(&codec->ymf_devs);
 
+       unregister_sound_mixer(codec->ac97_codec[0]->dev_mixer);
+       kfree(codec->ac97_codec[0]);
        unregister_sound_dsp(codec->dev_audio);
-
-       ymfpci_writel(codec, YDSXGR_NATIVEDACOUTVOL, 0);
-       ymfpci_writel(codec, YDSXGR_BUF441OUTVOL, 0);
+       free_irq(pcidev->irq, codec);
+       ymfpci_memfree(codec);
        ymfpci_writel(codec, YDSXGR_STATUS, ~0);
        ymfpci_disable_dsp(codec);
-       ymfpci_writel(codec, YDSXGR_PLAYCTRLBASE, 0);
-       ymfpci_writel(codec, YDSXGR_RECCTRLBASE, 0);
-       ymfpci_writel(codec, YDSXGR_EFFCTRLBASE, 0);
-       ymfpci_writel(codec, YDSXGR_WORKBASE, 0);
-       ymfpci_writel(codec, YDSXGR_WORKSIZE, 0);
        ctrl = ymfpci_readw(codec, YDSXGR_GLOBALCTRL);
        ymfpci_writew(codec, YDSXGR_GLOBALCTRL, ctrl & ~0x0007);
-
-       if (codec->reg_area_virt)
-               iounmap((void *)codec->reg_area_virt);
-       if (codec->work_ptr)
-               kfree(codec->work_ptr);
-       if (codec->ac97_codec[0]) {
-               unregister_sound_mixer(codec->ac97_codec[0]->dev_mixer);
-               kfree(codec->ac97_codec[0]);
-       }
+       iounmap(codec->reg_area_virt);
        kfree(codec);
 }
 
 MODULE_AUTHOR("Jaroslav Kysela");
 MODULE_DESCRIPTION("Yamaha YMF7xx PCI Audio");
 
-static int /* __init */
-ymf_probe(void)
-{
-       struct pci_dev *pcidev;
-       int foundone;
-       int i;
-
-       if (!pci_present())
-               return -ENODEV;
-
-       /*
-        * Print our proud ego-nursing "Hello, World!" message as in MS-DOS.
-        */
-       /* printk(KERN_INFO "ymfpci: Yamaha YMF7xx\n"); */
-
-       /*
-        * Not very efficient, but Alan did it so in cs46xx.c.
-        */
-       foundone = 0;
-       pcidev = NULL;
-       for (i = 0; i < sizeof(ymf_devv)/sizeof(ymf_devv[0]); i++) {
-               while ((pcidev = pci_find_device(PCI_VENDOR_ID_YAMAHA,
-                   ymf_devv[i].id, pcidev)) != NULL) {
-                       if (ymf_install(pcidev, foundone, i) == 0) {
-                               foundone++;
-                       }
-               }
-       }
-
-       return foundone;
-}
+static struct pci_driver ymfpci_driver = {
+       name:           "ymfpci",
+       id_table:       ymf_id_tbl,
+       probe:          ymf_probe_one,
+       remove:         ymf_remove_one,
+};
 
-static int ymf_init_module(void)
+static int __init ymf_init_module(void)
 {
-       if (ymf_probe()==0)
-               printk(KERN_ERR "ymfpci: No devices found.\n");
-       return 0;
+       return pci_module_init(&ymfpci_driver);
 }
 
-static void ymf_cleanup_module (void)
+static void __exit ymf_cleanup_module (void)
 {
-       ymfpci_t *next;
-
-       while (ymf_devs){
-               next = ymf_devs->next;
-               free_irq(ymf_devs->irq, ymf_devs);
-               ymfpci_free(ymf_devs);
-               ymf_devs = next;
-       }
+       pci_unregister_driver(&ymfpci_driver);
 }
 
 module_init(ymf_init_module);
index 653c32abe3d82d5b04a8ae8fb6a2381f2616df2e..7ea633ca09b245f68d5dc1a82f447981e0b23479 100644 (file)
@@ -247,11 +247,8 @@ struct ymf_pcm {
 };
 
 struct ymf_unit {
-       unsigned int device_id; /* PCI device ID */
        unsigned int rev;       /* PCI revision */
-       unsigned long reg_area_phys;
-       unsigned long reg_area_virt;
-
+       void *reg_area_virt;
        void *work_ptr;                         // +
 
        unsigned int bank_size_playback;
@@ -278,7 +275,6 @@ struct ymf_unit {
        u16 ac97_features;
 
        struct pci_dev *pci;
-       int irq;
        int inst;               /* Unit number (instance) */
 
        spinlock_t reg_lock;
@@ -287,7 +283,7 @@ struct ymf_unit {
        /* soundcore stuff */
        int dev_audio;
 
-       ymfpci_t *next;                                 // *
+       struct list_head ymf_devs;
        struct ymf_state *states[1];                    // *
        /* ypcm may be the same thing as state, but not for record, effects. */
 };
index 197752224b3f58d0f868db08f1f2a768cbc83336..0592297dc4b955a860d3c8c7241dc587b818b690 100644 (file)
@@ -601,7 +601,7 @@ static void digi_wakeup_write_lock( struct usb_serial_port *port )
        spin_lock_irqsave( &priv->dp_port_lock, flags );
        digi_wakeup_write( port );
        spin_unlock_irqrestore( &priv->dp_port_lock, flags );
-
+       MOD_DEC_USE_COUNT;
 }
 
 static void digi_wakeup_write( struct usb_serial_port *port )
@@ -1409,7 +1409,9 @@ dbg( "digi_write_bulk_callback: TOP, urb->status=%d", urb->status );
 
        /* also queue up a wakeup at scheduler time, in case we */
        /* lost the race in write_chan(). */
-       queue_task( &priv->dp_wakeup_task, &tq_scheduler );
+       MOD_INC_USE_COUNT;
+       if (schedule_task(&priv->dp_wakeup_task) == 0)
+               MOD_DEC_USE_COUNT;
 
        spin_unlock( &priv->dp_port_lock );
 
index 3114322c86af9984563b90f7e4d6a3097a277bef..b614a6d7e5c2c077afd40936e1ddd832e5b17536 100644 (file)
@@ -130,7 +130,7 @@ static void keyspan_pda_wakeup_write( struct usb_serial_port *port )
        /* wake up other tty processes */
        wake_up_interruptible( &tty->write_wait );
        /* For 2.2.16 backport -- wake_up_interruptible( &tty->poll_wait ); */
-
+       MOD_DEC_USE_COUNT;
 }
 
 static void keyspan_pda_request_unthrottle( struct usb_serial *serial )
@@ -149,7 +149,7 @@ static void keyspan_pda_request_unthrottle( struct usb_serial *serial )
                             NULL,
                             0,
                             2*HZ);
-
+       MOD_DEC_USE_COUNT;
 }
 
 
@@ -198,7 +198,9 @@ static void keyspan_pda_rx_interrupt (struct urb *urb)
                        tty = serial->port[0].tty;
                        priv->tx_throttled = 0;
                        /* queue up a wakeup at scheduler time */
-                       queue_task( &priv->wakeup_task, &tq_scheduler );
+                       MOD_INC_USE_COUNT;
+                       if (schedule_task(&priv->wakeup_task) == 0)
+                               MOD_DEC_USE_COUNT;
                        break;
                default:
                        break;
@@ -540,7 +542,9 @@ static int keyspan_pda_write(struct usb_serial_port *port, int from_user,
 
        if (request_unthrottle) {
                priv->tx_throttled = 1; /* block writers */
-               queue_task( &priv->unthrottle_task, &tq_scheduler );
+               MOD_INC_USE_COUNT;
+               if (schedule_task(&priv->unthrottle_task) == 0)
+                       MOD_DEC_USE_COUNT;
        }
 
        spin_unlock_irqrestore (&port->port_lock, flags);
@@ -566,8 +570,9 @@ static void keyspan_pda_write_bulk_callback (struct urb *urb)
        }
        
        /* queue up a wakeup at scheduler time */
-       queue_task( &priv->wakeup_task, &tq_scheduler );
-
+       MOD_INC_USE_COUNT;
+       if (schedule_task(&priv->wakeup_task) == 0)
+               MOD_DEC_USE_COUNT;
 }
 
 
index 12a69c1e7c009168a732f69ba25bfe4e6e19b2f8..983d3a6e55994a07cd1011621dcc89d9055a1000 100644 (file)
@@ -2401,6 +2401,7 @@ static int __devinit uhci_pci_probe(struct pci_dev *dev, const struct pci_device
                if (check_region(io_addr, io_size))
                        break;
 
+               pci_set_master(dev);
                return setup_uhci(dev, dev->irq, io_addr, io_size);
        }
 
index 85b39cc1be215467780c050d628c0096f7b97e0e..71e014d4f35c19103b1629ddd85280af7a30886b 100644 (file)
@@ -2956,7 +2956,8 @@ uhci_pci_probe (struct pci_dev *dev, const struct pci_device_id *id)
                        break;
                /* disable legacy emulation */
                pci_write_config_word (dev, USBLEGSUP, 0);
-       
+
+               pci_set_master(dev);
                return alloc_uhci(dev, dev->irq, io_addr, io_size);
        }
        return -ENODEV;
index 57cad3de707c63b6d333ccce33fe8fa0efb5d943..e401cbfcd9f1cd5d86346aaa68ea230b1b0d1bae 100644 (file)
@@ -59,7 +59,6 @@ this file *will* be replaced with it.  You have been warned.
  *   - try to make it work on m68k hp workstations ;)
  */
 
-#include <linux/config.h>
 #include <linux/types.h>
 #include <linux/sched.h>
 #include <linux/fs.h>
@@ -78,22 +77,9 @@ this file *will* be replaced with it.  You have been warned.
 #include <asm/io.h>
 #include <asm/real.h>
 
-#include <linux/config.h>
 #include <linux/module.h>
-#include <linux/types.h>
-#include <linux/sched.h>
-#include <linux/fs.h>
-#include <linux/kernel.h>
-#include <linux/tty.h>
-#include <linux/console.h>
-#include <linux/string.h>
-#include <linux/kd.h>
-#include <linux/malloc.h>
 #include <linux/fb.h>
-#include <linux/vt_kern.h>
-#include <linux/selection.h>
 #include <linux/smp.h>
-#include <linux/init.h>
 
 #include <asm/irq.h>
 #include <asm/system.h>
index bc3bf85f10bcddb511e9db64df59f2ed38c12cc6..56e7f43ce5f9cb7c58badbf84e6ec50167bd9903 100644 (file)
@@ -1,4 +1,3 @@
-#include <linux/config.h>
 #include <linux/module.h>
 #include <linux/types.h>
 #include <linux/kernel.h>
index 219f4c207a88402b09f48b219ef4d925f247ca70..0e850ba3e33b7c592869a5666cf5bfdb834c7e26 100644 (file)
@@ -84,8 +84,7 @@ static void nfs_readdata_release(struct rpc_task *task)
 static int
 nfs_readpage_sync(struct file *file, struct inode *inode, struct page *page)
 {
-       struct dentry   *dentry = file->f_dentry;
-       struct rpc_cred *cred = nfs_file_cred(file);
+       struct rpc_cred *cred = NULL;
        struct nfs_fattr fattr;
        loff_t          offset = page_offset(page);
        char            *buffer;
@@ -97,6 +96,9 @@ nfs_readpage_sync(struct file *file, struct inode *inode, struct page *page)
 
        dprintk("NFS: nfs_readpage_sync(%p)\n", page);
 
+       if (file)
+               cred = nfs_file_cred(file);
+
        /*
         * This works now because the socket layer never tries to DMA
         * into this buffer directly.
@@ -106,9 +108,9 @@ nfs_readpage_sync(struct file *file, struct inode *inode, struct page *page)
                if (count < rsize)
                        rsize = count;
 
-               dprintk("NFS: nfs_proc_read(%s, (%s/%s), %Ld, %d, %p)\n",
+               dprintk("NFS: nfs_proc_read(%s, (%x/%Ld), %Ld, %d, %p)\n",
                        NFS_SERVER(inode)->hostname,
-                       dentry->d_parent->d_name.name, dentry->d_name.name,
+                       inode->i_dev, (long long)NFS_FILEID(inode),
                        (long long)offset, rsize, buffer);
 
                lock_kernel();
index 7ad66492dd916546ccc2c77fe732cf2c7bae920e..f75190be5d5e47992bf6a610d6328eff93c89583 100644 (file)
@@ -171,8 +171,7 @@ static int
 nfs_writepage_sync(struct file *file, struct inode *inode, struct page *page,
                   unsigned int offset, unsigned int count)
 {
-       struct dentry   *dentry = file->f_dentry;
-       struct rpc_cred *cred = nfs_file_cred(file);
+       struct rpc_cred *cred = NULL;
        loff_t          base;
        unsigned int    wsize = NFS_SERVER(inode)->wsize;
        int             result, refresh = 0, written = 0, flags;
@@ -180,9 +179,13 @@ nfs_writepage_sync(struct file *file, struct inode *inode, struct page *page,
        struct nfs_fattr fattr;
        struct nfs_writeverf verf;
 
+
+       if (file)
+               cred = nfs_file_cred(file);
+
        lock_kernel();
-       dprintk("NFS:      nfs_writepage_sync(%s/%s %d@%Ld)\n",
-               dentry->d_parent->d_name.name, dentry->d_name.name,
+       dprintk("NFS:      nfs_writepage_sync(%x/%Ld %d@%Ld)\n",
+               inode->i_dev, (long long)NFS_FILEID(inode),
                count, (long long)(page_offset(page) + offset));
 
        buffer = kmap(page) + offset;
index 66dbd9efb381abb4cef71d4fbb1257db301aa171..9e6b8222b1ffc94478f02c44505de5919aceb06d 100644 (file)
@@ -168,7 +168,7 @@ smb_data_ready(struct sock *sk, int len)
        job->cb.routine = smb_data_callback;
        job->cb.data = job;
        job->sk = sk;
-       queue_task(&job->cb, &tq_scheduler);
+       schedule_task(&job->cb);
 }
 
 int
index 82304cc042b15d329803d2b7f9e24147ed5a25ed..5b374fc1a614d344dea7d90d14928bf008609776 100644 (file)
@@ -1,6 +1,7 @@
 #ifndef _ASM_PARISC_ATOMIC_H_
 #define _ASM_PARISC_ATOMIC_H_
 
+#include <linux/config.h>
 #include <asm/system.h>
 
 /* Copyright (C) 2000 Philipp Rumpf <prumpf@tux.org>.  */
index 6eda75db79d25c4974037a6491ed3d001c5dc05e..9e6284342a5f526d35d20056e1c0ba752dabf6bc 100644 (file)
@@ -11,7 +11,6 @@
  *     void check_bugs(void);
  */
 
-#include <linux/config.h>
 #include <asm/processor.h>
 
 static inline void check_bugs(void)
index d226210a62e082c5bc031136d4dcdcfd361ffdde..2460121b66a3b6e4ad1b74920100146aae4f66fd 100644 (file)
@@ -5,8 +5,6 @@
 #ifndef __ARCH_PARISC_CACHE_H
 #define __ARCH_PARISC_CACHE_H
 
-#include <linux/config.h>
-
 /*
 ** XXX FIXME : L1_CACHE_BYTES (cacheline size) should be a boot time thing.
 ** 
index 014bf1b8cc46832cdf3afb4fe19c9e94aaa07421..0cf1e6d6836f7b0a4185117b454e4ad201fcd6f4 100644 (file)
@@ -3,7 +3,6 @@
 #ifdef __KERNEL__
 
 #include <linux/types.h>
-#include <linux/config.h>
 #include <asm/hardware.h>      /* for struct hp_device */
 
 /*
index 65f2a29e721be747557c087f59078050f4c50277..ca40fdf2dc5e8192f46f5e60d91e1e8b7dcc57aa 100644 (file)
@@ -1,6 +1,7 @@
 #ifndef _ASM_IO_H
 #define _ASM_IO_H
 
+#include <linux/config.h>
 #include <linux/types.h>
 #include <asm/gsc.h>
 
index f4887a9dc4465a47dd27981baa0df89cd8a0c120..6213ab8504f2a28d5e09055176d2ee0237eca01f 100644 (file)
@@ -2,7 +2,6 @@
 #define _PARISC_PGTABLE_H
 
 #ifndef __ASSEMBLY__
-#include <linux/config.h>
 /*
  * we simulate an x86-style page table for the linux mm code
  */
index 24c418d7e92a6dae205b3fbed03f0335dc4722ba..36e78e9bce9f1046a4b46064c467438634babcf6 100644 (file)
@@ -1,6 +1,8 @@
 #ifndef __ASM_SMP_H
 #define __ASM_SMP_H
 
+#include <linux/config.h>
+
 #ifdef CONFIG_SMP
 extern volatile unsigned long cpu_online_map;  /* Bitmap of available cpu's */
 #endif
index 3cdbde9854193d0efbd1a2440f1f8652a187742d..1f25634186f703a8d26b1ad3b0a007114703295f 100644 (file)
@@ -1,6 +1,7 @@
 #ifndef __PARISC_SYSTEM_H
 #define __PARISC_SYSTEM_H
 
+#include <linux/config.h>
 #include <asm/psw.h>
 
 /* The program status word as bitfields.  */
index 13fab4b89f1b7a1646caf24de387882f95e3350b..7b901fc23d5939f8d14d8aa73ff03aa6470a87b1 100644 (file)
@@ -7,7 +7,6 @@
 #define _ASMPARISC_TIMEX_H
 
 #include <asm/system.h>
-#include <linux/config.h>
 #include <linux/time.h>
 
 typedef unsigned long cycles_t;
index 0d825d0ce86dfb40e2543c42f998021d58809526..70e834f129f03d3488cb942fdbe23e956c097f98 100644 (file)
@@ -4,7 +4,6 @@
 /*
  * User space memory access functions
  */
-#include <linux/config.h>
 #include <linux/sched.h>
 #include <asm/page.h>
 #include <asm/system.h>
index 07d8356d075ffe5c9d84ce2d1d5d5a27a5cab17b..72f9151b8a84dc6beb0de7066d0d17bdff53c5f1 100644 (file)
@@ -104,7 +104,6 @@ static inline void *ioremap(unsigned long base, long length)
 
 #define capable(x)                   suser()
 
-#define queue_task                   queue_task_irq_off
 #define tty_flip_buffer_push(tty)    queue_task(&tty->flip.tqueue, &tq_timer)
 #define signal_pending(current)      (current->signal & ~current->blocked)
 #define schedule_timeout(to)         do {current->timeout = jiffies + (to);schedule ();} while (0)
index 757121a5ded6188aab4bc44bf8257fd715736bc3..e795aaacf4ec6c47ab359963b43c123c425dbd2d 100644 (file)
@@ -149,7 +149,8 @@ extern void update_one_process(struct task_struct *p, unsigned long user,
 extern signed long FASTCALL(schedule_timeout(signed long timeout));
 asmlinkage void schedule(void);
 
-extern void schedule_task(struct tq_struct *task);
+extern int schedule_task(struct tq_struct *task);
+extern void run_schedule_tasks(void);
 extern int start_context_thread(void);
 
 /*
index 3eb8f14ae22f00b8eb3a696a77dfb3d12d025243..285936f5cd9448afa87bc952e566451599e04cc9 100644 (file)
  *   used as a bottom half handler.  This is for example useful for bottom
  *   halfs, which want to be delayed until the next clock tick.
  *
- * Problems:
- * - The queue_task_irq() inline function is only atomic with respect to itself.
- *   Problems can occur, when queue_task_irq() is called from a normal system
- *   call, and an interrupt comes in.  No problems occur, when queue_task_irq()
- *   is called from an interrupt or bottom half, and interrupted, as run_task_queue()
- *   will not be executed/continued before the last interrupt returns.  If in
- *   doubt, use queue_task(), not queue_task_irq().
+ * Notes:
  * - Bottom halfs are called in the reverse order that they were linked into
  *   the list.
  */
@@ -51,7 +45,7 @@ typedef struct tq_struct * task_queue;
 
 #define DECLARE_TASK_QUEUE(q)  task_queue q = NULL
 
-extern task_queue tq_timer, tq_immediate, tq_scheduler, tq_disk;
+extern task_queue tq_timer, tq_immediate, tq_disk;
 
 /*
  * To implement your own list of active bottom halfs, use the following
@@ -78,18 +72,22 @@ extern task_queue tq_timer, tq_immediate, tq_scheduler, tq_disk;
 extern spinlock_t tqueue_lock;
 
 /*
- * queue_task
+ * Queue a task on a tq.  Return non-zero if it was successfully
+ * added.
  */
-static inline void queue_task(struct tq_struct *bh_pointer,
+static inline int queue_task(struct tq_struct *bh_pointer,
                           task_queue *bh_list)
 {
+       int ret = 0;
        if (!test_and_set_bit(0,&bh_pointer->sync)) {
                unsigned long flags;
                spin_lock_irqsave(&tqueue_lock, flags);
                bh_pointer->next = *bh_list;
                *bh_list = bh_pointer;
                spin_unlock_irqrestore(&tqueue_lock, flags);
+               ret = 1;
        }
+       return ret;
 }
 
 /*
index 8ea9f5b9900a6e13d720d31ad68ec80dee82b5fd..a8caa863a4eac9a8a24cd1cdf3da03959e4bc9c6 100644 (file)
@@ -19,16 +19,16 @@ static DECLARE_TASK_QUEUE(tq_context);
 static DECLARE_WAIT_QUEUE_HEAD(context_task_wq);
 static int keventd_running;
 
-void schedule_task(struct tq_struct *task)
+int schedule_task(struct tq_struct *task)
 {
+       int ret;
        if (keventd_running == 0)
                printk(KERN_ERR "schedule_task(): keventd has not started\n");
-       queue_task(task, &tq_context);
+       ret = queue_task(task, &tq_context);
        wake_up(&context_task_wq);
+       return ret;
 }
 
-EXPORT_SYMBOL(schedule_task);
-
 static int context_thread(void *dummy)
 {
        struct task_struct *curtask = current;
@@ -50,20 +50,18 @@ static int context_thread(void *dummy)
        siginitset(&sa.sa.sa_mask, sigmask(SIGCHLD));
        do_sigaction(SIGCHLD, &sa, (struct k_sigaction *)0);
 
-       for (;;) {
-               __set_task_state(curtask, TASK_INTERRUPTIBLE);
-               add_wait_queue(&context_task_wq, &wait);
-
-               /*
-                * Careful: we depend on the wait-queue modifications
-                * to also act as memory barriers.
-                */
-               if (!tq_context)
-                       schedule();
-
-               remove_wait_queue(&context_task_wq, &wait);
-               __set_task_state(curtask, TASK_RUNNING);
-               run_task_queue(&tq_context);
+       /*
+        * If one of the functions on a task queue re-adds itself
+        * to the task queue we call schedule() in state TASK_RUNNING
+        */
+       for (;;) {
+               set_task_state(curtask, TASK_INTERRUPTIBLE);
+               add_wait_queue(&context_task_wq, &wait);
+               if (tq_context)
+                       set_task_state(curtask, TASK_RUNNING);
+               schedule();
+               remove_wait_queue(&context_task_wq, &wait);
+               run_task_queue(&tq_context);
                if (signal_pending(curtask)) {
                        while (waitpid(-1, (unsigned int *)0, __WALL|WNOHANG) > 0)
                                ;
@@ -73,8 +71,20 @@ static int context_thread(void *dummy)
        }
 }
 
+/*
+ * Run the tq_context queue right now.  Must be called from process context
+ */
+void run_schedule_tasks(void)
+{
+       run_task_queue(&tq_context);
+}
+       
 int start_context_thread(void)
 {
        kernel_thread(context_thread, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND);
        return 0;
 }
+
+EXPORT_SYMBOL(schedule_task);
+EXPORT_SYMBOL(run_schedule_tasks);
+
index 9a41f0ecb49f5030e3cffdb48590d94d9dd05b26..abbe3d9a55375a78ee50def44e13d09bcf88c901 100644 (file)
@@ -369,7 +369,6 @@ EXPORT_SYMBOL(del_timer_sync);
 EXPORT_SYMBOL(mod_timer);
 EXPORT_SYMBOL(tq_timer);
 EXPORT_SYMBOL(tq_immediate);
-EXPORT_SYMBOL(tq_scheduler);
 
 #ifdef CONFIG_SMP
 /* Various random spinlocks we want to export */
index faf9a80e1002dab37ebdbb52fc0405037b509f9a..1299c8365cb3454243df1fbc25f6de076641c34f 100644 (file)
@@ -513,10 +513,7 @@ asmlinkage void schedule(void)
        int this_cpu, c;
 
        if (!current->active_mm) BUG();
-       if (tq_scheduler)
-               goto handle_tq_scheduler;
-tq_scheduler_back:
-
+need_resched_back:
        prev = current;
        this_cpu = prev->processor;
 
@@ -654,7 +651,7 @@ still_running_back:
 same_process:
        reacquire_kernel_lock(current);
        if (current->need_resched)
-               goto tq_scheduler_back;
+               goto need_resched_back;
 
        return;
 
@@ -679,15 +676,6 @@ handle_softirq:
        do_softirq();
        goto handle_softirq_back;
 
-handle_tq_scheduler:
-       /*
-        * do not run the task queue with disabled interrupts,
-        * cli() wouldn't work on SMP
-        */
-       sti();
-       run_task_queue(&tq_scheduler);
-       goto tq_scheduler_back;
-
 move_rr_last:
        if (!prev->counter) {
                prev->counter = NICE_TO_TICKS(prev->nice);
index e67783a30b02b5476d3421319a3919f076c46c04..c30ebb8d5f4d86d98a36c4833410a90568f5d0e8 100644 (file)
@@ -39,7 +39,6 @@ int tickadj = 500/HZ ? : 1;           /* microsecs */
 
 DECLARE_TASK_QUEUE(tq_timer);
 DECLARE_TASK_QUEUE(tq_immediate);
-DECLARE_TASK_QUEUE(tq_scheduler);
 
 /*
  * phase-lock loop variables