]> git.neil.brown.name Git - history.git/commitdiff
Import 2.3.19pre2 2.3.19pre2
authorLinus Torvalds <torvalds@linuxfoundation.org>
Fri, 23 Nov 2007 20:27:26 +0000 (15:27 -0500)
committerLinus Torvalds <torvalds@linuxfoundation.org>
Fri, 23 Nov 2007 20:27:26 +0000 (15:27 -0500)
137 files changed:
Documentation/filesystems/proc.txt [new file with mode: 0644]
Documentation/oops-tracing.txt
Documentation/proc.txt [deleted file]
Documentation/sound/NM256 [new file with mode: 0644]
Makefile
arch/i386/boot/setup.S
arch/i386/defconfig
drivers/block/hd.c
drivers/block/ide-cd.c
drivers/block/ide-cd.h
drivers/block/ide-tape.c
drivers/block/paride/paride.c
drivers/block/ps2esdi.c
drivers/block/rz1000.c
drivers/block/xd.c
drivers/cdrom/Config.in
drivers/cdrom/cdrom.c
drivers/char/Config.in
drivers/char/bw-qcam.c
drivers/char/bw-qcam.h
drivers/char/c-qcam.c
drivers/char/cyclades.c
drivers/char/drm/fops.c
drivers/char/joystick/joystick.c
drivers/char/pcwd.c
drivers/char/serial.c
drivers/char/softdog.c
drivers/char/tuner.c
drivers/char/videodev.c
drivers/i2o/Config.in
drivers/i2o/README
drivers/i2o/README.ioctl
drivers/i2o/README.lan [deleted file]
drivers/i2o/i2o_block.c
drivers/i2o/i2o_config.c
drivers/i2o/i2o_core.c
drivers/i2o/i2o_lan.c
drivers/i2o/i2o_lan.h
drivers/i2o/i2o_pci.c
drivers/i2o/i2o_proc.c
drivers/misc/Config.in
drivers/misc/Makefile
drivers/misc/acpi.c [new file with mode: 0644]
drivers/net/3c509.c
drivers/net/82596.c
drivers/net/acenic.c
drivers/net/arlan-proc.c
drivers/net/arlan.c
drivers/net/atp.c
drivers/net/atp.h
drivers/net/bmac.c
drivers/net/dmfe.c [new file with mode: 0644]
drivers/net/hamradio/Config.in
drivers/net/hamradio/baycom_ser_fdx.c
drivers/net/hamradio/baycom_ser_hdx.c
drivers/net/hamradio/yam.c
drivers/net/pcmcia/3c589_cs.c
drivers/net/pcmcia/Config.in
drivers/net/pcmcia/Makefile
drivers/net/pcmcia/pcnet_cs.c
drivers/net/pcmcia/ray_cs.c
drivers/net/ppp.c [deleted file]
drivers/net/smc-mca.c
drivers/net/smc-mca.h
drivers/net/via-rhine.c
drivers/net/wavelan.c
drivers/pcmcia/Config.in
drivers/pcmcia/Makefile
drivers/pcmcia/bulkmem.c
drivers/pcmcia/cardbus.c
drivers/pcmcia/cb_enabler.c
drivers/pcmcia/cistpl.c
drivers/pcmcia/cs.c
drivers/pcmcia/cs_internal.h
drivers/pcmcia/ds.c
drivers/pcmcia/i82365.c
drivers/pcmcia/rsrc_mgr.c
drivers/pcmcia/tcic.c
drivers/scsi/aha1542.c
drivers/scsi/ibmmca.c
drivers/scsi/in2000.h
drivers/scsi/qlogicfc.c
drivers/scsi/qlogicfc_asm.c
drivers/scsi/scsi.c
drivers/scsi/scsi.h
drivers/scsi/scsi_debug.c
drivers/scsi/scsi_syms.c
drivers/scsi/scsicam.c
drivers/scsi/sd.c
drivers/scsi/seagate.c
drivers/scsi/u14-34f.c
drivers/scsi/u14-34f.h
drivers/sound/Config.in
drivers/sound/Makefile
drivers/sound/ac97.c [new file with mode: 0644]
drivers/sound/ac97.h
drivers/sound/ad1848.c
drivers/sound/adlib_card.c
drivers/sound/cmpci.c
drivers/sound/dmabuf.c
drivers/sound/dmasound.c
drivers/sound/esssolo1.c
drivers/sound/lowlevel/Config.in
drivers/sound/lowlevel/miroaci.h
drivers/sound/maestro.c
drivers/sound/nm256.h [new file with mode: 0644]
drivers/sound/nm256_audio.c [new file with mode: 0644]
drivers/sound/nm256_coeff.h [new file with mode: 0644]
drivers/sound/opl3.c
drivers/sound/sb_ess.c
drivers/sound/soundcard.c
drivers/sound/sscape.c
drivers/sound/vwsnd.c
drivers/video/p9100fb.c
drivers/video/vgacon.c
fs/qnx4/inode.c
include/asm-i386/unistd.h
include/linux/acpi.h [new file with mode: 0644]
include/linux/cyclades.h
include/linux/i2c.h
include/linux/i2o.h
include/linux/pagemap.h
include/linux/pci.h
include/pcmcia/bus_ops.h
include/pcmcia/mem_op.h
init/main.c
net/ipx/Config.in
net/ipx/af_ipx.c
scripts/Configure
scripts/Menuconfig
scripts/header.tk
scripts/lxdialog/Makefile
scripts/tail.tk
scripts/tkcond.c
scripts/tkgen.c
scripts/tkparse.c
scripts/tkparse.h

diff --git a/Documentation/filesystems/proc.txt b/Documentation/filesystems/proc.txt
new file mode 100644 (file)
index 0000000..d842f7e
--- /dev/null
@@ -0,0 +1,1379 @@
+
+-----------------------------------------------------------------------
+
+                T H E  /proc   F I L E S Y S T E M
+
+-----------------------------------------------------------------------
+/proc/sys      Terrehon Bowden <terrehon@wpi.com>       January 27 1999
+               Bodo Bauer <bb@ricochet.net>                
+-----------------------------------------------------------------------
+Version 1.1                                         Kernel version 2.2
+-----------------------------------------------------------------------
+Contents
+
+1   Introduction/Credits
+
+1.1  Legal Issues
+
+2   The /proc file system
+
+2.1  Process specific subdirectories
+2.2  Kernel data
+2.3  IDE devices in /proc/ide
+2.4  Networking info in /proc/net
+2.5  SCSI info
+2.6  Parallel port info in /proc/parport
+2.7  TTY info in /proc/tty
+
+3   Reading and modifying kernel parameters
+
+3.1  /proc/sys/debug and /proc/sys/proc
+3.2  /proc/fs - File system data
+3.3  /proc/fs/binfmt_misc - Miscellaneous binary formats
+3.4  /proc/sys/kernel - General kernel parameters
+3.5  /proc/sys/vm - The virtual memory subsystem
+3.6  /proc/sys/dev - Device specific parameters
+3.7  /proc/sys/sunrpc - Remote procedure calls
+3.8  /proc/sys/net - Networking stuff
+3.9  /proc/sys/net/ipv4 - IPV4 settings=20
+3.10 Appletalk
+3.11 IPX
+
+-----------------------------------------------------------------------
+
+1   Introduction/Credits
+
+This documentation is part of a soon to be released book published by
+IDG Books on the SuSE Linux distribution. As there is no complete
+documentation for the /proc file system and we've used many freely
+available sources to write this chapter, it seems only fair to give
+the work back to the Linux community. This work is based on the
+2.1.132 and 2.2.0-pre-kernel versions. I'm afraid it's still far from
+complete, but we hope it will be useful. As far as we know, it is the
+first 'all-in-one' document about the /proc file system. It is
+focused on the Intel x86 hardware, so if you are looking for PPC, ARM,
+SPARC, APX, etc., features, you probably won't find what you are
+looking for. It also only covers IPv4 networking, not IPv6 nor other
+protocols - sorry.
+
+We'd like to thank Alan Cox, Rik van Riel, and Alexey Kuznetsov.  We'd
+also like to extend a special thank you to Andi Kleen for
+documentation, which we relied on heavily to create this document, as
+well as the additional information he provided. Thanks to everybody
+else who contributed source or docs to the Linux kernel and helped
+create a great piece of software... :)
+
+If you have any comments, corrections or additions, please don't
+hesitate to contact Bodo Bauer at bb@ricochet.net. We'll be happy to
+add them to this document.
+
+The latest version of this document is available online at
+http://www.suse.com/~bb/Docs/proc.html in HTML, ASCII, and as 
+Postscript file. 
+
+1.1  Legal Stuff
+
+We don't guarantee the correctness of this document, and if you come
+to us complaining about how you screwed up your system because of
+incorrect documentation, we won't feel responsible...
+
+-----------------------------------------------------------------------
+
+2   The /proc file system
+
+The proc file system acts as an interface to internal data structures
+in the kernel. It can be used to obtain information about the system
+and to change certain kernel parameters at runtime.  It contains
+(among other things) one subdirectory for each process running on the
+system which is named after the process id (PID) of the process. The
+link self points to the process reading the file system.
+
+2.1  Process specific subdirectories
+
+Each process subdirectory has the in table 1.1 listed entries.
+
+      _________________________________________________
+      cmdline Command line arguments
+      environ Values of environment variables
+      fd    Directory, which contains all file descriptors
+      mem   Memory held by this process
+      stat   Process status
+      status  Process status in human readable form
+      cwd   Link to the current working directory
+      exe   Link to the executable of this process
+      maps   Memory maps
+      root   Link to the root directory of this process
+      statm  Process memory status information
+     _________________________________________________
+      Table 1.1: Process specific entries in /proc
+
+For example, to get the status information of a process, all you have
+to do is read the file /proc/PID/status:
+
+> cat /proc/self/status
+Name:   cat
+State:  R (running)
+Pid:    5633
+PPid:   5609
+Uid:    501     501     501     501
+Gid:    100     100     100     100
+Groups: 100 16 
+VmSize:      804 kB
+VmLck:         0 kB
+VmRSS:       344 kB
+VmData:       68 kB
+VmStk:        20 kB
+VmExe:        12 kB
+VmLib:       660 kB
+SigPnd: 0000000000000000
+SigBlk: 0000000000000000
+SigIgn: 0000000000000000
+SigCgt: 0000000000000000
+CapInh: 00000000fffffeff
+CapPrm: 0000000000000000
+CapEff: 0000000000000000
+
+This shows you almost the same information as you would get if you
+viewed it with the ps command. In fact, ps uses the proc file system
+to obtain its information.
+
+The statm file contains more detailed information about the process
+memory usage. It contains seven values with the following meanings:
+
+size       total program size
+resident   size of in memory portions
+shared     number of the pages that are shared
+trs        number of pages that are 'code'
+drs        number of pages of data/stack
+lrs        number of pages of library
+dt        number of dirty pages
+
+The ratio text/data/library is approximate only by heuristics.
+
+2.2  Kernel data
+
+Similar to the process entries, these are files which give information
+about the running kernel. The files used to obtain this information
+are contained in /proc and are listed in table 1.2. Not all of these
+will be present in your system. It depends on the kernel configuration
+and the loaded modules, which files are there, and which are missing.
+
+      ________________________________________________
+      apm           Advanced power management info
+      cmdline       Kernel command line
+      cpuinfo       Info about the CPU
+      devices       Available devices (block and character)
+      dma           Used DMS channels
+      filesystems   Supported filesystems
+      interrupts    Interrupt usage
+      ioports       I/O port usage
+      kcore         Kernel core image
+      kmsg          Kernel messages
+      ksyms         Kernel symbol table
+      loadavg       Load average
+      locks         Kernel locks
+      meminfo       Memory info
+      misc          Miscellaneous
+      modules       List of loaded modules
+      mounts        Mounted filesystems
+      partitions    Table of partitions known to the system
+      rtc           Real time clock
+      slabinfo      Slab pool info
+      stat          Overall statistics
+      swaps         Swap space utilization
+      uptime        System uptime
+      version       Kernel version
+      ________________________________________________
+           Table 1.2: Kernel info in /proc
+
+You can, for example, check which interrupts are currently in use and
+what they are used for by looking in the file /proc/interrupts:
+
+> cat /proc/interrupts
+           CPU0       
+  0:    8728810          XT-PIC  timer
+  1:        895          XT-PIC  keyboard
+  2:          0          XT-PIC  cascade
+  3:     531695          XT-PIC  aha152x
+  4:    2014133          XT-PIC  serial
+  5:      44401          XT-PIC  pcnet_cs
+  8:          2          XT-PIC  rtc
+ 11:          8          XT-PIC  i82365
+ 12:     182918          XT-PIC  PS/2 Mouse
+ 13:          1          XT-PIC  fpu
+ 14:    1232265          XT-PIC  ide0
+ 15:          7          XT-PIC  ide1
+NMI:          0
+
+There three more important subdirectories in /proc: net, scsi and
+sys. The general rule is that the contents, or even the existence of
+these directories, depends on your kernel configuration. If SCSI is
+not enabled, the directory scsi may not exist. The same is true with
+the net, which is only there when networking support is present in the
+running kernel.
+
+The slabinfo file gives information about memory usage on the slab
+level.  Linux uses slab pools for memory management above page level
+in version 2.2. Commonly used objects have their own slab pool (like
+network buffers, directory cache, etc.).
+
+2.3  IDE devices in /proc/ide
+
+This subdirectory contains information about all IDE devices that the
+kernel is aware of.  There is one subdirectory for each device
+(i.e. hard disk) containing the following files:
+
+       cache             The cache
+       capacity          Capacity of the medium
+       driver            Driver and version
+       geometry          Physical and logical geometry
+       identify          Device identify block
+       media             Media type
+       model             Device identifier
+       settings          Device setup
+       smart_thresholds  IDE disk management thresholds
+       smart_values      IDE disk management values
+
+2.4  Networking info in /proc/net
+
+This directory follows the usual pattern. Table 1.3 lists the files
+and their meaning.
+
+     ____________________________________________________
+     arp             Kernel ARP table
+     dev             network devices with statistics
+     dev_mcast       Lists the Layer2 multicast groups a
+                     device is listening to (interface index,
+                     label, number of references, number of
+                     bound addresses).
+     dev_stat        network device status
+     ip_fwchains     Firewall chain linkage
+     ip_fwnames      Firewall chains
+     ip_masq         Directory containing the masquerading
+                     tables.
+     ip_masquerade   Major masquerading table
+     netstat         Network statistics
+     raw             Raw device statistics
+     route           Kernel routing table
+     rpc             Directory containing rpc info
+     rt_cache        Routing cache
+     snmp            SNMP data
+     sockstat        Socket statistics
+     tcp             TCP sockets
+     tr_rif          Token ring RIF routing table
+     udp             UDP sockets
+     unix            UNIX domain sockets
+     wireless        Wireless interface data (Wavelan etc)
+     igmp            IP multicast addresses, which this host joined
+     psched          Global packet scheduler parameters.
+     netlink         List of PF_NETLINK sockets.
+     ip_mr_vifs      List of multicast virtual interfaces.
+     ip_mr_cache     List of multicast routing cache.
+     udp6            UDP sockets (IPv6)
+     tcp6            TCP sockets (IPv6)
+     raw6            Raw device statistics (IPv6)
+     igmp6          IP multicast addresses, which this host joineed (IPv6)
+     if_inet6        List of IPv6 interface addresses.
+     ipv6_route      Kernel routing table for IPv6
+     rt6_stats       global IPv6 routing tables statistics.
+     sockstat6       Socket statistics (IPv6)
+     snmp6           Snmp data (IPv6)
+     ____________________________________________________
+         Table 1.3: Network info in /proc/net
+
+You can use this information to see which network devices are
+available in your system and how much traffic was routed over those
+devices:
+
+> cat /proc/net/dev
+Inter-|Receive                                                   |[...
+ face |bytes    packets errs drop fifo frame compressed multicast|[...
+    lo:  908188   5596     0    0    0     0          0         0 [...        
+  ppp0:15475140  20721   410    0    0   410          0         0 [... 
+  eth0:  614530   7085     0    0    0     0          0         1 [...
+
+...] Transmit
+...] bytes    packets errs drop fifo colls carrier compressed
+...]  908188     5596    0    0    0     0       0          0
+...] 1375103    17405    0    0    0     0       0          0
+...] 1703981     5535    0    0    0     3       0          0
+
+2.5  SCSI info
+
+If you have a SCSI host adapter in your system, you'll find a
+subdirectory named after the driver for this adapter in /proc/scsi. 
+You'll also see a list of all recognized SCSI devices in /proc/scsi:
+
+>cat /proc/scsi/scsi
+Attached devices: 
+Host: scsi0 Channel: 00 Id: 00 Lun: 00
+  Vendor: QUANTUM  Model: XP34550W         Rev: LXY4
+  Type:   Direct-Access                    ANSI SCSI revision: 02
+Host: scsi0 Channel: 00 Id: 01 Lun: 00
+  Vendor: SEAGATE  Model: ST34501W         Rev: 0018
+  Type:   Direct-Access                    ANSI SCSI revision: 02
+Host: scsi0 Channel: 00 Id: 02 Lun: 00
+  Vendor: SEAGATE  Model: ST34501W         Rev: 0017
+  Type:   Direct-Access                    ANSI SCSI revision: 02
+Host: scsi0 Channel: 00 Id: 04 Lun: 00
+  Vendor: ARCHIVE  Model: Python 04106-XXX Rev: 703b
+  Type:   Sequential-Access                ANSI SCSI revision: 02
+
+The directory named after the driver has one file for each adapter
+found in the system. These files contain information about
+the controller, including the used IRQ and the IO address range:
+
+>cat /proc/scsi/ncr53c8xx/0
+General information:
+ Chip NCR53C875, device id 0xf, revision id 0x4
+ IO port address 0xec00, IRQ number 11
+ Synchronous period factor 12, max commands per lun 4
+
+2.6  Parallel port info in /proc/parport
+
+The directory /proc/parport contains information about the parallel
+ports of your system. It has one subdirectory for each port, named
+after the port number (0,1,2,...).
+
+This directory contains four files:
+
+    autoprobe   Autoprobe results of this port
+    devices     Connected device modules
+    hardware    Hardware info (port type, io-port, DMA, IRQ, etc.)
+    irq         Used interrupt, if any
+
+2.7  TTY info in /proc/tty
+
+Information about the available and the actually used tty's can be
+found in /proc/tty. You'll find entries for drivers and line
+disciplines in this directory, as shown in the table below:
+
+     drivers       List of drivers and their usage
+     ldiscs        Registered line disciplines
+     driver/serial Usage statistic and status of single tty lines
+
+To see which tty's are currently in use, you can simply look into the
+file /proc/tty/drivers:
+
+>cat /proc/tty/drivers
+pty_slave            /dev/pts      136   0-255 pty:slave
+pty_master           /dev/ptm      128   0-255 pty:master
+pty_slave            /dev/ttyp       3   0-255 pty:slave
+pty_master           /dev/pty        2   0-255 pty:master
+serial               /dev/cua        5   64-67 serial:callout
+serial               /dev/ttyS       4   64-67 serial
+/dev/tty0            /dev/tty0       4       0 system:vtmaster
+/dev/ptmx            /dev/ptmx       5       2 system
+/dev/console         /dev/console    5       1 system:console
+/dev/tty             /dev/tty        5       0 system:/dev/tty
+unknown              /dev/tty        4    1-63 console
+
+-----------------------------------------------------------------------
+
+3   Reading and modifying kernel parameters
+
+A very interesting part of /proc is the directory /proc/sys. This not
+only provides information, it also allows you to change parameters
+within the kernel. Be very careful when trying this. You can optimize
+your system, but you also can crash it. Never play around with kernel
+parameters on a production system. Set up a development machine and
+test to make sure that everything works the way you want it to.  You
+may have no alternative but to reboot the machine once an error has
+been made.
+
+To change a value, simply echo the new value into the file. An example
+is given below in the section on the file system data. You need to be
+root to do this. You can create your own boot script to get this done
+every time your system boots. 
+
+The files in /proc/sys can be used to tune and monitor miscellaneous
+and general things in the operation of the Linux kernel.  Since some
+of the files can inadvertently disrupt your system, it is advisable to
+read both documentation and source before actually making
+adjustments. In any case, be very careful when writing to any of these
+files. The entries in /proc may change slightly between the 2.1.* and
+the 2.2 kernel, so review the kernel documentation if there is any
+doubt. You'll find the documentation in the directory
+/usr/src/linux/Documentation/sys. This chapter is heavily based on the
+documentation included in the pre 2.2 kernels. Thanks to Rick van Riel
+for providing this information.
+
+3.1  /proc/sys/debug and /proc/sys/proc
+
+These two subdirectories are empty.
+
+3.2  /proc/fs - File system data
+
+This subdirectory contains specific file system, file handle, inode,
+dentry and quota information.
+
+Currently, these files are in /proc/sys/fs:
+
+dentry-state
+   Status of the directory cache. Since directory entries are
+   dynamically allocated and deallocated, this file gives information
+   about the current status. It holds six values, in which the last
+   two are not used and are always zero. The other four mean:
+
+       nr_dentry   Seems to be zero all the time
+       nr_unused   Number of unused cache entries
+       age_limit   Age in seconds after the entry may be
+                   reclaimed, when memory is short
+       want_pages  internal
+
+dquot-nr and dquot-max
+   The file dquot-max shows the maximum number of cached disk quota
+   entries.
+
+   The file dquot-nr shows the number of allocated disk quota
+   entries and the number of free disk quota entries.
+
+   If the number of free cached disk quotas is very low and you have
+   a large number of simultaneous system users, you might want
+   to raise the limit.
+
+file-nr and file-max
+   The kernel allocates file handles dynamically, but as yet
+   doesn't free them again.
+
+   The value in file-max denotes the maximum number of file handles
+   that the Linux kernel will allocate. When you get a lot of error
+   messages about running out of file handles, you might want to raise
+   this limit. The default value is 4096. To change it, just write the
+   new number into the file:
+
+   # cat /proc/sys/fs/file-max
+   4096
+   # echo 8192 > /proc/sys/fs/file-max
+   # cat /proc/sys/fs/file-max
+   8192
+
+   This method of revision is useful for all customizable parameters
+   of the kernel - simply echo the new value to the corresponding
+   file.
+  
+   The three values in file-nr denote the number of allocated file
+   handles, the number of used file handles, and the maximum number of
+   file handles. When the allocated file handles come close to the
+   maximum, but the number of actually used ones is far behind, you've
+   encountered a peak in your usage of file handles and you don't need
+   to increase the maximum.
+
+   However, there is still a per process limit of open files, which
+   unfortunatly can't be changed that easily. It is set to 1024 by
+   default. To change this you have to edit the files limits.h and
+   fs.h in the directory /usr/src/linux/include/linux. Change the
+   definition of NR_OPEN and recompile the kernel.
+
+inode-state, inode-nr and inode-max
+   As with file handles, the kernel allocates the inode structures
+   dynamically, but can't free them yet.
+
+   The value in inode-max denotes the maximum number of inode
+   handlers. This value should be 3 to 4 times larger than the value
+   in file-max, since stdin, stdout, and network sockets also need an
+   inode struct to handle them. If you regularly run out of inodes,
+   you should increase this value.
+
+   The file inode-nr contains the first two items from inode-state, so
+   we'll skip to that file...
+
+   inode-state contains three actual numbers and four dummy values. The 
+   actual numbers are (in order of appearance) nr_inodes, nr_free_inodes,
+   and preshrink.
+
+   nr_inodes 
+     Denotes the number of inodes the system has allocated. This can
+     be slightly more than inode-max because Linux allocates them one
+     pageful at a time.
+
+   nr_free_inodes 
+     Represents the number of free inodes and pre shrink is nonzero
+     when the nr_inodes > inode-max and the system needs to prune the
+     inode list instead of allocating more.
+
+super-nr and super-max
+   Again, super block structures are allocated by the kernel,
+   but not freed. The file super-max contains the maximum number of
+   super block handlers, where super-nr shows the number of
+   currently allocated ones.
+
+   Every mounted file system needs a super block, so if you plan to
+   mount lots of file systems, you may want to increase these
+   numbers.
+
+3.3  /proc/fs/binfmt_misc - Miscellaneous binary formats
+
+Besides these files, there is the subdirectory
+/proc/sys/fs/binfmt_misc. This handles the kernel support for
+miscellaneous binary formats.
+
+Binfmt_misc provides the ability to register additional binary formats
+to the Kernel without compiling an additional module/kernel. Therefore
+binfmt_misc needs to know magic numbers at the beginning or the
+filename extension of the binary.
+
+It works by maintaining a linked list of structs, that contain a
+description of a binary format, including a magic with size (or the
+filename extension), offset and mask, and the interpreter name. On
+request it invokes the given interpreter with the original program as
+argument, as binfmt_java and binfmt_em86 and binfmt_mz do.
+Since binfmt_misc does not define any default binary-formats, you have to
+register an additional binary-format.
+
+There are two general files in binfmt_misc and one file per registered
+format. The two general files are register and status.
+
+Registering a new binary format
+
+echo :name:type:offset:magic:mask:interpreter: > /proc/sys/fs/binfmt_misc/register 
+
+with appropriate name (the name for the /proc-dir entry), offset
+(defaults to 0, if omitted), magic and mask (which can be omitted,
+defaults to all 0xff) and last but not least, the interpreter that is
+to be invoked (for example and testing '/bin/echo'). Type can be M for
+usual magic matching or E for filename extension matching (give
+extension in place of magic).
+
+To check or reset the status of the binary format handler:
+
+If you do a cat on the file /proc/sys/fs/binfmt_misc/status, you will
+get the current status (enabled/disabled) of binfmt_misc. Change the
+status by echoing 0 (disables) or 1 (enables) or -1 (caution: this
+clears all previously registered binary formats) to status. For
+example echo 0 > status to disable binfmt_misc (temporarily).
+
+Status of a single handler
+
+Each registered handler has an entry in /proc/sys/fs/binfmt_misc.
+These files perform the same function as status, but their scope is
+limited to the actual binary format. By cating this file, you also
+receive all related information about the interpreter/magic of the
+binfmt.
+
+Example usage of binfmt_misc (emulate binfmt_java)
+
+cd /proc/sys/fs/binfmt_misc
+echo ':Java:M::\xca\xfe\xba\xbe::/usr/local/java/bin/javawrapper:' > register
+echo ':HTML:E::html::/usr/local/java/bin/appletviewer:' > register
+echo ':Applet:M::<!--applet::/usr/local/java/bin/appletviewer:' > register
+echo ':DEXE:M::\x0eDEX::/usr/bin/dosexec:' > register
+
+These three lines add support for Java executables and Java applets
+(like binfmt_java, additionally recognizing the .html extension with
+no need to put <!--applet> to every applet file). You have to install
+the JDK and the shell-script /usr/local/java/bin/javawrapper too. It
+works around the brokenness of the Java filename handling. To add a
+Java binary, just create a link to the class-file somewhere in the
+path.
+
+3.4  /proc/sys/kernel - general kernel parameters
+
+This directory reflects general kernel behaviors. As I've said before,
+the contents are depend on your configuration. I'll list the most
+important files, along with descriptions of what they mean and how to
+use them.
+
+acct
+   The file contains three values; highwater, lowwater, and
+   frequency.
+
+   It exists only when BSD-style process accounting is enabled. These
+   values control its behavior. If the free space on the file system
+   where the log lives goes below lowwater%, accounting suspends. If
+   it goes above highwater%, accounting resumes. Frequency determines
+   how often you check the amount of free space (value is in
+   seconds). Default settings are: 4, 2, and 30. That is, suspend
+   accounting if there left <= 2% free; resume it if we have a value
+   >=3%; consider information about the amount of free space valid
+   for 30 seconds
+
+ctrl-alt-del
+   When the value in this file is 0, ctrl-alt-del is trapped and sent
+   to the init(1) program to handle a graceful restart. However, when
+   the value is > 0, Linux's reaction to this key combination will be
+   an immediate reboot, without syncing its dirty buffers.
+
+   Note: when a program (like dosemu) has the keyboard in raw mode,
+   the ctrl-alt-del is intercepted by the program before it ever
+   reaches the kernel tty layer, and it is up to the program to decide
+   what to do with it.
+
+domainname and hostname
+   These files can be controlled to set the NIS domainname and
+   hostname of your box. For the classic darkstar.frop.org a simple:
+
+   # echo "darkstar" > /proc/sys/kernel/hostname
+   # echo "frop.org" > /proc/sys/kernel/domainname
+
+   would suffice to set your hostname and NIS domainname.
+
+osrelease, ostype and version
+
+   The names make it pretty obvious what these fields contain:
+
+   >cat /proc/sys/kernel/osrelease
+   2.1.131
+   >cat /proc/sys/kernel/ostype
+   Linux
+   >cat /proc/sys/kernel/version
+   #8 Mon Jan 25 19:45:02 PST 1999
+   The files osrelease and ostype should be clear enough. Version
+   needs a little more clarification however. The #8 means that this
+   is the 8th kernel built from this source base and the date behind
+   it indicates the time the kernel was built. The only way to tune
+   these values is to rebuild the kernel.
+
+panic 
+   The value in this file represents the number of seconds the kernel
+   waits before rebooting on a panic. When you use the software
+   watchdog, the recommended setting is 60. If set to 0, the auto
+   reboot after a kernel panic is disabled, this is the default
+   setting.
+
+printk
+   The four values in printk denote console_loglevel,
+   default_message_loglevel, minimum_console_level, and
+   default_console_loglevel respectively.
+
+   These values influence printk() behavior when printing or logging
+   error messages, which come from inside the kernel. See syslog(2)
+   for more information on the different log levels.
+
+   console_loglevel
+     Messages with a higher priority than this will be printed to
+     the console.
+
+   default_message_level
+     Messages without an explicit priority will be printed with
+     this priority.
+
+   minimum_console_loglevel
+     Minimum (highest) value to which the console_loglevel can be set.
+
+   default_console_loglevel
+     Default value for console_loglevel.
+
+sg-big-buff
+   This file shows the size of the generic SCSI (sg) buffer. At this
+   point, you can't tune it yet, but you can change it at compile time
+   by editing include/scsi/sg.h and changing the value of
+   SG_BIG_BUFF.
+
+   If you use a scanner with SANE (Scanner Access now easy) you
+   might want to set this to a higher value. Look into the SANE
+   documentation on this issue.
+
+modprobe
+   The location where the modprobe binary is located. The kernel
+   uses this program to load modules on demand.
+
+3.5  /proc/sys/vm - The virtual memory subsystem
+
+The files in this directory can be used to tune the operation of the
+virtual memory (VM) subsystem of the Linux kernel. In addition, one of
+the files (bdflush) has a little influence on disk usage.
+
+bdflush
+   This file controls the operation of the bdflush kernel daemon. It
+   currently contains 9 integer values, 6 of which are actually used
+   by the kernel:
+
+    nfract      Percentage of buffer cache dirty to
+                activate bdflush
+    ndirty      Maximum number of dirty blocks to
+                write out per-wake-cycle
+    nrefill     Number of clean buffers to try to obtain
+                each time we call refill
+    nref_dirt   Dirty buffer threshold for activating bdflush
+                when trying to refill buffers.
+    dummy       unused
+    age_buffer  Time for normal buffer to age before you flush it
+    age_super   Time for superblock to age before you flush it
+    dummy       unused
+    dummy       unused
+
+   nfract
+     This parameter governs the maximum number of dirty buffers
+     in the buffer cache. Dirty means that the contents of the
+     buffer still have to be written to disk (as opposed to a
+     clean buffer, which can just be forgotten about). Setting
+     this to a high value means that Linux can delay disk writes
+     for a long time, but it also means that it will have to do a
+     lot of I/O at once when memory becomes short. A low value
+     will spread out disk I/O more evenly.
+
+   ndirty
+     Ndirty gives the maximum number of dirty buffers that
+     bdflush can write to the disk at one time. A high value will
+     mean delayed, bursty I/O, while a small value can lead to
+     memory shortage when bdflush isn't woken up often enough.
+
+   nrefill
+     This the number of buffers that bdflush will add to the list
+     of free buffers when refill_freelist() is called. It is
+     necessary to allocate free buffers beforehand, since the
+     buffers are often different sizes than the memory pages
+     and some bookkeeping needs to be done beforehand. The
+     higher the number, the more memory will be wasted and the
+     less often refill_freelist() will need to run.
+
+   nref_dirt
+     When refill_freelist() comes across more than nref_dirt
+     dirty buffers, it will wake up bdflush.
+
+   age_buffer and age_super
+     Finally, the age_buffer and age_super parameters govern the
+     maximum time Linux waits before writing out a dirty buffer
+     to disk. The value is expressed in jiffies (clockticks), the
+     number of jiffies per second is 100. Age_buffer is the
+     maximum age for data blocks, while age_super is for
+     filesystems meta data.
+
+buffermem
+   The three values in this file control how much memory should be
+   used for buffer memory. The percentage is calculated as a
+   percentage of total system memory.
+
+   The values are:
+
+   min_percent
+     This is the minimum percentage of memory that should be
+     spent on buffer memory.
+
+   borrow_percent
+     When Linux is short on memory, and the buffer cache uses more
+     than it has been allotted, the memory mangement (MM) subsystem
+     will prune the buffer cache more heavily than other memory to
+     compensate.
+
+   max_percent
+     This is the maximum amount of memory that can be used for
+     buffer memory.
+
+freepages
+   This file contains three values: min, low and high:
+
+   min
+     When the number of free pages in the system reaches this number,
+     only the kernel can allocate more memory.
+
+   low
+     If the number of free pages gets below this point, the kernel
+     starts swapping aggressively.
+
+   high
+     The kernel tries to keep up to this amount of memory free; if
+     memory comes below this point, the kernel gently starts swapping
+     in the hopes that it never has to do really aggressive swapping.
+
+kswapd
+   Kswapd is the kernel swap out daemon. That is, kswapd is that piece
+   of the kernel that frees memory when it gets fragmented or
+   full. Since every system is different, you'll probably want some
+   control over this piece of the system.
+
+   The file contains three numbers:
+
+   tries_base
+     The maximum number of pages kswapd tries to free in one round is
+     calculated from this number. Usually this number will be divided
+     by 4 or 8 (see mm/vmscan.c), so it isn't as big as it looks.
+
+     When you need to increase the bandwidth to/from swap, you'll want
+     to increase this number.
+
+   tries_min
+     This is the minimum number of times kswapd tries to free a page
+     each time it is called. Basically it's just there to make sure
+     that kswapd frees some pages even when it's being called with
+     minimum priority.
+
+
+  swap_cluster
+     This is probably the greatest influence on system
+     performance. swap_cluster is the number of pages kswapd writes in
+     one turn. You'll want this value to be large so that kswapd does
+     its I/O in large chunks and the disk doesn't have to seek as
+     often., but you don't want it to be too large since that would
+     flood the request queue.
+
+overcommit_memory
+   This file contains one value. The following algorithm is used to
+   decide if there's enough memory: if the value of overcommit_memory
+   is positive, then there's always enough memory. This is a useful
+   feature, since programs often malloc() huge amounts of memory 'just
+   in case', while they only use a small part of it. Leaving this
+   value at 0 will lead to the failure of such a huge malloc(), when
+   in fact the system has enough memory for the program to run.
+
+   On the other hand, enabling this feature can cause you to run out
+   of memory and thrash the system to death, so large and/or important
+   servers will want to set this value to 0.
+
+pagecache
+   This file does exactly the same as buffermem, only this file
+   controls the amount of memory allowed for memory mapping and
+   generic caching of files.
+
+   You don't want the minimum level to be too low, otherwise your
+   system might thrash when memory is tight or fragmentation is
+   high.
+
+pagetable_cache
+   The kernel keeps a number of page tables in a per-processor cache
+   (this helps a lot on SMP systems). The cache size for each
+   processor will be between the low and the high value.
+
+   On a low-memory, single CPU system, you can safely set these values
+   to 0 so you don't waste memory. It is used on SMP systems so that
+   the system can perform fast pagetable allocations without having to
+   aquire the kernel memory lock.
+
+   For large systems, the settings are probably fine. For normal
+   systems they won't hurt a bit. For small systems (<16MB ram) it
+   might be advantageous to set both values to 0.
+
+swapctl
+   This file contains no less than 8 variables. All of these values
+   are used by kswapd.
+
+   The first four variables sc_max_page_age, sc_page_advance,
+   sc_page_decline and sc_page_initial_age are used to keep track of
+   Linux's page aging. Page aging is a bookkeeping method to track
+   which pages of memory are often used, and which pages can be
+   swapped out without consequences.
+
+   When a page is swapped in, it starts at sc_page_initial_age
+   (default 3) and when the page is scanned by kswapd, its age is
+   adjusted according to the following scheme:
+
+    o If the page was used since the last time we scanned, its age
+      is increased by sc_page_advance (default 3) up to a
+      maximum of sc_max_page_age (default 20).
+
+    o Else (meaning it wasn't used) its age is decreased by
+      sc_page_decline (default 1).
+
+   When a page reaches age 0, it's ready to be swapped out.
+
+   The next four variables sc_age_cluster_fract, sc_age_cluster_min,
+   sc_pageout_weight and sc_bufferout_weight, can be used to control
+   kswapd's aggressiveness in swapping out pages.
+
+   Sc_age_cluster_fract is used to calculate how many pages from a
+   process are to be scanned by kswapd. The formula used is
+
+           sc_age_cluster_fract
+           -------------------- * resident set size
+              1024   =20
+
+   So if you want kswapd to scan the whole process,
+   sc_age_cluster_fract needs to have a value of 1024. The minimum
+   number of pages kswapd will scan is represented by
+   sc_age_cluster_min, this is done so kswapd will also scan small
+   processes.
+
+   The values of sc_pageout_weight and sc_bufferout_weight are used
+   to control how many tries kswapd will make in order to swap out
+   one page/buffer. These values can be used to fine-tune the ratio
+   between user pages and buffer/cache memory. When you find that
+   your Linux system is swapping out too many process pages in order
+   to satisfy buffer memory demands, you might want to either
+   increase sc_bufferout_weight, or decrease the value of
+   sc_pageout_weight.
+
+3.6  /proc/sys/dev - Device specific parameters
+
+Currently there is only support for CDROM drives, but other drivers may
+wish to register themselves in here in the future. The cdrom/ directory
+contains several files that either control or supply information about
+the CDROM subsystem. 
+
+>cat /proc/sys/dev/cdrom/info
+CD-ROM information, Id: cdrom.c 3.04 1999/09/12
+
+drive name:            hdd     hdc     hdb     hda
+drive speed:           32      24      10      0
+drive # of slots:      1       1       1       1
+Can close tray:                1       1       1       1
+Can open tray:         1       1       1       1
+Can lock tray:         1       1       1       1
+Can change speed:      1       1       1       1
+Can select disk:       0       0       0       0
+Can read multisession: 1       1       1       1
+Can read MCN:          1       1       1       1
+Reports media changed: 1       1       1       1
+Can play audio:                1       1       1       1
+Can write CD-R:                0       1       0       0
+Can write CD-RW:       0       1       0       0
+Can read DVD:          0       0       0       1
+Can write DVD-R:       0       0       0       0
+Can write DVD-RAM:     0       0       0       0
+
+You see four drives and their lists of features. These are all ATAPI
+drives - SCSI drives will be numbered sr0, sr1, and so forth.
+
+The remaining files all set options in the driver.
+
+autoclose
+    Close the drive tray when the drive is accessed.
+
+autoeject
+    Eject the tray when the drive is umounted.
+
+check_media
+    Verify the media type when opening the device. This is generally
+    meant for audio CD's.
+
+debug
+    Print debugging messages.
+
+lock
+    Lock the tray when the drive is in use.
+
+
+3.7  /proc/sys/sunrpc - Remote procedure calls
+
+This directory contains four files, which enable or disable debugging
+for the RPC functions NFS, NFS-daemon, RPC and NLM. The default values
+are 0. They can be set to one, to turn debugging on.  (The default
+value is 0 for each)
+
+3.8  /proc/sys/net - Networking stuff
+
+The interface to the networking parts of the kernel is located in
+/proc/sys/net. The table below shows all possible subdirectories. You
+may see only some of them, depending on the configuration of your
+kernel:
+
++-------------------------------------------------------------+
+| core     General parameter   |appletalk  Appletalk protocol |
+| unix     Unix domain sockets |netrom     NET/ROM            |
+| 802      E802 protocol       |ax25       AX25               |
+| ethernet Ethernet protocol   |rose       X.25 PLP layer     |
+| ipv4     IP version 4        |x25        X.25 protocol      |
+| ipx      IPX                 |token-ring IBM token ring     |
+| bridge   Bridging            |decnet     DEC net            |
+| ipv6     IP version 6        |                              |
++-------------------------------------------------------------+
+
+We will concentrate on IP networking here. As AX15, X.25, and DEC Net
+are only minor players in the Linux world, we'll skip them in this
+chapter. You'll find some short info to Appletalk and IPX further down
+in section 3.10 and 3.11. Please look in the online documentation and
+the kernel source to get a detailed view of the parameters for those
+protocols. In this section we'll discuss the subdirectories printed in
+bold letters in the table above. As default values are suitable for
+most needs, there is no need to change these values.
+
+/proc/sys/net/core - Network core options
+
+rmem_default
+   The default setting of the socket receive buffer in bytes.
+
+rmem_max
+   The maximum receive socket buffer size in bytes.
+
+wmem_default
+   The default setting (in bytes) of the socket send buffer.
+
+wmem_max
+   The maximum send socket buffer size in bytes.
+
+message_burst and message_cost
+   These parameters are used to limit the warning messages written to
+   the kernel log from the networking code. They enforce a rate limit
+   to make a denial-of-service attack impossible. The higher the
+   message_cost factor is, the less messages will be
+   written. Message_burst controls when messages will be dropped. The
+   default settings limit warning messages to one every five seconds.
+
+netdev_max_backlog
+   Maximal number of packets, queued on INPUT side, when the interface
+   receives packets faster than kernel can process them.
+
+optmem_max
+   Maximum ancillary buffer size allowed per socket. Ancillary data is
+   a sequence of struct cmsghdr structures with appended data.
+
+/proc/sys/net/unix - Parameters for UNIX domain sockets
+
+There are only two files in this subdirectory. They control the delays
+for deleting and destroying socket descriptors.
+
+3.9  /proc/sys/net/ipv4 - IPV4 settings
+
+IP version 4 is still the most used protocol in Unix networking. It
+will be replaced by IP version 6 in the next couple of years, but for
+the moment it's the de facto standard for the internet and is used in
+most networking environments around the world. Because of the
+importance of this protocol, we'll have a deeper look into the subtree
+controlling the behavior of the IPv4 subsystem of the Linux kernel.
+
+Let's start with the entries in /proc/sys/net/ipv4 itself.
+
+ICMP settings
+
+icmp_echo_ignore_all and icmp_echo_ignore_broadcasts
+   Turn on (1) or off (0), if the kernel should ignore all ICMP ECHO
+   requests, or just those to broadcast and multicast addresses.
+
+   Please note that if you accept ICMP echo requests with a
+   broadcast/multicast destination address your network may be used
+   as an exploder for denial of service packet flooding attacks to
+   other hosts.
+
+icmp_destunreach_rate, icmp_echoreply_rate,
+icmp_paramprob_rate and icmp_timeexeed_rate
+   Sets limits for sending ICMP packets to specific targets. A value of
+   zero disables all limiting. Any positive value sets the maximum
+   package rate in hundredths of a second (on Intel systems).
+
+IP settings
+
+ip_autoconfig
+   This file contains one, if the host got its IP configuration by
+   RARP, BOOTP, DHCP or a similar mechanism. Otherwise it is zero.
+
+ip_default_ttl
+   TTL (Time To Live) for IPv4 interfaces. This is simply the
+   maximum number of hops a packet may travel.
+
+ip_dynaddr
+   Enable dynamic socket address rewriting on interface address change. This
+   is useful for dialup interface with changing IP addresses.
+
+ip_forward
+   Enable or disable forwarding of IP packages between interfaces. A
+   change of this value resets all other parameters to their default
+   values. They differ if the kernel is configured as host or router.
+
+ip_local_port_range
+   Range of ports used by TCP and UDP to choose the local
+   port. Contains two numbers, the first number is the lowest port,
+   the second number the highest local port. Default is 1024-4999.
+   Should be changed to 32768-61000 for high-usage systems.
+
+ip_no_pmtu_disc
+   Global switch to turn path MTU discovery off. It can also be set
+   on a per socket basis by the applications or on a per route
+   basis.
+
+ip_masq_debug
+   Enable/disable debugging of IP masquerading.
+
+
+IP fragmentation settings
+
+ipfrag_high_trash and ipfrag_low_trash
+   Maximum memory used to reassemble IP fragments. When
+   ipfrag_high_thresh bytes of memory is allocated for this purpose,
+   the fragment handler will toss packets until ipfrag_low_thresh is
+   reached.
+
+
+ipfrag_time
+   Time in seconds to keep an IP fragment in memory.
+
+TCP settings
+
+tcp_retrans_collapse
+   Bug-to-bug compatibility with some broken printers. On retransmit
+   try to send bigger packets to work around bugs in certain TCP
+   stacks. Can be turned off by setting it to zero.
+
+tcp_keepalive_probes
+   Number of keep alive probes TCP sends out, until it decides that the
+   connection is broken.
+
+tcp_keepalive_time
+   How often TCP sends out keep alive messages, when keep alive is
+   enabled. The default is 2 hours.
+
+tcp_syn_retries
+   Number of times initial SYNs for a TCP connection attempt will be
+   retransmitted. Should not be higher than 255. This is only the
+   timeout for outgoing connections, for incoming connections the
+   number of retransmits is defined by tcp_retries1.
+
+tcp_sack
+   Enable select acknowledgments after RFC2018.
+
+tcp_timestamps
+   Enable timestamps as defined in RFC1323.
+
+tcp_stdurg
+   Enable the strict RFC793 interpretation of the TCP urgent pointer
+   field. The default is to use the BSD compatible interpretation
+   of the urgent pointer pointing to the first byte after the urgent
+   data. The RFC793 interpretation is to have it point to the last
+   byte of urgent data. Enabling this option may lead to
+   interoperatibility problems. Disabled by default.
+
+tcp_syncookies
+   Only valid when the kernel was compiled with
+   CONFIG_SYNCOOKIES. Send out syncookies when the syn backlog queue
+   of a socket overflows. This is to prevent against the common 'syn
+   flood attack'. Disabled by default.
+
+   Note that the concept of a socket backlog is abandoned, this
+   means the peer may not receive reliable error messages from an
+   over loaded server with syncookies enabled.
+
+tcp_window_scaling
+   Enable window scaling as defined in RFC1323.
+
+tcp_fin_timeout
+   How many seconds to wait for a final FIN before the socket is
+   always closed. This is strictly a violation of the TCP
+   specification, but required to prevent denial-of-service attacks.
+
+tcp_max_ka_probes
+   How many keepalive probes are sent per slow timer run. Shouldn't be
+   set too high to prevent bursts.
+
+tcp_max_syn_backlog
+   Length of the per socket backlog queue. Since Linux 2.2 the backlog
+   specified in listen(2) only specifies the length of the backlog
+   queue of already established sockets. When more connection requests
+   arrive Linux starts to drop packets. When syncookies are enabled
+   the packets are still answered and the maximum queue is effectively
+   ignored.
+
+tcp_retries1
+   Defines how often an answer to a TCP connection request is
+   retransmitted before giving up.
+
+tcp_retries2
+   Defines how often a TCP packet is retransmitted before giving up.
+
+Interface specific settings
+
+In the directory /proc/sys/net/ipv4/conf you'll find one subdirectory
+for each interface the system knows about and one directory calls
+all. Changes in the all subdirectory affect all interfaces, where
+changes in the other subdirectories affect only one interface.
+
+All directories have the same entries:
+
+accept_redirects
+   This switch decides if the kernel accepts ICMP redirect messages
+   or not. The default is 'yes', if the kernel is configured for a
+   regular host; and 'no' for a router configuration.
+
+accept_source_route
+   Should source routed packages be accepted or declined. The
+   default is dependent on the kernel configuration. It's 'yes' for
+   routers and 'no' for hosts.
+
+bootp_relay
+   Accept packets with source address 0.b.c.d destined not to this
+   host as local ones. It is supposed that BOOTP relay daemon will
+   catch and forward such packets.
+
+   The default is 'no', as this feature is not implemented yet
+   (kernel version 2.2.0-pre?).
+
+forwarding
+   Enable or disable IP forwarding on this interface.
+
+log_martians
+   Log packets with source addresses with no known route to kernel log.
+
+mc_forwarding
+   Do multicast routing. The kernel needs to be compiled with
+   CONFIG_MROUTE and a multicast routing daemon is required.
+
+proxy_arp
+   Do (1) or don't (0) do proxy ARP.
+
+rp_filter
+   Integer value deciding if source validation should be made. 
+   1 means yes, 0 means no. Disabled by default, but 
+   local/broadcast address spoofing is always on.
+
+   If you set this to 1 on a router that is the only connection
+   for a network to the net , it evidently prevents spoofing attacks
+   against your internal networks (external addresses can still be
+   spoofed), without the need for additional firewall rules.
+
+secure_redirects
+   Accept ICMP redirect messages only for gateways, listed in
+   default gateway list. Enabled by default.
+
+shared_media
+   If it is not set the kernel does not assume that different subnets
+   on this device can communicate directly. Default setting is 'yes'.  
+
+send_redirects
+   Determines if or if not to send ICMP redirects to other hosts.
+
+
+Routing settings
+
+The directory /proc/sys/net/ipv4/route contains several file to
+control routing issues.
+
+error_burst and error_cost
+   These parameters are used to limit the warning messages written to
+   the kernel log from the routing code. The higher the error_cost
+   factor is, the fewer messages will be written. Error_burst controls
+   when messages will be dropped. The default settings limit warning
+   messages to one every five seconds.
+
+flush
+   Writing to this file results in a flush of the routing cache.
+
+gc_elastic, gc_interval, gc_min_interval, gc_tresh, gc_timeout
+   Values to control the frequency and behavior of the garbage
+   collection algorithm for the routing cache.
+
+max_size
+   Maximum size of the routing cache. Old entries will be purged
+   once the cache has this size.
+
+max_delay, min_delay
+   Delays for flushing the routing cache.
+
+redirect_load, redirect_number
+   Factors which determine if more ICPM redirects should be sent to
+   a specific host. No redirects will be sent once the load limit or
+   the maximum number of redirects has been reached.
+
+redirect_silence
+
+   Timeout for redirects. After this period redirects will be sent
+   again, even if this has been stopped, because the load or number
+   limit has been reached.
+
+Network Neighbor handling
+
+Settings about how to handle connections with direct neighbors (nodes
+attached to the same link) can be found in the directory
+/proc/sys/net/ipv4/neigh.
+
+As we saw it in the conf directory, there is a default subdirectory
+which holds the default values, and one directory for each
+interface. The contents of the directories are identical, with the
+single exception that the default settings contain additional options
+to set garbage collection parameters.
+
+In the interface directories you'll find the following entries:
+
+base_reachable_time
+   A base value used for computing the random reachable time value
+   as specified in RFC2461.
+
+retrans_time
+   The time, expressed in jiffies (1/100 sec), between retransmitted
+   Neighbor Solicitation messages. Used for address resolution and to
+   determine if a neighbor is unreachable.
+
+unres_qlen
+   Maximum queue length for a pending arp request - how many packets
+   are accepted from other layers while the arp address is still
+   resolved.
+
+anycast_delay
+   Maximum for random delay of answers to neighbor solicitation
+   messages in jiffies (1/100 sec). Not yet implemented (Linux does
+   not have anycast support yet).
+
+ucast_solicit
+   Maximum number of retries for unicast solicitation.
+
+mcast_solicit
+   Maximum number of retries for multicast solicitation.
+
+delay_first_probe_time
+   Delay for the first time probe if the neighbor is reachable. (see
+   gc_stale_time).
+
+locktime
+   An ARP/neighbor entry is only replaced with a new one if the old
+   is at least locktime old. This prevents ARP cache thrashing.
+
+proxy_delay
+   Maximum time (real time is random [0..proxytime]) before
+   answering to an arp request for which we have an proxy arp entry.
+   In some cases, this is used to prevent network flooding.
+
+proxy_qlen
+   Maximum queue length of the delayed proxy arp timer (see
+   proxy_delay).
+
+app_solcit
+   Determines the number of requests to send to the user level arp
+   daemon. 0 to turn off.
+
+gc_stale_time
+   Determines how often to check for stale ARP entries. After an ARP
+   entry is stale it will be resolved again (useful when an IP address
+   migrates to another machine). When ucast_solicit is > 0 it first
+   tries to send an ARP packet directly to the known host, when that
+   fails and mcast_solicit is > 0, an ARP request is broadcasted.
+
+3.10  Appletalk
+
+The /proc/sys/net/appletalk directory holds the Appletalk
+configuration data when Appletalk is loaded. The configurable
+parameters are:
+
+aarp-expiry-time
+   The amount of time we keep an AARP entry before expiring
+   it. Used to age out old hosts.
+
+aarp-resolve-time
+   The amount of time we will spend trying to resolve an Appletalk
+   address.
+
+aarp-retransmit-limit
+   The number of times we will retransmit a query before giving up.
+
+aarp-tick-time
+   Controls the rate at which expiries are checked.
+
+
+The directory /proc/net/appletalk holds the list of active appletalk
+sockets on a machine.
+
+The fields indicate the DDP type, the local address (in network:node
+format) the remote address, the size of the transmit pending queue,
+the size of the received queue (bytes waiting for applications to
+read) the state and the uid owning the socket.
+
+/proc/net/atalk_iface lists all the interfaces configured for
+appletalk.It shows the name of the interface, its appletalk address,
+the network range on that ad- dress (or network number for phase 1
+networks), and the status of the interface.
+
+/proc/net/atalk_route lists each known network route. It lists the
+target (network) that the route leads to, the router (may be directly
+connected), the route flags, and the device the route is via.
+
+3.11  IPX
+
+The IPX protocol has no tunable values in /proc/sys/net.
+
+The IPX protocol does, however, provide /proc/net/ipx. This lists each
+IPX socket giving the local and remote addresses in Novell format
+(that is network:node:port). In accordance with the strange Novell
+tradition, everything but the port is in hex. Not_Connected is
+displayed for sockets that are not tied to a specific remote
+address. The Tx and Rx queue sizes indicate the number of bytes
+pending for transmit and receive. The state indicates the state the
+socket is in and the uid is the owning uid of the socket.
+
+The /proc/net/ipx_interface file lists all IPX interfaces. For each
+interface it gives the network number, the node number, and indicates
+if the network is the primary network. It also indicates which device it is bound to (or
+Internal for internal networks) and the Frame Type if
+appropriate. Linux supports 802.3, 802.2, 802.2 SNAP and DIX (Blue
+Book) ethernet framing for IPX.
+
+The /proc/net/ipx_route table holds a list of IPX routes. For each
+route it gives the destination network, the router node (or Directly)
+and the network address of the router (or Connected) for internal
+networks.
index ebdef08735190877e781515a494b27c0088a42d0..9673a46e78fa3b76d29e233255fb8d4b120f2d30 100644 (file)
@@ -20,7 +20,7 @@ stable as humanly possible.
 Full Information
 ----------------
 
-From: Linus Torvalds <torvalds@cs.helsinki.fi>
+From: Linus Torvalds <torvalds@transmeta.com>
 
 How to track down an Oops.. [originally a mail to linux-kernel]
 
diff --git a/Documentation/proc.txt b/Documentation/proc.txt
deleted file mode 100644 (file)
index ef2246d..0000000
+++ /dev/null
@@ -1,1353 +0,0 @@
-
------------------------------------------------------------------------
-
-                T H E  /proc   F I L E S Y S T E M
-
------------------------------------------------------------------------
-/proc/sys      Terrehon Bowden <terrehon@wpi.com>       January 27 1999
-               Bodo Bauer <bb@ricochet.net>                
------------------------------------------------------------------------
-Version 1.1                                         Kernel version 2.2
------------------------------------------------------------------------
-Contents
-
-1   Introduction/Credits
-
-1.1  Legal Issues
-
-2   The /proc file system
-
-2.1  Process specific subdirectories
-2.2  Kernel data
-2.3  IDE devices in /proc/ide
-2.4  Networking info in /proc/net
-2.5  SCSI info
-2.6  Parallel port info in /proc/parport
-2.7  TTY info in /proc/tty
-
-3   Reading and modifying kernel parameters
-
-3.1  /proc/sys/debug and /proc/sys/proc
-3.2  /proc/fs - File system data
-3.3  /proc/fs/binfmt_misc - Miscellaneous binary formats
-3.4  /proc/sys/kernel - General kernel parameters
-3.5  /proc/sys/vm - The virtual memory subsystem
-3.6  /proc/sys/dev - Device specific parameters
-3.7  /proc/sys/sunrpc - Remote procedure calls
-3.8  /proc/sys/net - Networking stuff
-3.9  /proc/sys/net/ipv4 - IPV4 settings=20
-3.10 Appletalk
-3.11 IPX
-
------------------------------------------------------------------------
-
-1   Introduction/Credits
-
-This documentation is part of a soon to be released book published by
-IDG Books on the SuSE Linux distribution. As there is no complete
-documentation for the /proc file system and we've used many freely
-available sources to write this chapter, it seems only fair to give
-the work back to the Linux community. This work is based on the
-2.1.132 and 2.2.0-pre-kernel versions. I'm afraid it's still far from
-complete, but we hope it will be useful. As far as we know, it is the
-first 'all-in-one' document about the /proc file system. It is
-focused on the Intel x86 hardware, so if you are looking for PPC, ARM,
-SPARC, APX, etc., features, you probably won't find what you are
-looking for. It also only covers IPv4 networking, not IPv6 nor other
-protocols - sorry.
-
-We'd like to thank Alan Cox, Rik van Riel, and Alexey Kuznetsov.  We'd
-also like to extend a special thank you to Andi Kleen for
-documentation, which we relied on heavily to create this document, as
-well as the additional information he provided. Thanks to everybody
-else who contributed source or docs to the Linux kernel and helped
-create a great piece of software... :)
-
-If you have any comments, corrections or additions, please don't
-hesitate to contact Bodo Bauer at bb@ricochet.net. We'll be happy to
-add them to this document.
-
-The latest version of this document is available online at
-http://www.suse.com/~bb/Docs/proc.html in HTML, ASCII, and as 
-Postscript file. 
-
-1.1  Legal Stuff
-
-We don't guarantee the correctness of this document, and if you come
-to us complaining about how you screwed up your system because of
-incorrect documentation, we won't feel responsible...
-
------------------------------------------------------------------------
-
-2   The /proc file system
-
-The proc file system acts as an interface to internal data structures
-in the kernel. It can be used to obtain information about the system
-and to change certain kernel parameters at runtime.  It contains
-(among other things) one subdirectory for each process running on the
-system which is named after the process id (PID) of the process. The
-link self points to the process reading the file system.
-
-2.1  Process specific subdirectories
-
-Each process subdirectory has the in table 1.1 listed entries.
-
-      _________________________________________________
-      cmdline Command line arguments
-      environ Values of environment variables
-      fd    Directory, which contains all file descriptors
-      mem   Memory held by this process
-      stat   Process status
-      status  Process status in human readable form
-      cwd   Link to the current working directory
-      exe   Link to the executable of this process
-      maps   Memory maps
-      root   Link to the root directory of this process
-      statm  Process memory status information
-     _________________________________________________
-      Table 1.1: Process specific entries in /proc
-
-For example, to get the status information of a process, all you have
-to do is read the file /proc/PID/status:
-
-> cat /proc/self/status
-Name:   cat
-State:  R (running)
-Pid:    5633
-PPid:   5609
-Uid:    501     501     501     501
-Gid:    100     100     100     100
-Groups: 100 16 
-VmSize:      804 kB
-VmLck:         0 kB
-VmRSS:       344 kB
-VmData:       68 kB
-VmStk:        20 kB
-VmExe:        12 kB
-VmLib:       660 kB
-SigPnd: 0000000000000000
-SigBlk: 0000000000000000
-SigIgn: 0000000000000000
-SigCgt: 0000000000000000
-CapInh: 00000000fffffeff
-CapPrm: 0000000000000000
-CapEff: 0000000000000000
-
-This shows you almost the same information as you would get if you
-viewed it with the ps command. In fact, ps uses the proc file system
-to obtain its information.
-
-The statm file contains more detailed information about the process
-memory usage. It contains seven values with the following meanings:
-
-size       total program size
-resident   size of in memory portions
-shared     number of the pages that are shared
-trs        number of pages that are 'code'
-drs        number of pages of data/stack
-lrs        number of pages of library
-dt        number of dirty pages
-
-The ratio text/data/library is approximate only by heuristics.
-
-2.2  Kernel data
-
-Similar to the process entries, these are files which give information
-about the running kernel. The files used to obtain this information
-are contained in /proc and are listed in table 1.2. Not all of these
-will be present in your system. It depends on the kernel configuration
-and the loaded modules, which files are there, and which are missing.
-
-      ________________________________________________
-      apm           Advanced power management info
-      cmdline       Kernel command line
-      cpuinfo       Info about the CPU
-      devices       Available devices (block and character)
-      dma           Used DMS channels
-      filesystems   Supported filesystems
-      interrupts    Interrupt usage
-      ioports       I/O port usage
-      kcore         Kernel core image
-      kmsg          Kernel messages
-      ksyms         Kernel symbol table
-      loadavg       Load average
-      locks         Kernel locks
-      meminfo       Memory info
-      misc          Miscellaneous
-      modules       List of loaded modules
-      mounts        Mounted filesystems
-      partitions    Table of partitions known to the system
-      rtc           Real time clock
-      slabinfo      Slab pool info
-      stat          Overall statistics
-      swaps         Swap space utilization
-      uptime        System uptime
-      version       Kernel version
-      ________________________________________________
-           Table 1.2: Kernel info in /proc
-
-You can, for example, check which interrupts are currently in use and
-what they are used for by looking in the file /proc/interrupts:
-
-> cat /proc/interrupts
-           CPU0       
-  0:    8728810          XT-PIC  timer
-  1:        895          XT-PIC  keyboard
-  2:          0          XT-PIC  cascade
-  3:     531695          XT-PIC  aha152x
-  4:    2014133          XT-PIC  serial
-  5:      44401          XT-PIC  pcnet_cs
-  8:          2          XT-PIC  rtc
- 11:          8          XT-PIC  i82365
- 12:     182918          XT-PIC  PS/2 Mouse
- 13:          1          XT-PIC  fpu
- 14:    1232265          XT-PIC  ide0
- 15:          7          XT-PIC  ide1
-NMI:          0
-
-There three more important subdirectories in /proc: net, scsi and
-sys. The general rule is that the contents, or even the existence of
-these directories, depends on your kernel configuration. If SCSI is
-not enabled, the directory scsi may not exist. The same is true with
-the net, which is only there when networking support is present in the
-running kernel.
-
-The slabinfo file gives information about memory usage on the slab
-level.  Linux uses slab pools for memory management above page level
-in version 2.2. Commonly used objects have their own slab pool (like
-network buffers, directory cache, etc.).
-
-2.3  IDE devices in /proc/ide
-
-This subdirectory contains information about all IDE devices that the
-kernel is aware of.  There is one subdirectory for each device
-(i.e. hard disk) containing the following files:
-
-       cache             The cache
-       capacity          Capacity of the medium
-       driver            Driver and version
-       geometry          Physical and logical geometry
-       identify          Device identify block
-       media             Media type
-       model             Device identifier
-       settings          Device setup
-       smart_thresholds  IDE disk management thresholds
-       smart_values      IDE disk management values
-
-2.4  Networking info in /proc/net
-
-This directory follows the usual pattern. Table 1.3 lists the files
-and their meaning.
-
-     ____________________________________________________
-     arp             Kernel ARP table
-     dev             network devices with statistics
-     dev_mcast       Lists the Layer2 multicast groups a
-                     device is listening to (interface index,
-                     label, number of references, number of
-                     bound addresses).
-     dev_stat        network device status
-     ip_fwchains     Firewall chain linkage
-     ip_fwnames      Firewall chains
-     ip_masq         Directory containing the masquerading
-                     tables.
-     ip_masquerade   Major masquerading table
-     netstat         Network statistics
-     raw             Raw device statistics
-     route           Kernel routing table
-     rpc             Directory containing rpc info
-     rt_cache        Routing cache
-     snmp            SNMP data
-     sockstat        Socket statistics
-     tcp             TCP sockets
-     tr_rif          Token ring RIF routing table
-     udp             UDP sockets
-     unix            UNIX domain sockets
-     wireless        Wireless interface data (Wavelan etc)
-     igmp            IP multicast addresses, which this host joined
-     psched          Global packet scheduler parameters.
-     netlink         List of PF_NETLINK sockets.
-     ip_mr_vifs      List of multicast virtual interfaces.
-     ip_mr_cache     List of multicast routing cache.
-     udp6            UDP sockets (IPv6)
-     tcp6            TCP sockets (IPv6)
-     raw6            Raw device statistics (IPv6)
-     igmp6          IP multicast addresses, which this host joineed (IPv6)
-     if_inet6        List of IPv6 interface addresses.
-     ipv6_route      Kernel routing table for IPv6
-     rt6_stats       global IPv6 routing tables statistics.
-     sockstat6       Socket statistics (IPv6)
-     snmp6           Snmp data (IPv6)
-     ____________________________________________________
-         Table 1.3: Network info in /proc/net
-
-You can use this information to see which network devices are
-available in your system and how much traffic was routed over those
-devices:
-
-> cat /proc/net/dev
-Inter-|Receive                                                   |[...
- face |bytes    packets errs drop fifo frame compressed multicast|[...
-    lo:  908188   5596     0    0    0     0          0         0 [...        
-  ppp0:15475140  20721   410    0    0   410          0         0 [... 
-  eth0:  614530   7085     0    0    0     0          0         1 [...
-
-...] Transmit
-...] bytes    packets errs drop fifo colls carrier compressed
-...]  908188     5596    0    0    0     0       0          0
-...] 1375103    17405    0    0    0     0       0          0
-...] 1703981     5535    0    0    0     3       0          0
-
-2.5  SCSI info
-
-If you have a SCSI host adapter in your system, you'll find a
-subdirectory named after the driver for this adapter in /proc/scsi. 
-You'll also see a list of all recognized SCSI devices in /proc/scsi:
-
->cat /proc/scsi/scsi
-Attached devices: 
-Host: scsi0 Channel: 00 Id: 00 Lun: 00
-  Vendor: QUANTUM  Model: XP34550W         Rev: LXY4
-  Type:   Direct-Access                    ANSI SCSI revision: 02
-Host: scsi0 Channel: 00 Id: 01 Lun: 00
-  Vendor: SEAGATE  Model: ST34501W         Rev: 0018
-  Type:   Direct-Access                    ANSI SCSI revision: 02
-Host: scsi0 Channel: 00 Id: 02 Lun: 00
-  Vendor: SEAGATE  Model: ST34501W         Rev: 0017
-  Type:   Direct-Access                    ANSI SCSI revision: 02
-Host: scsi0 Channel: 00 Id: 04 Lun: 00
-  Vendor: ARCHIVE  Model: Python 04106-XXX Rev: 703b
-  Type:   Sequential-Access                ANSI SCSI revision: 02
-
-The directory named after the driver has one file for each adapter
-found in the system. These files contain information about
-the controller, including the used IRQ and the IO address range:
-
->cat /proc/scsi/ncr53c8xx/0
-General information:
- Chip NCR53C875, device id 0xf, revision id 0x4
- IO port address 0xec00, IRQ number 11
- Synchronous period factor 12, max commands per lun 4
-
-2.6  Parallel port info in /proc/parport
-
-The directory /proc/parport contains information about the parallel
-ports of your system. It has one subdirectory for each port, named
-after the port number (0,1,2,...).
-
-This directory contains four files:
-
-    autoprobe   Autoprobe results of this port
-    devices     Connected device modules
-    hardware    Hardware info (port type, io-port, DMA, IRQ, etc.)
-    irq         Used interrupt, if any
-
-2.7  TTY info in /proc/tty
-
-Information about the available and the actually used tty's can be
-found in /proc/tty. You'll find entries for drivers and line
-disciplines in this directory, as shown in the table below:
-
-     drivers       List of drivers and their usage
-     ldiscs        Registered line disciplines
-     driver/serial Usage statistic and status of single tty lines
-
-To see which tty's are currently in use, you can simply look into the
-file /proc/tty/drivers:
-
->cat /proc/tty/drivers
-pty_slave            /dev/pts      136   0-255 pty:slave
-pty_master           /dev/ptm      128   0-255 pty:master
-pty_slave            /dev/ttyp       3   0-255 pty:slave
-pty_master           /dev/pty        2   0-255 pty:master
-serial               /dev/cua        5   64-67 serial:callout
-serial               /dev/ttyS       4   64-67 serial
-/dev/tty0            /dev/tty0       4       0 system:vtmaster
-/dev/ptmx            /dev/ptmx       5       2 system
-/dev/console         /dev/console    5       1 system:console
-/dev/tty             /dev/tty        5       0 system:/dev/tty
-unknown              /dev/tty        4    1-63 console
-
------------------------------------------------------------------------
-
-3   Reading and modifying kernel parameters
-
-A very interesting part of /proc is the directory /proc/sys. This not
-only provides information, it also allows you to change parameters
-within the kernel. Be very careful when trying this. You can optimize
-your system, but you also can crash it. Never play around with kernel
-parameters on a production system. Set up a development machine and
-test to make sure that everything works the way you want it to.  You
-may have no alternative but to reboot the machine once an error has
-been made.
-
-To change a value, simply echo the new value into the file. An example
-is given below in the section on the file system data. You need to be
-root to do this. You can create your own boot script to get this done
-every time your system boots. 
-
-The files in /proc/sys can be used to tune and monitor miscellaneous
-and general things in the operation of the Linux kernel.  Since some
-of the files can inadvertently disrupt your system, it is advisable to
-read both documentation and source before actually making
-adjustments. In any case, be very careful when writing to any of these
-files. The entries in /proc may change slightly between the 2.1.* and
-the 2.2 kernel, so review the kernel documentation if there is any
-doubt. You'll find the documentation in the directory
-/usr/src/linux/Documentation/sys. This chapter is heavily based on the
-documentation included in the pre 2.2 kernels. Thanks to Rick van Riel
-for providing this information.
-
-3.1  /proc/sys/debug and /proc/sys/proc
-
-These two subdirectories are empty.
-
-3.2  /proc/fs - File system data
-
-This subdirectory contains specific file system, file handle, inode,
-dentry and quota information.
-
-Currently, these files are in /proc/sys/fs:
-
-dentry-state
-   Status of the directory cache. Since directory entries are
-   dynamically allocated and deallocated, this file gives information
-   about the current status. It holds six values, in which the last
-   two are not used and are always zero. The other four mean:
-
-       nr_dentry   Seems to be zero all the time
-       nr_unused   Number of unused cache entries
-       age_limit   Age in seconds after the entry may be
-                   reclaimed, when memory is short
-       want_pages  internal
-
-dquot-nr and dquot-max
-   The file dquot-max shows the maximum number of cached disk quota
-   entries.
-
-   The file dquot-nr shows the number of allocated disk quota
-   entries and the number of free disk quota entries.
-
-   If the number of free cached disk quotas is very low and you have
-   a large number of simultaneous system users, you might want
-   to raise the limit.
-
-file-nr and file-max
-   The kernel allocates file handles dynamically, but as yet
-   doesn't free them again.
-
-   The value in file-max denotes the maximum number of file handles
-   that the Linux kernel will allocate. When you get a lot of error
-   messages about running out of file handles, you might want to raise
-   this limit. The default value is 4096. To change it, just write the
-   new number into the file:
-
-   # cat /proc/sys/fs/file-max
-   4096
-   # echo 8192 > /proc/sys/fs/file-max
-   # cat /proc/sys/fs/file-max
-   8192
-
-   This method of revision is useful for all customizable parameters
-   of the kernel - simply echo the new value to the corresponding
-   file.
-  
-   The three values in file-nr denote the number of allocated file
-   handles, the number of used file handles, and the maximum number of
-   file handles. When the allocated file handles come close to the
-   maximum, but the number of actually used ones is far behind, you've
-   encountered a peak in your usage of file handles and you don't need
-   to increase the maximum.
-
-   However, there is still a per process limit of open files, which
-   unfortunatly can't be changed that easily. It is set to 1024 by
-   default. To change this you have to edit the files limits.h and
-   fs.h in the directory /usr/src/linux/include/linux. Change the
-   definition of NR_OPEN and recompile the kernel.
-
-inode-state, inode-nr and inode-max
-   As with file handles, the kernel allocates the inode structures
-   dynamically, but can't free them yet.
-
-   The value in inode-max denotes the maximum number of inode
-   handlers. This value should be 3 to 4 times larger than the value
-   in file-max, since stdin, stdout, and network sockets also need an
-   inode struct to handle them. If you regularly run out of inodes,
-   you should increase this value.
-
-   The file inode-nr contains the first two items from inode-state, so
-   we'll skip to that file...
-
-   inode-state contains three actual numbers and four dummy values. The 
-   actual numbers are (in order of appearance) nr_inodes, nr_free_inodes,
-   and preshrink.
-
-   nr_inodes 
-     Denotes the number of inodes the system has allocated. This can
-     be slightly more than inode-max because Linux allocates them one
-     pageful at a time.
-
-   nr_free_inodes 
-     Represents the number of free inodes and pre shrink is nonzero
-     when the nr_inodes > inode-max and the system needs to prune the
-     inode list instead of allocating more.
-
-super-nr and super-max
-   Again, super block structures are allocated by the kernel,
-   but not freed. The file super-max contains the maximum number of
-   super block handlers, where super-nr shows the number of
-   currently allocated ones.
-
-   Every mounted file system needs a super block, so if you plan to
-   mount lots of file systems, you may want to increase these
-   numbers.
-
-3.3  /proc/fs/binfmt_misc - Miscellaneous binary formats
-
-Besides these files, there is the subdirectory
-/proc/sys/fs/binfmt_misc. This handles the kernel support for
-miscellaneous binary formats.
-
-Binfmt_misc provides the ability to register additional binary formats
-to the Kernel without compiling an additional module/kernel. Therefore
-binfmt_misc needs to know magic numbers at the beginning or the
-filename extension of the binary.
-
-It works by maintaining a linked list of structs, that contain a
-description of a binary format, including a magic with size (or the
-filename extension), offset and mask, and the interpreter name. On
-request it invokes the given interpreter with the original program as
-argument, as binfmt_java and binfmt_em86 and binfmt_mz do.
-Since binfmt_misc does not define any default binary-formats, you have to
-register an additional binary-format.
-
-There are two general files in binfmt_misc and one file per registered
-format. The two general files are register and status.
-
-Registering a new binary format
-
-echo :name:type:offset:magic:mask:interpreter: > /proc/sys/fs/binfmt_misc/register 
-
-with appropriate name (the name for the /proc-dir entry), offset
-(defaults to 0, if omitted), magic and mask (which can be omitted,
-defaults to all 0xff) and last but not least, the interpreter that is
-to be invoked (for example and testing '/bin/echo'). Type can be M for
-usual magic matching or E for filename extension matching (give
-extension in place of magic).
-
-To check or reset the status of the binary format handler:
-
-If you do a cat on the file /proc/sys/fs/binfmt_misc/status, you will
-get the current status (enabled/disabled) of binfmt_misc. Change the
-status by echoing 0 (disables) or 1 (enables) or -1 (caution: this
-clears all previously registered binary formats) to status. For
-example echo 0 > status to disable binfmt_misc (temporarily).
-
-Status of a single handler
-
-Each registered handler has an entry in /proc/sys/fs/binfmt_misc.
-These files perform the same function as status, but their scope is
-limited to the actual binary format. By cating this file, you also
-receive all related information about the interpreter/magic of the
-binfmt.
-
-Example usage of binfmt_misc (emulate binfmt_java)
-
-cd /proc/sys/fs/binfmt_misc
-echo ':Java:M::\xca\xfe\xba\xbe::/usr/local/java/bin/javawrapper:' > register
-echo ':HTML:E::html::/usr/local/java/bin/appletviewer:' > register
-echo ':Applet:M::<!--applet::/usr/local/java/bin/appletviewer:' > register
-echo ':DEXE:M::\x0eDEX::/usr/bin/dosexec:' > register
-
-These three lines add support for Java executables and Java applets
-(like binfmt_java, additionally recognizing the .html extension with
-no need to put <!--applet> to every applet file). You have to install
-the JDK and the shell-script /usr/local/java/bin/javawrapper too. It
-works around the brokenness of the Java filename handling. To add a
-Java binary, just create a link to the class-file somewhere in the
-path.
-
-3.4  /proc/sys/kernel - general kernel parameters
-
-This directory reflects general kernel behaviors. As I've said before,
-the contents are depend on your configuration. I'll list the most
-important files, along with descriptions of what they mean and how to
-use them.
-
-acct
-   The file contains three values; highwater, lowwater, and
-   frequency.
-
-   It exists only when BSD-style process accounting is enabled. These
-   values control its behavior. If the free space on the file system
-   where the log lives goes below lowwater%, accounting suspends. If
-   it goes above highwater%, accounting resumes. Frequency determines
-   how often you check the amount of free space (value is in
-   seconds). Default settings are: 4, 2, and 30. That is, suspend
-   accounting if there left <= 2% free; resume it if we have a value
-   >=3%; consider information about the amount of free space valid
-   for 30 seconds
-
-ctrl-alt-del
-   When the value in this file is 0, ctrl-alt-del is trapped and sent
-   to the init(1) program to handle a graceful restart. However, when
-   the value is > 0, Linux's reaction to this key combination will be
-   an immediate reboot, without syncing its dirty buffers.
-
-   Note: when a program (like dosemu) has the keyboard in raw mode,
-   the ctrl-alt-del is intercepted by the program before it ever
-   reaches the kernel tty layer, and it is up to the program to decide
-   what to do with it.
-
-domainname and hostname
-   These files can be controlled to set the NIS domainname and
-   hostname of your box. For the classic darkstar.frop.org a simple:
-
-   # echo "darkstar" > /proc/sys/kernel/hostname
-   # echo "frop.org" > /proc/sys/kernel/domainname
-
-   would suffice to set your hostname and NIS domainname.
-
-osrelease, ostype and version
-
-   The names make it pretty obvious what these fields contain:
-
-   >cat /proc/sys/kernel/osrelease
-   2.1.131
-   >cat /proc/sys/kernel/ostype
-   Linux
-   >cat /proc/sys/kernel/version
-   #8 Mon Jan 25 19:45:02 PST 1999
-   The files osrelease and ostype should be clear enough. Version
-   needs a little more clarification however. The #8 means that this
-   is the 8th kernel built from this source base and the date behind
-   it indicates the time the kernel was built. The only way to tune
-   these values is to rebuild the kernel.
-
-panic 
-   The value in this file represents the number of seconds the kernel
-   waits before rebooting on a panic. When you use the software
-   watchdog, the recommended setting is 60. If set to 0, the auto
-   reboot after a kernel panic is disabled, this is the default
-   setting.
-
-printk
-   The four values in printk denote console_loglevel,
-   default_message_loglevel, minimum_console_level, and
-   default_console_loglevel respectively.
-
-   These values influence printk() behavior when printing or logging
-   error messages, which come from inside the kernel. See syslog(2)
-   for more information on the different log levels.
-
-   console_loglevel
-     Messages with a higher priority than this will be printed to
-     the console.
-
-   default_message_level
-     Messages without an explicit priority will be printed with
-     this priority.
-
-   minimum_console_loglevel
-     Minimum (highest) value to which the console_loglevel can be set.
-
-   default_console_loglevel
-     Default value for console_loglevel.
-
-sg-big-buff
-   This file shows the size of the generic SCSI (sg) buffer. At this
-   point, you can't tune it yet, but you can change it at compile time
-   by editing include/scsi/sg.h and changing the value of
-   SG_BIG_BUFF.
-
-   If you use a scanner with SANE (Scanner Access now easy) you
-   might want to set this to a higher value. Look into the SANE
-   documentation on this issue.
-
-modprobe
-   The location where the modprobe binary is located. The kernel
-   uses this program to load modules on demand.
-
-3.5  /proc/sys/vm - The virtual memory subsystem
-
-The files in this directory can be used to tune the operation of the
-virtual memory (VM) subsystem of the Linux kernel. In addition, one of
-the files (bdflush) has a little influence on disk usage.
-
-bdflush
-   This file controls the operation of the bdflush kernel daemon. It
-   currently contains 9 integer values, 6 of which are actually used
-   by the kernel:
-
-    nfract      Percentage of buffer cache dirty to
-                activate bdflush
-    ndirty      Maximum number of dirty blocks to
-                write out per-wake-cycle
-    nrefill     Number of clean buffers to try to obtain
-                each time we call refill
-    nref_dirt   Dirty buffer threshold for activating bdflush
-                when trying to refill buffers.
-    dummy       unused
-    age_buffer  Time for normal buffer to age before you flush it
-    age_super   Time for superblock to age before you flush it
-    dummy       unused
-    dummy       unused
-
-   nfract
-     This parameter governs the maximum number of dirty buffers
-     in the buffer cache. Dirty means that the contents of the
-     buffer still have to be written to disk (as opposed to a
-     clean buffer, which can just be forgotten about). Setting
-     this to a high value means that Linux can delay disk writes
-     for a long time, but it also means that it will have to do a
-     lot of I/O at once when memory becomes short. A low value
-     will spread out disk I/O more evenly.
-
-   ndirty
-     Ndirty gives the maximum number of dirty buffers that
-     bdflush can write to the disk at one time. A high value will
-     mean delayed, bursty I/O, while a small value can lead to
-     memory shortage when bdflush isn't woken up often enough.
-
-   nrefill
-     This the number of buffers that bdflush will add to the list
-     of free buffers when refill_freelist() is called. It is
-     necessary to allocate free buffers beforehand, since the
-     buffers are often different sizes than the memory pages
-     and some bookkeeping needs to be done beforehand. The
-     higher the number, the more memory will be wasted and the
-     less often refill_freelist() will need to run.
-
-   nref_dirt
-     When refill_freelist() comes across more than nref_dirt
-     dirty buffers, it will wake up bdflush.
-
-   age_buffer and age_super
-     Finally, the age_buffer and age_super parameters govern the
-     maximum time Linux waits before writing out a dirty buffer
-     to disk. The value is expressed in jiffies (clockticks), the
-     number of jiffies per second is 100. Age_buffer is the
-     maximum age for data blocks, while age_super is for
-     filesystems meta data.
-
-buffermem
-   The three values in this file control how much memory should be
-   used for buffer memory. The percentage is calculated as a
-   percentage of total system memory.
-
-   The values are:
-
-   min_percent
-     This is the minimum percentage of memory that should be
-     spent on buffer memory.
-
-   borrow_percent
-     When Linux is short on memory, and the buffer cache uses more
-     than it has been allotted, the memory mangement (MM) subsystem
-     will prune the buffer cache more heavily than other memory to
-     compensate.
-
-   max_percent
-     This is the maximum amount of memory that can be used for
-     buffer memory.
-
-freepages
-   This file contains three values: min, low and high:
-
-   min
-     When the number of free pages in the system reaches this number,
-     only the kernel can allocate more memory.
-
-   low
-     If the number of free pages gets below this point, the kernel
-     starts swapping aggressively.
-
-   high
-     The kernel tries to keep up to this amount of memory free; if
-     memory comes below this point, the kernel gently starts swapping
-     in the hopes that it never has to do really aggressive swapping.
-
-kswapd
-   Kswapd is the kernel swap out daemon. That is, kswapd is that piece
-   of the kernel that frees memory when it gets fragmented or
-   full. Since every system is different, you'll probably want some
-   control over this piece of the system.
-
-   The file contains three numbers:
-
-   tries_base
-     The maximum number of pages kswapd tries to free in one round is
-     calculated from this number. Usually this number will be divided
-     by 4 or 8 (see mm/vmscan.c), so it isn't as big as it looks.
-
-     When you need to increase the bandwidth to/from swap, you'll want
-     to increase this number.
-
-   tries_min
-     This is the minimum number of times kswapd tries to free a page
-     each time it is called. Basically it's just there to make sure
-     that kswapd frees some pages even when it's being called with
-     minimum priority.
-
-
-  swap_cluster
-     This is probably the greatest influence on system
-     performance. swap_cluster is the number of pages kswapd writes in
-     one turn. You'll want this value to be large so that kswapd does
-     its I/O in large chunks and the disk doesn't have to seek as
-     often., but you don't want it to be too large since that would
-     flood the request queue.
-
-overcommit_memory
-   This file contains one value. The following algorithm is used to
-   decide if there's enough memory: if the value of overcommit_memory
-   is positive, then there's always enough memory. This is a useful
-   feature, since programs often malloc() huge amounts of memory 'just
-   in case', while they only use a small part of it. Leaving this
-   value at 0 will lead to the failure of such a huge malloc(), when
-   in fact the system has enough memory for the program to run.
-
-   On the other hand, enabling this feature can cause you to run out
-   of memory and thrash the system to death, so large and/or important
-   servers will want to set this value to 0.
-
-pagecache
-   This file does exactly the same as buffermem, only this file
-   controls the amount of memory allowed for memory mapping and
-   generic caching of files.
-
-   You don't want the minimum level to be too low, otherwise your
-   system might thrash when memory is tight or fragmentation is
-   high.
-
-pagetable_cache
-   The kernel keeps a number of page tables in a per-processor cache
-   (this helps a lot on SMP systems). The cache size for each
-   processor will be between the low and the high value.
-
-   On a low-memory, single CPU system, you can safely set these values
-   to 0 so you don't waste memory. It is used on SMP systems so that
-   the system can perform fast pagetable allocations without having to
-   aquire the kernel memory lock.
-
-   For large systems, the settings are probably fine. For normal
-   systems they won't hurt a bit. For small systems (<16MB ram) it
-   might be advantageous to set both values to 0.
-
-swapctl
-   This file contains no less than 8 variables. All of these values
-   are used by kswapd.
-
-   The first four variables sc_max_page_age, sc_page_advance,
-   sc_page_decline and sc_page_initial_age are used to keep track of
-   Linux's page aging. Page aging is a bookkeeping method to track
-   which pages of memory are often used, and which pages can be
-   swapped out without consequences.
-
-   When a page is swapped in, it starts at sc_page_initial_age
-   (default 3) and when the page is scanned by kswapd, its age is
-   adjusted according to the following scheme:
-
-    o If the page was used since the last time we scanned, its age
-      is increased by sc_page_advance (default 3) up to a
-      maximum of sc_max_page_age (default 20).
-
-    o Else (meaning it wasn't used) its age is decreased by
-      sc_page_decline (default 1).
-
-   When a page reaches age 0, it's ready to be swapped out.
-
-   The next four variables sc_age_cluster_fract, sc_age_cluster_min,
-   sc_pageout_weight and sc_bufferout_weight, can be used to control
-   kswapd's aggressiveness in swapping out pages.
-
-   Sc_age_cluster_fract is used to calculate how many pages from a
-   process are to be scanned by kswapd. The formula used is
-
-           sc_age_cluster_fract
-           -------------------- * resident set size
-              1024   =20
-
-   So if you want kswapd to scan the whole process,
-   sc_age_cluster_fract needs to have a value of 1024. The minimum
-   number of pages kswapd will scan is represented by
-   sc_age_cluster_min, this is done so kswapd will also scan small
-   processes.
-
-   The values of sc_pageout_weight and sc_bufferout_weight are used
-   to control how many tries kswapd will make in order to swap out
-   one page/buffer. These values can be used to fine-tune the ratio
-   between user pages and buffer/cache memory. When you find that
-   your Linux system is swapping out too many process pages in order
-   to satisfy buffer memory demands, you might want to either
-   increase sc_bufferout_weight, or decrease the value of
-   sc_pageout_weight.
-
-3.6  /proc/sys/dev - Device specific parameters
-
-Currently there is only support for CDROM drives, and for those, there
-is only one read only file containing information about the CD-ROM
-drives attached to the system:
-
->cat /proc/sys/dev/cdrom/info
-CD-ROM information
-
-drive name:           sr0  hdc
-drive speed:           0    6
-drive # of slots:      1    0
-Can close tray:        1    1
-Can open tray:         1    1
-Can lock tray:         1    1
-Can change speed:      1    1
-Can select disk:       0    1
-Can read multisession: 1    1
-Can read MCN:          1    1
-Reports media changed: 1    1
-Can play audio:        1    1
-
-You see two drives, sr0 and hdc, and their lists of features.
-
-3.7  /proc/sys/sunrpc - Remote procedure calls
-
-This directory contains four files, which enable or disable debugging
-for the RPC functions NFS, NFS-daemon, RPC and NLM. The default values
-are 0. They can be set to one, to turn debugging on.  (The default
-value is 0 for each)
-
-3.8  /proc/sys/net - Networking stuff
-
-The interface to the networking parts of the kernel is located in
-/proc/sys/net. The table below shows all possible subdirectories. You
-may see only some of them, depending on the configuration of your
-kernel:
-
-+-------------------------------------------------------------+
-| core     General parameter   |appletalk  Appletalk protocol |
-| unix     Unix domain sockets |netrom     NET/ROM            |
-| 802      E802 protocol       |ax25       AX25               |
-| ethernet Ethernet protocol   |rose       X.25 PLP layer     |
-| ipv4     IP version 4        |x25        X.25 protocol      |
-| ipx      IPX                 |token-ring IBM token ring     |
-| bridge   Bridging            |decnet     DEC net            |
-| ipv6     IP version 6        |                              |
-+-------------------------------------------------------------+
-
-We will concentrate on IP networking here. As AX15, X.25, and DEC Net
-are only minor players in the Linux world, we'll skip them in this
-chapter. You'll find some short info to Appletalk and IPX further down
-in section 3.10 and 3.11. Please look in the online documentation and
-the kernel source to get a detailed view of the parameters for those
-protocols. In this section we'll discuss the subdirectories printed in
-bold letters in the table above. As default values are suitable for
-most needs, there is no need to change these values.
-
-/proc/sys/net/core - Network core options
-
-rmem_default
-   The default setting of the socket receive buffer in bytes.
-
-rmem_max
-   The maximum receive socket buffer size in bytes.
-
-wmem_default
-   The default setting (in bytes) of the socket send buffer.
-
-wmem_max
-   The maximum send socket buffer size in bytes.
-
-message_burst and message_cost
-   These parameters are used to limit the warning messages written to
-   the kernel log from the networking code. They enforce a rate limit
-   to make a denial-of-service attack impossible. The higher the
-   message_cost factor is, the less messages will be
-   written. Message_burst controls when messages will be dropped. The
-   default settings limit warning messages to one every five seconds.
-
-netdev_max_backlog
-   Maximal number of packets, queued on INPUT side, when the interface
-   receives packets faster than kernel can process them.
-
-optmem_max
-   Maximum ancillary buffer size allowed per socket. Ancillary data is
-   a sequence of struct cmsghdr structures with appended data.
-
-/proc/sys/net/unix - Parameters for UNIX domain sockets
-
-There are only two files in this subdirectory. They control the delays
-for deleting and destroying socket descriptors.
-
-3.9  /proc/sys/net/ipv4 - IPV4 settings
-
-IP version 4 is still the most used protocol in Unix networking. It
-will be replaced by IP version 6 in the next couple of years, but for
-the moment it's the de facto standard for the internet and is used in
-most networking environments around the world. Because of the
-importance of this protocol, we'll have a deeper look into the subtree
-controlling the behavior of the IPv4 subsystem of the Linux kernel.
-
-Let's start with the entries in /proc/sys/net/ipv4 itself.
-
-ICMP settings
-
-icmp_echo_ignore_all and icmp_echo_ignore_broadcasts
-   Turn on (1) or off (0), if the kernel should ignore all ICMP ECHO
-   requests, or just those to broadcast and multicast addresses.
-
-   Please note that if you accept ICMP echo requests with a
-   broadcast/multicast destination address your network may be used
-   as an exploder for denial of service packet flooding attacks to
-   other hosts.
-
-icmp_destunreach_rate, icmp_echoreply_rate,
-icmp_paramprob_rate and icmp_timeexeed_rate
-   Sets limits for sending ICMP packets to specific targets. A value of
-   zero disables all limiting. Any positive value sets the maximum
-   package rate in hundredths of a second (on Intel systems).
-
-IP settings
-
-ip_autoconfig
-   This file contains one, if the host got its IP configuration by
-   RARP, BOOTP, DHCP or a similar mechanism. Otherwise it is zero.
-
-ip_default_ttl
-   TTL (Time To Live) for IPv4 interfaces. This is simply the
-   maximum number of hops a packet may travel.
-
-ip_dynaddr
-   Enable dynamic socket address rewriting on interface address change. This
-   is useful for dialup interface with changing IP addresses.
-
-ip_forward
-   Enable or disable forwarding of IP packages between interfaces. A
-   change of this value resets all other parameters to their default
-   values. They differ if the kernel is configured as host or router.
-
-ip_local_port_range
-   Range of ports used by TCP and UDP to choose the local
-   port. Contains two numbers, the first number is the lowest port,
-   the second number the highest local port. Default is 1024-4999.
-   Should be changed to 32768-61000 for high-usage systems.
-
-ip_no_pmtu_disc
-   Global switch to turn path MTU discovery off. It can also be set
-   on a per socket basis by the applications or on a per route
-   basis.
-
-ip_masq_debug
-   Enable/disable debugging of IP masquerading.
-
-
-IP fragmentation settings
-
-ipfrag_high_trash and ipfrag_low_trash
-   Maximum memory used to reassemble IP fragments. When
-   ipfrag_high_thresh bytes of memory is allocated for this purpose,
-   the fragment handler will toss packets until ipfrag_low_thresh is
-   reached.
-
-
-ipfrag_time
-   Time in seconds to keep an IP fragment in memory.
-
-TCP settings
-
-tcp_retrans_collapse
-   Bug-to-bug compatibility with some broken printers. On retransmit
-   try to send bigger packets to work around bugs in certain TCP
-   stacks. Can be turned off by setting it to zero.
-
-tcp_keepalive_probes
-   Number of keep alive probes TCP sends out, until it decides that the
-   connection is broken.
-
-tcp_keepalive_time
-   How often TCP sends out keep alive messages, when keep alive is
-   enabled. The default is 2 hours.
-
-tcp_syn_retries
-   Number of times initial SYNs for a TCP connection attempt will be
-   retransmitted. Should not be higher than 255. This is only the
-   timeout for outgoing connections, for incoming connections the
-   number of retransmits is defined by tcp_retries1.
-
-tcp_sack
-   Enable select acknowledgments after RFC2018.
-
-tcp_timestamps
-   Enable timestamps as defined in RFC1323.
-
-tcp_stdurg
-   Enable the strict RFC793 interpretation of the TCP urgent pointer
-   field. The default is to use the BSD compatible interpretation
-   of the urgent pointer pointing to the first byte after the urgent
-   data. The RFC793 interpretation is to have it point to the last
-   byte of urgent data. Enabling this option may lead to
-   interoperatibility problems. Disabled by default.
-
-tcp_syncookies
-   Only valid when the kernel was compiled with
-   CONFIG_SYNCOOKIES. Send out syncookies when the syn backlog queue
-   of a socket overflows. This is to prevent against the common 'syn
-   flood attack'. Disabled by default.
-
-   Note that the concept of a socket backlog is abandoned, this
-   means the peer may not receive reliable error messages from an
-   over loaded server with syncookies enabled.
-
-tcp_window_scaling
-   Enable window scaling as defined in RFC1323.
-
-tcp_fin_timeout
-   How many seconds to wait for a final FIN before the socket is
-   always closed. This is strictly a violation of the TCP
-   specification, but required to prevent denial-of-service attacks.
-
-tcp_max_ka_probes
-   How many keepalive probes are sent per slow timer run. Shouldn't be
-   set too high to prevent bursts.
-
-tcp_max_syn_backlog
-   Length of the per socket backlog queue. Since Linux 2.2 the backlog
-   specified in listen(2) only specifies the length of the backlog
-   queue of already established sockets. When more connection requests
-   arrive Linux starts to drop packets. When syncookies are enabled
-   the packets are still answered and the maximum queue is effectively
-   ignored.
-
-tcp_retries1
-   Defines how often an answer to a TCP connection request is
-   retransmitted before giving up.
-
-tcp_retries2
-   Defines how often a TCP packet is retransmitted before giving up.
-
-Interface specific settings
-
-In the directory /proc/sys/net/ipv4/conf you'll find one subdirectory
-for each interface the system knows about and one directory calls
-all. Changes in the all subdirectory affect all interfaces, where
-changes in the other subdirectories affect only one interface.
-
-All directories have the same entries:
-
-accept_redirects
-   This switch decides if the kernel accepts ICMP redirect messages
-   or not. The default is 'yes', if the kernel is configured for a
-   regular host; and 'no' for a router configuration.
-
-accept_source_route
-   Should source routed packages be accepted or declined. The
-   default is dependent on the kernel configuration. It's 'yes' for
-   routers and 'no' for hosts.
-
-bootp_relay
-   Accept packets with source address 0.b.c.d destined not to this
-   host as local ones. It is supposed that BOOTP relay daemon will
-   catch and forward such packets.
-
-   The default is 'no', as this feature is not implemented yet
-   (kernel version 2.2.0-pre?).
-
-forwarding
-   Enable or disable IP forwarding on this interface.
-
-log_martians
-   Log packets with source addresses with no known route to kernel log.
-
-mc_forwarding
-   Do multicast routing. The kernel needs to be compiled with
-   CONFIG_MROUTE and a multicast routing daemon is required.
-
-proxy_arp
-   Do (1) or don't (0) do proxy ARP.
-
-rp_filter
-   Integer value deciding if source validation should be made. 
-   1 means yes, 0 means no. Disabled by default, but 
-   local/broadcast address spoofing is always on.
-
-   If you set this to 1 on a router that is the only connection
-   for a network to the net , it evidently prevents spoofing attacks
-   against your internal networks (external addresses can still be
-   spoofed), without the need for additional firewall rules.
-
-secure_redirects
-   Accept ICMP redirect messages only for gateways, listed in
-   default gateway list. Enabled by default.
-
-shared_media
-   If it is not set the kernel does not assume that different subnets
-   on this device can communicate directly. Default setting is 'yes'.  
-
-send_redirects
-   Determines if or if not to send ICMP redirects to other hosts.
-
-
-Routing settings
-
-The directory /proc/sys/net/ipv4/route contains several file to
-control routing issues.
-
-error_burst and error_cost
-   These parameters are used to limit the warning messages written to
-   the kernel log from the routing code. The higher the error_cost
-   factor is, the fewer messages will be written. Error_burst controls
-   when messages will be dropped. The default settings limit warning
-   messages to one every five seconds.
-
-flush
-   Writing to this file results in a flush of the routing cache.
-
-gc_elastic, gc_interval, gc_min_interval, gc_tresh, gc_timeout
-   Values to control the frequency and behavior of the garbage
-   collection algorithm for the routing cache.
-
-max_size
-   Maximum size of the routing cache. Old entries will be purged
-   once the cache has this size.
-
-max_delay, min_delay
-   Delays for flushing the routing cache.
-
-redirect_load, redirect_number
-   Factors which determine if more ICPM redirects should be sent to
-   a specific host. No redirects will be sent once the load limit or
-   the maximum number of redirects has been reached.
-
-redirect_silence
-
-   Timeout for redirects. After this period redirects will be sent
-   again, even if this has been stopped, because the load or number
-   limit has been reached.
-
-Network Neighbor handling
-
-Settings about how to handle connections with direct neighbors (nodes
-attached to the same link) can be found in the directory
-/proc/sys/net/ipv4/neigh.
-
-As we saw it in the conf directory, there is a default subdirectory
-which holds the default values, and one directory for each
-interface. The contents of the directories are identical, with the
-single exception that the default settings contain additional options
-to set garbage collection parameters.
-
-In the interface directories you'll find the following entries:
-
-base_reachable_time
-   A base value used for computing the random reachable time value
-   as specified in RFC2461.
-
-retrans_time
-   The time, expressed in jiffies (1/100 sec), between retransmitted
-   Neighbor Solicitation messages. Used for address resolution and to
-   determine if a neighbor is unreachable.
-
-unres_qlen
-   Maximum queue length for a pending arp request - how many packets
-   are accepted from other layers while the arp address is still
-   resolved.
-
-anycast_delay
-   Maximum for random delay of answers to neighbor solicitation
-   messages in jiffies (1/100 sec). Not yet implemented (Linux does
-   not have anycast support yet).
-
-ucast_solicit
-   Maximum number of retries for unicast solicitation.
-
-mcast_solicit
-   Maximum number of retries for multicast solicitation.
-
-delay_first_probe_time
-   Delay for the first time probe if the neighbor is reachable. (see
-   gc_stale_time).
-
-locktime
-   An ARP/neighbor entry is only replaced with a new one if the old
-   is at least locktime old. This prevents ARP cache thrashing.
-
-proxy_delay
-   Maximum time (real time is random [0..proxytime]) before
-   answering to an arp request for which we have an proxy arp entry.
-   In some cases, this is used to prevent network flooding.
-
-proxy_qlen
-   Maximum queue length of the delayed proxy arp timer (see
-   proxy_delay).
-
-app_solcit
-   Determines the number of requests to send to the user level arp
-   daemon. 0 to turn off.
-
-gc_stale_time
-   Determines how often to check for stale ARP entries. After an ARP
-   entry is stale it will be resolved again (useful when an IP address
-   migrates to another machine). When ucast_solicit is > 0 it first
-   tries to send an ARP packet directly to the known host, when that
-   fails and mcast_solicit is > 0, an ARP request is broadcasted.
-
-3.10  Appletalk
-
-The /proc/sys/net/appletalk directory holds the Appletalk
-configuration data when Appletalk is loaded. The configurable
-parameters are:
-
-aarp-expiry-time
-   The amount of time we keep an AARP entry before expiring
-   it. Used to age out old hosts.
-
-aarp-resolve-time
-   The amount of time we will spend trying to resolve an Appletalk
-   address.
-
-aarp-retransmit-limit
-   The number of times we will retransmit a query before giving up.
-
-aarp-tick-time
-   Controls the rate at which expiries are checked.
-
-
-The directory /proc/net/appletalk holds the list of active appletalk
-sockets on a machine.
-
-The fields indicate the DDP type, the local address (in network:node
-format) the remote address, the size of the transmit pending queue,
-the size of the received queue (bytes waiting for applications to
-read) the state and the uid owning the socket.
-
-/proc/net/atalk_iface lists all the interfaces configured for
-appletalk.It shows the name of the interface, its appletalk address,
-the network range on that ad- dress (or network number for phase 1
-networks), and the status of the interface.
-
-/proc/net/atalk_route lists each known network route. It lists the
-target (network) that the route leads to, the router (may be directly
-connected), the route flags, and the device the route is via.
-
-3.11  IPX
-
-The IPX protocol has no tunable values in /proc/sys/net.
-
-The IPX protocol does, however, provide /proc/net/ipx. This lists each
-IPX socket giving the local and remote addresses in Novell format
-(that is network:node:port). In accordance with the strange Novell
-tradition, everything but the port is in hex. Not_Connected is
-displayed for sockets that are not tied to a specific remote
-address. The Tx and Rx queue sizes indicate the number of bytes
-pending for transmit and receive. The state indicates the state the
-socket is in and the uid is the owning uid of the socket.
-
-The /proc/net/ipx_interface file lists all IPX interfaces. For each
-interface it gives the network number, the node number, and indicates
-if the network is the primary network. It also indicates which device it is bound to (or
-Internal for internal networks) and the Frame Type if
-appropriate. Linux supports 802.3, 802.2, 802.2 SNAP and DIX (Blue
-Book) ethernet framing for IPX.
-
-The /proc/net/ipx_route table holds a list of IPX routes. For each
-route it gives the destination network, the router node (or Directly)
-and the network address of the router (or Connected) for internal
-networks.
diff --git a/Documentation/sound/NM256 b/Documentation/sound/NM256
new file mode 100644 (file)
index 0000000..edff4c1
--- /dev/null
@@ -0,0 +1,229 @@
+=======================================================
+Documentation for the NeoMagic 256AV/256ZX sound driver
+=======================================================
+
+You're looking at version 1.0 of the driver.  (Woohoo!) It has been
+successfully tested against the following laptop models:
+
+       Sony Z505S/Z505SX/Z505DX
+       Sony F150, F160, F180, F250, F270, F280, PCG-F26
+       Dell Latitude CPi, CPt (various submodels)
+
+There are a few caveats, which is why you should read the entirety of
+this document first.
+
+This driver was developed without any support or assistance from
+NeoMagic.  There is no warranty, expressed, implied, or otherwise.  It
+is free software in the public domain; feel free to use it, sell it,
+give it to your best friends, even claim that you wrote it (but why?!)
+but don't come whining to me, NeoMagic, Sony, Dell, or anyone else
+when it blows up your computer.
+
+============
+Installation
+============
+
+Enable the sound drivers, the OSS sound drivers, and then the NM256
+driver.  The NM256 driver *must* be configured as a module (it won't
+give you any other choice).
+
+Next, do the usual "make modules" and "make modules_install".
+Finally, insmod the soundcore, sound and nm256 modules.
+
+When the nm256 driver module is loaded, you should see a couple of
+confirmation messages in the kernel logfile indicating that it found
+the device (the device does *not* use any I/O ports or DMA channels).
+Now try playing a wav file, futz with the CD-ROM if you have one, etc.
+
+The NM256 is entirely a PCI-based device, and all the necessary
+information is automatically obtained from the card.  It can only be
+configured as a module in a vain attempt to prevent people from
+hurting themselves.  It works correctly if it shares an IRQ with
+another device (it normally shares IRQ 9 with the builtin eepro100
+ethernet on the Sony Z505 laptops). 
+
+It does not run the card in any sort of compatibility mode. Thus it
+almost certainly will not work on laptops that have the
+SB16-compatible codec/mixer; you will want to use the standard SB16
+OSS driver with these chipsets.  I cannot provide any assistance with
+machines using the SB-16 compatible version.
+
+The sound support is very basic, but it does include simultaneous
+playback and record capability.  The mixer support is also quite
+simple, although this is in keeping with the rather limited
+functionality of the chipset.  
+
+There is no hardware synthesizer available, as the Losedows OPL-3 and
+MIDI support is done via hardware emulation.
+
+Only three recording devices are available on the Sony: the
+microphone, the CD-ROM input, and the volume device (which corresponds
+to the stereo output).  (Other devices may be available on other
+models of laptops.)  The Z505 series does not have a builtin CD-ROM,
+so of course the CD-ROM input doesn't work.  It does work on laptops
+with a builtin CD-ROM drive.
+
+Recording is mono 8-bit only.
+
+The mixer device does not appear to have any tone controls, at least
+on the Z505 series.  The mixer module checks for tone controls in the
+AC97 mixer, and will enable them if they are available.
+
+==============
+Known problems
+==============
+
+  * There are known problems with PCMCIA cards and the eepro100 ethernet 
+    driver on the Z505S/Z505SX/Z505DX.  Keep reading.
+
+  * There are also potential problems with using a virtual X display, and
+    also problems loading the module after the X server has been started. 
+    Keep reading.
+
+  * The volume control isn't anywhere near linear.  Sorry.  This will be
+    fixed eventually, when I get sufficiently annoyed with it.  (I doubt
+    it will ever be fixed now, since I've never gotten sufficiently
+    annoyed with it and nobody else seems to care.)
+
+  * There are reports that the CD-ROM volume is very low.  Since I do not
+    have a CD-ROM equipped laptop, I cannot test this (it's kinda hard to
+    do remotely).
+
+  * Only 8 fixed-rate speeds are supported.  This is mainly a chipset
+    limitation.  It may be possible to support other speeds in the future.
+
+  * There is no support for the telephone mixer/codec.  There is support
+    for a phonein/phoneout device if your mixer program supports it;
+    whether or not it does anything is anyone's guess.  (Reports on this
+    would be appreciated.)
+  
+  * This driver was not written with any cooperation or support from
+    NeoMagic.  If you have any questions about this, see their website
+    for their official stance on supporting open source drivers.
+
+============
+Video memory
+============
+
+The NeoMagic sound engine uses a portion of the display memory to hold
+the sound buffer.  (Crazy, eh?)  The NeoMagic video BIOS sets up a
+special pointer at the top of video RAM to indicate where the top of
+the audio buffer should be placed.
+
+At the present time XFree86 is apparently not aware of this.  It will
+thus write over either the pointer or the sound buffer with abandon.
+(Accelerated-X seems to do a better job here.)
+
+This implies a few things:
+
+  * Sometimes the NM256 driver has to guess at where the buffer 
+    should be placed, especially if the module is loaded after the
+    X server is started.  It's usually correct, but it will fail on
+    the Sony F250.
+
+  * Virtual screens greater than 1024x768x16 under XFree86 are
+    problematic on laptops with only 2.5MB of screen RAM. This
+    includes all of the 256AV-equipped laptops.  (Virtual displays
+    may or may not work on the 256ZX, which has at least 4MB of
+    video RAM.)
+
+If you start having problems with random noise being output either
+constantly (this is the usual symptom on the F250), or when windows
+are moved around (this is the usual symptom when using a virtual
+screen), the best fix is to
+
+  * Don't use a virtual frame buffer.
+  * Make sure you load the NM256 module before the X server is
+    started.
+
+On the F250, it is possible to force the driver to load properly even
+after the XFree86 server is started by doing:
+
+       insmod nm256.o buffertop=0x25a800
+
+This forces the audio buffers to the correct offset in screen RAM.
+
+=================
+Official WWW site
+=================
+
+The official site for the NM256 driver is:
+
+       http://www.uglx.org/sony.html
+
+You should always be able to get the latest version of the driver there,
+and the driver will be supported for the foreseeable future.
+
+==============================
+Z505S/Z505SX on-board Ethernet
+==============================
+
+If you're using the on-board Ethernet Pro/100 ethernet support on the Z505
+series, I strongly encourage you to download the latest eepro100 driver from
+Donald Becker's site:
+
+       ftp://cesdis.gsfc.nasa.gov/pub/linux/drivers/test/eepro100.c
+
+There was a reported problem on the Z505SX that if the ethernet
+interface is disabled and reenabled while the sound driver is loaded,
+the machine would lock up.  I have included a workaround that is
+working satisfactorily.  However, you may occasionally see a message
+about "Releasing interrupts, over 1000 bad interrupts" which indicates
+that the workaround is doing its job.
+
+==================================
+PCMCIA and the Z505S/Z505SX/Z505DX
+==================================
+
+There is also a known problem with the Sony Z505S and Z505SX hanging
+if a PCMCIA card is inserted while the ethernet driver is loaded.
+This is caused by tons of spurious IRQ 9s, probably generated from the
+PCMCIA or ACPI bridges.  There is currently no fix for the problem,
+and the only known workaround is to disable the ethernet interface
+before inserting or removing a PCMCIA card.
+
+======
+Thanks
+======
+
+First, I want to thank everyone (except NeoMagic of course) for their
+generous support and encouragement.  I'd like to list everyone's name
+here that replied during the development phase, but the list is
+amazingly long.
+
+I will be rather unfair and single out a few people, however:
+
+       Justin Maurer, for being the first random net.person to try it,
+       and for letting me login to his Z505SX to get it working there
+
+       Edi Weitz for trying out several different versions, and giving
+       me a lot of useful feedback
+
+       Greg Rumple for letting me login remotely to get the driver 
+       functional on the 256ZX, for his assistance on tracking
+       down all sorts of random stuff, and for trying out Accel-X
+
+       Zach Brown, for the initial AC97 mixer interface design
+
+       Jeff Garzik, for various helpful suggestions on the AC97
+       interface
+
+=================
+Previous versions
+=================
+
+Versions prior to 0.3 (aka `noname') had problems with weird artifacts
+in the output and failed to set the recording rate properly.  These
+problems have long since been fixed.
+
+Versions prior to 0.5 had problems with clicks in the output when
+anything other than 16-bit stereo sound was being played, and also had
+periodic clicks when recording.
+
+Version 0.7 first incorporated support for the NM256ZX chipset, which
+is found on some Dell Latitude laptops (the CPt, and apparently
+some CPi models as well).  It also included the generic AC97
+mixer module.
+
+Version 0.75 renamed all the functions and files with slightly more
+generic names.
index 73f09a186ad86cf764f0c701897d9e1e4756de5d..63936e2617b0e05e314b46607fdf2d2394ed5148 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
 VERSION = 2
 PATCHLEVEL = 3
-SUBLEVEL = 18
+SUBLEVEL = 19
 EXTRAVERSION =
 
 ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/)
@@ -146,8 +146,11 @@ ifdef CONFIG_PCI
 DRIVERS := $(DRIVERS) drivers/pci/pci.a
 endif
 
-ifdef CONFIG_PCMCIA
+ifeq ($(CONFIG_PCMCIA),y)
 DRIVERS := $(DRIVERS) drivers/pcmcia/pcmcia.o
+endif
+
+ifeq ($(CONFIG_PCMCIA_NETCARD),y)
 DRIVERS := $(DRIVERS) drivers/net/pcmcia/pcmcia_net.o
 endif
 
@@ -345,6 +348,7 @@ modules_install:
        if [ -f FC4_MODULES   ]; then inst_mod FC4_MODULES   fc4;   fi; \
        if [ -f IRDA_MODULES  ]; then inst_mod IRDA_MODULES  net;   fi; \
        if [ -f USB_MODULES   ]; then inst_mod USB_MODULES   usb;   fi; \
+       if [ -f PCMCIA_MODULES ]; then inst_mod PCMCIA_MODULES pcmcia; fi; \
        \
        ls *.o > $$MODLIB/.allmods; \
        echo $$MODULES | tr ' ' '\n' | sort | comm -23 $$MODLIB/.allmods - > $$MODLIB/.misc; \
@@ -366,9 +370,9 @@ endif
 
 clean: archclean
        rm -f kernel/ksyms.lst include/linux/compile.h
-       rm -f core `find . -name '*.[oas]' ! -regex '.*lxdialog/.*' -print`
+       find . -name '*.[oas]' -type f -print | grep -v lxdialog/ | xargs rm -f
        rm -f core `find . -type f -name 'core' -print`
-       rm -f core `find . -name '.*.flags' -print`
+       rm -f core `find . -type f -name '.*.flags' -print`
        rm -f vmlinux System.map
        rm -f .tmp*
        rm -f drivers/char/consolemap_deftbl.c drivers/video/promcon_tbl.c
@@ -395,8 +399,8 @@ mrproper: clean archmrproper
        rm -f .menuconfig.log
        rm -f include/asm
        rm -rf include/config
-       rm -f .depend `find . -name .depend -print`
-       rm -f core `find . -size 0 -print`
+       rm -f .depend `find . -type f -name .depend -print`
+       rm -f core `find . -type f -size 0 -print`
        rm -f .hdepend scripts/mkdep scripts/split-include
        rm -f $(TOPDIR)/include/linux/modversions.h
        rm -rf $(TOPDIR)/include/linux/modules
index 212a6615f35e250bb9f32631a7fa051ecbdad042..70cfc07243ee1c0befb5e13c57fa157af873f7c2 100644 (file)
@@ -461,7 +461,7 @@ no_psmouse:
        int     0x15            ! ignore return code
 
        mov     ax,#0x05303     ! 32 bit connect
-       xor     bx,bx
+       xor     ebx,ebx
        int     0x15
        jc      no_32_apm_bios  ! error
 
index 9d9f99b55ecf488cf168004e9a959d4965f22187..606a516305c85429ffad3a15916402413cd775da 100644 (file)
@@ -287,6 +287,7 @@ CONFIG_EEXPRESS_PRO100=y
 # CONFIG_PCMCIA_PCNET is not set
 # CONFIG_PCMCIA_3C589 is not set
 CONFIG_PCMCIA_RAYCS=y
+CONFIG_PCMCIA_NETCARD=y
 
 #
 # Amateur Radio support
index 8e995be1b8220b6df3c11018a6d9203791845229..49527026a3f65cc45e09afbf51816b6930847420 100644 (file)
@@ -40,6 +40,7 @@
 #include <linux/ioport.h>
 #include <linux/mc146818rtc.h> /* CMOS defines */
 #include <linux/init.h>
+#include <linux/blkpg.h>
 
 #define REALLY_SLOW_IO
 #include <asm/system.h>
index bbe3dada0f453e557965cb33eceee7d8d28c3ab6..b3ba0356226f61d506e5fa1dfea9ccc712e3e09c 100644 (file)
  *
  * Suggestions are welcome. Patches that work are more welcome though. ;-)
  * For those wishing to work on this driver, please be sure you download
- * and comply with the latest Mt. Fuji (SFF8090 version 3) and ATAPI 
+ * and comply with the latest Mt. Fuji (SFF8090 version 4) and ATAPI 
  * (SFF-8020i rev 2.6) standards. These documents can be obtained by 
  * anonymous ftp from:
  * ftp://fission.dt.wdc.com/pub/standards/SFF/specs/INF-8020.PDF
- * ftp://fission.dt.wdc.com/pub/standards/SFF/specs/INF-8090.PDF
+ * ftp://ftp.avc-pioneer.com/Mtfuji4/Spec/Fuji4r01.pdf
  *
  * Drives that deviate from these standards will be accomodated as much
  * as possible via compile time or command-line options.  Since I only have
  *   This will allow us to get automagically notified when the media changes
  *   on ATAPI drives (something the stock ATAPI spec is lacking).  Looks
  *   very cool.  I discovered its existance the other day at work...
- * -Query the drive to find what features are available before trying to
- *   use them (like trying to close the tray in drives that can't).
  * -Make it so that Pioneer CD DR-A24X and friends don't get screwed up on
  *   boot
- * -Integrate DVD-ROM support in driver. Thanks to Merete Gotsæd-Petersen
- *   of Pioneer Denmark for providing me with a drive for testing.
- * -Implement Features and Profiles.
- *
  *
  * ----------------------------------
  * 1.00  Oct 31, 1994 -- Initial version.
  *                       commands across the various drivers and how
  *                       sense errors are handled.
  *
+ * 4.56  Sep 12, 1999  - Removed changer support - it is now in the
+ *                       Uniform layer.
+ *                     - Added partition based multisession handling.
+ *                     - Mode sense and mode select moved to the
+ *                       Uniform layer.
+ *                     - Fixed a problem with WPI CDS-32X drive - it
+ *                       failed the capabilities 
+ *
+ *
  *************************************************************************/
  
-#define IDECD_VERSION "4.55"
+#define IDECD_VERSION "4.56"
 
 #include <linux/config.h>
 #include <linux/module.h>
@@ -548,6 +551,7 @@ static int cdrom_decode_status (ide_drive_t *drive, int good_stat,
 {
        struct request *rq = HWGROUP(drive)->rq;
        int stat, cmd, err, sense_key;
+       struct packet_command *pc = (struct packet_command *) rq->buffer;
        
        /* Check for errors. */
        stat = GET_STAT();
@@ -571,8 +575,6 @@ static int cdrom_decode_status (ide_drive_t *drive, int good_stat,
                           from the drive (probably while trying
                           to recover from a former error).  Just give up. */
 
-                       struct packet_command *pc = (struct packet_command *)
-                                                     rq->buffer;
                        pc->stat = 1;
                        cdrom_end_request (1, drive);
                        ide_error (drive, "request sense failure", stat);
@@ -581,23 +583,11 @@ static int cdrom_decode_status (ide_drive_t *drive, int good_stat,
                } else if (cmd == PACKET_COMMAND) {
                        /* All other functions, except for READ. */
 
-                       struct packet_command *pc = (struct packet_command *)
-                                                     rq->buffer;
                        struct semaphore *sem = NULL;
 
                        /* Check for tray open. */
                        if (sense_key == NOT_READY) {
                                cdrom_saw_media_change (drive);
-#if 0  /* let the upper layers do the complaining */
-                               /* Print an error message to the syslog.
-                                  Exception: don't print anything if this
-                                  is a read subchannel command.  This is
-                                  because workman constantly polls the drive
-                                  with this command, and we don't want
-                                  to uselessly fill up the syslog. */
-                               if (pc->c[0] != GPCMD_READ_SUBCHANNEL)
-                                       printk ("%s: tray open or drive not ready\n", drive->name);
-#endif
                        } else if (sense_key == UNIT_ATTENTION) {
                                /* Check for media change. */
                                cdrom_saw_media_change (drive);
@@ -1344,7 +1334,6 @@ int cdrom_queue_packet_command (ide_drive_t *drive, struct packet_command *pc)
        if (pc->sense_data == NULL)
                pc->sense_data = &my_reqbuf;
        pc->sense_data->sense_key = 0;
-
        /* Start of retry loop. */
        do {
                ide_init_drive_cmd (&req);
@@ -1386,8 +1375,8 @@ int cdrom_queue_packet_command (ide_drive_t *drive, struct packet_command *pc)
        else {
                /* The command succeeded.  If it was anything other than
                   a request sense, eject, or door lock command,
-                  and we think that the door is presently, lock it again.
-                  (The door was probably unlocked via an explicit
+                  and we think that the door is presently unlocked, lock it
+                  again. (The door was probably unlocked via an explicit
                   CDROMEJECT ioctl.) */
                if (CDROM_STATE_FLAGS (drive)->door_locked == 0 &&
                    (pc->c[0] != GPCMD_TEST_UNIT_READY &&
@@ -1502,6 +1491,8 @@ cdrom_check_status (ide_drive_t  *drive,
                    struct atapi_request_sense *reqbuf)
 {
        struct packet_command pc;
+       struct cdrom_info *info = drive->driver_data;
+       struct cdrom_device_info *cdi = &info->devinfo;
 
        memset (&pc, 0, sizeof (pc));
 
@@ -1512,7 +1503,7 @@ cdrom_check_status (ide_drive_t  *drive,
         /* the Sanyo 3 CD changer uses byte 7 of TEST_UNIT_READY to 
            switch CDs instead of supporting the LOAD_UNLOAD opcode   */
 
-        pc.c[7] = CDROM_STATE_FLAGS (drive)->sanyo_slot % 3;
+        pc.c[7] = cdi->sanyo_slot % 3;
 #endif /* not STANDARD_ATAPI */
 
        return cdrom_queue_packet_command (drive, &pc);
@@ -1639,12 +1630,12 @@ cdrom_read_tocentry (ide_drive_t *drive, int trackno, int msf_flag,
 
 /* Try to read the entire TOC for the disk into our internal buffer. */
 static int
-cdrom_read_toc (ide_drive_t *drive,
-               struct atapi_request_sense *reqbuf)
+cdrom_read_toc (ide_drive_t *drive, struct atapi_request_sense *reqbuf)
 {
        int stat, ntracks, i;
        struct cdrom_info *info = drive->driver_data;
        struct atapi_toc *toc = info->toc;
+       int minor = drive->select.b.unit << PARTN_BITS;
        struct {
                struct atapi_toc_header hdr;
                struct atapi_toc_entry  ent;
@@ -1685,10 +1676,9 @@ cdrom_read_toc (ide_drive_t *drive,
        if (ntracks > MAX_TRACKS) ntracks = MAX_TRACKS;
 
        /* Now read the whole schmeer. */
-       stat = cdrom_read_tocentry (drive, toc->hdr.first_track-1, 1, 0,
-                                  (char *)&toc->hdr,
+       stat = cdrom_read_tocentry (drive, toc->hdr.first_track, 1, 0, (char *)&toc->hdr,
                                    sizeof (struct atapi_toc_header) +
-                                   (ntracks+1) *
+                                   (ntracks + 1) *
                                    sizeof (struct atapi_toc_entry), reqbuf);
 
        if (stat && toc->hdr.first_track > 1) {
@@ -1724,6 +1714,7 @@ cdrom_read_toc (ide_drive_t *drive,
        } else if (stat) {
                return stat;
        }
+       if (stat) return stat;
 
        toc->hdr.toc_length = ntohs (toc->hdr.toc_length);
 
@@ -1750,7 +1741,7 @@ cdrom_read_toc (ide_drive_t *drive,
        /* Read the multisession information. */
        if (toc->hdr.first_track != CDROM_LEADOUT) {
                /* Read the multisession information. */
-               stat = cdrom_read_tocentry (drive, toc->hdr.first_track-1, 1, 1,
+               stat = cdrom_read_tocentry (drive, 0, 1, 1,
                                           (char *)&ms_tmp, sizeof (ms_tmp),
                                            reqbuf);
                if (stat) return stat;
@@ -1774,21 +1765,38 @@ cdrom_read_toc (ide_drive_t *drive,
 
        /* Now try to get the total cdrom capacity. */
 #if 0
-       stat = cdrom_get_last_written(MKDEV(HWIF(drive)->major,
-                                     drive->select.b.unit << PARTN_BITS),
+       stat = cdrom_get_last_written(MKDEV(HWIF(drive)->major, minor,
                                     (long *)&toc->capacity);
        if (stat)
 #endif
        stat = cdrom_read_capacity (drive, &toc->capacity, reqbuf);
        if (stat) toc->capacity = 0x1fffff;
 
-       HWIF(drive)->gd->sizes[drive->select.b.unit << PARTN_BITS]
-               = (toc->capacity * SECTORS_PER_FRAME) >> (BLOCK_SIZE_BITS - 9);
-       drive->part[0].nr_sects = toc->capacity * SECTORS_PER_FRAME;
+       /* for general /dev/cdrom like mounting, one big disc */
+       HWIF(drive)->gd->sizes[minor] = (toc->capacity * SECTORS_PER_FRAME) >>
+                                       (BLOCK_SIZE_BITS - 9);
 
        /* Remember that we've read this stuff. */
        CDROM_STATE_FLAGS (drive)->toc_valid = 1;
 
+       /* should be "if multisession", but it does no harm. */
+       if (ntracks == 1)
+               return 0;
+
+       /* setup each minor to respond to a session */
+       minor++;
+       i = toc->hdr.first_track;
+       while ((i <= ntracks) && ((minor & CD_PART_MASK) < CD_PART_MAX)) {
+               drive->part[minor & PARTN_MASK].start_sect = 0;
+               drive->part[minor & PARTN_MASK].nr_sects = (toc->ent[i].addr.lba *
+                       SECTORS_PER_FRAME) << (BLOCK_SIZE_BITS - 9);
+               HWIF(drive)->gd->sizes[minor] = (toc->ent[i].addr.lba *
+                       SECTORS_PER_FRAME) >> (BLOCK_SIZE_BITS - 9);
+               blksize_size[HWIF(drive)->major][minor] = CD_FRAMESIZE;
+               i++;
+               minor++;
+       }
+
        return 0;
 }
 
@@ -1814,46 +1822,6 @@ cdrom_read_subchannel (ide_drive_t *drive, int format,
        return cdrom_queue_packet_command (drive, &pc);
 }
 
-
-/* modeflag: 0 = current, 1 = changeable mask, 2 = default, 3 = saved */
-static int
-cdrom_mode_sense (ide_drive_t *drive, int pageno, int modeflag,
-                  char *buf, int buflen,
-                 struct atapi_request_sense *reqbuf)
-{
-       struct packet_command pc;
-
-       memset (&pc, 0, sizeof (pc));
-       pc.sense_data = reqbuf;
-
-       pc.buffer =  buf;
-       pc.buflen = buflen;
-       pc.c[0] = GPCMD_MODE_SENSE_10;
-       pc.c[2] = pageno | (modeflag << 6);
-       pc.c[7] = (buflen >> 8);
-       pc.c[8] = (buflen & 0xff);
-       return cdrom_queue_packet_command (drive, &pc);
-}
-
-static int
-cdrom_mode_select (ide_drive_t *drive, int pageno, char *buf, int buflen,
-                  struct atapi_request_sense *reqbuf)
-{
-       struct packet_command pc;
-
-       memset (&pc, 0, sizeof (pc));
-       pc.sense_data = reqbuf;
-
-       pc.buffer =  buf;
-       pc.buflen = buflen;
-       pc.c[0] = GPCMD_MODE_SELECT_10;
-       pc.c[1] = 0x10;
-       pc.c[2] = pageno;
-       pc.c[7] = (buflen >> 8);
-       pc.c[8] = (buflen & 0xff);
-       return cdrom_queue_packet_command (drive, &pc);
-}
-
 /* ATAPI cdrom drives are free to select the speed you request or any slower
    rate :-( Requesting too fast a speed will _not_ produce an error. */
 static int
@@ -1910,48 +1878,6 @@ int cdrom_get_toc_entry (ide_drive_t *drive, int track,
 }
 
 
-/* If SLOT<0, unload the current slot.  Otherwise, try to load SLOT. */
-static int
-cdrom_load_unload (ide_drive_t *drive, int slot,
-                  struct atapi_request_sense *reqbuf)
-{
-#if ! STANDARD_ATAPI
-       /* if the drive is a Sanyo 3 CD changer then TEST_UNIT_READY
-           (used in the cdrom_check_status function) is used to 
-           switch CDs instead of LOAD_UNLOAD */
-
-       if (CDROM_STATE_FLAGS (drive)->sanyo_slot > 0) {
-
-               if ((slot == 1) || (slot == 2))
-                       CDROM_STATE_FLAGS (drive)->sanyo_slot = slot;
-               else if (slot >= 0)
-                       CDROM_STATE_FLAGS (drive)->sanyo_slot = 3;
-               else
-                       return 0;
-
-               return cdrom_check_status (drive, reqbuf);
-
-       }
-       else
-#endif /*not STANDARD_ATAPI */
-       {
-
-               /* ATAPI Rev. 2.2+ standard for requesting switching of
-                   CDs in a multiplatter device */
-
-               struct packet_command pc;
-
-               memset (&pc, 0, sizeof (pc));
-               pc.sense_data = reqbuf;
-
-               pc.c[0] = GPCMD_LOAD_UNLOAD;
-               pc.c[4] = 2 + (slot >= 0);
-               pc.c[8] = slot;
-               return cdrom_queue_packet_command (drive, &pc);
-
-       }
-}
-
 
 /* This gets the mechanism status per ATAPI draft spec 2.6 */
 static int
@@ -2033,37 +1959,34 @@ static int ide_cdrom_packet(struct cdrom_device_info *cdi,
 static
 int ide_cdrom_dev_ioctl (struct cdrom_device_info *cdi,
                         unsigned int cmd, unsigned long arg)
-                        
 {
-       ide_drive_t *drive = (ide_drive_t*) cdi->handle;
+       struct cdrom_generic_command cgc;
+       char buffer[16];
+       int stat;
+
+       init_cdrom_command(&cgc, buffer, sizeof(buffer));
 
+       /* These will be moved into the Uniform layer shortly... */
        switch (cmd) {
        case CDROMSETSPINDOWN: {
                char spindown;
-               char buffer[16];
-               int stat;
  
                if (copy_from_user(&spindown, (void *) arg, sizeof(char)))
                        return -EFAULT;
  
-               stat = cdrom_mode_sense (drive, GPMODE_CDROM_PAGE, 0, buffer,
-                                        sizeof (buffer), NULL);
-               if (stat) return stat;
+                if ((stat = cdrom_mode_sense(cdi, &cgc, GPMODE_CDROM_PAGE, 0)))
+                       return stat;
 
                buffer[11] = (buffer[11] & 0xf0) | (spindown & 0x0f);
 
-               return cdrom_mode_select (drive, GPMODE_CDROM_PAGE, buffer,
-                                         sizeof (buffer), NULL);                       
+               return cdrom_mode_select(cdi, &cgc);
        } 
  
        case CDROMGETSPINDOWN: {
                char spindown;
-               char buffer[16];
-               int stat;
  
-               stat = cdrom_mode_sense (drive, GPMODE_CDROM_PAGE, 0, buffer,
-                                         sizeof (buffer), NULL);
-               if (stat) return stat;
+                if ((stat = cdrom_mode_sense(cdi, &cgc, GPMODE_CDROM_PAGE, 0)))
+                       return stat;
  
                spindown = buffer[11] & 0x0f;
  
@@ -2168,22 +2091,23 @@ static
 int ide_cdrom_select_speed (struct cdrom_device_info *cdi, int speed)
 {
         int stat, attempts = 3;
-        struct {
-                char pad[8];
-                struct atapi_capabilities_page cap;
-        } buf;
        ide_drive_t *drive = (ide_drive_t*) cdi->handle;
        struct atapi_request_sense reqbuf;
+       struct cdrom_generic_command cgc;
+       struct {
+               char pad[8];
+               struct atapi_capabilities_page cap;
+       } buf;
        stat=cdrom_select_speed (drive, speed, &reqbuf);
        if (stat<0)
                return stat;
 
+       init_cdrom_command(&cgc, &buf, sizeof(buf));
        /* Now with that done, update the speed fields */
         do {    /* we seem to get stat=0x01,err=0x00 the first time (??) */
                 if (attempts-- <= 0)
                         return 0;
-                stat = cdrom_mode_sense (drive, GPMODE_CAPABILITIES_PAGE, 0,
-                                        (char *)&buf, sizeof (buf), NULL);
+                stat = cdrom_mode_sense(cdi, &cgc, GPMODE_CAPABILITIES_PAGE, 0);
         } while (stat);
 
         /* The ACER/AOpen 24X cdrom has the speed fields byte-swapped */
@@ -2202,87 +2126,6 @@ int ide_cdrom_select_speed (struct cdrom_device_info *cdi, int speed)
         return 0;
 }
 
-
-static
-int ide_cdrom_select_disc (struct cdrom_device_info *cdi, int slot)
-{
-       ide_drive_t *drive = (ide_drive_t*) cdi->handle;
-       struct cdrom_info *info = drive->driver_data;
-
-       struct atapi_request_sense my_reqbuf;
-       int stat;
-       int nslots, curslot;
-
-       if ( ! CDROM_CONFIG_FLAGS (drive)->is_changer) 
-               return -EDRIVE_CANT_DO_THIS;
-
-#if ! STANDARD_ATAPI
-       if (CDROM_STATE_FLAGS (drive)->sanyo_slot > 0) {
-               nslots = 3;
-               curslot = CDROM_STATE_FLAGS (drive)->sanyo_slot;
-               if (curslot == 3)
-                       curslot = 0;
-       } else
-#endif /* not STANDARD_ATAPI */
-       {
-               stat = cdrom_read_changer_info (drive);
-               if (stat)
-                       return stat;
-
-               nslots = info->changer_info->hdr.nslots;
-               curslot = info->changer_info->hdr.curslot;
-       }
-
-       if (slot == curslot)
-               return curslot;
-
-       if (slot == CDSL_CURRENT)
-               return curslot;
-
-       if (slot != CDSL_NONE && (slot < 0 || slot >= nslots))
-               return -EINVAL;
-
-       if (drive->usage > 1)
-               return -EBUSY;
-
-       if (slot == CDSL_NONE) {
-               (void) cdrom_load_unload (drive, -1, NULL);
-               cdrom_saw_media_change (drive);
-               (void) cdrom_lockdoor (drive, 0, NULL);
-               return 0;
-       }
-       else {
-               int was_locked;
-
-               if (
-#if ! STANDARD_ATAPI
-                   CDROM_STATE_FLAGS (drive)->sanyo_slot == 0 &&
-#endif
-                   info->changer_info->slots[slot].disc_present == 0) {
-                       return -ENOMEDIUM;
-               }
-
-               was_locked = CDROM_STATE_FLAGS (drive)->door_locked;
-               if (was_locked)
-                       (void) cdrom_lockdoor (drive, 0, NULL);
-
-               stat = cdrom_load_unload (drive, slot, NULL);
-               cdrom_saw_media_change (drive);
-               if (stat)
-                       return stat;
-                       
-               stat = cdrom_check_status (drive, &my_reqbuf);
-               if (stat && my_reqbuf.sense_key == NOT_READY)
-                       return -ENOENT;
-
-               if (was_locked)
-                       (void) cdrom_lockdoor (drive, 1, NULL);
-
-               return slot;
-       }
-}
-
-
 static
 int ide_cdrom_drive_status (struct cdrom_device_info *cdi, int slot_nr)
 {
@@ -2307,7 +2150,7 @@ int ide_cdrom_drive_status (struct cdrom_device_info *cdi, int slot_nr)
        }
 
 #if ! STANDARD_ATAPI
-       else if (CDROM_STATE_FLAGS (drive)->sanyo_slot > 0)
+       else if (cdi->sanyo_slot > 0)
                return CDS_NO_INFO;
 #endif /* not STANDARD_ATAPI */
 
@@ -2383,7 +2226,7 @@ int ide_cdrom_check_media_change_real (struct cdrom_device_info *cdi,
        }
 
 #if ! STANDARD_ATAPI
-       else if (CDROM_STATE_FLAGS (drive)->sanyo_slot > 0) {
+       else if (cdi->sanyo_slot > 0) {
                retval = 0;
        }
 #endif /* not STANDARD_ATAPI */
@@ -2447,7 +2290,7 @@ struct cdrom_device_ops ide_cdrom_dops = {
        ide_cdrom_tray_move,    /* tray_move */
        ide_cdrom_lock_door,    /* lock_door */
        ide_cdrom_select_speed, /* select_speed */
-       ide_cdrom_select_disc, /* select_disc */
+       NULL,                   /* select_disc */
        ide_cdrom_get_last_session, /* get_last_session */
        ide_cdrom_get_mcn, /* get_mcn */
        ide_cdrom_reset, /* reset */
@@ -2468,7 +2311,7 @@ static int ide_cdrom_register (ide_drive_t *drive, int nslots)
        struct cdrom_device_info *devinfo = &info->devinfo;
        int minor = (drive->select.b.unit)<<PARTN_BITS;
 
-       devinfo->dev = MKDEV (HWIF(drive)->major, minor);
+       devinfo->dev = MKDEV (HWIF(drive)->major, minor | CD_PART_MASK);
        devinfo->ops = &ide_cdrom_dops;
        devinfo->mask = 0;
        *(int *)&devinfo->speed = CDROM_STATE_FLAGS (drive)->current_speed;
@@ -2501,8 +2344,11 @@ static int ide_cdrom_register (ide_drive_t *drive, int nslots)
 static
 int ide_cdrom_probe_capabilities (ide_drive_t *drive)
 {
+       struct cdrom_info *info = drive->driver_data;
+       struct cdrom_device_info *cdi = &info->devinfo;
        int stat, nslots = 1, attempts = 3;
-       struct {
+       struct cdrom_generic_command cgc;
+       struct {
                char pad[8];
                struct atapi_capabilities_page cap;
        } buf;
@@ -2510,11 +2356,19 @@ int ide_cdrom_probe_capabilities (ide_drive_t *drive)
        if (CDROM_CONFIG_FLAGS (drive)->nec260)
                return nslots;
 
+       init_cdrom_command(&cgc, &buf, sizeof(buf));
+       /* we have to cheat a little here. the packet will eventually
+        * be queued with ide_cdrom_packet(), which extracts the
+        * drive from cdi->handle. Since this device hasn't been
+        * registered with the Uniform layer yet, it can't do this.
+        * Same goes cdi->ops.
+        */
+       cdi->handle = (ide_drive_t *) drive;
+       cdi->ops = &ide_cdrom_dops;
        do {    /* we seem to get stat=0x01,err=0x00 the first time (??) */
                if (attempts-- <= 0)
                        return 0;
-               stat = cdrom_mode_sense (drive, GPMODE_CAPABILITIES_PAGE, 0,
-                                       (char *)&buf, sizeof (buf), NULL);
+               stat = cdrom_mode_sense(cdi, &cgc, GPMODE_CAPABILITIES_PAGE, 0);
        } while (stat);
 
        if (buf.cap.lock == 0)
@@ -2539,7 +2393,7 @@ int ide_cdrom_probe_capabilities (ide_drive_t *drive)
                CDROM_CONFIG_FLAGS (drive)->close_tray = 0;
 
 #if ! STANDARD_ATAPI
-       if (CDROM_STATE_FLAGS (drive)->sanyo_slot > 0) {
+       if (cdi->sanyo_slot > 0) {
                CDROM_CONFIG_FLAGS (drive)->is_changer = 1;
                nslots = 3;
        }
@@ -2619,66 +2473,19 @@ static void ide_cdrom_add_settings(ide_drive_t *drive)
        ide_add_setting(drive,  "dsc_overlap",          SETTING_RW, -1, -1, TYPE_BYTE, 0, 1, 1, 1, &drive->dsc_overlap, NULL);
 }
 
-#ifdef CONFIG_IDECD_SLOTS
-static void ide_cdrom_slot_check (ide_drive_t *drive, int nslots)
-{
-       tracktype tracks;
-       struct cdrom_info *info = drive->driver_data;
-       struct cdrom_device_info *devinfo = &info->devinfo;
-       int slot_count = 0, drive_stat = 0, tmp;
-
-       for (slot_count=0;slot_count<nslots;slot_count++) {
-               (void) ide_cdrom_select_disc(devinfo, slot_count);
-               printk("     CD Slot %d ", slot_count+1);
-
-               drive_stat = ide_cdrom_drive_status(devinfo, slot_count);
-               if (drive_stat<0) {
-                       continue;
-               } else switch(drive_stat) {
-                       case CDS_DISC_OK:
-                               /* use routine in Uniform CD-ROM driver */
-                               cdrom_count_tracks(devinfo, &tracks);
-                               tmp = tracks.audio + tracks.data +
-                                       tracks.cdi + tracks.xa;
-                               printk(": Disc has %d track%s: ", tmp,
-                                       (tmp == 1)? "" : "s");
-                               printk("%d=data %d=audio %d=Cd-I %d=XA\n",
-                                       tracks.data, tracks.audio,
-                                       tracks.cdi, tracks.xa);
-                               break;
-                       case CDS_NO_DISC:
-                               printk("Empty slot.\n");
-                               break;
-                       case CDS_TRAY_OPEN:
-                               printk("CD-ROM tray open.\n");
-                               break;
-                       case CDS_DRIVE_NOT_READY:
-                               printk("CD-ROM drive not ready.\n");
-                               break;
-                       case CDS_NO_INFO:
-                               printk("No Information available.\n");
-                               break;
-                       default:
-                               printk("This Should not happen!\n");
-                               break;
-               }
-       }
-       (void) ide_cdrom_select_disc(devinfo, 0);
-}
-#endif /* CONFIG_IDECD_SLOTS */
 
 static
 int ide_cdrom_setup (ide_drive_t *drive)
 {
        struct cdrom_info *info = drive->driver_data;
+       struct cdrom_device_info *cdi = &info->devinfo;
+       int minor = drive->select.b.unit << PARTN_BITS;
        int nslots;
 
-       kdev_t dev = MKDEV (HWIF (drive)->major,
-                           drive->select.b.unit << PARTN_BITS);
+       kdev_t dev = MKDEV(HWIF(drive)->major, minor);
 
        set_device_ro (dev, 1);
-       blksize_size[HWIF(drive)->major][drive->select.b.unit << PARTN_BITS] =
-               CD_FRAMESIZE;
+       blksize_size[HWIF(drive)->major][minor] = CD_FRAMESIZE;
 
        drive->special.all = 0;
        drive->ready_stat = 0;
@@ -2723,7 +2530,7 @@ int ide_cdrom_setup (ide_drive_t *drive)
 #if ! STANDARD_ATAPI
        /* by default Sanyo 3 CD changer support is turned off and
            ATAPI Rev 2.2+ standard support for CD changers is used */
-       CDROM_STATE_FLAGS (drive)->sanyo_slot = 0;
+       cdi->sanyo_slot = 0;
 
        CDROM_CONFIG_FLAGS (drive)->nec260 = 0;
        CDROM_CONFIG_FLAGS (drive)->toctracks_as_bcd = 0;
@@ -2775,7 +2582,7 @@ int ide_cdrom_setup (ide_drive_t *drive)
                          (strcmp(drive->id->model, "CD-ROM CDR-C3G") == 0) ||
                          (strcmp(drive->id->model, "CD-ROM CDR_C36") == 0)) {
                         /* uses CD in slot 0 when value is set to 3 */
-                        CDROM_STATE_FLAGS (drive)->sanyo_slot = 3;
+                        cdi->sanyo_slot = 3;
                 }
 
 
@@ -2796,11 +2603,6 @@ int ide_cdrom_setup (ide_drive_t *drive)
                return 1;
        }
        ide_cdrom_add_settings(drive);
-#ifdef CONFIG_IDECD_SLOTS
-       if (CDROM_CONFIG_FLAGS (drive)->is_changer) {
-               ide_cdrom_slot_check(drive, nslots);
-       }
-#endif /* CONFIG_IDECD_SLOTS */
        return 0;
 }
 
@@ -2927,11 +2729,12 @@ int ide_cdrom_init (void)
        MOD_INC_USE_COUNT;
        while ((drive = ide_scan_devices (ide_cdrom, ide_cdrom_driver.name, NULL, failed++)) != NULL) {
                /* skip drives that we were told to ignore */
-               if (ignore != NULL)
+               if (ignore != NULL) {
                        if (strstr(ignore, drive->name)) {
                                printk("ide-cd: ignoring drive %s\n", drive->name);
                                continue;
                        }
+               }
                info = (struct cdrom_info *) kmalloc (sizeof (struct cdrom_info), GFP_KERNEL);
                if (info == NULL) {
                        printk ("%s: Can't allocate a cdrom structure\n", drive->name);
index 03781281bbc6bd9c949ce6d7097c3c733592d42b..ae1a252edb231b66f6fd608c058e3ad1981b7f1f 100644 (file)
@@ -96,8 +96,7 @@ struct ide_cd_state_flags {
        __u8 media_changed : 1; /* Driver has noticed a media change. */
        __u8 toc_valid     : 1; /* Saved TOC information is current. */
        __u8 door_locked   : 1; /* We think that the drive door is locked. */
-       __u8 sanyo_slot    : 2; /* Sanyo 3 CD changer support */
-       __u8 reserved      : 3;
+       __u8 reserved      : 5;
        byte current_speed;     /* Current speed of the drive */
 };
 #define CDROM_STATE_FLAGS(drive) (&(((struct cdrom_info *)(drive->driver_data))->state_flags))
@@ -219,14 +218,6 @@ struct atapi_cdrom_subchnl {
 };
 
 
-typedef enum {
-       mechtype_caddy = 0,
-       mechtype_tray  = 1,
-       mechtype_popup = 2,
-       mechtype_individual_changer = 4,
-       mechtype_cartridge_changer  = 5
-} mechtype_t;
-
 
 /* This should probably go into cdrom.h along with the other
  * generic stuff now in the Mt. Fuji spec.
index a9b6941b48d7616d40334c3721613e23116836e3..6e8313733b3636f5eb30e1011bc9be7415eede36 100644 (file)
@@ -3583,8 +3583,9 @@ static void idetape_setup (ide_drive_t *drive, idetape_tape_t *tape, int minor)
        /*
         *  These two ide-pci host adapters appear to need this disabled.
         */
-       if ((HWIF(drive)->pci_dev->device == PCI_DEVICE_ID_ARTOP_ATP850UF) ||
-           (HWIF(drive)->pci_dev->device == PCI_DEVICE_ID_TTI_HPT343)) {
+       if (HWIF(drive)->pci_dev != NULL && (
+           (HWIF(drive)->pci_dev->device == PCI_DEVICE_ID_ARTOP_ATP850UF) ||
+           (HWIF(drive)->pci_dev->device == PCI_DEVICE_ID_TTI_HPT343))) {
                drive->dsc_overlap = 0;
        } else
 #endif  /* CONFIG_BLK_DEV_IDEPCI */
index e2b40eb2243b3f0859a683ab6060b507a3bb3305..f05196389aa9b7c54165469fdf124e08d4c7fcab 100644 (file)
@@ -25,6 +25,7 @@
 #include <linux/ioport.h>
 #include <linux/string.h>
 #include <linux/spinlock.h>
+#include <linux/wait.h>
 
 #ifdef CONFIG_PARPORT_MODULE
 #define CONFIG_PARPORT
index 253b5ce1e3c36ae26b1024c222abf2211a1b132c..221a3297acf2f9471bcfc66bcd11e017255f8e66 100644 (file)
@@ -124,7 +124,7 @@ static struct timer_list esdi_timer = {NULL, NULL, 0, 0L, ps2esdi_reset_timer};
 static int reset_status;
 static int ps2esdi_slot = -1;
 int tp720esdi = 0;             /* Is it Integrated ESDI of ThinkPad-720? */
-
+int intg_esdi = 0;              /* If integrated adapter */
 struct ps2esdi_i_struct {
        unsigned int head, sect, cyl, wpcom, lzone, ctl;
 };
@@ -387,7 +387,7 @@ static void __init ps2esdi_geninit(struct gendisk *ignored)
        reset_status = 0;
        reset_start = jiffies;
        while (!reset_status) {
-               esdi_timer.expires = 100;
+               esdi_timer.expires = HZ;
                esdi_timer.data = 0;
                esdi_timer.next = esdi_timer.prev = NULL;
                add_timer(&esdi_timer);
@@ -401,8 +401,9 @@ static void __init ps2esdi_geninit(struct gendisk *ignored)
 
 
        /* Integrated ESDI Disk and Controller has only one drive! */
-       if (adapterID == INTG_ESDI_ID)  /* if not "normal" PS2 ESDI adapter */
-               ps2esdi_drives = 1;     /* then we have only one physical disk! */
+       if (adapterID == INTG_ESDI_ID) {/* if not "normal" PS2 ESDI adapter */
+               ps2esdi_drives = 1;     /* then we have only one physical disk! */              intg_esdi = 1;
+       }
 
 
 
@@ -560,7 +561,7 @@ static void reset_ctrl(void)
                /*BA */
                printk("%s: hard reset...\n", DEVICE_NAME);
                outb_p(CTRL_HARD_RESET, ESDI_CONTROL);
-               expire = jiffies + 200;
+               expire = jiffies + 2*HZ;
                while (time_before(jiffies, expire));
                outb_p(1, ESDI_CONTROL);
        }                       /* hard reset */
@@ -812,7 +813,8 @@ static void ps2esdi_geometry_int_handler(u_int int_ret_code)
                                                ps2esdi_info[0].wpcom = 0;
                                                ps2esdi_info[0].lzone = reply[3];
                                        } else {
-                                               ps2esdi_drives++;
+                                               if (!intg_esdi)
+                                                       ps2esdi_drives++;
                                        }
                                }
 #ifdef OBSOLETE
index 30edea88779a216c294548ffb86b38ed0ab8db44..811e1665f5ef45e02c83aae344ddc3aac9597a4d 100644 (file)
@@ -87,9 +87,9 @@ void __init ide_probe_for_rz100x (void)       /* called from ide.c */
 {
        struct pci_dev *dev = NULL;
 
-       while (dev = pci_find_device(PCI_VENDOR_ID_PCTECH, PCI_DEVICE_ID_PCTECH_RZ1000, dev))
+       while ((dev = pci_find_device(PCI_VENDOR_ID_PCTECH, PCI_DEVICE_ID_PCTECH_RZ1000, dev))!=NULL)
                init_rz1000 (dev, "RZ1000");
-       while (dev = pci_find_device(PCI_VENDOR_ID_PCTECH, PCI_DEVICE_ID_PCTECH_RZ1001, dev))
+       while ((dev = pci_find_device(PCI_VENDOR_ID_PCTECH, PCI_DEVICE_ID_PCTECH_RZ1001, dev))!=NULL)
                init_rz1000 (dev, "RZ1001");
 }
 
index f7b109cec306fe9e63afceb562653fe1912ca9a7..44e8317f0dad7e84b0feebbd28afd23bc4a372bb 100644 (file)
@@ -55,7 +55,7 @@
 
 #define XD_DONT_USE_DMA                0  /* Initial value. may be overriden using
                                      "nodma" module option */
-#define XD_INIT_DISK_DELAY     3  /* 30 ms delay during disk initialization */
+#define XD_INIT_DISK_DELAY     (30*HZ/1000)  /* 30 ms delay during disk initialization */
 
 /* Above may need to be increased if a problem with the 2nd drive detection
    (ST11M controller) or resetting a controler (WD) appears */
index 3ecee30b2c5e3700e3ce405731089495859cccb5..31210596db0f82b0da9b72becbf5a57ee9d4ae2b 100644 (file)
@@ -1,27 +1,27 @@
 #
 # CDROM driver configuration
 #
-tristate 'Aztech/Orchid/Okano/Wearnes/TXC/CyDROM  CDROM support' CONFIG_AZTCD
-tristate 'Goldstar R420 CDROM support' CONFIG_GSCD
-tristate 'Matsushita/Panasonic/Creative, Longshine, TEAC CDROM support' CONFIG_SBPCD
+tristate '  Aztech/Orchid/Okano/Wearnes/TXC/CyDROM  CDROM support' CONFIG_AZTCD
+tristate '  Goldstar R420 CDROM support' CONFIG_GSCD
+tristate '  Matsushita/Panasonic/Creative, Longshine, TEAC CDROM support' CONFIG_SBPCD
 if [ "$CONFIG_SBPCD" = "y" ]; then
-  bool 'Matsushita/Panasonic, ... second CDROM controller support' CONFIG_SBPCD2
-  if [ "$CONFIG_SBPCD2" = "y" ]; then
-    bool 'Matsushita/Panasonic, ... third CDROM controller support' CONFIG_SBPCD3
-    if [ "$CONFIG_SBPCD3" = "y" ]; then
-      bool 'Matsushita/Panasonic, ... fourth CDROM controller support' CONFIG_SBPCD4
-    fi
-  fi
+   bool '    Matsushita/Panasonic, ... second CDROM controller support' CONFIG_SBPCD2
+   if [ "$CONFIG_SBPCD2" = "y" ]; then
+      bool '      Matsushita/Panasonic, ... third CDROM controller support' CONFIG_SBPCD3
+      if [ "$CONFIG_SBPCD3" = "y" ]; then
+        bool '        Matsushita/Panasonic, ... fourth CDROM controller support' CONFIG_SBPCD4
+      fi
+   fi
 fi
-tristate 'Mitsumi (standard) [no XA/Multisession] CDROM support' CONFIG_MCD
+tristate '  Mitsumi (standard) [no XA/Multisession] CDROM support' CONFIG_MCD
 if [ "$CONFIG_MCD" != "n" ]; then
    int 'MCD IRQ' CONFIG_MCD_IRQ 11
    hex 'MCD I/O base' CONFIG_MCD_BASE 300
 fi
-tristate 'Mitsumi [XA/MultiSession] CDROM support' CONFIG_MCDX
-tristate 'Optics Storage DOLPHIN 8000AT CDROM support' CONFIG_OPTCD
-tristate 'Philips/LMS CM206 CDROM support' CONFIG_CM206
-tristate 'Sanyo CDR-H94A CDROM support' CONFIG_SJCD
-tristate 'ISP16/MAD16/Mozart soft configurable cdrom interface support' CONFIG_ISP16_CDI
-tristate 'Sony CDU31A/CDU33A CDROM support' CONFIG_CDU31A
-tristate 'Sony CDU535 CDROM support' CONFIG_CDU535
+tristate '  Mitsumi [XA/MultiSession] CDROM support' CONFIG_MCDX
+tristate '  Optics Storage DOLPHIN 8000AT CDROM support' CONFIG_OPTCD
+tristate '  Philips/LMS CM206 CDROM support' CONFIG_CM206
+tristate '  Sanyo CDR-H94A CDROM support' CONFIG_SJCD
+tristate '  ISP16/MAD16/Mozart soft configurable cdrom interface support' CONFIG_ISP16_CDI
+tristate '  Sony CDU31A/CDU33A CDROM support' CONFIG_CDU31A
+tristate '  Sony CDU535 CDROM support' CONFIG_CDU535
index 3c5f8aa57dfceae90ca0385929c47563aaa515f7..7a46ed183620b8fc75658dca873b6096f9a3ee70 100644 (file)
   drivers are updated as well.
   -- Various other cleanups.
 
+  3.04 Sep 12, 1999 - Jens Axboe <axboe@image.dk>
+  -- Fixed a couple of possible memory leaks (if an operation failed and
+  we didn't free the buffer before returning the error).
+  -- Integrated Uniform CD Changer handling from Richard Sharman
+  <rsharman@pobox.com>.
+  -- Defined CD_DVD and CD_CHANGER log levels.
+  -- Fixed the CDROMREADxxx ioctls.
+  -- CDROMPLAYTRKIND uses the GPCMD_PLAY_AUDIO_MSF command - too few
+  drives supported it. We loose the index part, however.
+  -- Small modifications to accomodate opens of /dev/hdc1, required
+  for ide-cd to handle multisession discs.
+  -- Export cdrom_mode_sense and cdrom_mode_select.
+  -- init_cdrom_command() for setting up a cgc command.
 -------------------------------------------------------------------------*/
 
-#define REVISION "Revision: 3.03"
-#define VERSION "Id: cdrom.c 3.03 1999/09/01"
+#define REVISION "Revision: 3.04"
+#define VERSION "Id: cdrom.c 3.04 1999/09/14"
 
 /* I use an error-log mask to give fine grain control over the type of
    messages dumped to the system logs.  The available masks include: */
 #define CD_OPEN                0x8
 #define CD_CLOSE       0x10
 #define CD_COUNT_TRACKS 0x20
+#define CD_CHANGER     0x40
+#define CD_DVD         0x80
 
 /* Define this to remove _all_ the debugging messages */
 /* #define ERRLOGMASK CD_NOTHING */
@@ -210,7 +225,8 @@ static int keeplocked = 0;
 static int autoclose=1;
 static int autoeject=0;
 static int lockdoor = 1;
-static int check_media_type = 1;
+/* will we ever get to use this... sigh. */
+static int check_media_type = 0;
 MODULE_PARM(debug, "i");
 MODULE_PARM(autoclose, "i");
 MODULE_PARM(autoeject, "i");
@@ -311,7 +327,6 @@ int register_cdrom(struct cdrom_device_info *cdi)
        ENSURE(tray_move, CDC_CLOSE_TRAY | CDC_OPEN_TRAY);
        ENSURE(lock_door, CDC_LOCK);
        ENSURE(select_speed, CDC_SELECT_SPEED);
-       ENSURE(select_disc, CDC_SELECT_DISC);
        ENSURE(get_last_session, CDC_MULTI_SESSION);
        ENSURE(get_mcn, CDC_MCN);
        ENSURE(reset, CDC_RESET);
@@ -374,6 +389,18 @@ struct cdrom_device_info *cdrom_find_device (kdev_t dev)
        cdi = topCdromPtr;
        while (cdi != NULL && cdi->dev != dev)
                cdi = cdi->next;
+
+       /* we need to find the device this way when IDE devices such
+        * as /dev/hdc2 are opened. SCSI drives will be found above and
+        * so will /dev/hdc, for instance.
+        */
+       if (cdi == NULL) {
+               kdev_t cd_dev = MKDEV(MAJOR(dev), MINOR(dev) | CD_PART_MASK);
+               cdi = topCdromPtr;
+               while (cdi != NULL && cdi->dev != cd_dev)
+                       cdi = cdi->next;
+       }
+       
        return cdi;
 }
 
@@ -579,7 +606,7 @@ static
 int cdrom_release(struct inode *ip, struct file *fp)
 {
        kdev_t dev = ip->i_rdev;
-       struct cdrom_device_info *cdi = cdrom_find_device (dev);
+       struct cdrom_device_info *cdi = cdrom_find_device(dev);
        struct cdrom_device_ops *cdo = cdi->ops;
        int opened_for_data;
 
@@ -610,6 +637,133 @@ int cdrom_release(struct inode *ip, struct file *fp)
        return 0;
 }
 
+static int cdrom_read_mech_status(struct cdrom_device_info *cdi, 
+                                 struct cdrom_changer_info *buf)
+{
+       struct cdrom_generic_command cgc;
+       struct cdrom_device_ops *cdo = cdi->ops;
+       int length;
+
+       length = sizeof(struct cdrom_mechstat_header) +
+                cdi->capacity * sizeof(struct cdrom_slot);
+
+       init_cdrom_command(&cgc, buf, length);
+       cgc.cmd[0] = GPCMD_MECHANISM_STATUS;
+       cgc.cmd[8] = (length >> 8) & 0xff;
+       cgc.cmd[9] = length & 0xff;
+       return cdo->generic_packet(cdi, &cgc);
+}
+
+static int cdrom_slot_status(struct cdrom_device_info *cdi, int slot)
+{
+       struct cdrom_changer_info info;
+       int ret;
+
+       cdinfo(CD_CHANGER, "entering cdrom_slot_status()\n"); 
+       if (cdi->sanyo_slot)
+               return CDS_NO_INFO;
+       
+       if ((ret = cdrom_read_mech_status(cdi, &info)))
+               return ret;
+
+       if (info.slots[slot].disc_present)
+               return CDS_DISC_OK;
+       else
+               return CDS_NO_DISC;
+
+}
+
+/* Return the number of slots for an ATAPI/SCSI cdrom, 
+ * return 1 if not a changer. 
+ */
+int cdrom_number_of_slots(struct cdrom_device_info *cdi) 
+{
+       int status;
+       int nslots = 1;
+       struct cdrom_changer_info info;
+
+       cdinfo(CD_CHANGER, "entering cdrom_number_of_slots()\n"); 
+       /* cdrom_read_mech_status requires a valid value for capacity: */
+       cdi->capacity = 0; 
+
+       if ((status = cdrom_read_mech_status(cdi, &info)) == 0)
+               nslots = info.hdr.nslots;
+
+       return nslots;
+}
+
+
+/* If SLOT < 0, unload the current slot.  Otherwise, try to load SLOT. */
+static int cdrom_load_unload(struct cdrom_device_info *cdi, int slot) 
+{
+       struct cdrom_generic_command cgc;
+
+       cdinfo(CD_CHANGER, "entering cdrom_load_unload()\n"); 
+       if (cdi->sanyo_slot && slot < 0)
+               return 0;
+
+       init_cdrom_command(&cgc, NULL, 0);
+       cgc.cmd[0] = GPCMD_LOAD_UNLOAD;
+       cgc.cmd[4] = 2 + (slot >= 0);
+       cgc.cmd[8] = slot;
+
+       /* The Sanyo 3 CD changer uses byte 7 of the 
+       GPCMD_TEST_UNIT_READY to command to switch CDs instead of
+       using the GPCMD_LOAD_UNLOAD opcode. */
+       if (cdi->sanyo_slot && slot) {
+               cgc.cmd[0] = GPCMD_TEST_UNIT_READY;
+               cgc.cmd[7] = slot;
+               cdi->sanyo_slot = slot ? slot : 3;
+       }
+
+       return cdi->ops->generic_packet(cdi, &cgc);
+}
+
+int cdrom_select_disc (struct cdrom_device_info *cdi, int slot)
+{
+       struct cdrom_changer_info info;
+       int curslot;
+       int ret;
+
+       cdinfo(CD_CHANGER, "entering cdrom_select_disc()\n"); 
+       if (!CDROM_CAN(CDC_SELECT_DISC))
+               return -EDRIVE_CANT_DO_THIS;
+
+       if (slot == CDSL_NONE) {
+               /* set media changed bits, on both queues */
+               cdi->mc_flags = 0x3;
+               return cdrom_load_unload(cdi, -1);
+       }
+
+       if ((ret = cdrom_read_mech_status(cdi, &info)))
+               return ret;
+
+       curslot = info.hdr.curslot;
+
+       if (cdi->use_count > 1 || keeplocked) {
+               if (slot == CDSL_CURRENT) {
+                       return curslot;
+               } else {
+                       return -EBUSY;
+               }
+       }
+
+       /* Specifying CDSL_CURRENT will attempt to load the currnet slot,
+       which is useful if it had been previously unloaded.
+       Whether it can or not, it returns the current slot. 
+       Similarly,  if slot happens to be the current one, we still
+       try and load it. */
+       if (slot == CDSL_CURRENT)
+               slot = curslot;
+
+       /* set media changed bits on both queues */
+       cdi->mc_flags = 0x3;
+       if ((ret = cdrom_load_unload(cdi, slot)))
+               return ret;
+
+       return slot;
+}
+
 /* We want to make media_changed accessible to the user through an
  * ioctl. The main problem now is that we must double-buffer the
  * low-level implementation, to assure that the VFS and the user both
@@ -636,7 +790,7 @@ int media_changed(struct cdrom_device_info *cdi, int queue)
 static
 int cdrom_media_changed(kdev_t dev)
 {
-       struct cdrom_device_info *cdi = cdrom_find_device (dev);
+       struct cdrom_device_info *cdi = cdrom_find_device(dev);
        /* This talks to the VFS, which doesn't like errors - just 1 or 0.  
         * Returning "0" is always safe (media hasn't been changed). Do that 
         * if the low-level cdrom driver dosn't support media changed. */ 
@@ -734,6 +888,14 @@ void sanitize_format(union cdrom_addr *addr,
        *curr = requested;
 }
 
+void init_cdrom_command(struct cdrom_generic_command *cgc,
+                       void *buffer, int len)
+{
+       memset(cgc, 0, sizeof(*cgc));
+       cgc->buffer = (char *) buffer;
+       cgc->buflen = len;
+}
+
 /* DVD handling */
 
 #define copy_key(dest,src)     memcpy((dest), (src), sizeof(dvd_key))
@@ -758,19 +920,16 @@ static int dvd_do_auth (struct cdrom_device_info *cdi, dvd_authinfo *ai)
        struct cdrom_generic_command cgc;
        struct cdrom_device_ops *cdo = cdi->ops;
 
-       memset(&cgc, 0, sizeof(cgc));
-       memset(buf, 0x93, sizeof(buf));
-       cgc.buffer = buf;
+       init_cdrom_command(&cgc, buf, 0);
 
        switch (ai->type) {
        /* LU data send */
        case DVD_LU_SEND_AGID:
-               cdinfo(CD_DO_IOCTL, "entering DVD_LU_SEND_AGID\n"); 
+               cdinfo(CD_DVD, "entering DVD_LU_SEND_AGID\n"); 
                setup_report_key (&cgc, 0, 0);
                cgc.buflen = cgc.cmd[9] = 8;
 
-               ret = cdo->generic_packet(cdi, &cgc);
-               if (ret)
+               if ((ret = cdo->generic_packet(cdi, &cgc)))
                        return ret;
 
                ai->lsa.agid = buf[7] >> 6;
@@ -778,24 +937,24 @@ static int dvd_do_auth (struct cdrom_device_info *cdi, dvd_authinfo *ai)
                break;
 
        case DVD_LU_SEND_KEY1:
-               cdinfo(CD_DO_IOCTL, "entering DVD_LU_SEND_KEY1\n"); 
+               cdinfo(CD_DVD, "entering DVD_LU_SEND_KEY1\n"); 
                setup_report_key (&cgc, ai->lsk.agid, 2);
                cgc.buflen = cgc.cmd[9] = 12;
 
-               ret = cdo->generic_packet(cdi, &cgc);
-               if (ret) return ret;
+               if ((ret = cdo->generic_packet(cdi, &cgc)))
+                       return ret;
 
                copy_key(ai->lsk.key, &buf[4]);
                /* Returning data, let host change state */
                break;
 
        case DVD_LU_SEND_CHALLENGE:
-               cdinfo(CD_DO_IOCTL, "entering DVD_LU_SEND_CHALLENGE\n"); 
+               cdinfo(CD_DVD, "entering DVD_LU_SEND_CHALLENGE\n"); 
                setup_report_key (&cgc, ai->lsc.agid, 1);
                cgc.buflen = cgc.cmd[9] = 16;
 
-               ret = cdo->generic_packet(cdi, &cgc);
-               if (ret) return ret;
+               if ((ret = cdo->generic_packet(cdi, &cgc)))
+                       return ret;
 
                copy_chal(ai->lsc.chal, &buf[4]);
                /* Returning data, let host change state */
@@ -803,7 +962,7 @@ static int dvd_do_auth (struct cdrom_device_info *cdi, dvd_authinfo *ai)
 
        /* Post-auth key */
        case DVD_LU_SEND_TITLE_KEY:
-               cdinfo(CD_DO_IOCTL, "entering DVD_LU_SEND_TITLE_KEY\n"); 
+               cdinfo(CD_DVD, "entering DVD_LU_SEND_TITLE_KEY\n"); 
                setup_report_key (&cgc, ai->lstk.agid, 4);
                cgc.cmd[5] = ai->lstk.lba;
                cgc.cmd[4] = ai->lstk.lba >> 8;
@@ -811,8 +970,8 @@ static int dvd_do_auth (struct cdrom_device_info *cdi, dvd_authinfo *ai)
                cgc.cmd[2] = ai->lstk.lba >> 24;
                cgc.buflen = cgc.cmd[9] = 12;
 
-               ret = cdo->generic_packet(cdi, &cgc);
-               if (ret) return ret;
+               if ((ret = cdo->generic_packet(cdi, &cgc)))
+                       return ret;
 
                ai->lstk.cpm = (buf[4] >> 7) & 1;
                ai->lstk.cp_sec = (buf[4] >> 6) & 1;
@@ -822,32 +981,32 @@ static int dvd_do_auth (struct cdrom_device_info *cdi, dvd_authinfo *ai)
                break;
 
        case DVD_LU_SEND_ASF:
-               cdinfo(CD_DO_IOCTL, "entering DVD_LU_SEND_ASF\n"); 
+               cdinfo(CD_DVD, "entering DVD_LU_SEND_ASF\n"); 
                setup_report_key (&cgc, ai->lsasf.asf, 5);
                cgc.buflen = cgc.cmd[9] = 8;
-
-               ret = cdo->generic_packet(cdi, &cgc);
-               if (ret) return ret;
+               
+               if ((ret = cdo->generic_packet(cdi, &cgc)))
+                       return ret;
 
                ai->lsasf.asf = buf[7] & 1;
                break;
 
        /* LU data receive (LU changes state) */
        case DVD_HOST_SEND_CHALLENGE:
-               cdinfo(CD_DO_IOCTL, "entering DVD_HOST_SEND_CHALLENGE\n"); 
+               cdinfo(CD_DVD, "entering DVD_HOST_SEND_CHALLENGE\n"); 
                setup_send_key (&cgc, ai->hsc.agid, 1);
                cgc.buflen = cgc.cmd[9] = 16;
                buf[1] = 14;
                copy_chal (&buf[4], ai->hsc.chal);
 
-               ret = cdo->generic_packet(cdi, &cgc);
-               if (ret) return ret;
+               if ((ret = cdo->generic_packet(cdi, &cgc)))
+                       return ret;
 
                ai->type = DVD_LU_SEND_KEY1;
                break;
 
        case DVD_HOST_SEND_KEY2:
-               cdinfo(CD_DO_IOCTL, "entering DVD_HOST_SEND_KEY2\n"); 
+               cdinfo(CD_DVD, "entering DVD_HOST_SEND_KEY2\n"); 
                setup_send_key (&cgc, ai->hsk.agid, 3);
                cgc.buflen = cgc.cmd[9] = 12;
                buf[1] = 10;
@@ -863,10 +1022,10 @@ static int dvd_do_auth (struct cdrom_device_info *cdi, dvd_authinfo *ai)
 
        /* Misc */
        case DVD_INVALIDATE_AGID:
-               cdinfo(CD_DO_IOCTL, "entering DVD_INVALIDATE_AGID\n"); 
+               cdinfo(CD_DVD, "entering DVD_INVALIDATE_AGID\n"); 
                setup_report_key (&cgc, ai->lsa.agid, 0x3f);
-               ret = cdo->generic_packet(cdi, &cgc);
-               if (ret) return ret;
+               if ((ret = cdo->generic_packet(cdi, &cgc)))
+                       return ret;
                break;
 
        default:
@@ -886,16 +1045,14 @@ static int dvd_read_physical (struct cdrom_device_info *cdi, dvd_struct *s)
        struct cdrom_device_ops *cdo = cdi->ops;
 
        memset(buf, 0, sizeof(buf));
-       memset(&cgc, 0, sizeof(cgc));
-       cgc.buffer = buf;
-       cgc.buflen = sizeof(buf);
+       init_cdrom_command(&cgc, buf, sizeof(buf));
        cgc.cmd[0] = GPCMD_READ_DVD_STRUCTURE;
        cgc.cmd[6] = s->physical.layer_num;
        cgc.cmd[7] = s->type;
        cgc.cmd[9] = cgc.buflen & 0xff;
 
-       ret = cdo->generic_packet(cdi, &cgc);
-       if (ret) return ret;
+       if ((ret = cdo->generic_packet(cdi, &cgc)))
+               return ret;
 
        base = &buf[4];
        layer = &s->physical.layer[0];
@@ -930,17 +1087,14 @@ static int dvd_read_copyright(struct cdrom_device_info *cdi, dvd_struct *s)
        struct cdrom_device_ops *cdo = cdi->ops;
 
        memset(buf, 0, sizeof(buf));
-       memset(&cgc, 0, sizeof(cgc));
-       cgc.buffer = buf;
-       cgc.buflen = sizeof(buf);
+       init_cdrom_command(&cgc, buf, sizeof(buf));
        cgc.cmd[0] = GPCMD_READ_DVD_STRUCTURE;
        cgc.cmd[6] = s->copyright.layer_num;
        cgc.cmd[7] = s->type;
        cgc.cmd[8] = cgc.buflen >> 8;
        cgc.cmd[9] = cgc.buflen & 0xff;
 
-       ret = cdo->generic_packet(cdi, &cgc);
-       if (ret)
+       if ((ret = cdo->generic_packet(cdi, &cgc)))
                return ret;
 
        s->copyright.cpst = buf[4];
@@ -957,20 +1111,17 @@ static int dvd_read_disckey (struct cdrom_device_info *cdi, dvd_struct *s)
        struct cdrom_device_ops *cdo = cdi->ops;
 
        memset(buf, 0, sizeof (buf));
-       memset(&cgc, 0, sizeof (cgc));
-
-       cgc.buffer = buf;
-       cgc.buflen = sizeof(buf);
+       init_cdrom_command(&cgc, buf, sizeof(buf));
        cgc.cmd[0] = GPCMD_READ_DVD_STRUCTURE;
        cgc.cmd[7] = s->type;
        cgc.cmd[8] = sizeof(buf) >> 8;
        cgc.cmd[9] = cgc.buflen & 0xff;
        cgc.cmd[10] = s->disckey.agid << 6;
 
-       ret = cdo->generic_packet(cdi, &cgc);
-       if (ret) return ret;
+       if ((ret = cdo->generic_packet(cdi, &cgc)))
+               return ret;
 
-       memcpy (s->disckey.value, &buf[4], 2048);
+       memcpy(s->disckey.value, &buf[4], 2048);
 
        return 0;
 }
@@ -983,15 +1134,13 @@ static int dvd_read_bca(struct cdrom_device_info *cdi, dvd_struct *s)
        struct cdrom_device_ops *cdo = cdi->ops;
 
        memset(buf, 0, sizeof (buf));
-       memset(&cgc, 0, sizeof (cgc));
-       cgc.buffer = buf;
-       cgc.buflen = sizeof(buf);
+       init_cdrom_command(&cgc, buf, sizeof(buf));
        cgc.cmd[0] = GPCMD_READ_DVD_STRUCTURE;
        cgc.cmd[7] = s->type;
        cgc.cmd[9] = cgc.buflen = 0xff;
 
-       ret = cdo->generic_packet(cdi, &cgc);
-       if (ret) return ret;
+       if ((ret = cdo->generic_packet(cdi, &cgc)))
+               return ret;
 
        s->bca.len = buf[0] << 8 | buf[1];
        if (s->bca.len < 12 || s->bca.len > 188) {
@@ -1011,16 +1160,15 @@ static int dvd_read_manufact(struct cdrom_device_info *cdi, dvd_struct *s)
        struct cdrom_device_ops *cdo = cdi->ops;
 
        memset(buf, 0, sizeof(buf));
-       memset(&cgc, 0, sizeof(cgc));
-       cgc.buffer = buf;
+       init_cdrom_command(&cgc, buf, sizeof(buf));
        cgc.cmd[0] = GPCMD_READ_DVD_STRUCTURE;
        cgc.cmd[7] = s->type;
        cgc.buflen = sizeof(buf);
        cgc.cmd[8] = sizeof(buf) >> 8;
        cgc.cmd[9] = cgc.buflen & 0xff;
 
-       ret = cdo->generic_packet(cdi, &cgc);
-       if (ret) return ret;
+       if ((ret = cdo->generic_packet(cdi, &cgc)))
+               return ret;
 
        s->manufact.len = buf[0] << 8 | buf[1];
        if (s->manufact.len < 0 || s->manufact.len > 2048) {
@@ -1057,9 +1205,9 @@ static int dvd_read_struct(struct cdrom_device_info *cdi, dvd_struct *s)
        }
 }
 
-static int cdrom_mode_sense(struct cdrom_device_info *cdi,
-                           struct cdrom_generic_command *cgc,
-                           int page_code, int page_control)
+int cdrom_mode_sense(struct cdrom_device_info *cdi,
+                    struct cdrom_generic_command *cgc,
+                    int page_code, int page_control)
 {
        struct cdrom_device_ops *cdo = cdi->ops;
 
@@ -1072,8 +1220,8 @@ static int cdrom_mode_sense(struct cdrom_device_info *cdi,
        return cdo->generic_packet(cdi, cgc);
 }
 
-static int cdrom_mode_select(struct cdrom_device_info *cdi,
-                            struct cdrom_generic_command *cgc)
+int cdrom_mode_select(struct cdrom_device_info *cdi,
+                     struct cdrom_generic_command *cgc)
 {
        struct cdrom_device_ops *cdo = cdi->ops;
 
@@ -1094,13 +1242,12 @@ static int cdrom_read_subchannel(struct cdrom_device_info *cdi,
        char buffer[32];
        int ret;
 
-       memset(&cgc, 0, sizeof(cgc));
+       init_cdrom_command(&cgc, buffer, 16);
        cgc.cmd[0] = GPCMD_READ_SUBCHANNEL;
        cgc.cmd[1] = 2;     /* MSF addressing */
        cgc.cmd[2] = 0x40;  /* request subQ data */
        cgc.cmd[3] = mcn ? 2 : 1;
-       cgc.cmd[8] = cgc.buflen = 16;
-       cgc.buffer = buffer;
+       cgc.cmd[8] = 16;
 
        if ((ret = cdo->generic_packet(cdi, &cgc)))
                return ret;
@@ -1138,12 +1285,16 @@ static int cdrom_read_block(struct cdrom_device_info *cdi,
        cgc->cmd[4] = (lba >>  8) & 0xff;
        cgc->cmd[5] = lba & 0xff;
        /* number of blocks */
-       cgc->cmd[8] = nblocks;
+       cgc->cmd[6] = (nblocks >> 16) & 0xff;
+       cgc->cmd[7] = (nblocks >>  8) & 0xff;
+       cgc->cmd[8] = nblocks & 0xff;
        cgc->buflen = blksize * nblocks;
+       
+       /* set the header info returned */
        switch (blksize) {
-       case CD_FRAMESIZE_RAW0  : cgc->cmd[9] = 0x58;
-       case CD_FRAMESIZE_RAW1  : cgc->cmd[9] = 0x78;
-       case CD_FRAMESIZE_RAW   : cgc->cmd[9] = 0xf8;
+       case CD_FRAMESIZE_RAW0  : cgc->cmd[9] = 0x58; break;
+       case CD_FRAMESIZE_RAW1  : cgc->cmd[9] = 0x78; break;
+       case CD_FRAMESIZE_RAW   : cgc->cmd[9] = 0xf8; break;
        default                 : cgc->cmd[9] = 0x10;
        }
        
@@ -1168,7 +1319,7 @@ int cdrom_ioctl(struct inode *ip, struct file *fp,
                unsigned int cmd, unsigned long arg)
 {
        kdev_t dev = ip->i_rdev;
-       struct cdrom_device_info *cdi = cdrom_find_device (dev);
+       struct cdrom_device_info *cdi = cdrom_find_device(dev);
        struct cdrom_device_ops *cdo;
        int ret;
 
@@ -1235,15 +1386,22 @@ int cdrom_ioctl(struct inode *ip, struct file *fp,
                }
 
        case CDROM_MEDIA_CHANGED: {
+               struct cdrom_changer_info info;
+
                cdinfo(CD_DO_IOCTL, "entering CDROM_MEDIA_CHANGED\n"); 
                if (!CDROM_CAN(CDC_MEDIA_CHANGED))
                        return -ENOSYS;
                if (!CDROM_CAN(CDC_SELECT_DISC) || arg == CDSL_CURRENT)
                        /* cannot select disc or select current disc */
                        return media_changed(cdi, 1);
-               if ((unsigned int)arg >= cdi->capacity)
+               if ((unsigned int)arg >= cdi->capacity) {
                        return -EINVAL;
-               return cdo->media_changed (cdi, arg);
+               }
+
+               if ((ret = cdrom_read_mech_status(cdi, &info)))
+                       return ret;
+
+               return info.slots[arg].change;
                }
 
        case CDROM_SET_OPTIONS: {
@@ -1286,11 +1444,22 @@ int cdrom_ioctl(struct inode *ip, struct file *fp,
                cdinfo(CD_DO_IOCTL, "entering CDROM_SELECT_DISC\n"); 
                if (!CDROM_CAN(CDC_SELECT_DISC))
                        return -ENOSYS;
-                if ((arg == CDSL_CURRENT) || (arg == CDSL_NONE)) 
-                       return cdo->select_disc(cdi, arg);
-               if ((int)arg >= cdi->capacity)
+
+                if ((arg != CDSL_CURRENT) && (arg != CDSL_NONE)) {
+                   if ((int)arg >= cdi->capacity)
                        return -EINVAL;
-               return cdo->select_disc(cdi, arg);
+               }
+               /* cdo->select_disc is a hook to allow a driver-specific
+                * way of seleting disc.  However, since there is no
+                * equiv hook for cdrom_slot_status this may not 
+                * actually be useful...
+                */
+               if (cdo->select_disc != NULL)
+                       return cdo->select_disc(cdi, arg);
+
+               /* no driver specific select_disc(), call our own */
+               cdinfo(CD_CHANGER, "Using generic cdrom_select_disc()\n"); 
+               return cdrom_select_disc(cdi, arg);
                }
 
        case CDROMRESET: {
@@ -1304,12 +1473,10 @@ int cdrom_ioctl(struct inode *ip, struct file *fp,
 
        case CDROM_LOCKDOOR: {
                cdinfo(CD_DO_IOCTL, "%socking door.\n", arg ? "L" : "Unl");
-               if (!CDROM_CAN(CDC_LOCK)) {
+               if (!CDROM_CAN(CDC_LOCK))
                        return -EDRIVE_CANT_DO_THIS;
-               } else {
-                       keeplocked = arg ? 1 : 0;
-                       return cdo->lock_door(cdi, arg);
-               }
+               keeplocked = arg ? 1 : 0;
+               return cdo->lock_door(cdi, arg);
                }
 
        case CDROM_DEBUG: {
@@ -1352,7 +1519,7 @@ int cdrom_ioctl(struct inode *ip, struct file *fp,
                        return cdo->drive_status(cdi, CDSL_CURRENT);
                if (((int)arg >= cdi->capacity))
                        return -EINVAL;
-               return cdo->drive_status(cdi, arg);
+               return cdrom_slot_status(cdi, arg);
                }
 
        /* Ok, this is where problems start.  The current interface for the
@@ -1383,7 +1550,8 @@ int cdrom_ioctl(struct inode *ip, struct file *fp,
                if (tracks.audio > 0) {
                        if (tracks.data==0 && tracks.cdi==0 && tracks.xa==0) 
                                return CDS_AUDIO;
-                       else return CDS_MIXED;
+                       else
+                               return CDS_MIXED;
                }
                if (tracks.cdi > 0) return CDS_XA_2_2;
                if (tracks.xa > 0) return CDS_XA_2_1;
@@ -1552,15 +1720,13 @@ static int mmc_ioctl(struct cdrom_device_info *cdi, unsigned int cmd,
                switch (cmd) {
                case CDROMREADRAW:
                        blocksize = CD_FRAMESIZE_RAW;
-                       format = 0;
                        break;
                case CDROMREADMODE1:
-                       blocksize = CD_FRAMESIZE; break;
+                       blocksize = CD_FRAMESIZE;
                        format = 2;
                        break;
                case CDROMREADMODE2:
-                       blocksize = CD_FRAMESIZE_RAW0; break;
-                       format = 0;
+                       blocksize = CD_FRAMESIZE_RAW0;
                        break;
                }
                IOCTL_IN(arg, struct cdrom_msf, msf);
@@ -1574,7 +1740,7 @@ static int mmc_ioctl(struct cdrom_device_info *cdi, unsigned int cmd,
                ret = cdrom_read_block(cdi, &cgc, lba, 1, format, blocksize);
                if (!ret)
                        if (copy_to_user((char *)arg, cgc.buffer, blocksize))
-                               return -EFAULT;
+                               ret = -EFAULT;
                kfree(cgc.buffer);
                return ret;
                }
@@ -1606,8 +1772,10 @@ static int mmc_ioctl(struct cdrom_device_info *cdi, unsigned int cmd,
                                                   GFP_KERNEL)) == NULL)
                        return -ENOMEM;
 
-               if (!access_ok(VERIFY_WRITE, ra.buf, ra.nframes*CD_FRAMESIZE_RAW))
+               if (!access_ok(VERIFY_WRITE, ra.buf, ra.nframes*CD_FRAMESIZE_RAW)) {
+                       kfree(cgc.buffer);
                        return -EFAULT;
+               }
 
                while (ra.nframes > 0) {
                        ret = cdrom_read_block(cdi, &cgc, lba, ra.nframes, 1,
@@ -1642,13 +1810,29 @@ static int mmc_ioctl(struct cdrom_device_info *cdi, unsigned int cmd,
                }
        case CDROMPLAYTRKIND: {
                struct cdrom_ti ti;
+               struct cdrom_tocentry entry;
+
                cdinfo(CD_DO_IOCTL, "entering CDROMPLAYTRKIND\n");
                IOCTL_IN(arg, struct cdrom_ti, ti);
-               cgc.cmd[0] = GPCMD_PLAYAUDIO_TI;
-               cgc.cmd[4] = ti.cdti_trk0;
-               cgc.cmd[5] = ti.cdti_ind0;
-               cgc.cmd[7] = ti.cdti_trk1;
-               cgc.cmd[8] = ti.cdti_ind1;
+               entry.cdte_format = CDROM_MSF;
+
+               /* get toc entry for start and end track */
+               entry.cdte_track = ti.cdti_trk0;
+               if (cdi->ops->audio_ioctl(cdi, CDROMREADTOCENTRY, &entry))
+                       return -EINVAL;
+
+               cgc.cmd[3] = entry.cdte_addr.msf.minute;
+               cgc.cmd[4] = entry.cdte_addr.msf.second;
+               cgc.cmd[5] = entry.cdte_addr.msf.frame;
+
+               entry.cdte_track = ti.cdti_trk1;
+               if (cdi->ops->audio_ioctl(cdi, CDROMREADTOCENTRY, &entry))
+                       return -EINVAL;
+
+               cgc.cmd[6] = entry.cdte_addr.msf.minute;
+               cgc.cmd[7] = entry.cdte_addr.msf.second;
+               cgc.cmd[8] = entry.cdte_addr.msf.frame;
+               cgc.cmd[0] = GPCMD_PLAY_AUDIO_MSF;
                return cdo->generic_packet(cdi, &cgc);
                }
        case CDROMPLAYMSF: {
@@ -1669,12 +1853,12 @@ static int mmc_ioctl(struct cdrom_device_info *cdi, unsigned int cmd,
                cdinfo(CD_DO_IOCTL, "entering CDROMPLAYBLK\n");
                IOCTL_IN(arg, struct cdrom_blk, blk);
                cgc.cmd[0] = GPCMD_PLAY_AUDIO_10;
-               cgc.cmd[2] = blk.from >> 24;
-               cgc.cmd[3] = blk.from >> 16;
-               cgc.cmd[4] = blk.from >> 8;
-               cgc.cmd[5] = blk.from;
-               cgc.cmd[7] = blk.len >> 8;
-               cgc.cmd[8] = blk.len;
+               cgc.cmd[2] = (blk.from >> 24) & 0xff;
+               cgc.cmd[3] = (blk.from >> 16) & 0xff;
+               cgc.cmd[4] = (blk.from >>  8) & 0xff;
+               cgc.cmd[5] = blk.from & 0xff;
+               cgc.cmd[7] = (blk.len >> 8) & 0xff;
+               cgc.cmd[8] = blk.len & 0xff;
                return cdo->generic_packet(cdi, &cgc);
                }
        case CDROMVOLCTRL:
@@ -1688,8 +1872,7 @@ static int mmc_ioctl(struct cdrom_device_info *cdi, unsigned int cmd,
 
                cgc.buffer = buffer;
                cgc.buflen = 24;
-               if ((ret = cdrom_mode_sense(cdi, &cgc, 
-                               GPMODE_AUDIO_CTL_PAGE, 0)))
+               if ((ret = cdrom_mode_sense(cdi, &cgc, GPMODE_AUDIO_CTL_PAGE, 0)))
                    return ret;
                
                /* some drives have longer pages, adjust and reread. */
@@ -1757,11 +1940,10 @@ static int mmc_ioctl(struct cdrom_device_info *cdi, unsigned int cmd,
                        return -ENOSYS;
                cdinfo(CD_DO_IOCTL, "entering dvd_read_struct\n"); 
                IOCTL_IN(arg, dvd_struct, s);
-               if ((ret = dvd_read_struct(cdi, &s)) == 0) {
-                       IOCTL_OUT(arg, dvd_struct, s);
-                       return 0;
-               }
-               return ret;
+               if ((ret = dvd_read_struct(cdi, &s)))
+                       return ret;
+               IOCTL_OUT(arg, dvd_struct, s);
+               return 0;
                }
 
        case DVD_AUTH: {
@@ -1783,10 +1965,8 @@ static int mmc_ioctl(struct cdrom_device_info *cdi, unsigned int cmd,
                IOCTL_IN(arg, struct cdrom_generic_command, cgc);
                cgc.buffer = kmalloc(cgc.buflen, GFP_KERNEL);
                ret = cdo->generic_packet(cdi, &cgc);
-               if (copy_to_user((void*)arg, cgc.buffer, cgc.buflen)) {
-                       kfree(cgc.buffer);
-                       return -EFAULT;
-               }
+               if (copy_to_user((void*)arg, cgc.buffer, cgc.buflen))
+                       ret = -EFAULT;
                kfree(cgc.buffer);
                return ret;
                }
@@ -1810,23 +1990,22 @@ static int mmc_ioctl(struct cdrom_device_info *cdi, unsigned int cmd,
 }
 
 static int cdrom_get_track_info(kdev_t dev, __u16 track, __u8 type,
-                                track_information *ti)
+                               track_information *ti)
 {
-        struct cdrom_device_info *cdi = cdrom_find_device (dev);
+        struct cdrom_device_info *cdi = cdrom_find_device(dev);
        struct cdrom_device_ops *cdo = cdi->ops;
        struct cdrom_generic_command cgc;
        int ret;
 
-       memset(&cgc, 0, sizeof(cgc));
+       init_cdrom_command(&cgc, ti, 8);
        cgc.cmd[0] = GPCMD_READ_TRACK_RZONE_INFO;
        cgc.cmd[1] = type & 3;
        cgc.cmd[4] = (track & 0xff00) >> 8;
        cgc.cmd[5] = track & 0xff;
-       cgc.cmd[8] = cgc.buflen = 8;
-       cgc.buffer = (char *)ti;
+       cgc.cmd[8] = 8;
 
-       ret = cdo->generic_packet(cdi, &cgc);
-       if (ret) return ret;
+       if ((ret = cdo->generic_packet(cdi, &cgc)))
+               return ret;
        
        cgc.cmd[8] = cgc.buflen = be16_to_cpu(ti->track_information_length) +
                     sizeof(ti->track_information_length);
@@ -1835,16 +2014,15 @@ static int cdrom_get_track_info(kdev_t dev, __u16 track, __u8 type,
 
 static int cdrom_get_disc_info(kdev_t dev, disc_information *di)
 {
-       struct cdrom_device_info *cdi = cdrom_find_device (dev);
+       struct cdrom_device_info *cdi = cdrom_find_device(dev);
        struct cdrom_device_ops *cdo = cdi->ops;
        struct cdrom_generic_command cgc;
 
        /* set up command and get the disc info */
-       memset(&cgc, 0, sizeof(cgc));
+       init_cdrom_command(&cgc, di, sizeof(*di));
        memset(di, 0, sizeof(disc_information));
        cgc.cmd[0] = GPCMD_READ_DISC_INFO;
-       cgc.cmd[8] = cgc.buflen = sizeof(*di);
-       cgc.buffer = (char *)di;
+       cgc.cmd[8] = cgc.buflen;
 
        return cdo->generic_packet(cdi, &cgc);
 }
@@ -1854,7 +2032,7 @@ static int cdrom_get_disc_info(kdev_t dev, disc_information *di)
    file system. */
 int cdrom_get_last_written(kdev_t dev, long *last_written)
 {      
-       struct cdrom_device_info *cdi = cdrom_find_device (dev);
+       struct cdrom_device_info *cdi = cdrom_find_device(dev);
        struct cdrom_tocentry toc;
        disc_information di;
        track_information ti;
@@ -1906,7 +2084,7 @@ use_toc:
 /* return the next writable block. also for udf file system. */
 int cdrom_get_next_writable(kdev_t dev, long *next_writable)
 {
-       struct cdrom_device_info *cdi = cdrom_find_device (dev);
+       struct cdrom_device_info *cdi = cdrom_find_device(dev);
        disc_information di;
        track_information ti;
        __u16 last_track;
@@ -1953,6 +2131,11 @@ EXPORT_SYMBOL(cdrom_count_tracks);
 EXPORT_SYMBOL(register_cdrom);
 EXPORT_SYMBOL(unregister_cdrom);
 EXPORT_SYMBOL(cdrom_fops);
+EXPORT_SYMBOL(cdrom_number_of_slots);
+EXPORT_SYMBOL(cdrom_select_disc);
+EXPORT_SYMBOL(cdrom_mode_select);
+EXPORT_SYMBOL(cdrom_mode_sense);
+EXPORT_SYMBOL(init_cdrom_command);
 
 #ifdef CONFIG_SYSCTL
 
index e993c7e6f7e56ae1d7d6e535a22a7af897e3e93d..362752ca3f2cd0261bda4c4e692eee2c4ffadc9c 100644 (file)
@@ -69,7 +69,7 @@ if [ "$CONFIG_BUSMOUSE" != "n" ]; then
   dep_tristate 'ATIXL busmouse support' CONFIG_ATIXL_BUSMOUSE $CONFIG_BUSMOUSE
   dep_tristate 'Logitech busmouse support' CONFIG_LOGIBUSMOUSE $CONFIG_BUSMOUSE
   dep_tristate 'Microsoft busmouse support' CONFIG_MS_BUSMOUSE $CONFIG_BUSMOUSE
-  if [ "$CONFIG_PPC" = "y" ; then
+  if [ "$CONFIG_PPC" = "y" ; then
     dep_tristate 'Apple Desktop Bus mouse support' CONFIG_ADBMOUSE $CONFIG_BUSMOUSE
   fi
 fi
index 29cdac314819f6b52144781ee4dee625f2cae31c..17f7d25dcd5cd346146a6c5bf51ce865e3ab45e8 100644 (file)
@@ -76,18 +76,19 @@ OTHER DEALINGS IN THE SOFTWARE.
 #include <linux/sched.h>
 #include <linux/version.h>
 #include <linux/videodev.h>
+#include <asm/semaphore.h>
 #include <asm/uaccess.h>
 
 #include "bw-qcam.h"
 
+static unsigned int maxpoll=250;   /* Maximum busy-loop count for qcam I/O */
+static unsigned int yieldlines=4;  /* Yield after this many during capture */
+
 #if LINUX_VERSION_CODE >= 0x020117
 MODULE_PARM(maxpoll,"i");
 MODULE_PARM(yieldlines,"i");   
 #endif
 
-static unsigned int maxpoll=250;   /* Maximum busy-loop count for qcam I/O */
-static unsigned int yieldlines=4;  /* Yield after this many during capture */
-
 extern __inline__ int read_lpstatus(struct qcam_device *q)
 {
        return parport_read_status(q->pport);
@@ -174,6 +175,8 @@ static struct qcam_device *qcam_init(struct parport *port)
        }
        
        memcpy(&q->vdev, &qcam_template, sizeof(qcam_template));
+       
+       init_MUTEX(&q->lock);
 
        q->port_mode = (QC_ANY | QC_NOTSET);
        q->width = 320;
@@ -817,14 +820,12 @@ static int qcam_ioctl(struct video_device *dev, unsigned int cmd, void *arg)
                        qcam->contrast = p.contrast>>8;
                        qcam->whitebal = p.whiteness>>8;
                        qcam->bpp = p.depth;
-                       
+
+                       down(&qcam->lock);                      
                        qc_setscanmode(qcam);
+                       up(&qcam->lock);
                        qcam->status |= QC_PARAM_CHANGE;
 
-/*                     parport_claim_or_block(qcam->pdev);
-                       qc_set(qcam);
-                       parport_release(qcam->pdev);
-*/
                        return 0;
                }
                case VIDIOCSWIN:
@@ -855,7 +856,9 @@ static int qcam_ioctl(struct video_device *dev, unsigned int cmd, void *arg)
                                qcam->height = 240;
                                qcam->transfer_scale = 1;
                        }
+                       down(&qcam->lock);
                        qc_setscanmode(qcam);
+                       up(&qcam->lock);
                        
                        /* We must update the camera before we grab. We could
                           just have changed the grab size */
@@ -904,7 +907,9 @@ static long qcam_read(struct video_device *v, char *buf, unsigned long count,  i
        struct qcam_device *qcam=(struct qcam_device *)v;
        int len;
        parport_claim_or_block(qcam->pdev);
-       /* Probably should have a semaphore against multiple users */
+       
+       down(&qcam->lock);
+       
        qc_reset(qcam);
 
        /* Update the camera parameters if we need to */
@@ -912,6 +917,9 @@ static long qcam_read(struct video_device *v, char *buf, unsigned long count,  i
                qc_set(qcam);
 
        len=qc_capture(qcam, buf,count);
+       
+       up(&qcam->lock);
+       
        parport_release(qcam->pdev);
        return len;
 }
index bb49cde10fda9ab86b65b4b4ef5bda5794c27d11..723e8ad9e56ac52f49998a44b959ea3b567d189b 100644 (file)
@@ -55,6 +55,7 @@ struct qcam_device {
        struct video_device vdev;
        struct pardevice *pdev;
        struct parport *pport;
+       struct semaphore lock;
        int width, height;
        int bpp;
        int mode;
index 3c7cc317a0993b0153c6fa03d9044e10bb66da33..90eb5405daa9692b70bf1c865925285782daa558 100644 (file)
@@ -16,6 +16,7 @@
 #include <linux/sched.h>
 #include <linux/version.h>
 #include <linux/videodev.h>
+#include <asm/semaphore.h>
 #include <asm/uaccess.h>
 
 struct qcam_device {
@@ -28,6 +29,7 @@ struct qcam_device {
        int contrast, brightness, whitebal;
        int top, left;
        unsigned int bidirectional;
+       struct semaphore lock;
 };
 
 /* The three possible QuickCam modes */
@@ -516,10 +518,12 @@ static int qcam_ioctl(struct video_device *dev, unsigned int cmd, void *arg)
                        qcam->brightness = p.brightness>>8;
                        qcam->contrast = p.contrast>>8;
                        qcam->whitebal = p.whiteness>>8;
-                       
+
+                       down(&qcam->lock);                      
                        parport_claim_or_block(qcam->pdev);
                        qc_setup(qcam); 
                        parport_release(qcam->pdev);
+                       up(&qcam->lock);
                        return 0;
                }
                case VIDIOCSWIN:
@@ -564,9 +568,11 @@ static int qcam_ioctl(struct video_device *dev, unsigned int cmd, void *arg)
 #endif
                        /* Ok we figured out what to use from our 
                           wide choice */
+                       down(&qcam->lock);
                        parport_claim_or_block(qcam->pdev);
                        qc_setup(qcam);
                        parport_release(qcam->pdev);
+                       up(&qcam->lock);
                        return 0;
                }
                case VIDIOCGWIN:
@@ -608,10 +614,13 @@ static long qcam_read(struct video_device *v, char *buf, unsigned long count,  i
 {
        struct qcam_device *qcam=(struct qcam_device *)v;
        int len;
+
+       down(&qcam->lock);
        parport_claim_or_block(qcam->pdev);
        /* Probably should have a semaphore against multiple users */
        len = qc_capture(qcam, buf,count); 
        parport_release(qcam->pdev);
+       up(&qcam->lock);
        return len;
 }
 
@@ -660,6 +669,7 @@ static struct qcam_device *qcam_init(struct parport *port)
        
        memcpy(&q->vdev, &qcam_template, sizeof(qcam_template));
 
+       init_MUTEX(&q->lock);
        q->width = q->ccd_width = 320;
        q->height = q->ccd_height = 240;
        q->mode = QC_MILLIONS | QC_DECIMATION_1;
index d0bcd2a07ba452a7df72571d32273d9dfbd36a07..f795f96bb4fc3ab06b6dcfafdbb8a588a2cfe466 100644 (file)
@@ -1,7 +1,7 @@
-#define BLOCKMOVE
+#undef BLOCKMOVE
 #define        Z_WAKE
 static char rcsid[] =
-"$Revision: 2.3.2.1 $$Date: 1999/09/27 11:01:22 $";
+"$Revision: 2.3.2.2 $$Date: 1999/10/01 11:27:43 $";
 
 /*
  *  linux/drivers/char/cyclades.c
@@ -30,13 +30,22 @@ static char rcsid[] =
  *   void cleanup_module(void);
  *
  * $Log: cyclades.c,v $
- * Revision 2.3.2.1   1999/09/27 11:01:22 ivan
+ * Revision 2.3.2.2   1999/10/01 11:27:43 ivan
+ * Fixed bug in cyz_poll that would make all ports but port 0
+ * unable to transmit/receive data (Cyclades-Z only);
+ * Implemented logic to prevent the RX buffer from being stuck with
+ * due to a driver / firmware race condition in interrupt op mode
+ * (Cyclades-Z only);
+ * Fixed bug in block_til_ready logic that would lead to a system crash;
+ * Revisited cy_close spinlock usage;
+ *
+ * Revision 2.3.2.1   1999/09/28 11:01:22 ivan
  * Revisited CONFIG_PCI conditional compilation for PCI board support;
  * Implemented TIOCGICOUNT and TIOCMIWAIT ioctl support;
  * _Major_ cleanup on the Cyclades-Z interrupt support code / logic;
  * Removed CTS handling from the driver -- this is now completely handled
  * by the firmware (Cyclades-Z only);
- * Flush RX on-board buffers as well on close (Cyclades-Z only);
+ * Flush RX on-board buffers on a port open (Cyclades-Z only);
  * Fixed handling of ASYNC_SPD_* TTY flags;
  * Module unload now unmaps all memory area allocated by ioremap;
  *
@@ -855,6 +864,7 @@ static unsigned short       cy_pci_dev_id[] = {
 
 static void cy_start(struct tty_struct *);
 static void set_line_char(struct cyclades_port *);
+static int cyz_issue_cmd(struct cyclades_card *, uclong, ucchar, uclong);
 #ifndef CONFIG_COBALT_27
 static unsigned detect_isa_irq (volatile ucchar *);
 #endif /* CONFIG_COBALT_27 */
@@ -875,6 +885,9 @@ static struct timer_list
 cyz_timerlist = {
     NULL, NULL, 0, 0, cyz_poll
 };
+#else /* CONFIG_CYZ_INTR */
+static void cyz_rx_restart(unsigned long);
+static struct timer_list cyz_rx_full_timer[NR_PORTS];
 #endif /* CONFIG_CYZ_INTR */
 
 /**************************************************
@@ -979,6 +992,14 @@ do_softint(void *private_)
     if (test_and_clear_bit(Cy_EVENT_OPEN_WAKEUP, &info->event)) {
         wake_up_interruptible(&info->open_wait);
     }
+#ifdef CONFIG_CYZ_INTR
+    if (test_and_clear_bit(Cy_EVENT_Z_RX_FULL, &info->event)) {
+       cyz_rx_full_timer[info->line].expires = jiffies + 1;
+       cyz_rx_full_timer[info->line].function = cyz_rx_restart;
+       cyz_rx_full_timer[info->line].data = (unsigned long)info;
+       add_timer(&cyz_rx_full_timer[info->line]);
+    }
+#endif
     if (test_and_clear_bit(Cy_EVENT_DELTA_WAKEUP, &info->event)) {
        wake_up_interruptible(&info->delta_msr_wait);
     }
@@ -1645,6 +1666,9 @@ cyz_handle_rx(struct cyclades_port *info, volatile struct BUF_CTRL *buf_ctrl)
 #else
            while(char_count--){
                if (tty->flip.count >= TTY_FLIPBUF_SIZE){
+#ifdef CONFIG_CYZ_INTR
+                   cy_sched_event(info, Cy_EVENT_Z_RX_FULL);
+#endif
                    break;
                }
                data = cy_readb(cinfo->base_addr +
@@ -1653,7 +1677,7 @@ cyz_handle_rx(struct cyclades_port *info, volatile struct BUF_CTRL *buf_ctrl)
                tty->flip.count++;
                *tty->flip.flag_buf_ptr++ = TTY_NORMAL;
                *tty->flip.char_buf_ptr++ = data;
-               info->idle_stats.recv_bytes += small_count;
+               info->idle_stats.recv_bytes++;
                info->icount.rx++;
            }
 #endif
@@ -1812,7 +1836,7 @@ cyz_handle_cmd(struct cyclades_card *cinfo)
                if (info->flags & ASYNC_CHECK_CD){
                    if ((fw_ver > 241 ? 
                          ((u_long)param) : 
-                         cy_readl(&ch_ctrl[channel].rs_status)) & C_RS_DCD) {
+                         cy_readl(&ch_ctrl->rs_status)) & C_RS_DCD) {
                        cy_sched_event(info, Cy_EVENT_OPEN_WAKEUP);
                    }else if(!((info->flags & ASYNC_CALLOUT_ACTIVE)
                             &&(info->flags & ASYNC_CALLOUT_NOHUP))){
@@ -1840,6 +1864,7 @@ cyz_handle_cmd(struct cyclades_card *cinfo)
 #ifdef CONFIG_CYZ_INTR
            case C_CM_RXHIWM:
            case C_CM_RXNNDT:
+           case C_CM_INTBACK2:
                /* Reception Interrupt */
 #ifdef CY_DEBUG_INTERRUPTS
                printk("cyz_interrupt: rcvd intr, card %d, port %ld\n\r", 
@@ -1897,6 +1922,21 @@ cyz_interrupt(int irq, void *dev_id, struct pt_regs *regs)
     return;
 } /* cyz_interrupt */
 
+static void
+cyz_rx_restart(unsigned long arg)
+{
+    struct cyclades_port *info = (struct cyclades_port *)arg;
+    int retval;
+    int card = info->card;
+    uclong channel = (info->line) - (cy_card[card].first_line);
+
+    cyz_rx_full_timer[info->card].expires = jiffies + HZ;
+    retval = cyz_issue_cmd(&cy_card[card], channel, C_CM_INTBACK2, 0L);
+    if (retval != 0){
+       printk("cyc:cyz_rx_restart retval was %x\n", retval);
+    }
+}
+
 #else /* CONFIG_CYZ_INTR */
 
 static void
@@ -1928,6 +1968,7 @@ cyz_poll(unsigned long arg)
        firm_id = (struct FIRM_ID *)(cinfo->base_addr + ID_ADDRESS);
        zfw_ctrl = (struct ZFW_CTRL *)
                   (cinfo->base_addr + cy_readl(&firm_id->zfwctrl_addr));
+       board_ctrl = &(zfw_ctrl->board_ctrl);
 
        cyz_handle_cmd(cinfo);
 
@@ -1940,7 +1981,7 @@ cyz_poll(unsigned long arg)
            cyz_handle_rx(info, buf_ctrl);
            cyz_handle_tx(info, buf_ctrl);
        }
-       /* poll every 40 ms */
+       /* poll every 'cyz_polling_cycle' period */
        cyz_timerlist.expires = jiffies + cyz_polling_cycle;
     }
     add_timer(&cyz_timerlist);
@@ -2095,12 +2136,17 @@ startup(struct cyclades_port * info)
 #endif /* CONFIG_CYZ_INTR */
 #endif /* Z_WAKE */
 
-       retval = cyz_issue_cmd( &cy_card[card],
-           channel, C_CM_IOCTL, 0L);   /* was C_CM_RESET */
+       retval = cyz_issue_cmd(&cy_card[card], channel, C_CM_IOCTL, 0L);
        if (retval != 0){
            printk("cyc:startup(1) retval was %x\n", retval);
        }
 
+       /* Flush RX buffers before raising DTR and RTS */
+       retval = cyz_issue_cmd(&cy_card[card], channel, C_CM_FLUSH_RX, 0L);
+       if (retval != 0){
+           printk("cyc:startup(2) retval was %x\n", retval);
+       }
+
        /* set timeout !!! */
        /* set RTS and DTR !!! */
        cy_writel(&ch_ctrl[channel].rs_control,
@@ -2108,7 +2154,7 @@ startup(struct cyclades_port * info)
        retval = cyz_issue_cmd(&cy_card[info->card],
            channel, C_CM_IOCTLM, 0L);
        if (retval != 0){
-           printk("cyc:startup(2) retval was %x\n", retval);
+           printk("cyc:startup(3) retval was %x\n", retval);
        }
 #ifdef CY_DEBUG_DTR
            printk("cyc:startup raising Z DTR\n");
@@ -2417,7 +2463,7 @@ block_til_ready(struct tty_struct *tty, struct file * filp,
            set_current_state(TASK_INTERRUPTIBLE);
            if (tty_hung_up_p(filp)
            || !(info->flags & ASYNC_INITIALIZED) ){
-               return ((info->flags & ASYNC_HUP_NOTIFY) ? 
+               retval = ((info->flags & ASYNC_HUP_NOTIFY) ? 
                    -EAGAIN : -ERESTARTSYS);
                break;
            }
@@ -2478,7 +2524,7 @@ block_til_ready(struct tty_struct *tty, struct file * filp,
            set_current_state(TASK_INTERRUPTIBLE);
            if (tty_hung_up_p(filp)
            || !(info->flags & ASYNC_INITIALIZED) ){
-               return ((info->flags & ASYNC_HUP_NOTIFY) ?
+               retval = ((info->flags & ASYNC_HUP_NOTIFY) ?
                    -EAGAIN : -ERESTARTSYS);
                break;
            }
@@ -2845,7 +2891,7 @@ cy_close(struct tty_struct *tty, struct file *filp)
            retval = cyz_issue_cmd(&cy_card[info->card], channel, 
                                   C_CM_IOCTLW, 0L);
            if (retval != 0){
-               printk("cyc:cy_close retval (1) was %x\n", retval);
+               printk("cyc:cy_close retval was %x\n", retval);
            }
            CY_UNLOCK(info, flags);
            interruptible_sleep_on(&info->shutdown_wait);
@@ -2860,28 +2906,19 @@ cy_close(struct tty_struct *tty, struct file *filp)
         tty->driver.flush_buffer(tty);
     if (tty->ldisc.flush_buffer)
         tty->ldisc.flush_buffer(tty);
-    if (IS_CYC_Z(cy_card[info->card])) { /* If it is a Z card, flush the
-                                           on-board RX buffers as well */
-       int retval;
-       int channel = info->line - cy_card[info->card].first_line;
-
-       retval = cyz_issue_cmd(&cy_card[info->card], channel,
-                               C_CM_FLUSH_RX, 0L);
-       if (retval != 0) {
-           printk("cyc: cy_close retval (2) was %x\n", retval);
-       }
-    }
     CY_LOCK(info, flags);
 
     tty->closing = 0;
     info->event = 0;
     info->tty = 0;
     if (info->blocked_open) {
+       CY_UNLOCK(info, flags);
         if (info->close_delay) {
             current->state = TASK_INTERRUPTIBLE;
             schedule_timeout(info->close_delay);
         }
         wake_up_interruptible(&info->open_wait);
+       CY_LOCK(info, flags);
     }
     info->flags &= ~(ASYNC_NORMAL_ACTIVE|ASYNC_CALLOUT_ACTIVE|
                      ASYNC_CLOSING);
index e0cf4ad2096cd5505faa3a1de2d912669dbf7570..12ab4d6283d9221deb3093c4b53b21aeabefa0f4 100644 (file)
@@ -76,7 +76,7 @@ int drm_flush(struct file *filp)
        drm_device_t  *dev    = priv->dev;
 
        DRM_DEBUG("pid = %d, device = 0x%x, open_count = %d, f_count = %d\n",
-                 current->pid, dev->device, dev->open_count, filp->f_count);
+                 current->pid, dev->device, dev->open_count, atomic_read(&filp->f_count));
        return 0;
 }
 
index c567a8c20f0a6eca5e9f25d44b9ba159edd04464..941f1795de69fe0ba9f26c9d58e0e7e4026ba1f7 100644 (file)
@@ -42,6 +42,7 @@
 #include <linux/malloc.h>
 #include <linux/mm.h>
 #include <linux/module.h>
+#include <linux/version.h>
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,1,0)
 #include <linux/spinlock.h>
 #include <linux/poll.h>
index 6993b4adf8ccc5a8c45d018dc580a96b1b2ed997..fa69f138f64622267ad57648c620b88c89c5c2b8 100644 (file)
@@ -59,6 +59,7 @@
 #include <linux/watchdog.h>
 #include <linux/init.h>
 #include <linux/proc_fs.h>
+#include <linux/spinlock.h>
 
 #include <asm/uaccess.h>
 #include <asm/io.h>
@@ -96,6 +97,7 @@ static int pcwd_ioports[] = { 0x270, 0x350, 0x370, 0x000 };
 
 static int current_readport, revision, temp_panic;
 static int is_open, initial_status, supports_temp, mode_debug;
+static spinlock_t io_lock;
 
 /*
  * PCWD_CHECKCARD
@@ -246,10 +248,12 @@ static int pcwd_ioctl(struct inode *inode, struct file *file,
                return i ? -EFAULT : 0;
 
        case WDIOC_GETSTATUS:
+               spin_lock(&io_lock);
                if (revision == PCWD_REVISION_A) 
-               cdat = inb(current_readport);
+                       cdat = inb(current_readport);
                else
                        cdat = inb(current_readport + 1 );
+               spin_unlock(&io_lock);
                rv = 0;
 
                if (revision == PCWD_REVISION_A) 
@@ -312,7 +316,9 @@ static int pcwd_ioctl(struct inode *inode, struct file *file,
                rv = 0;
                if ((supports_temp) && (mode_debug == 0)) 
                {
+                       spin_lock(&io_lock);
                        rv = inb(current_readport);
+                       spin_unlock(&io_lock);
                        if(put_user(rv, (int*) arg))
                                return -EFAULT;
                } else if(put_user(rv, (int*) arg))
@@ -327,9 +333,11 @@ static int pcwd_ioctl(struct inode *inode, struct file *file,
 
                        if (rv & WDIOS_DISABLECARD) 
                        {
+                               spin_lock(&io_lock);
                                outb_p(0xA5, current_readport + 3);
                                outb_p(0xA5, current_readport + 3);
                                cdat = inb_p(current_readport + 2);
+                               spin_unlock(&io_lock);
                                if ((cdat & 0x10) == 0) 
                                {
                                        printk("pcwd: Could not disable card.\n");
@@ -341,8 +349,10 @@ static int pcwd_ioctl(struct inode *inode, struct file *file,
 
                        if (rv & WDIOS_ENABLECARD) 
                        {
+                               spin_lock(&io_lock);
                                outb_p(0x00, current_readport + 3);
                                cdat = inb_p(current_readport + 2);
+                               spin_unlock(&io_lock);
                                if (cdat & 0x10) 
                                {
                                        printk("pcwd: Could not enable card.\n");
@@ -391,7 +401,11 @@ static int pcwd_open(struct inode *ino, struct file *filep)
                     MOD_INC_USE_COUNT;
                     /*  Enable the port  */
                     if (revision == PCWD_REVISION_C)
-                        outb_p(0x00, current_readport + 3);
+                    {
+                       spin_lock(&io_lock);
+                       outb_p(0x00, current_readport + 3);
+                       spin_unlock(&io_lock);
+                    }
                     is_open = 1;
                     return(0);
                 case TEMP_MINOR:
@@ -405,7 +419,7 @@ static int pcwd_open(struct inode *ino, struct file *filep)
 static ssize_t pcwd_read(struct file *file, char *buf, size_t count,
                         loff_t *ppos)
 {
-       unsigned short c = inb(current_readport);
+       unsigned short c;
        unsigned char cp;
 
        /*  Can't seek (pread) on this device  */
@@ -418,6 +432,8 @@ static ssize_t pcwd_read(struct file *file, char *buf, size_t count,
                         * Convert metric to Fahrenheit, since this was
                         * the decided 'standard' for this return value.
                         */
+                       
+                       c = inb(current_readport);
                        cp = (c * 9 / 5) + 32;
                        if(copy_to_user(buf, &cp, 1))
                                return -EFAULT;
@@ -436,8 +452,10 @@ static int pcwd_close(struct inode *ino, struct file *filep)
 #ifndef CONFIG_WATCHDOG_NOWAYOUT
                /*  Disable the board  */
                if (revision == PCWD_REVISION_C) {
+                       spin_lock(&io_lock);
                        outb_p(0xA5, current_readport + 3);
                        outb_p(0xA5, current_readport + 3);
+                       spin_unlock(&io_lock);
                }
 #endif
        }
@@ -452,11 +470,15 @@ static inline void get_support(void)
 
 static inline int get_revision(void)
 {
+       int r = PCWD_REVISION_C;
+       
+       spin_lock(&io_lock);
        if ((inb(current_readport + 2) == 0xFF) ||
            (inb(current_readport + 3) == 0xFF))
-               return(PCWD_REVISION_A);
+               r=PCWD_REVISION_A;
+       spin_unlock(&io_lock);
 
-       return(PCWD_REVISION_C);
+       return r;
 }
 
 static int __init send_command(int cmd)
@@ -584,7 +606,8 @@ int __init pcwatchdog_init(void)
 #endif
 {
        int i, found = 0;
-
+       spin_lock_init(&io_lock);
+       
        revision = PCWD_REVISION_A;
 
        printk("pcwd: v%s Ken Hollis (kenji@bitgate.com)\n", WD_VER);
index 2ec8e45339cbf13847f96c0dd86e04509fa83b29..44fd4fe8f1f3c2b72ba553da90cbf0ca2aaa7bef 100644 (file)
@@ -2006,7 +2006,7 @@ static int set_serial_info(struct async_struct * info,
        info->xmit_fifo_size = state->xmit_fifo_size =
                new_serial.xmit_fifo_size;
 
-       if (state->port)
+       if (state->type != PORT_UNKNOWN && state->port)
                release_region(state->port,8);
        if (change_port || change_irq) {
                /*
@@ -4082,6 +4082,7 @@ void cleanup_module(void)
        unsigned long flags;
        int e1, e2;
        int i;
+       struct async_struct *info;
 
        /* printk("Unloading %s: version %s\n", serial_name, serial_version); */
        save_flags(flags);
@@ -4101,6 +4102,11 @@ void cleanup_module(void)
        for (i = 0; i < NR_PORTS; i++) {
                if ((rs_table[i].type != PORT_UNKNOWN) && rs_table[i].port)
                        release_region(rs_table[i].port, 8);
+               info = rs_table[i].info;
+               if (info) {
+                       rs_table[i].info = NULL;
+                       kfree_s(info, sizeof(struct async_struct));
+               }
 #if defined(ENABLE_SERIAL_PCI) && defined (CONFIG_SERIAL_PCI_MEMMAPPED)
                if (rs_table[i].iomem_base)
                        iounmap(rs_table[i].iomem_base);
index a9a7a18db6faab5e65c69592cad7e3985de3bf40..92cc0ea3ec9ff513b9dd018b7f7f62f4e8b40d65 100644 (file)
@@ -23,6 +23,9 @@
  *     Added soft_margin; use upon insmod to change the timer delay.
  *     NB: uses same minor as wdt (WATCHDOG_MINOR); we could use separate
  *         minors.
+ *
+ *  19980911 Alan Cox
+ *     Made SMP safe for 2.3.x
  */
  
 #include <linux/module.h>
@@ -106,10 +109,8 @@ static void softdog_ping(void)
        /*
         *      Refresh the timer.
         */
-       del_timer(&watchdog_ticktock);
-       watchdog_ticktock.expires=jiffies + (soft_margin * HZ);
-       add_timer(&watchdog_ticktock);
-       return;
+
+       mod_timer(&watchdog_ticktock, jiffies + (soft_margin * HZ));
 }
 
 static ssize_t softdog_write(struct file *file, const char *data, size_t len, loff_t *ppos)
index 55ff8eacc835c117014d05e220de6a7a7a8ab59b..108ea55a7b0fbd7e6f0ac2bb02c0cc1eda0f9473 100644 (file)
@@ -84,9 +84,11 @@ static struct tunertype tuners[] = {
              //  16*170.00,16*450.00,0xa0,0x90,0x30,0x8e,0xc2,623},
                16*170.00,16*450.00,0x02,0x04,0x01,0x8e,0xc2,623},
        {"Temic 4036 FY5 NTSC", TEMIC, NTSC,
-               16*157.25,16*463.25,0xa0,0x90,0x30,0x8e,0xc2,732},
-        {"Alps HSBH1", TEMIC, NTSC,
-                16*137.25,16*385.25,0x01,0x02,0x08,0x8e,0xc2,732},
+               16*157.25,16*463.25,0xa0,0x90,0x30,0x8e,0xc2,732},
+       {"Alps TSBH1",TEMIC,NTSC,
+               16*137.25,16*385.25,0x01,0x02,0x08,0x8e,0xc2,732},
+       {"Alps TSBE1",TEMIC,PAL,
+               16*137.25,16*385.25,0x01,0x02,0x08,0x8e,0xc2,732},
 };
 
 /* ---------------------------------------------------------------------- */
@@ -192,12 +194,13 @@ static int tuner_attach(struct i2c_device *device)
 
        /*
         *      For now we only try and attach these tuners to the BT848
-        *      bus. This same module will however work different species
-        *      of card using these chips. Just change the constraints
+        *      or ZORAN bus. This same module will however work different
+        *      species of card using these chips. Just change the constraints
         *      (i2c doesn't have a totally clash free 'address' space)
         */
         
-       if(device->bus->id!=I2C_BUSID_BT848)
+       if(device->bus->id!=I2C_BUSID_BT848 &&
+          device->bus->id!=I2C_BUSID_ZORAN)
                return -EINVAL;
                
        device->data = t = kmalloc(sizeof(struct tuner),GFP_KERNEL);
index 39bb5f2569fe6b91ddf633f94329e28f4648a9b6..eb76d446ddd972dd35511b1fdfbf4dcba7aa7830 100644 (file)
@@ -57,24 +57,12 @@ extern int init_bw_qcams(struct video_init *);
 #ifdef CONFIG_VIDEO_PLANB
 extern int init_planbs(struct video_init *);
 #endif
-#ifdef CONFIG_RADIO_AZTECH
-extern int aztech_init(struct video_init *);
-#endif
-#ifdef CONFIG_RADIO_RTRACK
-extern int rtrack_init(struct video_init *);
-#endif
 #ifdef CONFIG_RADIO_RTRACK2
 extern int rtrack2_init(struct video_init *);
 #endif
 #ifdef CONFIG_RADIO_SF16FMI
 extern int fmi_init(struct video_init *);
 #endif
-#ifdef CONFIG_RADIO_MIROPCM20
-extern int pcm20_init(struct video_init *);
-#endif
-#ifdef CONFIG_RADIO_GEMTEK
-extern int gemtek_init(struct video_init *);
-#endif
 #ifdef CONFIG_RADIO_TYPHOON
 extern int typhoon_init(struct video_init *);
 #endif
@@ -84,9 +72,6 @@ extern int cadet_init(struct video_init *);
 #ifdef CONFIG_RADIO_TERRATEC
 extern int terratec_init(struct video_init *);
 #endif
-#ifdef CONFIG_VIDEO_PMS
-extern int init_pms_cards(struct video_init *);
-#endif
 #ifdef CONFIG_VIDEO_ZORAN
 extern int init_zoran_cards(struct video_init *);
 #endif
@@ -105,33 +90,18 @@ static struct video_init video_init_list[]={
 #ifdef CONFIG_VIDEO_BWQCAM
        {"bw-qcam", init_bw_qcams},
 #endif 
-#ifdef CONFIG_VIDEO_PMS
-       {"PMS", init_pms_cards}, 
-#endif 
 #ifdef CONFIG_VIDEO_PLANB
        {"planb", init_planbs},
 #endif
-#ifdef CONFIG_RADIO_AZTECH
-       {"Aztech", aztech_init}, 
-#endif 
-#ifdef CONFIG_RADIO_RTRACK
-       {"RTrack", rtrack_init}, 
-#endif 
 #ifdef CONFIG_RADIO_RTRACK2
        {"RTrack2", rtrack2_init}, 
 #endif
 #ifdef CONFIG_RADIO_SF16FMI
        {"SF16FMI", fmi_init}, 
 #endif 
-#ifdef CONFIG_RADIO_MIROPCM20
-       {"PCM20", pcm20_init}, 
-#endif
 #ifdef CONFIG_RADIO_CADET
        {"Cadet", cadet_init},
 #endif
-#ifdef CONFIG_RADIO_GEMTEK
-       {"GemTek", gemtek_init},
-#endif
 #ifdef CONFIG_RADIO_TYPHOON
        {"radio-typhoon", typhoon_init},
 #endif
@@ -144,7 +114,6 @@ static struct video_init video_init_list[]={
        {"end", NULL}
 };
 
-#if LINUX_VERSION_CODE >= 0x020100
 /*
  *     Read will do some smarts later on. Buffer pin etc.
  */
@@ -160,7 +129,6 @@ static ssize_t video_read(struct file *file,
 }
 
 
-
 /*
  *     Write for now does nothing. No reason it shouldnt do overlay setting
  *     for some boards I guess..
@@ -191,31 +159,6 @@ static unsigned int video_poll(struct file *file, poll_table * wait)
 }
 
 
-#else
-static int video_read(struct inode *ino,struct file *file,
-                         char *buf, int count)
-{
-         int err;
-        struct video_device *vfl=video_device[MINOR(ino->i_rdev)];
-        if (vfl->read)
-          return vfl->read(vfl, buf, count, file->f_flags&O_NONBLOCK);
-        else
-          return -EINVAL;
-}
-
-static int video_write(struct inode *ino,struct file *file, const char *buf, 
-                       int count)
-{
-       int err;
-       struct video_device *vfl=video_device[MINOR(ino->i_rdev)];
-       if (vfl->write)
-         return vfl->write(vfl, buf, count, file->f_flags&O_NONBLOCK);
-       else
-         return 0;
-}
-
-#endif
-
 /*
  *     Open a video device.
  */
index d6ae26f64821c508dd9fd9e64066c53fccea299b..3a0735c25c61389789f630e6086c0bac26feb32b 100644 (file)
@@ -3,10 +3,10 @@ comment 'I2O device support'
 
 tristate 'I2O support' CONFIG_I2O
 
-dep_tristate 'I2O PCI support' CONFIG_I2O_PCI $CONFIG_I2O
-dep_tristate 'I2O Block OSM' CONFIG_I2O_BLOCK $CONFIG_I2O
-dep_tristate 'I2O LAN OSM' CONFIG_I2O_LAN $CONFIG_I2O
-dep_tristate 'I2O SCSI OSM' CONFIG_I2O_SCSI $CONFIG_I2O
-dep_tristate 'I2O /proc support' CONFIG_I2O_PROC $CONFIG_I2O
+dep_tristate '  I2O PCI support' CONFIG_I2O_PCI $CONFIG_I2O
+dep_tristate '  I2O Block OSM' CONFIG_I2O_BLOCK $CONFIG_I2O
+dep_tristate '  I2O LAN OSM' CONFIG_I2O_LAN $CONFIG_I2O
+dep_tristate '  I2O SCSI OSM' CONFIG_I2O_SCSI $CONFIG_I2O $CONFIG_SCSI
+dep_tristate '  I2O /proc support' CONFIG_I2O_PROC $CONFIG_I2O
 
 endmenu
index 3dbe8088a6be19666f26ee4033573631388e965a..de2d393b31da440f394f05e376e21646f7865a90 100644 (file)
@@ -18,18 +18,19 @@ Steve Ralston,      LSI Logic Corp.
 Deepak Saxena, Intel Corp.
        /proc interface, bug fixes
        Ioctl interfaces for control
+       Debugging LAN OSM
 
 Philip Rumpf
        Fixed assorted dumb SMP locking bugs
 
 Juha Sievanen,  University of Helsinki Finland
-       LAN OSM
+       LAN OSM code
        /proc interface to LAN class
        Bug fixes
        Core code extensions
 
 Auvo Häkkinen,  University of Helsinki Finland
-       LAN OSM
+       LAN OSM code
        /Proc interface to LAN class
        Bug fixes
        Core code extensions
@@ -51,13 +52,19 @@ BoxHill Corporation
 European Comission
        Funding the work done by the University of Helsinki
 
+SysKonnect
+        Loan of FDDI and Gigabit Ethernet cards
+
+ASUSTeK
+        Loan of I2O motherboard 
+
 STATUS:
 
 o      The core setup works within limits.
 o      The scsi layer seems to almost work. I'm still chasing down the hang
        bug.
 o      The block OSM is fairly minimal but does seem to work.
-o      LAN OSM works with FDDI cards.
+o      LAN OSM works with FDDI and Ethernet cards.
 
 TO DO:
 
index 501c93af9c7d9b89d620c9758c46ba53576d73d0..49f34c078db79a333b804a586ddeeb37fe626906 100644 (file)
@@ -3,13 +3,13 @@ Linux I2O User Space Interface
 rev 0.3 - 04/20/99
 
 =============================================================================
-Originally written by Deepak Saxena(deepak.saxena@intel.com)
-Currently maintained by Deepak Saxena(deepak.saxena@intel.com)
+Originally written by Deepak Saxena(deepak@plexity.net)
+Currently maintained by Deepak Saxena(deepak@plexity.net)
 =============================================================================
 
 I. Introduction
 
-The Linux I2O susbsytem provides a set of ioctl() commands than can be
+The Linux I2O subsystem provides a set of ioctl() commands that can be
 utilized by user space applications to communicate with IOPs and devices
 on individual IOPs. This document defines the specific ioctl() commands
 that are available to the user and provides examples of their uses.
@@ -20,7 +20,7 @@ on the specification, see http://www.i2osig.org
 
 This document and the I2O user space interface are currently maintained
 by Deepak Saxena.  Please send all comments, errata, and bug fixes to
-deepak.saxena@intel.com
+deepak@plexity.net
 
 II. IOP Access
 
@@ -50,9 +50,9 @@ III. Determining the IOP Count
    Returns 0 if no errors occur, and -1 otherwise.  If an error occurs,
    errno is set appropriately:
 
-      EIO      Unkown error
+     EFAULT   Invalid user space pointer was passed
 
-IV. ExecHrtGet Message
+IV. Getting Hardware Resource Table
 
    SYNOPSIS 
  
@@ -67,25 +67,21 @@ IV. ExecHrtGet Message
 
    DESCRIPTION
 
-   This function posts an ExecHrtHet message to the IOP specified by
-   hrt->iop and returns the data in the buffer pointed to by hrt->buf
-   The size of the data written is placed into the memory pointed to
-   by hrt->len.
+   This function returns the Hardware Resource Table of the IOP specified 
+   by hrt->iop in the buffer pointed to by hrt->resbuf. The actual size of 
+   the data is written into *(hrt->reslen).
 
    RETURNS
 
    This function returns 0 if no errors occur. If an error occurs, -1 
    is returned and errno is set appropriately:
 
-      ETIMEDOUT   Timeout waiting for reply message
-      ENOMEM      Kernel memory allocation error
-      ENOBUFS     Buffer not large enough.  If this occurs, the required
-                  buffer length is written into *(hrt->reslen)
       EFAULT      Invalid user space pointer was passed
       ENXIO       Invalid IOP number
-      EIO         Unkown error
+      ENOBUFS     Buffer not large enough.  If this occurs, the required
+                  buffer length is written into *(hrt->reslen)
   
-V. ExecLctNotify Message
+V. Getting Logical Configuration Table
    
    SYNOPSIS 
  
@@ -100,25 +96,21 @@ V. ExecLctNotify Message
 
    DESCRIPTION
 
-   This function posts an ExecLctGet message to the IOP specified by 
-   lct->iop and returns the data in the buffer pointed to by lct->buf
-   The size of the data written is placed into the memory pointed to
-   by lct->reslen.
+   This function returns the Logical Configuration Table of the IOP specified
+   by lct->iop in the buffer pointed to by lct->resbuf. The actual size of 
+   the data is written into *(lct->reslen).
 
    RETURNS
 
    This function returns 0 if no errors occur. If an error occurs, -1 
    is returned and errno is set appropriately:
 
-      ETIMEDOUT   Timeout waiting for reply message
-      ENOMEM      Kernel memory allocation error
-      ENOBUFS     Buffer not large enough.  If this occurs, the required
-                  buffer length is written into *(lct->reslen)
       EFAULT      Invalid user space pointer was passed
       ENXIO       Invalid IOP number
-      EIO         Unkown error
+      ENOBUFS     Buffer not large enough.  If this occurs, the required
+                  buffer length is written into *(lct->reslen)
 
-VI. UtilParamsSet Message
+VI. Settting Parameters
    
    SYNOPSIS 
  
@@ -138,8 +130,8 @@ VI. UtilParamsSet Message
 
    This function posts a UtilParamsSet message to the device identified
    by ops->iop and ops->tid.  The operation list for the message is 
-   sent through the ops->oplen buffer, and the result list is written
-   into the buffer pointed to by ops->oplen.  The number of bytes 
+   sent through the ops->opbuf buffer, and the result list is written
+   into the buffer pointed to by ops->resbuf.  The number of bytes 
    written is placed into *(ops->reslen). 
 
    RETURNS
@@ -148,19 +140,18 @@ VI. UtilParamsSet Message
    ops->resbuf if no errors occur.  If an error occurs, -1 is returned 
    and errno is set appropriatly:
 
-      ETIMEDOUT   Timeout waiting for reply message
-      ENOMEM      Kernel memory allocation error
-      ENOBUFS     Buffer not large enough.  If this occurs, the required
-                  buffer length is written into *(ops->reslen)
       EFAULT      Invalid user space pointer was passed
       ENXIO       Invalid IOP number
-      EIO         Unkown error
+      ENOBUFS     Buffer not large enough.  If this occurs, the required
+                  buffer length is written into *(ops->reslen)
+      ETIMEDOUT   Timeout waiting for reply message
+      ENOMEM      Kernel memory allocation error
 
    A return value of 0 does not mean that the value was actually
    changed properly on the IOP.  The user should check the result
    list to determine the specific status of the transaction.
 
-VII. UtilParamsGet Message
+VII. Getting Parameters
    
    SYNOPSIS 
  
@@ -180,25 +171,24 @@ VII. UtilParamsGet Message
 
    This function posts a UtilParamsGet message to the device identified
    by ops->iop and ops->tid.  The operation list for the message is 
-   sent through the ops->oplen buffer, and the result list is written
-   into the buffer pointed to by ops->oplen.  The actual size of data
+   sent through the ops->opbuf buffer, and the result list is written
+   into the buffer pointed to by ops->resbuf.  The actual size of data
    written is placed into *(ops->reslen).
 
    RETURNS
 
-      ETIMEDOUT   Timeout waiting for reply message
-      ENOMEM      Kernel memory allocation error
-      ENOBUFS     Buffer not large enough.  If this occurs, the required
-                  buffer length is written into *(ops->reslen)
       EFAULT      Invalid user space pointer was passed
       ENXIO       Invalid IOP number
-      EIO         Unkown error
+      ENOBUFS     Buffer not large enough.  If this occurs, the required
+                  buffer length is written into *(ops->reslen)
+      ETIMEDOUT   Timeout waiting for reply message
+      ENOMEM      Kernel memory allocation error
 
    A return value of 0 does not mean that the value was actually
    properly retreived.  The user should check the result list 
    to determine the specific status of the transaction.
 
-VIII. ExecSwDownload Message
+VIII. Downloading Software
    
    SYNOPSIS 
  
@@ -207,21 +197,21 @@ VIII. ExecSwDownload Message
       struct i2o_sw_xfer
       {
          u32   iop;       /* IOP unit number */
-         u8    dl_flags;  /* DownLoadFlags field */
+         u8    flags;     /* DownloadFlags field */
          u8    sw_type;   /* Software type */
          u32   sw_id;     /* Software ID */
          void  *buf;      /* Pointer to software buffer */
-         u32   *swlen;    /* Length of software data */        
+         u32   *swlen;    /* Length of software buffer */        
          u32   *maxfrag;  /* Number of fragments */
          u32   *curfrag;  /* Current fragment number */
       };
 
    DESCRIPTION
 
-   This function downloads the software pointed to by  sw->buf to the
-   iop identified by sw->iop. The DownloadFlags, SwID, and SwType fields
-   of the ExecSwDownload message are filed in with the values of 
-   sw->dl_flags, sw->sw_id, and sw->sw_type.
+   This function downloads the software pointed by sw->buf to the
+   iop identified by sw->iop. The DownloadFlags, SwID, SwType and SwSize 
+   fields of the ExecSwDownload message are filled in with the values of 
+   sw->flags, sw->sw_id, sw->sw_type and *(sw->swlen).
 
    Once the ioctl() is called and software transfer begins, the 
    user can read the value *(sw->maxfrag) and *(sw->curfrag) to
@@ -236,15 +226,12 @@ VIII. ExecSwDownload Message
    This function returns 0 no errors occur. If an error occurs, -1 
    is returned and errno is set appropriatly:
 
-      ETIMEDOUT   Timeout waiting for reply message
-      ENOMEM      Kernel memory allocation error
-      ENOBUFS     Buffer not large enough.  If this occurs, the required
-                  buffer length is written into *(ops->reslen)
       EFAULT      Invalid user space pointer was passed
       ENXIO       Invalid IOP number
-      EIO         Unkown error
+      ETIMEDOUT   Timeout waiting for reply message
+      ENOMEM      Kernel memory allocation error
 
-IX. ExecSwUpload Message
+IX. Uploading Software
    
    SYNOPSIS 
  
@@ -253,11 +240,11 @@ IX. ExecSwUpload Message
       struct i2o_sw_xfer
       {
          u32   iop;      /* IOP unit number */
-         u8    flags;    /* Unused */
+         u8    flags;   /* UploadFlags */
          u8    sw_type;  /* Software type */
          u32   sw_id;    /* Software ID */
          void  *buf;     /* Pointer to software buffer */
-         u32   *swlen;   /* Length in bytes of software */        
+         u32   *swlen;   /* Length of software buffer */        
          u32   *maxfrag; /* Number of fragments */
          u32   *curfrag; /* Current fragment number */
       };
@@ -265,10 +252,10 @@ IX. ExecSwUpload Message
    DESCRIPTION
 
    This function uploads software from the IOP identified by sw->iop
-   and places it in the buffer pointed to by sw->buf.  The SwID, SwType
-   and SwSize fields of the ExecSwDownload message are filed in 
-   with the values of sw->sw_id, sw->sw_type, sw->swlen, and.  The 
-   actual size of the module is written into *(sw->buflen).
+   and places it in the buffer pointed to by sw->buf. The length of the
+   buffer is given in *(sw->swlen). The UploadFlags, SwID and SwType
+   fields of the ExecSwUpload message are filled in 
+   with the values of sw->flags, sw->sw_id and sw->sw_type. 
 
    Once the ioctl() is called and software transfer begins, the 
    user can read the value *(sw->maxfrag) and *(sw->curfrag) to
@@ -283,15 +270,12 @@ IX. ExecSwUpload Message
    This function returns 0 if no errors occur.  If an error occurs, -1
    is returned and errno is set appropriatly:
 
-      ETIMEDOUT   Timeout waiting for reply message
-      ENOMEM      Kernel memory allocation error
-      ENOBUFS     Buffer not large enough.  If this occurs, the required
-                  buffer length is written into *(ops->reslen)
       EFAULT      Invalid user space pointer was passed
       ENXIO       Invalid IOP number
-      EIO         Unkown error
+      ETIMEDOUT   Timeout waiting for reply message
+      ENOMEM      Kernel memory allocation error
          
-X. ExecSwRemove Message
+X. Removing Software
    
    SYNOPSIS 
  
@@ -300,42 +284,61 @@ X. ExecSwRemove Message
       struct i2o_sw_xfer
       {
          u32   iop;      /* IOP unit number */
-         u8    flags;    /* Unused */
+         u8    flags;   /* RemoveFlags */
          u8    sw_type;  /* Software type */
          u32   sw_id;    /* Software ID */
          void  *buf;     /* Unused */
-         u32   *swlen;   /* Length in bytes of software data */        
+         u32   *swlen;   /* Length of the software data */        
          u32   *maxfrag; /* Unused */
          u32   *curfrag; /* Unused */
       };
 
    DESCRIPTION
 
-   This function uploads software from the IOP identified by sw->iop
-   and places it in the buffer pointed to by sw->buf.  The SwID, SwType
-   and SwSize fields of the ExecSwDownload message are filed in 
-   with the values of sw->dl_flags, sw->sw_id, and sw->sw_type.  The 
-   actual size of the module is written into *(sw->buflen).
+   This function removes software from the IOP identified by sw->iop.
+   The RemoveFlags, SwID, SwType and SwSize fields of the ExecSwRemove message 
+   are filled in with the values of sw->flags, sw->sw_id, sw->sw_type and 
+   *(sw->swlen). Give zero in *(sw->len) if the value is unknown. IOP uses 
+   *(sw->swlen) value to verify correct identication of the module to remove. 
+   The actual size of the module is written into *(sw->swlen).
 
    RETURNS
 
    This function returns 0 if no errors occur.  If an error occurs, -1
    is returned and errno is set appropriatly:
 
+      EFAULT      Invalid user space pointer was passed
+      ENXIO       Invalid IOP number
       ETIMEDOUT   Timeout waiting for reply message
       ENOMEM      Kernel memory allocation error
-      ENOBUFS     Buffer not large enough.  If this occurs, the required
-                  buffer length is written into *(ops->reslen)
-      EFAULT      Invalid user space pointer was passed
+
+X. Validating Configuration
+
+   SYNOPSIS
+
+   ioctl(fd, I2OVALIDATE, int *iop);
+       u32 iop;
+
+   DESCRIPTION
+
+   This function posts an ExecConfigValidate message to the controller
+   identified by iop. This message indicates that the the current
+   configuration is accepted. The iop changes the status of suspect drivers 
+   to valid and may delete old drivers from its store.
+
+   RETURNS
+
+   This function returns 0 if no erro occur.  If an error occurs, -1 is
+   returned and errno is set appropriatly:
+
+      ETIMEDOUT   Timeout waiting for reply message
       ENXIO       Invalid IOP number
-      EIO         Unkown error
 
-X. UtilConfigDialog Message
+XI. Configuration Dialog
    
    SYNOPSIS 
  
    ioctl(fd, I2OHTML, struct i2o_html *htquery);
-
       struct i2o_html
       {
          u32   iop;      /* IOP unit number */
@@ -356,22 +359,21 @@ X. UtilConfigDialog Message
    string that is to be sent to the device, it should be sent in the buffer
    pointed to by htquery->qbuf.  If there is no query string, this field
    should be set to NULL. The actual size of the reply received is written
-   into *(htquery->reslen)
+   into *(htquery->reslen).
   
    RETURNS
 
    This function returns 0 if no error occur. If an error occurs, -1
-   is returned and errno is set appropriatly:
+   is returned and errno is set appropriatly:
 
-      ETIMEDOUT   Timeout waiting for reply message
-      ENOMEM      Kernel memory allocation error
-      ENOBUFS     Buffer not large enough.  If this occurs, the required
-                  buffer length is written into *(ops->reslen)
       EFAULT      Invalid user space pointer was passed
       ENXIO       Invalid IOP number
-      EIO         Unkown error
+      ENOBUFS     Buffer not large enough.  If this occurs, the required
+                  buffer length is written into *(ops->reslen)
+      ETIMEDOUT   Timeout waiting for reply message
+      ENOMEM      Kernel memory allocation error
 
-XI. Events
+XII. Events
 
     In the process of determining this.  Current idea is to have use
     the select() interface to allow user apps to periodically poll
@@ -394,5 +396,3 @@ Rev 0.2 - 04/06/99
 Rev 0.3 - 04/20/99
 - Changed all ioctls() to use pointers to user data instead of actual data
 - Updated error values to match the code
-
-
diff --git a/drivers/i2o/README.lan b/drivers/i2o/README.lan
deleted file mode 100644 (file)
index cb97081..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-
-       Linux I2O LAN OSM
-
-       (c) University of Helsinki, Department of Computer Science
-
-       This program is free software; you can redistribute it and/or
-       modify it under the terms of the GNU General Public License
-       as published by the Free Software Foundation; either version
-       2 of the License, or (at your option) any later version.
-
-AUTHORS
-       Auvo Häkkinen, Auvo.Hakkinen@cs.Helsinki.FI
-       Juha Sievänen, Juha.Sievanen@cs.Helsinki.FI
-
-CREDITS
-
-       This work was made possible by 
-
-European Commission
-       Funding for the project
-
-SysKonnect
-       Loaning of FDDI cards
-
-ASUSTeK
-       I2O motherboard
-
-STATUS:
-o      The FDDI part of LAN OSM is working to some extent.
-o      Only packet per bucket is now supported.
-
-TO DO:
-
-LAN:
-o      Add support for bactches
-o      Find the bug in i2o_set_multicast_list(), which kills interrupt
-       handler in i2o_wait_reply()
-o      Add support for Ethernet, Token Ring, AnyLAN, Fibre Channel
index 554d366cf519d155347dbaff9c086abd27572419..4bcb7dd8a601fcb5c37805aa88d3666bc2f5222c 100644 (file)
@@ -56,7 +56,8 @@
 
 #define MAX_I2OB       16
 
-#define MAX_I2OB_DEPTH 32
+#define MAX_I2OB_DEPTH 32                
+#define MAX_I2OB_RETRIES 4
 
 /*
  *     Some of these can be made smaller later
@@ -70,8 +71,6 @@ static u32 i2ob_max_sectors[MAX_I2OB<<4];
 
 static int i2ob_context;
 
-static spinlock_t i2ob_lock = SPIN_LOCK_UNLOCKED;
-
 struct i2ob_device
 {
        struct i2o_controller *controller;
@@ -110,22 +109,41 @@ static atomic_t queue_depth;              /* For flow control later on */
 static struct i2ob_request i2ob_queue[MAX_I2OB_DEPTH+1];
 static struct i2ob_request *i2ob_qhead;
 
+static struct timer_list i2ob_timer;
+static int i2ob_timer_started = 0;
+
 #define DEBUG( s )
 /* #define DEBUG( s ) printk( s ) 
  */
 
 static int i2ob_install_device(struct i2o_controller *, struct i2o_device *, int);
 static void i2ob_end_request(struct request *);
-static void do_i2ob_request(void);
+static void i2ob_request(void);
+
+/*
+ * Dump messages.
+ */
+static void i2ob_dump_msg(struct i2ob_device *dev,u32 *msg,int size)
+{
+        int cnt;
+
+        printk(KERN_INFO "\n\ni2o message:\n");
+        for (cnt = 0; cnt<size; cnt++)
+        {
+                printk(KERN_INFO "m[%d]=%x\n",cnt,msg[cnt]);
+        }
+        printk(KERN_INFO "\n");
+}
+
 
 /*
  *     Get a message
  */
 
 static u32 i2ob_get(struct i2ob_device *dev)
-{ 
+{
        struct i2o_controller *c=dev->controller;
-       return I2O_POST_READ32(c);
+       return I2O_POST_READ32(c);
 }
  
 /*
@@ -141,15 +159,14 @@ static int i2ob_send(u32 m, struct i2ob_device *dev, struct i2ob_request *ireq,
        u64 offset;
        struct request *req = ireq->req;
        struct buffer_head *bh = req->bh;
-       static int old_qd = 2;
        int count = req->nr_sectors<<9;
+
+       /* Map the message to a virtual address */
+       msg = bus_to_virt(c->mem_offset + m);
        
        /*
-        *      Build a message
+         * Build the message based on the request.
         */
-       
-       msg = bus_to_virt(c->mem_offset + m);
-       
        msg[2] = i2ob_context|(unit<<8);
        msg[3] = ireq->num;
        msg[5] = req->nr_sectors << 9;
@@ -212,8 +229,7 @@ static int i2ob_send(u32 m, struct i2ob_device *dev, struct i2ob_request *ireq,
 
        i2o_post_message(c,m);
        atomic_inc(&queue_depth);
-       if(atomic_read(&queue_depth)>old_qd)
-               old_qd=atomic_read(&queue_depth);
+
        return 0;
 }
 
@@ -263,6 +279,7 @@ static void i2ob_end_request(struct request *req)
 
 static void i2o_block_reply(struct i2o_handler *h, struct i2o_controller *c, struct i2o_message *msg)
 {
+       unsigned long flags;
        struct i2ob_request *ireq;
        u8 st;
        u32 *m = (u32 *)msg;
@@ -319,18 +336,61 @@ static void i2o_block_reply(struct i2o_handler *h, struct i2o_controller *c, str
                if(st!=0)
                {
                        printk(KERN_ERR "i2ob: error %08X\n", m[4]);
-                       /*
-                        *      Now error out the request block
-                        */
                        ireq->req->errors++;    
+                       if (ireq->req->errors < MAX_I2OB_RETRIES)
+                       {
+                               u32 retry_msg;
+                               struct i2ob_device *dev;
+
+                               printk(KERN_ERR "i2ob: attempting retry %d for request %p\n",ireq->req->errors+1,ireq->req);
+                               
+                               /* 
+                                * Get a message for this retry.
+                                */
+                               dev = &i2ob_dev[(unit&0xF0)];
+                               retry_msg = i2ob_get(dev);
+
+                               /* 
+                                * If we cannot get a message then
+                                * forget the retry and fail the
+                                * request.   Note that since this is
+                                * being called from the interrupt 
+                                * handler, a request has just been 
+                                * completed and there will most likely 
+                                * be space on the inbound message
+                                * fifo so this won't happen often.
+                                */
+                               if(retry_msg!=0xFFFFFFFF)
+                               {
+                                       /*
+                                        * Decrement the queue depth since
+                                        * this request has completed and
+                                        * it will be incremented again when
+                                        * i2ob_send is called below.
+                                        */
+                                       atomic_dec(&queue_depth);
+
+                                       /*
+                                        * Send the request again.
+                                        */
+                                       i2ob_send(retry_msg, dev,ireq,i2ob[unit].start_sect, (unit&0xF0));
+                                       /*
+                                        * Don't fall through.
+                                        */
+                                       return;
+                               }
+                       }               
                }
+               else
+                       ireq->req->errors = 0;
        }
+               
        /*
-        *      Dequeue the request.
+        *      Dequeue the request. We use irqsave locks as one day we
+        *      may be running polled controllers from a BH...
         */
        
-       spin_lock(&io_request_lock);
-       spin_lock(&i2ob_lock);
+       spin_lock_irqsave(&io_request_lock, flags);
        i2ob_unhook_request(ireq);
        i2ob_end_request(ireq->req);
        
@@ -339,9 +399,8 @@ static void i2o_block_reply(struct i2o_handler *h, struct i2o_controller *c, str
         */
         
        atomic_dec(&queue_depth);
-       do_i2ob_request();
-       spin_unlock(&i2ob_lock);
-       spin_unlock(&io_request_lock);
+       i2ob_request();
+       spin_unlock_irqrestore(&io_request_lock, flags);
 }
 
 static struct i2o_handler i2o_block_handler =
@@ -352,6 +411,39 @@ static struct i2o_handler i2o_block_handler =
        I2O_CLASS_RANDOM_BLOCK_STORAGE
 };
 
+/*
+ * The timer handler will attempt to restart requests 
+ * that are queued to the driver.  This handler
+ * currently only gets called if the controller
+ * had no more room in its inbound fifo.  
+ */
+
+static void i2ob_timer_handler(unsigned long dummy)
+{
+       unsigned long flags;
+
+       /*
+        * We cannot touch the request queue or the timer
+         * flag without holding the io_request_lock.
+        */
+       spin_lock_irqsave(&io_request_lock,flags);
+
+       /* 
+        * Clear the timer started flag so that 
+        * the timer can be queued again.
+        */
+       i2ob_timer_started = 0;
+
+       /* 
+        * Restart any requests.
+        */
+       i2ob_request();
+
+       /* 
+        * Free the lock.
+        */
+       spin_unlock_irqrestore(&io_request_lock,flags);
+}
 
 /*
  *     The I2O block driver is listed as one of those that pulls the
@@ -361,7 +453,7 @@ static struct i2o_handler i2o_block_handler =
  *     we use it.
  */
 
-static void do_i2ob_request(void)
+static void i2ob_request(void)
 {
        struct request *req;
        struct i2ob_request *ireq;
@@ -391,13 +483,36 @@ static void do_i2ob_request(void)
                dev = &i2ob_dev[(unit&0xF0)];
                /* Get a message */
                m = i2ob_get(dev);
-               /* No messages -> punt 
-                  FIXME: if we have no messages, and there are no messages 
-                  we deadlock now. Need a timer/callback ?? */
+
                if(m==0xFFFFFFFF)
                {
-                       printk("i2ob: no messages!\n");
-                       break;
+                       /* 
+                        * See if the timer has already been queued.
+                        */
+                       if (!i2ob_timer_started)
+                       {
+                               printk(KERN_ERR "i2ob: starting timer\n");
+
+                               /*
+                                * Set the timer_started flag to insure
+                                * that the timer is only queued once.
+                                * Queing it more than once will corrupt
+                                * the timer queue.
+                                */
+                               i2ob_timer_started = 1;
+
+                               /* 
+                                * Set up the timer to expire in
+                                * 500ms.
+                                */
+                               i2ob_timer.expires = jiffies + (HZ >> 1);
+
+                               /*
+                                * Start it.
+                                */
+                                
+                               add_timer(&i2ob_timer);
+                       }
                }
                req->errors = 0;
                CURRENT = CURRENT->next;
@@ -412,13 +527,6 @@ static void do_i2ob_request(void)
        }
 }
 
-static void i2ob_request(void)
-{
-       unsigned long flags;
-       spin_lock_irqsave(&i2ob_lock, flags);
-       do_i2ob_request();
-       spin_unlock_irqrestore(&i2ob_lock, flags);
-}      
 
 /*
  *     SCSI-CAM for ioctl geometry mapping
@@ -1011,6 +1119,14 @@ int i2o_block_init(void)
        i2ob_queue[i].next = NULL;
        i2ob_qhead = &i2ob_queue[0];
        
+       /*
+        *      Timers
+        */
+        
+       init_timer(&i2ob_timer);
+       i2ob_timer.function = i2ob_timer_handler;
+       i2ob_timer.data = 0;
+       
        /*
         *      Register the OSM handler as we will need this to probe for
         *      drives, geometry and other goodies.
index 17355d9f2a9abf69feee1f7bc4ecf32c29f553e3..518093ea052b13f119ebfb9c1e19730c091282db 100644 (file)
@@ -9,6 +9,9 @@
  *         - Added basic ioctl() support
  *      Modified 06/07/1999 by Deepak Saxena
  *         - Added software download ioctl (still testing)
+ *     Modified 09/10/1999 by Auvo Häkkinen
+ *        - Changes to i2o_cfg_reply(), ioctl_parms()
+ *        - Added ioct_validate() (not yet tested)
  *
  *     This program is free software; you can redistribute it and/or
  *     modify it under the terms of the GNU General Public License
@@ -36,11 +39,6 @@ static int i2o_cfg_token = 0;
 static int i2o_cfg_context = -1;
 static void *page_buf;
 static void *i2o_buffer;
-static int i2o_ready;
-static int i2o_pagelen;
-static int i2o_error;
-static int cfg_inuse;
-static int i2o_eof;
 static spinlock_t i2o_config_lock = SPIN_LOCK_UNLOCKED;
 struct wait_queue *i2o_wait_queue;
 
@@ -52,6 +50,7 @@ static int ioctl_html(unsigned long);
 static int ioctl_swdl(unsigned long);
 static int ioctl_swul(unsigned long);
 static int ioctl_swdel(unsigned long);
+static int ioctl_validate(unsigned long); 
 
 /*
  *     This is the callback for any message we have posted. The message itself
@@ -61,8 +60,13 @@ static int ioctl_swdel(unsigned long);
  */
 static void i2o_cfg_reply(struct i2o_handler *h, struct i2o_controller *c, struct i2o_message *m)
 {
-       i2o_cfg_token = I2O_POST_WAIT_OK;
-
+        u32 *msg = (u32 *)m;
+        
+       if (msg[4] >> 24) // RegStatus != SUCCESS
+               i2o_cfg_token = -(msg[4] & 0xFFFF); // DetailedStatus
+        else
+               i2o_cfg_token = I2O_POST_WAIT_OK;
+               
        return;
 }
 
@@ -84,7 +88,6 @@ static long long cfg_llseek(struct file *file, long long offset, int origin)
        return -ESPIPE;
 }
 
-/* i2ocontroller/i2odevice/page/?data */
 
 static ssize_t cfg_write(struct file *file, const char *buf, size_t count, loff_t *ppos)
 {
@@ -93,12 +96,15 @@ static ssize_t cfg_write(struct file *file, const char *buf, size_t count, loff_
        return 0;
 }
 
-/* To be written for event management support */
+
 static ssize_t cfg_read(struct file *file, char *buf, size_t count, loff_t *ptr)
 {
        return 0;
 }
 
+/*
+ * IOCTL Handler
+ */
 static int cfg_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
        unsigned long arg)
 {
@@ -141,6 +147,10 @@ static int cfg_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
                        ret = ioctl_swdel(arg);
                        break;
 
+               case I2OVALIDATE:
+                       ret = ioctl_validate(arg);
+                       break;
+                       
                case I2OHTML:
                        ret = ioctl_html(arg);
                        break;
@@ -168,13 +178,11 @@ int ioctl_getiops(unsigned long arg)
                c = i2o_find_controller(i);
                if(c)
                {
-                       printk(KERN_INFO "ioctl: iop%d found\n", i);
                        foo[i] = 1;
                        i2o_unlock_controller(c);
                }
                else
                {
-                       printk(KERN_INFO "ioctl: iop%d not found\n", i);
                        foo[i] = 0;
                }
        }
@@ -189,10 +197,7 @@ int ioctl_gethrt(unsigned long arg)
        struct i2o_cmd_hrtlct *cmd = (struct i2o_cmd_hrtlct*)arg;
        struct i2o_cmd_hrtlct kcmd;
        pi2o_hrt hrt;
-       u32 msg[6];
-       u32 *workspace;
        int len;
-       int token;
        u32 reslen;
        int ret = 0;
 
@@ -208,42 +213,20 @@ int ioctl_gethrt(unsigned long arg)
        c = i2o_find_controller(kcmd.iop);
        if(!c)
                return -ENXIO;
+               
+       hrt = (pi2o_hrt)c->hrt;
 
-       workspace = kmalloc(8192, GFP_KERNEL);
-       hrt = (pi2o_hrt)workspace;
-       if(workspace==NULL)
-       {
-               i2o_unlock_controller(c);
-               return -ENOMEM;
-       }
-
-       memset(workspace, 0, 8192);
-
-       msg[0]= SIX_WORD_MSG_SIZE| SGL_OFFSET_4;
-       msg[1]= I2O_CMD_HRT_GET<<24 | HOST_TID<<12 | ADAPTER_TID;
-       msg[2]= (u32)cfg_handler.context;
-       msg[3]= 0;
-       msg[4]= (0xD0000000 | 8192);
-       msg[5]= virt_to_phys(workspace);
-
-       token = i2o_post_wait(c, ADAPTER_TID, msg, 6*4, &i2o_cfg_token,2);
-       if(token == I2O_POST_WAIT_TIMEOUT)
-       {
-               kfree(workspace);
-               i2o_unlock_controller(c);
-               return -ETIMEDOUT;
-       }
        i2o_unlock_controller(c);
 
        len = 8 + ((hrt->entry_len * hrt->num_entries) << 2);
+       
        /* We did a get user...so assuming mem is ok...is this bad? */
        put_user(len, kcmd.reslen);
        if(len > reslen)
                ret = -ENOBUFS; 
        if(copy_to_user(kcmd.resbuf, (void*)hrt, len))
-               ret = -EINVAL;
+               ret = -EFAULT;
 
-       kfree(workspace);
        return ret;
 }
 
@@ -253,10 +236,7 @@ int ioctl_getlct(unsigned long arg)
        struct i2o_cmd_hrtlct *cmd = (struct i2o_cmd_hrtlct*)arg;
        struct i2o_cmd_hrtlct kcmd;
        pi2o_lct lct;
-       u32 msg[9];
-       u32 *workspace;
        int len;
-       int token;
        int ret = 0;
        u32 reslen;
 
@@ -273,32 +253,7 @@ int ioctl_getlct(unsigned long arg)
        if(!c)
                return -ENXIO;
 
-       workspace = kmalloc(8192, GFP_KERNEL);
-       lct = (pi2o_lct)workspace;
-       if(workspace==NULL)
-       {
-               i2o_unlock_controller(c);
-               return -ENOMEM;
-       }
-
-       memset(workspace, 0, 8192);
-
-       msg[0]= EIGHT_WORD_MSG_SIZE | SGL_OFFSET_6;
-       msg[1]= I2O_CMD_LCT_NOTIFY<<24 | HOST_TID<<12 | ADAPTER_TID;
-       msg[2]= (u32)cfg_handler.context;
-       msg[3]= 0;
-       msg[4]= 0xFFFFFFFF;
-       msg[5]= 0;
-       msg[6]= (0xD0000000 | 8192);
-       msg[7]= virt_to_phys(workspace);
-
-       token = i2o_post_wait(c, ADAPTER_TID, msg, 8*4, &i2o_cfg_token,2);
-       if(token == I2O_POST_WAIT_TIMEOUT)
-       {
-               kfree(workspace);
-               i2o_unlock_controller(c);
-               return -ETIMEDOUT;
-       }
+       lct = (pi2o_lct)c->lct;
        i2o_unlock_controller(c);
 
        len = (unsigned int)lct->table_size << 2;
@@ -306,9 +261,8 @@ int ioctl_getlct(unsigned long arg)
        if(len > reslen)
                ret = -ENOBUFS; 
        else if(copy_to_user(kcmd.resbuf, (void*)lct, len))
-               ret = -EINVAL;
+               ret = -EFAULT;
 
-       kfree(workspace);
        return ret;
 }
 
@@ -318,16 +272,10 @@ static int ioctl_parms(unsigned long arg, unsigned int type)
        struct i2o_controller *c;
        struct i2o_cmd_psetget *cmd = (struct i2o_cmd_psetget*)arg;
        struct i2o_cmd_psetget kcmd;
-       u32 msg[9];
        u32 reslen;
-       int token;
        u8 *ops;
        u8 *res;
-       u16 *res16;     
-       u32 *res32;
-       u16 count;
        int len;
-       int i,j;
 
        u32 i2o_cmd = (type == I2OPARMGET ? 
                                I2O_CMD_UTIL_PARAMS_GET :
@@ -369,47 +317,14 @@ static int ioctl_parms(unsigned long arg, unsigned int type)
                return -ENOMEM;
        }
 
-       res16 = (u16*)res;
-
-       msg[0]=NINE_WORD_MSG_SIZE|SGL_OFFSET_5;
-       msg[1]=i2o_cmd<<24|HOST_TID<<12|cmd->tid;
-       msg[2]=(u32)cfg_handler.context;
-       msg[3]=0;
-       msg[4]=0;
-       msg[5]=0x54000000|kcmd.oplen;
-       msg[6]=virt_to_bus(ops);
-       msg[7]=0xD0000000|(65536);
-       msg[8]=virt_to_bus(res);
-
-       /*
-        * Parm set sometimes takes a little while for some reason
-        */
-       token = i2o_post_wait(c, kcmd.tid, msg, 9*4, &i2o_cfg_token,10);
-       if(token == I2O_POST_WAIT_TIMEOUT)
-       {
-               i2o_unlock_controller(c);
-               kfree(ops);
-               kfree(res);
-               return -ETIMEDOUT;
-       }
-       i2o_unlock_controller(c);
+        len = i2o_issue_params(i2o_cmd, c, kcmd.tid, cfg_handler.context,
+                               ops, kcmd.oplen, res, 65536, &i2o_cfg_token);
+        i2o_unlock_controller(c);
        kfree(ops);
-
-       /* 
-        * Determine required size...there's got to be a quicker way? 
-        * Dump data to syslog for debugging failures
-        */
-       count = res16[0];
-       printk(KERN_INFO "%0#6x\n%0#6x\n", res16[0], res16[1]);
-       len = 4;
-       res16 += 2;
-       for(i = 0; i < count; i++ )
-       {
-               len += res16[0] << 2;   /* BlockSize field in ResultBlock */
-               res32 = (u32*)res16;
-               for(j = 0; j < res16[0]; j++)
-                       printk(KERN_INFO "%0#10x\n", res32[j]);
-               res16 += res16[0] << 1; /* Shift to next block */
+        
+       if (len < 0) {
+               kfree(res);
+               return len; /* -DetailedStatus */
        }
 
        put_user(len, kcmd.reslen);
@@ -499,7 +414,7 @@ int ioctl_html(unsigned long arg)
        }
 
        token = i2o_post_wait(c, cmd->tid, msg, 9*4, &i2o_cfg_token, 10);
-       if(token == I2O_POST_WAIT_TIMEOUT)
+       if(token != I2O_POST_WAIT_OK)
        {
                i2o_unlock_controller(c);
                kfree(res);
@@ -529,7 +444,7 @@ int ioctl_swdl(unsigned long arg)
        struct i2o_sw_xfer *pxfer = (struct i2o_sw_xfer *)arg;
        unsigned char maxfrag = 0, curfrag = 0;
        unsigned char buffer[8192];
-       u32 msg[MSG_FRAME_SIZE/4];
+       u32 msg[9];
        unsigned int token = 0, diff = 0, swlen = 0, swxfer = 0;
        struct i2o_controller *c;
        int foo = 0;
@@ -588,11 +503,11 @@ int ioctl_swdl(unsigned long arg)
                return -ENXIO;
        printk("*** foo%d ***\n", foo++);
 
-       msg[0]= EIGHT_WORD_MSG_SIZE| SGL_OFFSET_7;
+       msg[0]= NINE_WORD_MSG_SIZE | SGL_OFFSET_7;
        msg[1]= I2O_CMD_SW_DOWNLOAD<<24 | HOST_TID<<12 | ADAPTER_TID;
        msg[2]= (u32)cfg_handler.context;
        msg[3]= 0;
-       msg[4]= ((u32)kxfer.dl_flags)<<24|((u32)kxfer.sw_type)<<16|((u32)maxfrag)<<8|((u32)curfrag);
+       msg[4]= ((u32)kxfer.flags)<<24|((u32)kxfer.sw_type)<<16|((u32)maxfrag)<<8|((u32)curfrag);
        msg[5]= swlen;
        msg[6]= kxfer.sw_id;
        msg[7]= (0xD0000000 | 8192);
@@ -611,14 +526,15 @@ int ioctl_swdl(unsigned long arg)
                msg[4] |= (u32)curfrag;
 
                __copy_from_user(buffer, kxfer.buf, 8192);
-               swxfer += 8129;
+               swxfer += 8192;
 
                // Yes...that's one minute, but the spec states that
                // transfers take a long time, and I've seen just how
                // long they can take.
-               token = i2o_post_wait(c, ADAPTER_TID, msg, 6*4, &i2o_cfg_token,60);
-               if( token == I2O_POST_WAIT_TIMEOUT )    // Something very wrong
+               token = i2o_post_wait(c, ADAPTER_TID, msg, sizeof(msg), &i2o_cfg_token,60);
+               if (token != I2O_POST_WAIT_OK ) // Something very wrong
                {
+                       i2o_unlock_controller(c);
                        printk("Timeout downloading software");
                        return -ETIMEDOUT;
                }
@@ -631,13 +547,15 @@ int ioctl_swdl(unsigned long arg)
        msg[4] |= (u32)maxfrag;
        msg[7] = (0xD0000000 | diff);
        __copy_from_user(buffer, kxfer.buf, 8192);
-       token = i2o_post_wait(c, ADAPTER_TID, msg, 6*4, &i2o_cfg_token,60);
-       if( token == I2O_POST_WAIT_TIMEOUT )    // Something very wrong
+       token = i2o_post_wait(c, ADAPTER_TID, msg, sizeof(msg), &i2o_cfg_token,60);
+       if( token != I2O_POST_WAIT_OK ) // Something very wrong
        {
+               i2o_unlock_controller(c);
                printk("Timeout downloading software");
                return -ETIMEDOUT;
        }
        __put_user(curfrag, kxfer.curfrag);
+       i2o_unlock_controller(c);
 
        return 0;
 }
@@ -651,9 +569,39 @@ int ioctl_swul(unsigned long arg)
 /* To be written */
 int ioctl_swdel(unsigned long arg)
 {
-       return 0;
+       return -EINVAL;
 }
 
+int ioctl_validate(unsigned long arg)
+{
+        int token;
+        int iop = (int)arg;
+        u32 msg[4];
+        struct i2o_controller *c;
+
+        c=i2o_find_controller(iop);
+        if (!c)
+                return -ENXIO;
+
+        msg[0] = FOUR_WORD_MSG_SIZE|SGL_OFFSET_0;
+        msg[1] = I2O_CMD_CONFIG_VALIDATE<<24 | HOST_TID<<12 | iop;
+        msg[2] = (u32)i2o_cfg_context;
+        msg[3] = 0;
+
+        token = i2o_post_wait(c, ADAPTER_TID, msg, sizeof(msg),&i2o_cfg_token, 10);
+        i2o_unlock_controller(c);
+
+        if (token != I2O_POST_WAIT_OK)
+        {
+                printk("Can't validate configuration, ErrorStatus = %d\n",
+                       token);
+                return -ETIMEDOUT;
+        }
+
+        return 0;
+}   
+
+
 static int cfg_open(struct inode *inode, struct file *file)
 {
        /* 
@@ -693,7 +641,7 @@ static struct miscdevice i2o_miscdev = {
 #ifdef MODULE
 int init_module(void)
 #else
-__init int i2o_config_init(void)
+int __init i2o_config_init(void)
 #endif
 {
        printk(KERN_INFO "i2o configuration manager v 0.02\n");
index a8395b15c491bab42d462fe959bbff65a0018d1b..fe8a86483159433c56d555a4d24f92e56e2bd6be 100644 (file)
@@ -24,9 +24,7 @@
 #include <linux/kernel.h>
 #include <linux/pci.h>
 
-#if defined(CONFIG_I2O_PCI) || defined (CONFIG_I2O_PCI_MODULE)
 #include <linux/i2o.h>
-#endif
 
 #include <linux/errno.h>
 #include <linux/init.h>
@@ -261,11 +259,12 @@ int i2o_install_controller(struct i2o_controller *c)
 int i2o_delete_controller(struct i2o_controller *c)
 {
        struct i2o_controller **p;
+       int users;
 
        spin_lock(&i2o_configuration_lock);
-       if(atomic_read(&c->users))
+       if((users=atomic_read(&c->users)))
        {
-               printk("Someone is using controller iop%d\n", c->unit);
+               printk("I2O: %d users for controller iop%d\n", users, c->unit);
                spin_unlock(&i2o_configuration_lock);
                return -EBUSY;
        }
@@ -278,7 +277,6 @@ int i2o_delete_controller(struct i2o_controller *c)
                        return -EBUSY;
                }
        }
-//     c->destructor(c); /* We dont want to free the IRQ yet */
 
        p=&i2o_controller_chain;
 
@@ -397,7 +395,8 @@ int i2o_release_device(struct i2o_device *d, struct i2o_handler *h, u32 type)
                        err = -ENOENT;
                else
                {
-                       if(i2o_issue_claim(d->controller,d->id, h->context, 0, &reply_flag, type) < 0)
+                       if(i2o_issue_claim(d->controller, d->id, h->context, 0,
+                                          &reply_flag, type) < 0)
                        {
                                err = -ENXIO;
                        }
@@ -420,7 +419,7 @@ int i2o_release_device(struct i2o_device *d, struct i2o_handler *h, u32 type)
                atomic_dec(&d->controller->users);
 
                if(i2o_issue_claim(d->controller,d->id, h->context, 0, 
-                                                                       &reply_flag, type) < 0)
+                                  &reply_flag, type) < 0)
                        err = -ENXIO;
        }
 
@@ -2172,6 +2171,7 @@ EXPORT_SYMBOL(i2o_row_delete_table);
 EXPORT_SYMBOL(i2o_post_this);
 EXPORT_SYMBOL(i2o_post_wait);
 EXPORT_SYMBOL(i2o_issue_claim);
+EXPORT_SYMBOL(i2o_issue_params);
 
 EXPORT_SYMBOL(i2o_report_status);
 
@@ -2218,7 +2218,7 @@ extern int i2o_pci_init(void);
 extern int i2o_proc_init(void);
 extern int i2o_scsi_init(void);
 
-__init int i2o_init(void)
+int __init i2o_init(void)
 {
         if (i2o_install_handler(&i2o_core_handler) < 0)
         {
index 863780f38ab8561e5fe8c8c04b7dfec58ff4d41d..087ee84bdb008735d02c3355dc8c017ccc07f0c4 100644 (file)
@@ -1,19 +1,19 @@
 /*
- *     linux/drivers/i2o/i2o_lan.c
+ *     linux/drivers/i2o/i2o_lan.c
  *
- *     I2O LAN CLASS OSM       Prototyping, July 16th 1999
+ *     I2O LAN CLASS OSM       Prototyping, September 17th 1999
  *
  *     (C) Copyright 1999      University of Helsinki,
  *                             Department of Computer Science
  *
- *     This code is still under development / test.
+ *     This code is still under development / test.
  *
- *      This program is free software; you can redistribute it and/or
- *      modify it under the terms of the GNU General Public License
- *      as published by the Free Software Foundation; either version
- *      2 of the License, or (at your option) any later version.    
+ *     This program is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU General Public License
+ *     as published by the Free Software Foundation; either version
+ *     2 of the License, or (at your option) any later version.    
  *
- *     Authors:        Auvo Häkkinen <Auvo.Hakkinen@cs.Helsinki.FI>
+ *     Authors:        Auvo Häkkinen <Auvo.Hakkinen@cs.Helsinki.FI>
  *                     Juha Sievänen <Juha.Sievanen@cs.Helsinki.FI>
  *                     Deepak Saxena <deepak@plexity.net>
  *
@@ -61,7 +61,6 @@ struct i2o_lan_local {
        u8 unit;
        struct i2o_device *i2o_dev;
        int reply_flag;                 /* needed by scalar/table queries */
-       u32 packet_tresh;               /* treshold for incoming skb's */       
        struct fddi_statistics stats;   /* see also struct net_device_stats */ 
        unsigned short (*type_trans)(struct sk_buff *, struct net_device *);
        /* 
@@ -70,12 +69,22 @@ struct i2o_lan_local {
         * the DDM with buckets.
         */
        u32     bucket_count;
+
+   /*
+    * Keep track of no. of outstanding TXes
+    */
+   u32   tx_count;
+   u32   max_tx;
+   u32   tx_full;
+
+   spinlock_t lock;
+
 };
 
 /* function prototypes */
-static int i2o_lan_receive_post(struct net_device *dev);
-static int i2o_lan_receive_post_reply(struct net_device *dev, struct i2o_message *m);
-static void i2o_lan_release_buckets(u32 *msg, struct i2o_lan_local *priv);
+static int i2o_lan_receive_post(struct net_device *dev, u32 count);
+static int i2o_lan_receive_post_reply(struct net_device *dev, u32 *msg);
+static void i2o_lan_release_buckets(struct net_device *dev, u32 *msg);
 
 /*
  * Module params
@@ -90,15 +99,6 @@ static void i2o_lan_reply(struct i2o_handler *h, struct i2o_controller *iop,
        u32 *msg = (u32 *)m;
        u8 unit  = (u8)(msg[2]>>16); // InitiatorContext
        struct net_device *dev = i2o_landevs[unit];
-       struct i2o_lan_local *priv; 
-
-       if(dev)
-               priv = (struct i2o_lan_local *)dev->priv;
-       else
-               priv = NULL;
-       
-       dprintk("Unit: %d Function: %#x\n",
-                               unit, msg[1]>>24);
 
        if (msg[0] & (1<<13)) // Fail bit is set
        {
@@ -126,20 +126,16 @@ static void i2o_lan_reply(struct i2o_handler *h, struct i2o_controller *iop,
                {
                        if(!(msg[4]>>24))
                        {
-                               i2o_lan_receive_post_reply(dev,m);
+                               i2o_lan_receive_post_reply(dev,msg);
                                break;
                        }
-                       else
-                       {
-                               // Something VERY wrong if this is happening
-                                printk( KERN_WARNING "i2olan: Device %s rejected bucket post\n", dev->name);
-                               i2o_lan_release_buckets(msg,priv);
-                       }
-               }
-               else
-               {
-                       i2o_lan_release_buckets(msg,priv);      
+
+                       // Something VERY wrong if this is happening
+                       printk( KERN_WARNING "i2olan: Device %s rejected bucket post\n", dev->name);
                }
+
+               // Getting unused buckets back
+               i2o_lan_release_buckets(dev,msg);       
        
                break;
        }
@@ -147,16 +143,21 @@ static void i2o_lan_reply(struct i2o_handler *h, struct i2o_controller *iop,
        case LAN_PACKET_SEND:
        case LAN_SDU_SEND: 
        {
+               struct i2o_lan_local *priv = (struct i2o_lan_local *)dev->priv; 
                u8 trl_count  = msg[3] & 0x000000FF;    
                
                do {    // The HDM has handled the outgoing packet
                        dev_kfree_skb((struct sk_buff *)msg[4 + trl_count]);
                        dprintk(KERN_INFO "%s: Request skb freed (trl_count=%d).\n",
                                dev->name,trl_count);
+                       priv->tx_count--;
                } while (--trl_count);
                
-               dev->tbusy = 0;
-               mark_bh(NET_BH); /* inform upper layers */
+               if(dev->tbusy)
+               {
+                       clear_bit(0,(void*)&dev->tbusy);
+                       mark_bh(NET_BH); /* inform upper layers */
+               }
        
                break;  
        }
@@ -164,21 +165,20 @@ static void i2o_lan_reply(struct i2o_handler *h, struct i2o_controller *iop,
        default: 
                if (msg[2] & 0x80000000)  // reply to a UtilParamsGet/Set
                {       
-               int *flag = (int *)msg[3]; // flag for i2o_post_wait
+                       int *flag = (int *)msg[3]; // flag for i2o_post_wait
                        if (msg[4] >> 24) // ReqStatus != SUCCESS
-                       {
-                       *flag = -(msg[4] & 0xFFFF); // DetailedStatus
+                               *flag = -(msg[4] & 0xFFFF); // DetailedStatus
+                       else
+                               *flag = I2O_POST_WAIT_OK;
                }
-               else
-                       *flag = I2O_POST_WAIT_OK;
-               }
        }
 }
 
-void i2o_lan_release_buckets(u32 *msg, struct i2o_lan_local *priv)
+void i2o_lan_release_buckets(struct net_device *dev, u32 *msg)
 {
+       struct i2o_lan_local *priv = (struct i2o_lan_local *)dev->priv; 
        u8 trl_count  = (u8)(msg[3] & 0x000000FF);      
-   u32 *pskb = &msg[6];
+       u32 *pskb = &msg[6];
        
        while (trl_count) 
        {       
@@ -186,8 +186,7 @@ void i2o_lan_release_buckets(u32 *msg, struct i2o_lan_local *priv)
                        (struct sk_buff*)(*pskb));
                dev_kfree_skb((struct sk_buff*)(*pskb)); 
                pskb++;
-               if(priv)
-                       priv->bucket_count--;
+               priv->bucket_count--;
                trl_count--;
        }
 }
@@ -202,9 +201,8 @@ static struct i2o_handler i2o_lan_handler =
 static int lan_context;
 
 
-static int i2o_lan_receive_post_reply(struct net_device *dev, struct i2o_message *m)
+static int i2o_lan_receive_post_reply(struct net_device *dev, u32 *msg)
 {
-       u32 *msg = (u32 *)m;
        struct i2o_lan_local *priv = (struct i2o_lan_local *)dev->priv;
        struct i2o_bucket_descriptor *bucket = (struct i2o_bucket_descriptor *)&msg[6];
        struct i2o_packet_info *packet;
@@ -212,19 +210,23 @@ static int i2o_lan_receive_post_reply(struct net_device *dev, struct i2o_message
        u8 trl_count  = msg[3] & 0x000000FF;    
        struct sk_buff *skb, *newskb;
 
+static int n_calls = 0;
+n_calls++;
+
 #if 0
        dprintk(KERN_INFO "TrlFlags = 0x%02X, TrlElementSize = %d, TrlCount = %d\n"
                "msgsize = %d, buckets_remaining = %d\n", 
                msg[3]>>24, msg[3]&0x0000FF00, trl_count, msg[0]>>16, msg[5]);  
 #endif
 
-       dprintk(KERN_INFO "Buckets_remaining = %d, bucket_count = %d\n",
-               msg[5], priv->bucket_count);
-
-       do {
+       while (trl_count--)
+       {
                skb = (struct sk_buff *)(bucket->context);              
                packet = (struct i2o_packet_info *)bucket->packet_info; 
                priv->bucket_count--;
+
+               dprintk(KERN_INFO "Buckets_remaining = %d, bucket_count = %d, trl_count = %d\n",
+                       msg[5], priv->bucket_count, trl_count);
 #if 0
                dprintk(KERN)INFO "flags = 0x%02X, offset = 0x%06X, status = 0x%02X, length = %d\n",
                        packet->flags, packet->offset, packet->status, packet->len);
@@ -234,8 +236,7 @@ static int i2o_lan_receive_post_reply(struct net_device *dev, struct i2o_message
                                        dev_alloc_skb(packet->len+2);   
                        if (newskb) {
                                skb_reserve(newskb,2);
-                               memcpy(skb_put(newskb,packet->len), 
-                              skb->data, packet->len);
+                               memcpy(skb_put(newskb,packet->len), skb->data, packet->len);
                                newskb->dev = dev;
                                newskb->protocol = priv->type_trans(newskb, dev);
 
@@ -247,7 +248,6 @@ static int i2o_lan_receive_post_reply(struct net_device *dev, struct i2o_message
                                return -ENOMEM;
                        }
                } else {
-
                        skb_put(skb,packet->len);               
                        skb->dev  = dev;                
                        skb->protocol = priv->type_trans(skb, dev);
@@ -258,33 +258,25 @@ static int i2o_lan_receive_post_reply(struct net_device *dev, struct i2o_message
                        "to upper level.\n",dev->name,packet->len);
 
                bucket++; // to next Packet Descriptor Block
-       } while (--trl_count);
-
-       if (priv->bucket_count <= bucketthresh) // BucketsRemaining
-       {
-               dprintk("Bucket_count = %d, ",priv->bucket_count);
-               i2o_lan_receive_post(dev);
        }
 
+       if (priv->bucket_count < bucketpost - bucketthresh)
+               i2o_lan_receive_post(dev, bucketpost - priv->bucket_count);
 
-       if((msg[4]& 0x0000ffff) == 0x05) // I2O_LAN_RECEIVE_OVERRUN
+       if ((msg[4] & 0x000000FF) == I2O_LAN_DSC_BUCKET_OVERRUN)
        {
-               printk("Bucket overrun! priv->bucketcount = %d\n",
-                                       priv->bucket_count);
+               printk(KERN_INFO "%s: DDM out of buckets (count = %d)! "
+                        "Number of posts = %d\n", dev->name, msg[5], n_calls);
+               n_calls = 0;
        }
 
        return 0;
 }
 
-/*  ====================================================
- *  Interface to i2o:  functions to send lan class request 
- */
-
-
 /* 
  * i2o_lan_receive_post(): Post buckets to receive packets.
  */
-static int i2o_lan_receive_post(struct net_device *dev)
+static int i2o_lan_receive_post(struct net_device *dev, u32 count)
 {      
        struct i2o_lan_local *priv = (struct i2o_lan_local *)dev->priv; 
        struct i2o_device *i2o_dev = priv->i2o_dev;
@@ -298,16 +290,16 @@ static int i2o_lan_receive_post(struct net_device *dev)
        u32 total = 0;
        int i;
 
-       while (total < bucketpost)
+       while (total < count)
        {
                m = I2O_POST_READ32(iop);
                if (m == 0xFFFFFFFF)
                        return -ETIMEDOUT;              
                msg = bus_to_virt(iop->mem_offset + m);
-       
-               bucket_count = (total + n_elems < bucketpost)
+
+               bucket_count = (total + n_elems < count)
                             ? n_elems
-                            : bucketpost - total;
+                            : count - total;
 
                msg[0] = I2O_MESSAGE_SIZE(4 + 3 *  bucket_count) | SGL_OFFSET_4;
                msg[1] = LAN_RECEIVE_POST<<24 | HOST_TID<<12 | i2o_dev->id;
@@ -440,11 +432,7 @@ static int i2o_lan_open(struct net_device *dev)
 {
        struct i2o_lan_local *priv = (struct i2o_lan_local *)dev->priv; 
        struct i2o_device *i2o_dev = priv->i2o_dev;     
-       struct i2o_controller *iop = i2o_dev->controller;
 
-/*     if (i2o_issue_claim(iop, i2o_dev->id, priv->unit << 16 | lan_context, 1, 
-                           &priv->reply_flag) < 0)
-*/
        if(i2o_claim_device(i2o_dev, &i2o_lan_handler, I2O_CLAIM_PRIMARY))
        {
                printk(KERN_WARNING "%s: Unable to claim the I2O LAN device.\n", dev->name);
@@ -457,10 +445,8 @@ static int i2o_lan_open(struct net_device *dev)
        dev->tbusy = 0;
        dev->start = 1;
 
-       priv->packet_tresh = dev->mtu - (dev->mtu >> 3);
-
        i2o_set_batch_mode(dev);
-       i2o_lan_receive_post(dev);
+       i2o_lan_receive_post(dev, bucketpost);
 
        MOD_INC_USE_COUNT;
 
@@ -474,21 +460,11 @@ static int i2o_lan_close(struct net_device *dev)
 {
        struct i2o_lan_local *priv = (struct i2o_lan_local *)dev->priv; 
        struct i2o_device *i2o_dev = priv->i2o_dev;     
-       struct i2o_controller *iop = i2o_dev->controller;       
 
        dev->tbusy = 1;
        dev->start = 0;
-
-// This is the right place for LanSuspend, but it seems to cause 
-// a kernel crash when we are using 82558 HDM proto
-
        i2o_lan_suspend(dev);
 
-/*
-       if (i2o_issue_claim(iop, i2o_dev->id, priv->unit << 16 | lan_context, 0, 
-                           &priv->reply_flag) < 0)
-*/
-
        if(i2o_release_device(i2o_dev, &i2o_lan_handler, I2O_CLAIM_PRIMARY))
                printk(KERN_WARNING "%s: Unable to unclaim I2O LAN device "
                       "(tid=%d)\n", dev->name, i2o_dev->id);
@@ -498,6 +474,7 @@ static int i2o_lan_close(struct net_device *dev)
        return 0;
 }
 
+#if 0
 /* 
  * i2o_lan_sdu_send(): Send a packet, MAC header added by the HDM.
  * Must be supported by Fibre Channel, optional for Ethernet/802.3, 
@@ -505,44 +482,9 @@ static int i2o_lan_close(struct net_device *dev)
  */
 static int i2o_lan_sdu_send(struct sk_buff *skb, struct net_device *dev)
 {      
-#if 0
-/* not yet tested */
-        struct i2o_lan_local *priv = (struct i2o_lan_local *)dev->priv; 
-        struct i2o_device *i2o_dev = priv->i2o_dev;     
-        struct i2o_controller *iop = i2o_dev->controller;
-        u32 m; u32 *msg;
-
-       dprintk(KERN_INFO "LanSDUSend called, skb->len = %d\n", skb->len);
-
-        m = I2O_POST_READ32(iop);
-       if (m == 0xFFFFFFFF) 
-       {
-               dev_kfree_skb(skb);
-               return -ETIMEDOUT;
-       }    
-       msg = bus_to_virt(iop->mem_offset + m);
-
-        msg[0] = NINE_WORD_MSG_SIZE | SGL_OFFSET_4;
-        msg[1] = LAN_SDU_SEND<<24 | HOST_TID<<12 | i2o_dev->id; 
-        msg[2] = priv->unit << 16 | lan_context; // IntiatorContext
-        msg[3] = 1<<4;         // TransmitControlWord: suppress CRC generation
-
-        // create a simple SGL, see fig. 3-26
-        // D7 = 1101 0111 = LE eob 0 1 LA dir bc1 bc0
-
-        msg[4] = 0xD7000000 | (skb->len);  // no MAC hdr included     
-        msg[5] = (u32)skb;                // TransactionContext
-        memcpy(&msg[6], skb->data, 8);    // Destination MAC Addr ??
-        msg[7] &= 0x0000FFFF;             // followed by two bytes zeros
-        msg[8] = virt_to_bus(skb->data);
-        dev->trans_start = jiffies;
-       i2o_post_message(iop,m);
-
-       dprintk(KERN_INFO "%s: Packet (%d bytes) sent to network.\n",
-               dev->name,skb->len);
-#endif
-        return 0;
+        return -EINVAL;
 }
+#endif
 
 /* 
  * i2o_lan_packet_send(): Send a packet as is, including the MAC header.
@@ -555,10 +497,24 @@ static int i2o_lan_packet_send(struct sk_buff *skb, struct net_device *dev)
        struct i2o_lan_local *priv = (struct i2o_lan_local *)dev->priv; 
        struct i2o_device *i2o_dev = priv->i2o_dev;     
        struct i2o_controller *iop = i2o_dev->controller;
-        u32 m; u32 *msg;
+       u32 m, *msg;
+       u32 flags = 0;
+
+       /* 
+        * Keep interrupt from changing dev->tbusy from underneath us
+        * (Do we really need to do this?)
+        */
+       spin_lock_irqsave(&priv->lock, flags);
 
-        m = I2O_POST_READ32(iop);
+       if(test_and_set_bit(0,(void*)&dev->tbusy) != 0)
+       {
+               spin_unlock_irqrestore(&priv->lock, flags);
+               return 1;
+       }
+
+       m = I2O_POST_READ32(iop);
        if (m == 0xFFFFFFFF) {
+               spin_unlock_irqrestore(&priv->lock, flags);
                dev_kfree_skb(skb);
                return -ETIMEDOUT;
        }    
@@ -576,7 +532,14 @@ static int i2o_lan_packet_send(struct sk_buff *skb, struct net_device *dev)
        msg[5] = (u32)skb;                      // TransactionContext
        msg[6] = virt_to_bus(skb->data);
 
-        i2o_post_message(iop,m);
+       i2o_post_message(iop,m);
+
+       // Check to see if HDM queue is full..if so...stay busy
+       if(++priv->tx_count < priv->max_tx)
+               clear_bit(0, (void *)&dev->tbusy);
+
+       spin_unlock_irqrestore(&priv->lock, flags);
+               
        dprintk(KERN_INFO "%s: Packet (%d bytes) sent to network.\n",
                dev->name, skb->len);
 
@@ -593,7 +556,7 @@ static struct net_device_stats *i2o_lan_get_stats(struct net_device *dev)
 
         if (i2o_query_scalar(iop, i2o_dev->id, priv->unit << 16 | lan_context, 0x0100, -1, 
                         val64, sizeof(val64), &priv->reply_flag) < 0)
-               dprintk("%s: Unable to query LAN_HISTORICAL_STATS.\n",dev->name);
+               printk("%s: Unable to query LAN_HISTORICAL_STATS.\n",dev->name);
        else {
                dprintk("%s: LAN_HISTORICAL_STATS queried.\n",dev->name);
                priv->stats.tx_packets = val64[0];
@@ -605,13 +568,14 @@ static struct net_device_stats *i2o_lan_get_stats(struct net_device *dev)
                priv->stats.rx_dropped = val64[6];
        }
 
-        i2o_query_scalar(iop, i2o_dev->id, priv->unit << 16 | lan_context, 0x0180, -1, 
-                       &supported_group, sizeof(supported_group), &priv->reply_flag);
+        if (i2o_query_scalar(iop, i2o_dev->id, priv->unit << 16 | lan_context, 0x0180, -1, 
+                       &supported_group, sizeof(supported_group), &priv->reply_flag) < 0)
+               printk("%s: Unable to query LAN_SUPPORTED_OPTIONAL_HISTORICAL_STATS.\n",dev->name);
 
        if (supported_group[2]) {
                if (i2o_query_scalar(iop, i2o_dev->id, priv->unit << 16 | lan_context, 0x0183, -1, 
                        val64, sizeof(val64), &priv->reply_flag) < 0)
-                       dprintk("%s: Unable to query LAN_OPTIONAL_RX_HISTORICAL_STATS.\n",dev->name);
+                       printk("%s: Unable to query LAN_OPTIONAL_RX_HISTORICAL_STATS.\n",dev->name);
                else {
                        dprintk("%s: LAN_OPTIONAL_RX_HISTORICAL_STATS queried.\n",dev->name);
                        priv->stats.multicast        = val64[4];
@@ -626,9 +590,9 @@ static struct net_device_stats *i2o_lan_get_stats(struct net_device *dev)
 
                if (i2o_query_scalar(iop, i2o_dev->id, priv->unit << 16 | lan_context, 0x0200, -1, 
                                 val64, sizeof(val64), &priv->reply_flag) < 0)
-                       dprintk("%s: Unable to query LAN_802_3_HISTORICAL_STATS.\n",dev->name);
+                       printk("%s: Unable to query LAN_802_3_HISTORICAL_STATS.\n",dev->name);
                else {
-//                     dprintk("%s: LAN_802_3_HISTORICAL_STATS queried.\n",dev->name);
+                       dprintk("%s: LAN_802_3_HISTORICAL_STATS queried.\n",dev->name);
                        priv->stats.transmit_collision = val64[1] + val64[2];
                        priv->stats.rx_frame_errors    = val64[0];              
                        priv->stats.tx_carrier_errors  = val64[6];
@@ -636,12 +600,12 @@ static struct net_device_stats *i2o_lan_get_stats(struct net_device *dev)
 
                if (i2o_query_scalar(iop, i2o_dev->id, priv->unit << 16 | lan_context, 0x0280, -1, 
                                 &supported_stats, 8, &priv->reply_flag) < 0)
-                       dprintk("%s: Unable to query LAN_SUPPORTED_802_3_HISTORICAL_STATS\n", dev->name);
-        
+                       printk("%s: Unable to query LAN_SUPPORTED_802_3_HISTORICAL_STATS\n", dev->name);
+
                if (supported_stats != 0) {
                        if (i2o_query_scalar(iop, i2o_dev->id, priv->unit << 16 | lan_context, 0x0281, -1, 
                                         val64, sizeof(val64), &priv->reply_flag) < 0)
-                               dprintk("%s: Unable to query LAN_OPTIONAL_802_3_HISTORICAL_STATS.\n",dev->name);
+                               printk("%s: Unable to query LAN_OPTIONAL_802_3_HISTORICAL_STATS.\n",dev->name);
                        else {
                                dprintk("%s: LAN_OPTIONAL_802_3_HISTORICAL_STATS queried.\n",dev->name);
                                if (supported_stats & 0x1)
@@ -658,7 +622,7 @@ static struct net_device_stats *i2o_lan_get_stats(struct net_device *dev)
        {
                if (i2o_query_scalar(iop, i2o_dev->id, priv->unit << 16 | lan_context, 0x0300, -1, 
                                 val64, sizeof(val64), &priv->reply_flag) < 0)
-                       dprintk("%s: Unable to query LAN_802_5_HISTORICAL_STATS.\n",dev->name);
+                       printk("%s: Unable to query LAN_802_5_HISTORICAL_STATS.\n",dev->name);
                else {
                        struct tr_statistics *stats = 
                                        (struct tr_statistics *)&priv->stats;
@@ -684,7 +648,7 @@ static struct net_device_stats *i2o_lan_get_stats(struct net_device *dev)
        {
                if (i2o_query_scalar(iop, i2o_dev->id, priv->unit << 16 | lan_context, 0x0400, -1, 
                                 val64, sizeof(val64), &priv->reply_flag) < 0)
-                       dprintk("%s: Unable to query LAN_FDDI_HISTORICAL_STATS.\n",dev->name);
+                       printk("%s: Unable to query LAN_FDDI_HISTORICAL_STATS.\n",dev->name);
                else {
 //                     dprintk("%s: LAN_FDDI_HISTORICAL_STATS queried.\n",dev->name);
                        priv->stats.smt_cf_state = val64[0];
@@ -719,20 +683,6 @@ static void i2o_lan_set_multicast_list(struct net_device *dev)
 
        dprintk(KERN_INFO "%s: Entered i2o_lan_set_multicast_list().\n", dev->name);
 
-if (dev==NULL)
-        printk("dev is NULL\n");
-else if (dev->priv==NULL)
-        printk("dev->priv is NULL\n");
-else if (priv->i2o_dev==NULL)
-        printk("i2o_dev is NULL\n");
-else if (i2o_dev->controller==NULL)
-       printk("iop is NULL\n");
-else {
-       printk("Everything seems to be OK in i2o_lan_set_multicast_list().\n");
-        printk("id = %d, unit = %d, lan_context = %d\n",
-        i2o_dev->id, priv->unit, lan_context);
-}  
-
 return;
 
 /* FIXME: Why does the next call kill the interrupt handler?
@@ -810,6 +760,7 @@ struct net_device *i2o_lan_register_device(struct i2o_device *i2o_dev)
        struct net_device *dev = NULL;
        struct i2o_lan_local *priv = NULL;
        u8 hw_addr[8];
+       u32 max_tx = 0;
        unsigned short (*type_trans)(struct sk_buff *, struct net_device *);
        void (*unregister_dev)(struct net_device *dev);
 
@@ -893,12 +844,12 @@ struct net_device *i2o_lan_register_device(struct i2o_device *i2o_dev)
                        priv->unit << 16 | lan_context,
                        0x0001, 0, &hw_addr, 8, &priv->reply_flag) < 0)
        {
-               printk(KERN_ERR "%s: Unable to query hardware address.\n", dev->name);
+       printk(KERN_ERR "%s: Unable to query hardware address.\n", dev->name);
                unit--;
                unregister_dev(dev);
                kfree(dev);
                return NULL;  
-        }
+       }
 
        dprintk("%s: hwaddr = %02X:%02X:%02X:%02X:%02X:%02X\n",
                dev->name,hw_addr[0], hw_addr[1], hw_addr[2], hw_addr[3],
@@ -907,6 +858,22 @@ struct net_device *i2o_lan_register_device(struct i2o_device *i2o_dev)
        dev->addr_len = 6;
        memcpy(dev->dev_addr, hw_addr, 6);
 
+   if (i2o_query_scalar(i2o_dev->controller, i2o_dev->id,
+         priv->unit << 16 | lan_context,
+         0x0007, 2, &max_tx, 4, &priv->reply_flag) < 0)
+   {
+      printk(KERN_ERR "%s: Unable to query max TX queue.\n", dev->name);
+      unit--;
+      unregister_dev(dev);
+      kfree(dev);
+         return NULL;
+   }
+   printk(KERN_INFO "%s: Max TX Outstanding = %d\n", dev->name, max_tx);
+   priv->max_tx = max_tx;
+   priv->tx_count = 0;
+
+       priv->lock = SPIN_LOCK_UNLOCKED;
+
        dev->open               = i2o_lan_open;
        dev->stop               = i2o_lan_close;
        dev->hard_start_xmit    = i2o_lan_packet_send;
@@ -920,24 +887,21 @@ struct net_device *i2o_lan_register_device(struct i2o_device *i2o_dev)
 #define i2o_lan_init   init_module
 #endif
 
-__init int i2o_lan_init(void)
+int __init i2o_lan_init(void)
 {
        struct net_device *dev;
        int i;
 
-       bucketpost = bucketpost - bucketthresh;
-
        if (i2o_install_handler(&i2o_lan_handler) < 0)
        {
                printk(KERN_ERR "Unable to register I2O LAN OSM.\n");
                return -EINVAL;
        }   
-
+       lan_context = i2o_lan_handler.context;
+       
        for(i=0; i <= MAX_LAN_CARDS; i++)
                i2o_landevs[i] = NULL;
 
-       lan_context = i2o_lan_handler.context;
-
        for (i=0; i < MAX_I2O_CONTROLLERS; i++)
        {
                struct i2o_controller *iop = i2o_find_controller(i);
@@ -1026,7 +990,7 @@ EXPORT_NO_SYMBOLS;
 MODULE_AUTHOR("Univ of Helsinki, CS Department");
 MODULE_DESCRIPTION("I2O Lan OSM");
 
-MODULE_PARM(bucketpost, "i");           // Number of buckets to post
+MODULE_PARM(bucketpost, "i");   // Number of buckets to post
 MODULE_PARM(bucketthresh, "i"); // Bucket post threshold
 MODULE_PARM(rx_copybreak, "i");
 
index d54022a9389cb07e4db0575d961b476021cbf222..26efb34cfda6002dfa042732477e6ff4dd1f688a 100644 (file)
@@ -17,7 +17,7 @@
 
 /* Tunable parameters first */
 
-#define I2O_BUCKET_COUNT       64
+#define I2O_BUCKET_COUNT       256
 #define I2O_BUCKET_THRESH      16
 
 /* LAN types */
index 513e0bad55172a54ed2f89d7d6693ccc08ab2940..f7afa9a46b6e43eb0f1b1c3db8f2ccd5c2961c13 100644 (file)
@@ -340,7 +340,7 @@ MODULE_AUTHOR("Red Hat Software");
 MODULE_DESCRIPTION("I2O PCI Interface");
 
 #else
-__init void i2o_pci_init(void)
+void __init i2o_pci_init(void)
 {
        printk(KERN_INFO "Linux I2O PCI support (c) 1999 Red Hat Software.\n");
        if(i2o_pci_scan()>=0)
index 23232e8ef280727b1b7938e9b0939f774e7f8fd6..cbb29bc5b1ae12a8b181e537f45b2611ef9cb411 100644 (file)
@@ -1,7 +1,7 @@
 /*
  *   procfs handler for Linux I2O subsystem
  *
- *   Copyright (c) 1999 Intel Corporation
+ *   Copyright (c) 1999 Deepak Saxena
  *   
  *   Originally written by Deepak Saxena(deepak@plexity.net)
  *
@@ -314,48 +314,17 @@ int i2o_proc_read_hrt(char *buf, char **start, off_t offset, int len,
                      int *eof, void *data)
 {
        struct i2o_controller *c = (struct i2o_controller *)data;
-       pi2o_hrt hrt;
-       u32 msg[6];
-       u32 *workspace;
+       pi2o_hrt hrt = (pi2o_hrt)c->hrt;
        u32 bus;
        int count;
        int i;
-       int token;
 
        spin_lock(&i2o_proc_lock);
 
        len = 0;
 
-       workspace = kmalloc(2048, GFP_KERNEL);
-       hrt = (pi2o_hrt)workspace;
-       if(workspace==NULL)
-       {
-               len += sprintf(buf, "No free memory for HRT buffer\n");
-               spin_unlock(&i2o_proc_lock);
-               return len;
-       }
-
-       memset(workspace, 0, 2048);
-
-       msg[0]= SIX_WORD_MSG_SIZE| SGL_OFFSET_4;
-       msg[1]= I2O_CMD_HRT_GET<<24 | HOST_TID<<12 | ADAPTER_TID;
-       msg[2]= (u32)proc_context;
-       msg[3]= 0;
-       msg[4]= (0xD0000000 | 2048); 
-       msg[5]= virt_to_phys(workspace); 
-
-       token = i2o_post_wait(c, ADAPTER_TID, msg, 6*4, &i2o_proc_token,2);
-       if(token == I2O_POST_WAIT_TIMEOUT)
-       {
-               kfree(workspace);
-               len += sprintf(buf, "Timeout waiting for HRT\n");
-               spin_unlock(&i2o_proc_lock);
-               return len;
-       }
-
        if(hrt->hrt_version)
        {
-               kfree(workspace);
                len += sprintf(buf+len, 
                               "HRT table for controller is too new a version.\n");
                spin_unlock(&i2o_proc_lock);
@@ -366,7 +335,6 @@ int i2o_proc_read_hrt(char *buf, char **start, off_t offset, int len,
 
        if((count * hrt->entry_len + 8) > 2048) {
                printk(KERN_WARNING "i2o_proc: HRT does not fit into buffer\n");
-               kfree(workspace);
                len += sprintf(buf+len,
                               "HRT table too big to fit in buffer.\n");
                spin_unlock(&i2o_proc_lock);
@@ -448,8 +416,6 @@ int i2o_proc_read_hrt(char *buf, char **start, off_t offset, int len,
                        len += sprintf(buf+len, "   Unknown Bus Type\n");
        }
 
-       kfree(workspace);
-
        spin_unlock(&i2o_proc_lock);
        
        return len;
@@ -459,11 +425,8 @@ int i2o_proc_read_lct(char *buf, char **start, off_t offset, int len,
        int *eof, void *data)
 {
        struct i2o_controller *c = (struct i2o_controller*)data;
-       u32 msg[8];
-       u32 *workspace;
-       pi2o_lct lct; /* = (pi2o_lct)c->lct; */
+       pi2o_lct lct = (pi2o_lct)c->lct;
        int entries;
-       int token;
        int i;
 
 #define BUS_TABLE_SIZE 3
@@ -478,35 +441,6 @@ int i2o_proc_read_lct(char *buf, char **start, off_t offset, int len,
 
        len = 0;
 
-       workspace = kmalloc(8192, GFP_KERNEL);
-       lct = (pi2o_lct)workspace;
-       if(workspace==NULL)
-       {
-               len += sprintf(buf, "No free memory for LCT buffer\n");
-               spin_unlock(&i2o_proc_lock);
-               return len;
-       }
-
-       memset(workspace, 0, 8192);
-
-       msg[0] = FOUR_WORD_MSG_SIZE|SGL_OFFSET_6;
-       msg[1] = I2O_CMD_LCT_NOTIFY<<24 | HOST_TID<<12 | ADAPTER_TID;
-       msg[2] = (u32)proc_context;
-       msg[3] = 0;
-       msg[4] = 0xFFFFFFFF; /* All devices */
-       msg[5] = 0x00000000; /* Report now */
-       msg[6] = 0xD0000000|8192;
-       msg[7] = virt_to_bus(workspace);
-
-       token = i2o_post_wait(c, ADAPTER_TID, msg, 8*4, &i2o_proc_token,2);
-       if(token == I2O_POST_WAIT_TIMEOUT)
-       {
-               kfree(workspace);
-               len += sprintf(buf, "Timeout waiting for LCT\n");
-               spin_unlock(&i2o_proc_lock);
-               return len;
-       }
-
        entries = (lct->table_size - 3)/9;
 
        len += sprintf(buf, "LCT contains %d %s\n", entries,
@@ -618,7 +552,6 @@ int i2o_proc_read_lct(char *buf, char **start, off_t offset, int len,
                                lct->lct_entry[i].device_flags);
        }
 
-       kfree(workspace);
        spin_unlock(&i2o_proc_lock);
        
        return len;
@@ -986,8 +919,8 @@ int i2o_proc_read_ddm_table(char *buf, char **start, off_t offset, int len,
                        len += sprintf(buf+len, "                ");
                }
 
-               len += sprintf(buf+len, "%-0#7x", ddm_table.i2o_vendor_id);
-               len += sprintf(buf+len, "%-0#7x", ddm_table.module_id);
+               len += sprintf(buf+len, "%0#7x", ddm_table.i2o_vendor_id);
+               len += sprintf(buf+len, "%0#7x", ddm_table.module_id);
                len += sprintf(buf+len, "%-25s", chtostr(ddm_table.module_name, 24));
                len += sprintf(buf+len, "%-6s", chtostr(ddm_table.module_version,4));
                len += sprintf(buf+len, "%8d  ", ddm_table.data_size);
@@ -1123,8 +1056,8 @@ int i2o_proc_read_dst(char *buf, char **start, off_t offset, int len,
                        len += sprintf(buf+len, "%-d", dst.module_state);
 #endif
 
-               len += sprintf(buf+len, "%-0#7x", dst.i2o_vendor_id);
-               len += sprintf(buf+len, "%-0#8x", dst.module_id);
+               len += sprintf(buf+len, "%#7x", dst.i2o_vendor_id);
+               len += sprintf(buf+len, "%#8x", dst.module_id);
                len += sprintf(buf+len, "%-29s", chtostr(dst.module_name_version,28));
                len += sprintf(buf+len, "%-9s", chtostr(dst.date,8));
                len += sprintf(buf+len, "%8d ", dst.module_size);
@@ -1198,7 +1131,7 @@ int i2o_proc_read_groups(char *buf, char **start, off_t offset, int len,
        {
                len += sprintf(buf+len, "%-3d", i);
 
-               len += sprintf(buf+len, "%-0#6x ", group[0]);
+               len += sprintf(buf+len, "%#6x ", group[0]);
                len += sprintf(buf+len, "%10d ", group[1]);
                len += sprintf(buf+len, "%8d ", group[2]);
 
@@ -1928,8 +1861,8 @@ int i2o_proc_read_lan_dev_info(char *buf, char **start, off_t offset, int len,
                       work8[16],work8[17],work8[18],work8[19],
                       work8[20],work8[21],work8[22],work8[23]);
 
-       len += sprintf(buf+len, "Max Tx wire speed   : %d bps\n", work64[3]);
-       len += sprintf(buf+len, "Max Rx wire speed   : %d bps\n", work64[4]);
+       len += sprintf(buf+len, "Max Tx wire speed   : %d bps\n", (int)work64[3]);
+       len += sprintf(buf+len, "Max Rx wire speed   : %d bps\n", (int)work64[4]);
 
        len += sprintf(buf+len, "Min SDU packet size : 0x%08x\n", work32[10]);
        len += sprintf(buf+len, "Max SDU packet size : 0x%08x\n", work32[11]);
@@ -2232,8 +2165,8 @@ int i2o_proc_read_lan_media_operation(char *buf, char **start, off_t offset,
        len += sprintf(buf+len, "Connection type        : %s\n",
                       i2o_get_connection_type(work32[1]));
 
-       len += sprintf(buf+len, "Current Tx wire speed  : %d bps\n", work64[1]);
-       len += sprintf(buf+len, "Current Rx wire speed  : %d bps\n", work64[2]);
+       len += sprintf(buf+len, "Current Tx wire speed  : %d bps\n", (int)work64[1]);
+       len += sprintf(buf+len, "Current Rx wire speed  : %d bps\n", (int)work64[2]);
 
        len += sprintf(buf+len, "Duplex mode            : %s duplex\n", 
                        (work8[24]&1)?"Full":"Half");
@@ -3046,9 +2979,6 @@ static int destroy_i2o_procfs(void)
        struct i2o_controller *pctrl = NULL;
        int i;
 
-       if(!i2o_find_controller(0))
-               return -1;
-       
        for(i = 0; i < MAX_I2O_CONTROLLERS; i++)
        {
                pctrl = i2o_find_controller(i);
@@ -3057,7 +2987,7 @@ static int destroy_i2o_procfs(void)
                        i2o_proc_remove_controller(pctrl, i2o_proc_dir_root);
                        i2o_unlock_controller(pctrl);
                }
-       };
+       }
 
        if(!i2o_proc_dir_root->count)
                remove_proc_entry("i2o", 0);
@@ -3071,7 +3001,7 @@ static int destroy_i2o_procfs(void)
 #define i2o_proc_init init_module
 #endif
 
-__init int i2o_proc_init(void)
+int __init i2o_proc_init(void)
 {
        if(create_i2o_procfs())
                return -EBUSY;
index 1c3b6aa7f0a3500cd02affb3c063e8eb9825662b..9467c5e4559770062228f664ee71c9542a83a34a 100644 (file)
@@ -4,6 +4,10 @@
 mainmenu_option next_comment
 comment 'Misc devices'
 
+if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
+  tristate 'Generic ACPI support' CONFIG_ACPI
+fi
+
 # PIIX4 ACPI requires PCI for setup and a hardcoded TSC for timing
 if [ "$CONFIG_PCI" = "y" -a "$CONFIG_X86_TSC" = "y" -a "$CONFIG_EXPERIMENTAL" = "y" ]; then
   bool 'PIIX4 ACPI support' CONFIG_PIIX4_ACPI
index 98e68c96bff59895d2ee6f33bb72dbfec412f17c..8368614adf1c0cdb75fea31a3f14867edb958762 100644 (file)
@@ -18,6 +18,14 @@ M_OBJS   :=
 O_OBJS   :=
 OX_OBJS  :=
 
+ifeq ($(CONFIG_ACPI),y)
+  O_OBJS += acpi.o
+else
+  ifeq ($(CONFIG_ACPI),m)
+    M_OBJS += acpi.o
+  endif
+endif
+
 ifdef CONFIG_PIIX4_ACPI
 O_OBJS += piix4_acpi.o
 endif
diff --git a/drivers/misc/acpi.c b/drivers/misc/acpi.c
new file mode 100644 (file)
index 0000000..27137fa
--- /dev/null
@@ -0,0 +1,412 @@
+/*
+ *  acpi.c - Linux ACPI driver
+ *
+ *  Copyright (C) 1999 Andrew Henroid
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/miscdevice.h>
+#include <linux/sched.h>
+#include <linux/wait.h>
+#include <asm/uaccess.h>
+#include <asm/io.h>
+#include <linux/acpi.h>
+
+/*
+ * Defines for 2.2.x
+ */
+#ifndef __exit
+#define __exit
+#endif
+#ifndef module_init
+#define module_init(x) int init_module(void) {return x();}
+#endif
+#ifndef module_exit
+#define module_exit(x) void cleanup_module(void) {x();}
+#endif
+#ifndef DECLARE_WAIT_QUEUE_HEAD
+#define DECLARE_WAIT_QUEUE_HEAD(x) struct wait_queue * x = NULL
+#endif
+
+static struct acpi_facp *acpi_facp = NULL;
+static unsigned long acpi_facp_addr = 0;
+static unsigned long acpi_dsdt_addr = 0;
+static DECLARE_WAIT_QUEUE_HEAD(acpi_wait_event);
+
+/*
+ * Get the value of the fixed event status register
+ */
+static u32 acpi_read_pm1_status(struct acpi_facp *facp)
+{
+       u32 value = inw(facp->pm1a_evt);
+
+       if (facp->pm1b_evt) {
+               value |= inw(facp->pm1b_evt);
+       }
+       return value;
+}
+
+/*
+ * Set the value of the fixed event status register (clear events)
+ */
+static void acpi_write_pm1_status(struct acpi_facp *facp, u32 value)
+{
+       outw(value, facp->pm1a_evt);
+       if (facp->pm1b_evt) {
+               outw(value, facp->pm1b_evt);
+       }
+}
+
+/*
+ * Set the value of the fixed event enable register (enable events)
+ */
+static void acpi_write_pm1_enable(struct acpi_facp *facp, u32 value)
+{
+       int offset = facp->pm1_evt_len >> 1;
+
+       outw(value, facp->pm1a_evt + offset);
+       if (facp->pm1b_evt) {
+               outw(value, facp->pm1b_evt + offset);
+       }
+}
+
+/*
+ * Get the value of the general-purpose event status register
+ */
+static u32 acpi_read_gpe_status(struct acpi_facp *facp)
+{
+       u32 value = 0;
+       int i, size;
+
+       if (facp->gpe1) {
+               size = facp->gpe1_len >> 1;
+               for (i = size - 1; i >= 0; i--) {
+                       value = (value << 8) | inb(facp->gpe1 + i);
+               }
+       }
+       size = facp->gpe0_len >> 1;
+       for (i = size - 1; i >= 0; i--) {
+               value = (value << 8) | inb(facp->gpe0 + i);
+       }
+       return value;
+}
+
+/*
+ * Set the value of the general-purpose event status register (clear events)
+ */
+static void acpi_write_gpe_status(struct acpi_facp *facp, u32 value)
+{
+       int i, size;
+
+       size = facp->gpe0_len >> 1;
+       for (i = 0; i < size; i++) {
+               outb(value & 0xff, facp->gpe0 + i);
+               value >>= 8;
+       }
+       if (facp->gpe1) {
+               size = facp->gpe1_len >> 1;
+               for (i = 0; i < size; i++) {
+                       outb(value & 0xff, facp->gpe1 + i);
+                       value >>= 8;
+               }
+       }
+}
+
+/*
+ * Set the value of the general-purpose event enable register (enable events)
+ */
+static void acpi_write_gpe_enable(struct acpi_facp *facp, u32 value)
+{
+       int i, offset;
+
+       offset = facp->gpe0_len >> 1;
+       for (i = 0; i < offset; i++) {
+               outb(value & 0xff, facp->gpe0 + offset + i);
+               value >>= 8;
+       }
+       if (facp->gpe1) {
+               offset = facp->gpe1_len >> 1;
+               for (i = 0; i < offset; i++) {
+                       outb(value & 0xff, facp->gpe1 + offset + i);
+                       value >>= 8;
+               }
+       }
+}
+
+/*
+ * Map an ACPI table into virtual memory
+ */
+static struct acpi_table *__init acpi_map_table(u32 addr)
+{
+       struct acpi_table *table = NULL;
+       if (addr) {
+               // map table header to determine size
+               table = (struct acpi_table *)
+                   ioremap_nocache((unsigned long) addr, sizeof(struct acpi_table));
+               if (table) {
+                       unsigned long table_size = table->length;
+                       iounmap(table);
+                       // remap entire table
+                       table = (struct acpi_table *)
+                           ioremap_nocache((unsigned long) addr, table_size);
+               }
+       }
+       return table;
+}
+
+/*
+ * Unmap an ACPI table from virtual memory
+ */
+static void acpi_unmap_table(struct acpi_table *table)
+{
+       if (table) {
+               iounmap(table);
+       }
+}
+
+/*
+ * Locate and map ACPI tables (FACP, DSDT, ...)
+ */
+static int __init acpi_map_tables(void)
+{
+       struct acpi_rsdp *rsdp;
+       struct acpi_table *rsdt;
+       u32 *rsdt_entry;
+       int rsdt_entry_count;
+       u8 *i;
+
+       // search BIOS memory for RSDP
+       for (i = ACPI_BIOS_ROM_BASE; i < ACPI_BIOS_ROM_END; i += 16) {
+               rsdp = (struct acpi_rsdp *) i;
+               if (readl(rsdp->signature) == ACPI_RSDP1_SIG
+                   && readl(rsdp->signature + 1) == ACPI_RSDP2_SIG) {
+                       char oem[7];
+                       int j;
+
+                       // strip trailing space and print OEM identifier
+                       memcpy_fromio(oem, rsdp->oem, 6);
+                       oem[6] = '\0';
+                       for (j = 5; j > 0 && (oem[j] == '\0' || oem[j] == ' '); j--) {
+                               oem[j] = '\0';
+                       }
+                       printk(KERN_INFO "ACPI: \"%s\" found at 0x%p\n", oem, (void *) i);
+
+                       break;
+               }
+       }
+       if (i >= ACPI_BIOS_ROM_END) {
+               printk(KERN_ERR "ACPI: no RSDP found\n");
+               return -ENODEV;
+       }
+       // fetch RSDT from RSDP
+       rsdt = acpi_map_table(readl(&rsdp->rsdt));
+       if (!rsdt || rsdt->signature != ACPI_RSDT_SIG) {
+               printk(KERN_ERR "ACPI: no RSDT found\n");
+               acpi_unmap_table(rsdt);
+               return -ENODEV;
+       }
+       // search RSDT for FACP
+       acpi_facp = NULL;
+       rsdt_entry = (u32 *) (rsdt + 1);
+       rsdt_entry_count = (int) ((rsdt->length - sizeof(*rsdt)) >> 2);
+       while (rsdt_entry_count) {
+               struct acpi_table *dt = acpi_map_table(*rsdt_entry);
+               if (dt && dt->signature == ACPI_FACP_SIG) {
+                       acpi_facp = (struct acpi_facp *) dt;
+                       acpi_facp_addr = *rsdt_entry;
+                       acpi_dsdt_addr = acpi_facp->dsdt;
+                       break;
+               } else {
+                       acpi_unmap_table(dt);
+               }
+               rsdt_entry++;
+               rsdt_entry_count--;
+       }
+
+       acpi_unmap_table(rsdt);
+
+       if (!acpi_facp) {
+               printk(KERN_ERR "ACPI: no FACP found\n");
+               return -ENODEV;
+       }
+       return 0;
+}
+
+/*
+ * Unmap ACPI tables (FACP, DSDT, ...)
+ */
+static void acpi_unmap_tables(void)
+{
+       acpi_dsdt_addr = 0;
+       acpi_facp_addr = 0;
+       acpi_unmap_table((struct acpi_table *) acpi_facp);
+       acpi_facp = NULL;
+}
+
+/*
+ * Handle an ACPI SCI (fixed or general purpose event)
+ */
+static void acpi_irq(int irq, void *dev_id, struct pt_regs *regs)
+{
+       u32 status;
+
+       // detect and disable any fixed events
+       status = acpi_read_pm1_status(acpi_facp);
+       acpi_write_pm1_enable(acpi_facp, ~status);
+
+       // detect and disable any general-purpose events
+       status = acpi_read_gpe_status(acpi_facp);
+       acpi_write_gpe_enable(acpi_facp, ~status);
+
+       // notify process reading /dev/acpi
+       wake_up_interruptible(&acpi_wait_event);
+}
+
+/*
+ * Handle open of /dev/acpi
+ */
+static int acpi_open(struct inode *inode, struct file *file)
+{
+       MOD_INC_USE_COUNT;
+       return 0;
+}
+
+/*
+ * Handle close of /dev/acpi
+ */
+static int acpi_release(struct inode *inode, struct file *file)
+{
+       MOD_DEC_USE_COUNT;
+       return 0;
+}
+
+/*
+ * Handle command to /dev/acpi
+ */
+static int acpi_ioctl(struct inode *inode,
+                     struct file *file,
+                     unsigned cmd,
+                     unsigned long arg)
+{
+       int status = -EINVAL;
+
+       switch (cmd) {
+       case ACPI_FIND_TABLES:
+               status = verify_area(VERIFY_WRITE,
+                                    (void *) arg,
+                                    sizeof(struct acpi_find_tables));
+               if (!status) {
+                       struct acpi_find_tables *rqst = (struct acpi_find_tables *) arg;
+                       put_user(acpi_facp_addr, &rqst->facp);
+                       put_user(acpi_dsdt_addr, &rqst->dsdt);
+                       status = 0;
+               }
+               break;
+       case ACPI_WAIT_EVENT:
+               interruptible_sleep_on(&acpi_wait_event);
+               if (signal_pending(current))
+                       return -ERESTARTSYS;
+               status = 0;
+               break;
+       }
+       return status;
+}
+
+static struct file_operations acpi_fops =
+{
+       NULL,                   /* llseek */
+       NULL,                   /* read */
+       NULL,                   /* write */
+       NULL,                   /* readdir */
+       NULL,                   /* poll */
+       acpi_ioctl,             /* ioctl */
+       NULL,                   /* mmap */
+       acpi_open,              /* open */
+       NULL,                   /* flush */
+       acpi_release,           /* release */
+       NULL,                   /* fsync */
+       NULL,                   /* fasync */
+       NULL,                   /* check_media_change */
+       NULL,                   /* revalidate */
+       NULL,                   /* lock */
+};
+
+static struct miscdevice acpi_device =
+{
+       ACPI_MINOR_DEV,
+       "acpi",
+       &acpi_fops,
+       NULL,
+       NULL
+};
+
+/*
+ * Initialize and enable ACPI
+ */
+static int __init acpi_init(void)
+{
+       if (acpi_map_tables()) {
+               return -ENODEV;
+       }
+       if (request_irq(acpi_facp->sci_int,
+                       acpi_irq,
+                       SA_INTERRUPT | SA_SHIRQ,
+                       "acpi",
+                       NULL)) {
+               printk(KERN_ERR "ACPI: SCI (IRQ%d) allocation failed\n",
+                      acpi_facp->sci_int);
+               acpi_unmap_tables();
+               return -ENODEV;
+       }
+       if (misc_register(&acpi_device)) {
+               printk(KERN_ERR "ACPI: misc. register failed\n");
+       }
+       return 0;
+}
+
+/*
+ * Disable and deinitialize ACPI
+ */
+static void __exit acpi_exit(void)
+{
+       misc_deregister(&acpi_device);
+
+       // disable and clear any pending events
+       acpi_write_gpe_enable(acpi_facp, 0);
+       while (acpi_read_gpe_status(acpi_facp)) {
+               acpi_write_gpe_status(acpi_facp, acpi_read_gpe_status(acpi_facp));
+       }
+       acpi_write_pm1_enable(acpi_facp, 0);
+       acpi_write_pm1_status(acpi_facp, acpi_read_pm1_status(acpi_facp));
+
+       // disable SCI and free interrupt
+       outb(acpi_facp->acpi_disable, acpi_facp->smi_cmd);
+       free_irq(acpi_facp->sci_int, NULL);
+
+       acpi_unmap_tables();
+}
+
+#ifdef MODULE
+
+module_init(acpi_init)
+module_exit(acpi_exit)
+#else
+
+__initcall(acpi_init);
+
+#endif
index 60f9f3d091847db8d36424928bbd53774ca629f7..a6bbd842f064f5f5d1911d68998f2835ead63ee7 100644 (file)
@@ -226,9 +226,6 @@ int el3_probe(struct net_device *dev)
                                 * detected and is enabled
                                 */
 
-                               printk("3c509: found %s at slot %d\n",
-                                       el3_mca_adapters[j].name, slot + 1 );
-
                                pos4 = mca_read_stored_pos( slot, 4 );
                                pos5 = mca_read_stored_pos( slot, 5 );
 
@@ -242,6 +239,9 @@ int el3_probe(struct net_device *dev)
                                        continue;
                                }
 
+                               printk("3c509: found %s at slot %d\n",
+                                       el3_mca_adapters[j].name, slot + 1 );
+
                                /* claim the slot */
                                mca_set_adapter_name(slot, el3_mca_adapters[j].name);
                                mca_set_adapter_procfn(slot, NULL, NULL);
index d50c05c032f7dc3baff1bd074bcfcff57d04de91..f3e1839041ebbf2471f49acc5f096f06a8873a42 100644 (file)
@@ -103,11 +103,6 @@ static const char *version = "82596.c:v1.0 15/07/98\n";
 #define PORT_ALTSCP            0x02    /* alternate SCB address */
 #define PORT_ALTDUMP           0x03    /* Alternate DUMP address */
 
-#ifndef HAVE_PORTRESERVE
-#define check_region(addr, size)       0
-#define request_region(addr, size,name)        do ; while(0)
-#endif
-
 #ifndef HAVE_ALLOC_SKB
 #define alloc_skb(size, priority) (struct sk_buff *) kmalloc(size,priority)
 #define kfree_skbmem(buff, size) kfree_s(buff,size)
index 18f7a265ef185bb601947ed6b846c439cfced6ff..72a8de88df658fe74fa6e376fd81eea16afb8c67 100644 (file)
@@ -24,6 +24,7 @@
 
 #include <linux/config.h>
 #include <linux/module.h>
+#include <linux/version.h>
 #include <linux/types.h>
 #include <linux/errno.h>
 #include <linux/ioport.h>
@@ -572,7 +573,7 @@ static inline void ace_issue_cmd(struct ace_regs *regs, struct cmd *cmd)
 }
 
 
-static __init int ace_init(struct net_device *dev, int board_idx)
+static int __init ace_init(struct net_device *dev, int board_idx)
 {
        struct ace_private *ap;
        struct ace_regs *regs;
index 3cd214c64e05162674c582e7b957efabbc477b5d..83ac209e89460af31c21c38b64ca162f2ab7140b 100644 (file)
@@ -1,10 +1,11 @@
 #include <linux/config.h>
 #include "arlan.h"
 
+#include <linux/sysctl.h>
+
 #ifdef CONFIG_PROC_FS
 
 
-#include <linux/sysctl.h>
 #include <linux/version.h>
 
 /* void enableReceive(struct net_device* dev);
@@ -1001,6 +1002,12 @@ static ctl_table arlan_table[MAX_ARLANS + 1] =
        {0}
 };
 #endif
+#else
+
+static ctl_table arlan_table[MAX_ARLANS + 1] =
+{
+       {0}
+};
 #endif
 
 static int mmtu = 1234;
index 15ccecb2f27d34df3a49c4752048107a04f2a473..5ccad60a999ec7f18e98810c26d33bc482e28934 100644 (file)
@@ -98,7 +98,7 @@ static  int   arlan_hw_config                 (struct net_device * dev);
 static  void   arlan_tx_done_interrupt         (struct net_device * dev, int status);
 static  void   arlan_rx_interrupt              (struct net_device * dev, u_char rxStatus, u_short, u_short);
 static  void   arlan_process_interrupt         (struct net_device * dev);
-static  int    arlan_command(struct net_device * dev, int command);
+int    arlan_command(struct net_device * dev, int command);
 
 EXPORT_SYMBOL(arlan_command);
 
@@ -187,7 +187,7 @@ extern inline int arlan_drop_tx(struct net_device *dev)
 };
 
 
-static int arlan_command(struct net_device *dev, int command_p)
+int arlan_command(struct net_device *dev, int command_p)
 {
 
        volatile struct arlan_shmem *arlan = ((struct arlan_private *) dev->priv)->card;
index f0c0577f53edcb28062f052340e5d11372616231..45da372616b04e9baa87fff07705efd1c95bca97 100644 (file)
@@ -184,7 +184,7 @@ static int __init atp_probe1(struct net_device *dev, short ioaddr)
        /* IRQEN=0, SLCTB=high INITB=high, AUTOFDB=high, STBB=high. */
        outb(0x04, ioaddr + PAR_CONTROL);
        write_reg_high(ioaddr, CMR1, CMR1h_RESET);
-       eeprom_delay(2048);
+       udelay(100);
        status = read_nibble(ioaddr, CMR1);
 
        if ((status & 0x78) != 0x08) {
@@ -299,12 +299,12 @@ static unsigned short __init eeprom_op(short ioaddr, unsigned int cmd)
        while (--num_bits >= 0) {
                char outval = test_bit(num_bits, &cmd) ? EE_DATA_WRITE : 0;
                write_reg_high(ioaddr, PROM_CMD, outval | EE_CLK_LOW);
-               eeprom_delay(5);
+               udelay(5);
                write_reg_high(ioaddr, PROM_CMD, outval | EE_CLK_HIGH);
                eedata_out <<= 1;
                if (read_nibble(ioaddr, PROM_DATA) & EE_DATA_READ)
                        eedata_out++;
-               eeprom_delay(5);
+               udelay(5);
        }
        write_reg_high(ioaddr, PROM_CMD, EE_CLK_LOW & ~EE_CS);
        return eedata_out;
index 2a64697e999bef61526ee83b837f0076cd64f01b..8a74d44517cbfa9352519557979791141d7d0941 100644 (file)
@@ -261,10 +261,6 @@ extern inline void write_word_mode0(short ioaddr, unsigned short value)
 #define EE_DATA_WRITE  0x01    /* EEPROM chip data in. */
 #define EE_DATA_READ   0x08    /* EEPROM chip data out. */
 
-/* Delay between EEPROM clock transitions. */
-#define eeprom_delay(ticks) \
-do { int _i = 40; while (--_i > 0) { __SLOW_DOWN_IO; }} while (0)
-
 /* The EEPROM commands include the alway-set leading bit. */
 #define EE_WRITE_CMD(offset)   (((5 << 6) + (offset)) << 17)
 #define EE_READ(offset)        (((6 << 6) + (offset)) << 17)
index a40d2c1434fd028dc93a77252640220e250948d3..f3d3bcc01a50342a20de1216d17eb472ea87870f 100644 (file)
 #include <asm/page.h>
 #include <asm/pgtable.h>
 #include <asm/feature.h>
+#ifdef CONFIG_PMAC_PBOOK
+#include <linux/adb.h>
+#include <linux/pmu.h>
+#include <asm/irq.h>
+#endif
 #include "bmac.h"
 
 #define trunc_page(x)  ((void *)(((unsigned long)(x)) & ~((unsigned long)(PAGE_SIZE - 1))))
@@ -117,6 +122,13 @@ bmac_reg_entry_t reg_entries[N_REG_ENTRIES] = {
 struct net_device *bmac_devs = NULL;
 static int is_bmac_plus;
 
+#ifdef CONFIG_PMAC_PBOOK
+int bmac_sleep_notify(struct pmu_sleep_notifier *self, int when);
+static struct pmu_sleep_notifier bmac_sleep_notifier = {
+       bmac_sleep_notify, SLEEP_LEVEL_NET,
+};
+#endif
+
 #if 0
 /*
  * If we can't get a skbuff when we need it, we use this area for DMA.
@@ -244,7 +256,7 @@ bmac_reset_chip(struct net_device *dev)
        udelay(10000);
 }
 
-#define MIFDELAY       udelay(500)
+#define MIFDELAY       udelay(10)
 
 static unsigned int
 bmac_mif_readbits(struct net_device *dev, int nb)
@@ -427,8 +439,8 @@ bmac_start_chip(struct net_device *dev)
        udelay(20000);
 }
 
-static int
-bmac_init_chip(struct net_device *dev)
+static void
+bmac_init_phy(struct net_device *dev)
 {
        unsigned int addr;
 
@@ -451,10 +463,54 @@ bmac_init_chip(struct net_device *dev)
                } else
                        bmac_mif_write(dev, 0, 0x1000);
        }
+}
+
+static int
+bmac_init_chip(struct net_device *dev)
+{
+       bmac_init_phy(dev);
        bmac_init_registers(dev);
        return 1;
 }
 
+#ifdef CONFIG_PMAC_PBOOK
+int
+bmac_sleep_notify(struct pmu_sleep_notifier *self, int when)
+{
+       struct bmac_data *bp;
+
+       if (bmac_devs == 0)
+               return PBOOK_SLEEP_OK;
+               
+       bp = (struct bmac_data *) bmac_devs->priv;
+       
+       switch (when) {
+       case PBOOK_SLEEP_REQUEST:
+               break;
+       case PBOOK_SLEEP_REJECT:
+               break;
+       case PBOOK_SLEEP_NOW:
+               /* prolly should wait for dma to finish & turn off the chip */
+               disable_irq(bmac_devs->irq);
+               disable_irq(bp->tx_dma_intr);
+               disable_irq(bp->rx_dma_intr);
+               feature_set(bp->node, FEATURE_BMac_reset);
+               udelay(10000);
+               feature_clear(bp->node, FEATURE_BMac_IO_enable);
+               udelay(10000);
+               break;
+       case PBOOK_WAKE:
+               /* see if this is enough */
+               bmac_reset_and_enable(bmac_devs, 1);
+               enable_irq(bmac_devs->irq);
+               enable_irq(bp->tx_dma_intr);
+               enable_irq(bp->rx_dma_intr);
+               break;
+       }
+       return PBOOK_SLEEP_OK;
+}
+#endif
+
 static int bmac_set_address(struct net_device *dev, void *addr)
 {
        unsigned char *p = addr;
@@ -1220,7 +1276,12 @@ bmac_probe(struct net_device *dev)
        if (bmacs == NULL) return -ENODEV;
        next_bmac = bmacs->next;
 
-       bmac_devs = dev; /* KLUDGE!! */
+       if (bmac_devs == 0) {
+               bmac_devs = dev; /* KLUDGE!! */
+#ifdef CONFIG_PMAC_PBOOK
+               pmu_register_sleep_notifier(&bmac_sleep_notifier);
+#endif
+       }
 
        if (bmacs->n_addrs != 3 || bmacs->n_intrs != 3) {
                printk(KERN_ERR "can't use BMAC %s: expect 3 addrs and 3 intrs\n",
@@ -1556,15 +1617,24 @@ int init_module(void)
     res = bmac_probe(NULL);
     return res;
 }
+
 void cleanup_module(void)
 {
-    struct bmac_data *bp = (struct bmac_data *) bmac_devs->priv;
+    struct bmac_data *bp;
+
+    if (bmac_devs == 0)
+       return;
+
+    bp = (struct bmac_data *) bmac_devs->priv;
     unregister_netdev(bmac_devs);
 
     free_irq(bmac_devs->irq, bmac_misc_intr);
     free_irq(bp->tx_dma_intr, bmac_txdma_intr);
     free_irq(bp->rx_dma_intr, bmac_rxdma_intr);
 
+#ifdef CONFIG_PMAC_PBOOK
+    pmu_unregister_sleep_notifier(&bmac_sleep_notifier);
+#endif
     kfree(bmac_devs);
     bmac_devs = NULL;
 }
diff --git a/drivers/net/dmfe.c b/drivers/net/dmfe.c
new file mode 100644 (file)
index 0000000..81cb3ed
--- /dev/null
@@ -0,0 +1,1517 @@
+/*
+   dmfe.c: Version 1.26
+
+   A Davicom DM9102 fast ethernet driver for Linux. 
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, version 1.
+
+   Compiler command:
+   "gcc -DMODULE -D__KERNEL__ -I/usr/src/linux/net/inet -Wall 
+               -Wstrict-prototypes -O6 -c dmfe.c"
+
+   The following steps teach you how to active DM9102 board:
+   1. Used the upper compiler command to compile dmfe.c
+   2. insert dmfe module into kernel
+   "insmod dmfe"        ;;Auto Detection Mode
+   "insmod dmfe mode=0" ;;Force 10M Half Duplex
+   "insmod dmfe mode=1" ;;Force 100M Half Duplex
+   "insmod dmfe mode=4" ;;Force 10M Full Duplex
+   "insmod dmfe mode=5" ;;Force 100M Full Duplex
+   3. config a dm9102 network interface
+   "ifconfig eth0 172.22.3.18"
+   4. active the IP routing table
+   "route add -net 172.22.3.0 eth0"
+   5. Well done. Your DM9102 adapter actived now.
+
+   Author: Sten Wang, E-mail: sten_wang@davicom.com.tw
+
+   Date:   10/28,1998
+
+   (C)Copyright 1997-1998 DAVICOM Semiconductor, Inc. All Rights Reserved.
+
+   Marcelo Tosatti <marcelo@conectiva.com.br> : 
+   Made it compile in 2.3 (device to net_device)
+   
+   Alan Cox <alan@redhat.com> :
+   Removed the back compatibility support
+   Reformatted, fixing spelling etc as I went
+   Removed IRQ 0-15 assumption
+   
+   TODO
+   
+   Check and fix on 64bit and big endian boxes.
+   Sort out the PCI latency.
+   
+ */
+
+#include <linux/config.h>
+#include <linux/module.h>
+
+#include <linux/kernel.h>
+#include <linux/sched.h>
+#include <linux/string.h>
+#include <linux/timer.h>
+#include <linux/ptrace.h>
+#include <linux/errno.h>
+#include <linux/ioport.h>
+#include <linux/malloc.h>
+#include <linux/interrupt.h>
+#include <linux/pci.h>
+#include <linux/version.h>
+
+#include <linux/delay.h>
+#include <asm/processor.h>
+#include <asm/bitops.h>
+#include <asm/io.h>
+#include <asm/dma.h>
+
+#include <linux/netdevice.h>
+#include <linux/etherdevice.h>
+#include <linux/skbuff.h>
+
+
+/* Board/System/Debug information/definition ---------------- */
+#define PCI_DM9102_ID   0x91021282     /* Davicom DM9102 ID */
+#define PCI_DM9100_ID   0x91001282     /* Davicom DM9100 ID */
+
+#define DMFE_SUCC       0
+#define DM9102_IO_SIZE  0x80
+#define TX_FREE_DESC_CNT 0x1   /* Tx packet count */
+#define TX_DESC_CNT     0x10   /* Allocated Tx descriptors */
+#define RX_DESC_CNT     0x10   /* Allocated Rx descriptors */
+#define DESC_ALL_CNT    TX_DESC_CNT+RX_DESC_CNT
+#define TX_BUF_ALLOC    0x600
+#define RX_ALLOC_SIZE   0x620
+#define DM910X_RESET    1
+#define CR6_DEFAULT     0x002c0000     /* SF, MII, HD */
+#define CR7_DEFAULT     0x1a2cd
+#define CR15_DEFAULT    0x06   /* TxJabber RxWatchdog */
+#define TDES0_ERR_MASK  0x4302 /* TXJT, LC, EC, FUE */
+#define MAX_PACKET_SIZE 1514
+#define DMFE_MAX_MULTICAST 14
+#define RX_MAX_TRAFFIC 0x5000
+#define MAX_CHECK_PACKET 0x8000
+
+#define DMFE_10MHF      0
+#define DMFE_100MHF     1
+#define DMFE_10MFD      4
+#define DMFE_100MFD     5
+#define DMFE_AUTO       8
+
+#define DMFE_TIMER_WUT  jiffies+HZ*1   /* timer wakeup time : 1 second */
+#define DMFE_TX_TIMEOUT HZ*2   /* tx packet time-out time */
+
+#define DMFE_DBUG(dbug_now, msg, vaule) if (dmfe_debug || dbug_now) printk("DBUG: %s %x\n", msg, vaule)
+
+#define DELAY_5US udelay(5)    /* udelay scale 1 usec */
+
+#define DELAY_1US udelay(1)    /* udelay scale 1 usec */
+
+#define SHOW_MEDIA_TYPE(mode) printk("\n<WARN> Change Speed to %sMhz %s duplex\n",mode & 1 ?"100":"10", mode & 4 ? "full":"half");
+
+
+/* CR9 definition: SROM/MII */
+#define CR9_SROM_READ   0x4800
+#define CR9_SRCS        0x1
+#define CR9_SRCLK       0x2
+#define CR9_CRDOUT      0x8
+#define SROM_DATA_0     0x0
+#define SROM_DATA_1     0x4
+#define PHY_DATA_1      0x20000
+#define PHY_DATA_0      0x00000
+#define MDCLKH          0x10000
+
+#define SROM_CLK_WRITE(data, ioaddr) outl(data|CR9_SROM_READ|CR9_SRCS,ioaddr);DELAY_5US;outl(data|CR9_SROM_READ|CR9_SRCS|CR9_SRCLK,ioaddr);DELAY_5US;outl(data|CR9_SROM_READ|CR9_SRCS,ioaddr);DELAY_5US;
+
+/* Structure/enum declaration ------------------------------- */
+struct tx_desc {
+       u32 tdes0, tdes1, tdes2, tdes3;
+       u32 tx_skb_ptr;
+       u32 tx_buf_ptr;
+       u32 next_tx_desc;
+       u32 reserved;
+};
+
+struct rx_desc {
+       u32 rdes0, rdes1, rdes2, rdes3;
+       u32 rx_skb_ptr;
+       u32 rx_buf_ptr;
+       u32 next_rx_desc;
+       u32 reserved;
+};
+
+struct dmfe_board_info {
+       u32 chip_id;            /* Chip vendor/Device ID */
+       u32 chip_revesion;      /* Chip revesion */
+       struct net_device *next_dev;    /* next device */
+
+       struct pci_dev *net_dev;        /* PCI device */
+
+       u32 ioaddr;             /* I/O base address */
+       u32 cr5_data;
+       u32 cr6_data;
+       u32 cr7_data;
+       u32 cr15_data;
+
+/* descriptor pointer */
+       unsigned char *buf_pool_ptr;    /* Tx buffer pool memory */
+       unsigned char *buf_pool_start;  /* Tx buffer pool align dword */
+       unsigned char *desc_pool_ptr;   /* descriptor pool memory */
+       struct tx_desc *first_tx_desc;
+       struct tx_desc *tx_insert_ptr;
+       struct tx_desc *tx_remove_ptr;
+       struct rx_desc *first_rx_desc;
+       struct rx_desc *rx_insert_ptr;
+       struct rx_desc *rx_ready_ptr;   /* packet come pointer */
+       u32 tx_packet_cnt;      /* transmitted packet count */
+       u32 rx_avail_cnt;       /* available rx descriptor count */
+       u32 interval_rx_cnt;    /* rx packet count a callback time */
+
+       u8 media_mode;          /* user specify media mode */
+       u8 op_mode;             /* real work media mode */
+       u8 phy_addr;
+       u8 link_failed;         /* Ever link failed */
+       u8 wait_reset;          /* Hardware failed, need to reset */
+       u8 in_reset_state;      /* Now driver in reset routine */
+       u8 rx_error_cnt;        /* recievd abnormal case count */
+       u8 dm910x_chk_mode;     /* Operating mode check */
+       struct timer_list timer;
+       struct enet_statistics stats;   /* statistic counter */
+       unsigned char srom[128];
+};
+
+enum dmfe_offsets {
+       DCR0 = 0, DCR1 = 0x08, DCR2 = 0x10, DCR3 = 0x18, DCR4 = 0x20, DCR5 = 0x28,
+       DCR6 = 0x30, DCR7 = 0x38, DCR8 = 0x40, DCR9 = 0x48, DCR10 = 0x50, DCR11 = 0x58,
+       DCR12 = 0x60, DCR13 = 0x68, DCR14 = 0x70, DCR15 = 0x78
+};
+
+enum dmfe_CR6_bits {
+       CR6_RXSC = 0x2, CR6_PBF = 0x8, CR6_PM = 0x40, CR6_PAM = 0x80, CR6_FDM = 0x200,
+       CR6_TXSC = 0x2000, CR6_STI = 0x100000, CR6_SFT = 0x200000, CR6_RXA = 0x40000000
+};
+
+/* Global variable declaration ----------------------------- */
+
+static int dmfe_debug = 0;
+static unsigned char dmfe_media_mode = 8;
+static struct net_device *dmfe_root_dev = NULL;                /* First device */
+static u32 dmfe_cr6_user_set = 0;
+
+/* For module input parameter */
+static int debug = 0;
+static u32 cr6set = 0;
+static unsigned char mode = 8;
+static u8 chkmode = 1;
+
+unsigned long CrcTable[256] =
+{
+       0x00000000L, 0x77073096L, 0xEE0E612CL, 0x990951BAL,
+       0x076DC419L, 0x706AF48FL, 0xE963A535L, 0x9E6495A3L,
+       0x0EDB8832L, 0x79DCB8A4L, 0xE0D5E91EL, 0x97D2D988L,
+       0x09B64C2BL, 0x7EB17CBDL, 0xE7B82D07L, 0x90BF1D91L,
+       0x1DB71064L, 0x6AB020F2L, 0xF3B97148L, 0x84BE41DEL,
+       0x1ADAD47DL, 0x6DDDE4EBL, 0xF4D4B551L, 0x83D385C7L,
+       0x136C9856L, 0x646BA8C0L, 0xFD62F97AL, 0x8A65C9ECL,
+       0x14015C4FL, 0x63066CD9L, 0xFA0F3D63L, 0x8D080DF5L,
+       0x3B6E20C8L, 0x4C69105EL, 0xD56041E4L, 0xA2677172L,
+       0x3C03E4D1L, 0x4B04D447L, 0xD20D85FDL, 0xA50AB56BL,
+       0x35B5A8FAL, 0x42B2986CL, 0xDBBBC9D6L, 0xACBCF940L,
+       0x32D86CE3L, 0x45DF5C75L, 0xDCD60DCFL, 0xABD13D59L,
+       0x26D930ACL, 0x51DE003AL, 0xC8D75180L, 0xBFD06116L,
+       0x21B4F4B5L, 0x56B3C423L, 0xCFBA9599L, 0xB8BDA50FL,
+       0x2802B89EL, 0x5F058808L, 0xC60CD9B2L, 0xB10BE924L,
+       0x2F6F7C87L, 0x58684C11L, 0xC1611DABL, 0xB6662D3DL,
+       0x76DC4190L, 0x01DB7106L, 0x98D220BCL, 0xEFD5102AL,
+       0x71B18589L, 0x06B6B51FL, 0x9FBFE4A5L, 0xE8B8D433L,
+       0x7807C9A2L, 0x0F00F934L, 0x9609A88EL, 0xE10E9818L,
+       0x7F6A0DBBL, 0x086D3D2DL, 0x91646C97L, 0xE6635C01L,
+       0x6B6B51F4L, 0x1C6C6162L, 0x856530D8L, 0xF262004EL,
+       0x6C0695EDL, 0x1B01A57BL, 0x8208F4C1L, 0xF50FC457L,
+       0x65B0D9C6L, 0x12B7E950L, 0x8BBEB8EAL, 0xFCB9887CL,
+       0x62DD1DDFL, 0x15DA2D49L, 0x8CD37CF3L, 0xFBD44C65L,
+       0x4DB26158L, 0x3AB551CEL, 0xA3BC0074L, 0xD4BB30E2L,
+       0x4ADFA541L, 0x3DD895D7L, 0xA4D1C46DL, 0xD3D6F4FBL,
+       0x4369E96AL, 0x346ED9FCL, 0xAD678846L, 0xDA60B8D0L,
+       0x44042D73L, 0x33031DE5L, 0xAA0A4C5FL, 0xDD0D7CC9L,
+       0x5005713CL, 0x270241AAL, 0xBE0B1010L, 0xC90C2086L,
+       0x5768B525L, 0x206F85B3L, 0xB966D409L, 0xCE61E49FL,
+       0x5EDEF90EL, 0x29D9C998L, 0xB0D09822L, 0xC7D7A8B4L,
+       0x59B33D17L, 0x2EB40D81L, 0xB7BD5C3BL, 0xC0BA6CADL,
+       0xEDB88320L, 0x9ABFB3B6L, 0x03B6E20CL, 0x74B1D29AL,
+       0xEAD54739L, 0x9DD277AFL, 0x04DB2615L, 0x73DC1683L,
+       0xE3630B12L, 0x94643B84L, 0x0D6D6A3EL, 0x7A6A5AA8L,
+       0xE40ECF0BL, 0x9309FF9DL, 0x0A00AE27L, 0x7D079EB1L,
+       0xF00F9344L, 0x8708A3D2L, 0x1E01F268L, 0x6906C2FEL,
+       0xF762575DL, 0x806567CBL, 0x196C3671L, 0x6E6B06E7L,
+       0xFED41B76L, 0x89D32BE0L, 0x10DA7A5AL, 0x67DD4ACCL,
+       0xF9B9DF6FL, 0x8EBEEFF9L, 0x17B7BE43L, 0x60B08ED5L,
+       0xD6D6A3E8L, 0xA1D1937EL, 0x38D8C2C4L, 0x4FDFF252L,
+       0xD1BB67F1L, 0xA6BC5767L, 0x3FB506DDL, 0x48B2364BL,
+       0xD80D2BDAL, 0xAF0A1B4CL, 0x36034AF6L, 0x41047A60L,
+       0xDF60EFC3L, 0xA867DF55L, 0x316E8EEFL, 0x4669BE79L,
+       0xCB61B38CL, 0xBC66831AL, 0x256FD2A0L, 0x5268E236L,
+       0xCC0C7795L, 0xBB0B4703L, 0x220216B9L, 0x5505262FL,
+       0xC5BA3BBEL, 0xB2BD0B28L, 0x2BB45A92L, 0x5CB36A04L,
+       0xC2D7FFA7L, 0xB5D0CF31L, 0x2CD99E8BL, 0x5BDEAE1DL,
+       0x9B64C2B0L, 0xEC63F226L, 0x756AA39CL, 0x026D930AL,
+       0x9C0906A9L, 0xEB0E363FL, 0x72076785L, 0x05005713L,
+       0x95BF4A82L, 0xE2B87A14L, 0x7BB12BAEL, 0x0CB61B38L,
+       0x92D28E9BL, 0xE5D5BE0DL, 0x7CDCEFB7L, 0x0BDBDF21L,
+       0x86D3D2D4L, 0xF1D4E242L, 0x68DDB3F8L, 0x1FDA836EL,
+       0x81BE16CDL, 0xF6B9265BL, 0x6FB077E1L, 0x18B74777L,
+       0x88085AE6L, 0xFF0F6A70L, 0x66063BCAL, 0x11010B5CL,
+       0x8F659EFFL, 0xF862AE69L, 0x616BFFD3L, 0x166CCF45L,
+       0xA00AE278L, 0xD70DD2EEL, 0x4E048354L, 0x3903B3C2L,
+       0xA7672661L, 0xD06016F7L, 0x4969474DL, 0x3E6E77DBL,
+       0xAED16A4AL, 0xD9D65ADCL, 0x40DF0B66L, 0x37D83BF0L,
+       0xA9BCAE53L, 0xDEBB9EC5L, 0x47B2CF7FL, 0x30B5FFE9L,
+       0xBDBDF21CL, 0xCABAC28AL, 0x53B39330L, 0x24B4A3A6L,
+       0xBAD03605L, 0xCDD70693L, 0x54DE5729L, 0x23D967BFL,
+       0xB3667A2EL, 0xC4614AB8L, 0x5D681B02L, 0x2A6F2B94L,
+       0xB40BBE37L, 0xC30C8EA1L, 0x5A05DF1BL, 0x2D02EF8DL
+};
+
+/* function declaration ------------------------------------- */
+int dmfe_reg_board(struct net_device *);
+static int dmfe_open(struct net_device *);
+static int dmfe_start_xmit(struct sk_buff *, struct net_device *);
+static int dmfe_stop(struct net_device *);
+static struct enet_statistics *dmfe_get_stats(struct net_device *);
+static void dmfe_set_filter_mode(struct net_device *);
+static int dmfe_do_ioctl(struct net_device *, struct ifreq *, int);
+static u16 read_srom_word(long, int);
+static void dmfe_interrupt(int, void *, struct pt_regs *);
+static void dmfe_descriptor_init(struct dmfe_board_info *, u32);
+static void allocated_rx_buffer(struct dmfe_board_info *);
+static void update_cr6(u32, u32);
+static void send_filter_frame(struct net_device *, int);
+static u16 phy_read(u32, u8, u8);
+static void phy_write(u32, u8, u8, u16);
+static void phy_write_1bit(u32, u32);
+static u16 phy_read_1bit(u32);
+static void parser_ctrl_info(struct dmfe_board_info *);
+static void dmfe_sense_speed(struct dmfe_board_info *);
+static void dmfe_process_mode(struct dmfe_board_info *);
+static void dmfe_timer(unsigned long);
+static void dmfe_rx_packet(struct net_device *, struct dmfe_board_info *);
+static void dmfe_reused_skb(struct dmfe_board_info *, struct sk_buff *);
+static void dmfe_dynamic_reset(struct net_device *);
+static void dmfe_free_rxbuffer(struct dmfe_board_info *);
+static void dmfe_init_dm910x(struct net_device *);
+static unsigned long cal_CRC(unsigned char *, unsigned int);
+
+/* DM910X network board routine ---------------------------- */
+
+/*
+ *     Search DM910X board, allocate space and register it
+ */
+int dmfe_reg_board(struct net_device *dev)
+{
+       u32 pci_iobase;
+       u16 dm9102_count = 0;
+       u8 pci_irqline;
+       static int index = 0;   /* For multiple call */
+       struct dmfe_board_info *db;     /* Point a board information structure */
+       int i;
+       struct pci_dev *net_dev = NULL;
+
+       DMFE_DBUG(0, "dmfe_reg_board()", 0);
+
+       if (!pci_present())
+               return -ENODEV;
+
+       index = 0;
+       while ((net_dev = pci_find_class(PCI_CLASS_NETWORK_ETHERNET << 8, net_dev)))
+       {
+               u32 pci_id;
+               u8 pci_cmd;
+
+               index++;
+               if (pci_read_config_dword(net_dev, PCI_VENDOR_ID, &pci_id) != DMFE_SUCC)
+                       continue;
+
+               if (pci_id != PCI_DM9102_ID)
+                       continue;
+
+               pci_iobase = net_dev->resource[0].start;
+               pci_irqline = net_dev->irq;
+                               
+               /* Enable Master/IO access, Disable memory access */
+               
+               pci_set_master(net_dev);
+               
+               pci_read_config_byte(net_dev, PCI_COMMAND, &pci_cmd);
+               pci_cmd |= PCI_COMMAND_IO;
+               pci_cmd &= ~PCI_COMMAND_MEMORY;
+               pci_write_config_byte(net_dev, PCI_COMMAND, pci_cmd);
+
+               /* Set Latency Timer 80h */
+               
+               /* FIXME: setting values > 32 breaks some SiS 559x stuff.
+                  Need a PCI quirk.. */
+                  
+               pci_write_config_byte(net_dev, PCI_LATENCY_TIMER, 0x80);
+
+               /* IO range and interrupt check */
+
+               if (check_region(pci_iobase, DM9102_IO_SIZE))   /* IO range check */
+                       continue;
+
+               /* Found DM9102 card and PCI resource allocated OK */
+               dm9102_count++; /* Found a DM9102 card */
+
+               /* Init network device */
+               dev = init_etherdev(dev, 0);
+
+               /* Allocated board information structure */
+               db = (void *) (kmalloc(sizeof(*db), GFP_KERNEL | GFP_DMA));
+               if(db==NULL)
+                       continue;       /* Out of memory */
+                       
+               memset(db, 0, sizeof(*db));
+               dev->priv = db; /* link device and board info */
+               db->next_dev = dmfe_root_dev;
+               dmfe_root_dev = dev;
+
+               db->chip_id = pci_id;   /* keep Chip vandor/Device ID */
+               db->ioaddr = pci_iobase;
+               pci_read_config_dword(net_dev, 8, &db->chip_revesion);
+
+               db->net_dev = net_dev;
+
+               dev->base_addr = pci_iobase;
+               dev->irq = pci_irqline;
+               dev->open = &dmfe_open;
+               dev->hard_start_xmit = &dmfe_start_xmit;
+               dev->stop = &dmfe_stop;
+               dev->get_stats = &dmfe_get_stats;
+               dev->set_multicast_list = &dmfe_set_filter_mode;
+               dev->do_ioctl = &dmfe_do_ioctl;
+
+               request_region(pci_iobase, DM9102_IO_SIZE, dev->name);
+
+               /* read 64 word srom data */
+               for (i = 0; i < 64; i++)
+                       ((u16 *) db->srom)[i] = read_srom_word(pci_iobase, i);
+
+               /* Set Node address */
+               for (i = 0; i < 6; i++)
+                       dev->dev_addr[i] = db->srom[20 + i];
+
+               dev = 0;        /* NULL device */
+       }
+
+#ifdef MODULE
+       if (!dm9102_count)
+               printk(KERN_WARNING "dmfe: Can't find DM910X board\n");
+#endif         
+       return dm9102_count ? 0 : -ENODEV;
+}
+
+/*
+ *     Open the interface.
+ *     The interface is opened whenever "ifconfig" actives it.
+ */
+static int dmfe_open(struct net_device *dev)
+{
+       struct dmfe_board_info *db = dev->priv;
+
+       DMFE_DBUG(0, "dmfe_open", 0);
+
+       if (request_irq(dev->irq, &dmfe_interrupt, SA_SHIRQ, dev->name, dev))
+               return -EAGAIN;
+
+       /* Allocated Tx/Rx descriptor memory */
+       db->desc_pool_ptr = kmalloc(sizeof(struct tx_desc) * DESC_ALL_CNT + 0x20, GFP_KERNEL | GFP_DMA);
+       if (db->desc_pool_ptr == NULL)
+               return -ENOMEM;
+
+       if ((u32) db->desc_pool_ptr & 0x1f)
+               db->first_tx_desc = (struct tx_desc *) (((u32) db->desc_pool_ptr & ~0x1f) + 0x20);
+       else
+               db->first_tx_desc = (struct tx_desc *) db->desc_pool_ptr;
+
+       /* Allocated Tx buffer memory */
+       
+       db->buf_pool_ptr = kmalloc(TX_BUF_ALLOC * TX_DESC_CNT + 4, GFP_KERNEL | GFP_DMA);
+       if (db->buf_pool_ptr == NULL) {
+               kfree(db->desc_pool_ptr);
+               return -ENOMEM;
+       }
+       
+       if ((u32) db->buf_pool_ptr & 0x3)
+               db->buf_pool_start = (char *) (((u32) db->buf_pool_ptr & ~0x3) + 0x4);
+       else
+               db->buf_pool_start = db->buf_pool_ptr;
+
+       /* system variable init */
+       db->cr6_data = CR6_DEFAULT | dmfe_cr6_user_set;
+       db->tx_packet_cnt = 0;
+       db->rx_avail_cnt = 0;
+       db->link_failed = 0;
+       db->wait_reset = 0;
+       db->in_reset_state = 0;
+       db->rx_error_cnt = 0;
+
+       if (chkmode && (db->chip_revesion < 0x02000030)) {
+               db->dm910x_chk_mode = 1;        /* Enter the check mode */
+       } else {
+               db->dm910x_chk_mode = 4;        /* Enter the normal mode */
+       }
+
+       /* Initilize DM910X board */
+       dmfe_init_dm910x(dev);
+
+       /* Active System Interface */
+       dev->tbusy = 0;         /* Can transmit packet */
+       dev->start = 1;         /* interface ready */
+       MOD_INC_USE_COUNT;
+
+       /* set and active a timer process */
+       init_timer(&db->timer);
+       db->timer.expires = DMFE_TIMER_WUT;
+       db->timer.data = (unsigned long) dev;
+       db->timer.function = &dmfe_timer;
+       add_timer(&db->timer);
+
+       return 0;
+}
+
+/*
+ *     Initialize DM910X board
+ *     Reset DM910X board
+ *     Initialize TX/Rx descriptor chain structure
+ *     Send the set-up frame
+ *     Enable Tx/Rx machine
+ */
+static void dmfe_init_dm910x(struct net_device *dev)
+{
+       struct dmfe_board_info *db = dev->priv;
+       u32 ioaddr = db->ioaddr;
+
+       DMFE_DBUG(0, "dmfe_init_dm910x()", 0);
+
+       /* Reset DM910x board : need 32 PCI clock to complete */
+       outl(DM910X_RESET, ioaddr + DCR0);
+       DELAY_5US;
+       outl(0, ioaddr + DCR0);
+
+       outl(0x180, ioaddr + DCR12);    /* Let bit 7 output port */
+       outl(0x80, ioaddr + DCR12);     /* Reset DM9102 phyxcer */
+       outl(0x0, ioaddr + DCR12);      /* Clear RESET signal */
+
+       /* Parser control information: Phy addr */
+       parser_ctrl_info(db);
+       db->media_mode = dmfe_media_mode;
+       if (db->media_mode & DMFE_AUTO)
+               dmfe_sense_speed(db);
+       else
+               db->op_mode = db->media_mode;
+       dmfe_process_mode(db);
+
+       /* Initiliaze Transmit/Receive decriptor and CR3/4 */
+       dmfe_descriptor_init(db, ioaddr);
+
+       /* Init CR6 to program DM910x operation */
+       update_cr6(db->cr6_data, ioaddr);
+
+       /* Send setup frame */
+       send_filter_frame(dev, 0);
+
+       /* Init CR5/CR7, interrupt active bit */
+       outl(0xffffffff, ioaddr + DCR5);        /* clear all CR5 status */
+       db->cr7_data = CR7_DEFAULT;
+       outl(db->cr7_data, ioaddr + DCR7);
+
+       /* Init CR15, Tx jabber and Rx watchdog timer */
+       db->cr15_data = CR15_DEFAULT;
+       outl(db->cr15_data, ioaddr + DCR15);
+
+       /* Enable DM910X Tx/Rx function */
+       db->cr6_data |= CR6_RXSC | CR6_TXSC;
+       update_cr6(db->cr6_data, ioaddr);
+
+}
+
+
+/*
+ *     Hardware start transmission.
+ *     Send a packet to media from the upper layer.
+ */
+static int dmfe_start_xmit(struct sk_buff *skb, struct net_device *dev)
+{
+       struct dmfe_board_info *db = dev->priv;
+       struct tx_desc *txptr;
+
+       DMFE_DBUG(0, "dmfe_start_xmit", 0);
+
+       if ((dev->tbusy == 1) && (db->tx_packet_cnt != 0))
+               return 1;
+       else
+               dev->tbusy = 0;
+
+       /* Too large packet check */
+       if (skb->len > MAX_PACKET_SIZE) {
+               printk(KERN_ERR "%s: oversized frame (%d bytes) received.\n", dev->name, (u16) skb->len);
+               dev_kfree_skb(skb);
+               return 0;
+       }
+       /* No Tx resource check, it never happen nromally */
+       if (db->tx_packet_cnt >= TX_FREE_DESC_CNT) {
+               printk(KERN_WARNING "%s: No Tx resource, enter xmit() again \n", dev->name);
+               dev_kfree_skb(skb);
+               dev->tbusy = 1;
+               return -EBUSY;
+       }
+
+       /* transmit this packet */
+       txptr = db->tx_insert_ptr;
+       memcpy((char *) txptr->tx_buf_ptr, (char *) skb->data, skb->len);
+       txptr->tdes1 = 0xe1000000 | skb->len;
+       txptr->tdes0 = 0x80000000;      /* set owner bit to DM910X */
+
+       /* Point to next transmit free descriptor */
+       db->tx_insert_ptr = (struct tx_desc *) txptr->next_tx_desc;
+
+       /* transmit counter increase 1 */
+       db->tx_packet_cnt++;
+       db->stats.tx_packets++;
+
+       /* issue Tx polling command */
+       outl(0x1, dev->base_addr + DCR1);
+
+       /* Tx resource check */
+       if (db->tx_packet_cnt >= TX_FREE_DESC_CNT)
+               dev->tbusy = 1;
+
+       /* Set transmit time stamp */
+       dev->trans_start = jiffies;     /* saved the time stamp */
+
+       /* free this SKB */
+       dev_kfree_skb(skb);
+       return 0;
+}
+
+/*
+ *     Stop the interface.
+ *     The interface is stopped when it is brought.
+ */
+
+static int dmfe_stop(struct net_device *dev)
+{
+       struct dmfe_board_info *db = dev->priv;
+       u32 ioaddr = dev->base_addr;
+
+       DMFE_DBUG(0, "dmfe_stop", 0);
+
+       /* disable system */
+       dev->start = 0;         /* interface disable */
+       dev->tbusy = 1;         /* can't transmit */
+
+       /* Reset & stop DM910X board */
+       outl(DM910X_RESET, ioaddr + DCR0);
+       DELAY_5US;
+
+       /* deleted timer */
+       del_timer(&db->timer);
+
+       /* free interrupt */
+       free_irq(dev->irq, dev);
+
+       /* free allocated rx buffer */
+       dmfe_free_rxbuffer(db);
+
+       /* free all descriptor memory and buffer memory */
+       kfree(db->desc_pool_ptr);
+       kfree(db->buf_pool_ptr);
+
+       MOD_DEC_USE_COUNT;
+
+       return 0;
+}
+
+/*
+ *     DM9102 insterrupt handler
+ *     receive the packet to upper layer, free the transmitted packet
+ */
+
+static void dmfe_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+{
+       struct net_device *dev = dev_id;
+       struct tx_desc *txptr;
+       struct dmfe_board_info *db;
+       u32 ioaddr;
+
+       if (!dev) {
+               DMFE_DBUG(1, "dmfe_interrupt() without device arg", 0);
+               return;
+       }
+       if (dev->interrupt) {
+               DMFE_DBUG(1, "dmfe_interrupt() re-entry ", 0);
+               return;
+       }
+
+       /* A real interrupt coming */
+       dev->interrupt = 1;     /* Lock interrupt */
+       db = (struct dmfe_board_info *) dev->priv;
+       ioaddr = dev->base_addr;
+
+       DMFE_DBUG(0, "dmfe_interrupt()", 0);
+
+       /* Disable all interrupt in CR7 to solve the interrupt edge problem */
+       outl(0, ioaddr + DCR7);
+
+       /* Got DM910X status */
+       db->cr5_data = inl(ioaddr + DCR5);
+       outl(db->cr5_data, ioaddr + DCR5);
+       /* printk("CR5=%x\n", db->cr5_data); */
+
+       /* Check system status */
+       if (db->cr5_data & 0x2000) {
+               /* A system bus error occurred */
+               DMFE_DBUG(1, "A system bus error occurred. CR5=", db->cr5_data);
+               dev->tbusy = 1;
+               db->wait_reset = 1;             /* Need to RESET */
+               outl(0, ioaddr + DCR7);         /* disable all interrupt */
+               dev->interrupt = 0;             /* unlock interrupt */
+               return;
+       }
+       /* Free the transmitted descriptor */
+       txptr = db->tx_remove_ptr;
+       while (db->tx_packet_cnt) {
+               /* printk("tdes0=%x\n", txptr->tdes0); */
+               if (txptr->tdes0 & 0x80000000)
+                       break;
+               if ((txptr->tdes0 & TDES0_ERR_MASK) && (txptr->tdes0 != 0x7fffffff)) {
+                       /* printk("tdes0=%x\n", txptr->tdes0); */
+                       db->stats.tx_errors++;
+               }
+               txptr = (struct tx_desc *) txptr->next_tx_desc;
+               db->tx_packet_cnt--;
+       }
+       db->tx_remove_ptr = (struct tx_desc *) txptr;
+
+       if (dev->tbusy && (db->tx_packet_cnt < TX_FREE_DESC_CNT)) {
+               dev->tbusy = 0;         /* free a resource */
+               mark_bh(NET_BH);        /* active bottom half */
+       }
+       /* Received the coming packet */
+       if (db->rx_avail_cnt)
+               dmfe_rx_packet(dev, db);
+
+       /* reallocated rx descriptor buffer */
+       if (db->rx_avail_cnt < RX_DESC_CNT)
+               allocated_rx_buffer(db);
+
+       /* Mode Check */
+       if (db->dm910x_chk_mode & 0x2) {
+               db->dm910x_chk_mode = 0x4;
+               db->cr6_data |= 0x100;
+               update_cr6(db->cr6_data, db->ioaddr);
+       }
+       dev->interrupt = 0;     /* release interrupt lock */
+
+       /* Restore CR7 to enable interrupt mask */
+       
+       if (db->interval_rx_cnt > RX_MAX_TRAFFIC)
+               db->cr7_data = 0x1a28d;
+       else
+               db->cr7_data = 0x1a2cd;
+       outl(db->cr7_data, ioaddr + DCR7);
+}
+
+/*
+ *     Receive the come packet and pass to upper layer
+ */
+static void dmfe_rx_packet(struct net_device *dev, struct dmfe_board_info *db)
+{
+       struct rx_desc *rxptr;
+       struct sk_buff *skb;
+       int rxlen;
+
+       rxptr = db->rx_ready_ptr;
+
+       while (db->rx_avail_cnt) {
+               if (rxptr->rdes0 & 0x80000000)  /* packet owner check */
+                       break;
+
+               db->rx_avail_cnt--;
+               db->interval_rx_cnt++;
+
+               if ((rxptr->rdes0 & 0x300) != 0x300) {
+                       /* A packet without First/Last flag */
+                       /* reused this SKB */
+                       DMFE_DBUG(0, "Reused SK buffer, rdes0", rxptr->rdes0);
+                       dmfe_reused_skb(db, (struct sk_buff *) rxptr->rx_skb_ptr);
+                       db->rx_error_cnt++;
+               } else {
+                       rxlen = ((rxptr->rdes0 >> 16) & 0x3fff) - 4;    /* skip CRC */
+
+                       /* A packet with First/Last flag */
+                       if (rxptr->rdes0 & 0x8000) {    /* error summary bit check */
+                               /* This is a error packet */
+                               /* printk("rdes0 error : %x \n", rxptr->rdes0); */
+                               db->stats.rx_errors++;
+                               if (rxptr->rdes0 & 1)
+                                       db->stats.rx_fifo_errors++;
+                               if (rxptr->rdes0 & 2)
+                                       db->stats.rx_crc_errors++;
+                               if (rxptr->rdes0 & 0x80)
+                                       db->stats.rx_length_errors++;
+                       }
+                       if (!(rxptr->rdes0 & 0x8000) ||
+                           ((db->cr6_data & CR6_PM) && (rxlen > 6))) {
+                               skb = (struct sk_buff *) rxptr->rx_skb_ptr;
+
+                               /* Received Packet CRC check need or not */
+                               if ((db->dm910x_chk_mode & 1) && (cal_CRC(skb->tail, rxlen) != (*(unsigned long *) (skb->tail + rxlen)))) {
+                                       /* Found a error received packet */
+                                       dmfe_reused_skb(db, (struct sk_buff *) rxptr->rx_skb_ptr);
+                                       db->dm910x_chk_mode = 3;
+                               } else {
+                                       /* A good packet coming, send to upper layer */
+                                       skb->dev = dev;
+                                       skb_put(skb, rxlen);
+                                       skb->protocol = eth_type_trans(skb, dev);
+                                       netif_rx(skb);  /* Send to upper layer */
+                                       /* skb->ip_summed = CHECKSUM_UNNECESSARY; */
+                                       dev->last_rx = jiffies;
+                                       db->stats.rx_packets++;
+                               }
+                       } else {
+                               DMFE_DBUG(0, "Reused SK buffer, rdes0", rxptr->rdes0);
+                               dmfe_reused_skb(db, (struct sk_buff *) rxptr->rx_skb_ptr);
+                       }
+               }
+
+               rxptr = (struct rx_desc *) rxptr->next_rx_desc;
+       }
+
+       db->rx_ready_ptr = rxptr;
+}
+
+/*
+ *     Get statistics from driver.
+ */
+static struct enet_statistics *dmfe_get_stats(struct net_device *dev)
+{
+       struct dmfe_board_info *db = (struct dmfe_board_info *) dev->priv;
+
+       DMFE_DBUG(0, "dmfe_get_stats", 0);
+       return &db->stats;
+}
+
+/*
+ *     Set DM910X multicast address
+ */
+static void dmfe_set_filter_mode(struct net_device *dev)
+{
+       struct dmfe_board_info *db = dev->priv;
+
+       DMFE_DBUG(0, "dmfe_set_filter_mode()", 0);
+
+       if (dev->flags & IFF_PROMISC) {
+               DMFE_DBUG(0, "Enable PROM Mode", 0);
+               db->cr6_data |= CR6_PM | CR6_PBF;
+               update_cr6(db->cr6_data, db->ioaddr);
+               return;
+       }
+       if (dev->flags & IFF_ALLMULTI || dev->mc_count > DMFE_MAX_MULTICAST) {
+               DMFE_DBUG(0, "Pass all multicast address", dev->mc_count);
+               db->cr6_data &= ~(CR6_PM | CR6_PBF);
+               db->cr6_data |= CR6_PAM;
+               return;
+       }
+       DMFE_DBUG(0, "Set multicast address", dev->mc_count);
+       send_filter_frame(dev, dev->mc_count);
+}
+
+/*
+ *     Process the upper socket ioctl command
+ */
+static int dmfe_do_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
+{
+       DMFE_DBUG(0, "dmfe_do_ioctl()", 0);
+       return 0;
+}
+
+/*
+ *     A periodic timer routine
+ *     Dynamic media sense, allocated Rx buffer...
+ */
+static void dmfe_timer(unsigned long data)
+{
+       u32 tmp_cr8;
+       unsigned char tmp_cr12;
+       struct net_device *dev = (struct net_device *) data;
+       struct dmfe_board_info *db = (struct dmfe_board_info *) dev->priv;
+
+       DMFE_DBUG(0, "dmfe_timer()", 0);
+
+       /* Do reset now */
+       if (db->in_reset_state)
+               return;
+
+       /* Operating Mode Check */
+       if ((db->dm910x_chk_mode & 0x1) && (db->stats.rx_packets > MAX_CHECK_PACKET)) {
+               db->dm910x_chk_mode = 0x4;
+       }
+       /* Dynamic reset DM910X : system error or transmit time-out */
+       tmp_cr8 = inl(db->ioaddr + DCR8);
+       if ((db->interval_rx_cnt == 0) && (tmp_cr8)) {
+               db->wait_reset = 1;
+               /* printk("CR8 %x, Interval Rx %x\n", tmp_cr8, db->interval_rx_cnt); */
+       }
+       /* Receiving Traffic check */
+       if (db->interval_rx_cnt > RX_MAX_TRAFFIC)
+               db->cr7_data = 0x1a28d;
+       else
+               db->cr7_data = 0x1a2cd;
+       outl(db->cr7_data, db->ioaddr + DCR7);
+
+       db->interval_rx_cnt = 0;
+
+       if (db->wait_reset | (db->tx_packet_cnt &&
+                             ((jiffies - dev->trans_start) > DMFE_TX_TIMEOUT)) | (db->rx_error_cnt > 3)) {
+               /* printk("wait_reset %x, tx cnt %x, rx err %x, time %x\n", db->wait_reset, db->tx_packet_cnt, db->rx_error_cnt, jiffies-dev->trans_start); */
+               DMFE_DBUG(0, "Warn!! Warn!! Tx/Rx moniotr step1", db->tx_packet_cnt);
+               dmfe_dynamic_reset(dev);
+               db->timer.expires = DMFE_TIMER_WUT;
+               add_timer(&db->timer);
+               return;
+       }
+       db->rx_error_cnt = 0;   /* Clear previous counter */
+
+       /* Link status check, Dynamic media type change */
+       tmp_cr12 = inb(db->ioaddr + DCR12);
+       if (db->chip_revesion == 0x02000030) {
+               if (tmp_cr12 & 2)
+                       tmp_cr12 = 0x0;         /* Link failed */
+               else
+                       tmp_cr12 = 0x3;         /* Link OK */
+       }
+       if (!(tmp_cr12 & 0x3) && !db->link_failed) {
+               /* Link Failed */
+               DMFE_DBUG(0, "Link Failed", tmp_cr12);
+               db->link_failed = 1;
+               phy_write(db->ioaddr, db->phy_addr, 0, 0x8000);         /* reset Phy controller */
+       } else if ((tmp_cr12 & 0x3) && db->link_failed) {
+               DMFE_DBUG(0, "Link link OK", tmp_cr12);
+               db->link_failed = 0;
+               if (db->media_mode & DMFE_AUTO)
+                       dmfe_sense_speed(db);
+               dmfe_process_mode(db);
+               update_cr6(db->cr6_data, db->ioaddr);
+               /* SHOW_MEDIA_TYPE(db->op_mode); */
+       }
+       /* reallocated rx descriptor buffer */
+       if (db->rx_avail_cnt < RX_DESC_CNT)
+               allocated_rx_buffer(db);
+
+       /* Timer active again */
+       db->timer.expires = DMFE_TIMER_WUT;
+       add_timer(&db->timer);
+}
+
+/*
+ *     Dynamic reset the DM910X board
+ *     Stop DM910X board
+ *     Free Tx/Rx allocated memory
+ *     Reset DM910X board
+ *     Re-initilize DM910X board
+ */
+static void dmfe_dynamic_reset(struct net_device *dev)
+{
+       struct dmfe_board_info *db = dev->priv;
+
+       DMFE_DBUG(0, "dmfe_dynamic_reset()", 0);
+
+       /* Enter dynamic reset route */
+       db->in_reset_state = 1;
+
+       /* Disable upper layer interface */
+       dev->tbusy = 1;         /* transmit packet disable */
+       dev->start = 0;         /* interface not ready */
+
+       db->cr6_data &= ~(CR6_RXSC | CR6_TXSC);         /* Disable Tx/Rx */
+       update_cr6(db->cr6_data, dev->base_addr);
+
+       /* Free Rx Allocate buffer */
+       dmfe_free_rxbuffer(db);
+
+       /* system variable init */
+       db->tx_packet_cnt = 0;
+       db->rx_avail_cnt = 0;
+       db->link_failed = 0;
+       db->wait_reset = 0;
+       db->rx_error_cnt = 0;
+
+       /* Re-initilize DM910X board */
+       dmfe_init_dm910x(dev);
+
+       /* Restart upper layer interface */
+       dev->tbusy = 0;         /* Can transmit packet */
+       dev->start = 1;         /* interface ready */
+
+       /* Leave dynamic reser route */
+       db->in_reset_state = 0;
+}
+
+/*
+ *     Free all allocated rx buffer 
+ */
+
+static void dmfe_free_rxbuffer(struct dmfe_board_info *db)
+{
+       DMFE_DBUG(0, "dmfe_free_rxbuffer()", 0);
+
+       /* free allocated rx buffer */
+       while (db->rx_avail_cnt) {
+               dev_kfree_skb((void *) (db->rx_ready_ptr->rx_skb_ptr));
+               db->rx_ready_ptr = (struct rx_desc *) db->rx_ready_ptr->next_rx_desc;
+               db->rx_avail_cnt--;
+       }
+}
+
+/*
+ *     Reused the SK buffer
+ */
+static void dmfe_reused_skb(struct dmfe_board_info *db, struct sk_buff *skb)
+{
+       struct rx_desc *rxptr = db->rx_insert_ptr;
+
+       if (!(rxptr->rdes0 & 0x80000000)) {
+               rxptr->rx_skb_ptr = (u32) skb;
+               rxptr->rdes2 = virt_to_bus(skb->tail);
+               rxptr->rdes0 = 0x80000000;
+               db->rx_avail_cnt++;
+               db->rx_insert_ptr = (struct rx_desc *) rxptr->next_rx_desc;
+       } else
+               DMFE_DBUG(0, "SK Buffer reused method error", db->rx_avail_cnt);
+}
+
+/*
+ *     Initialize transmit/Receive descriptor 
+ *     Using Chain structure, and allocated Tx/Rx buffer
+ */
+static void dmfe_descriptor_init(struct dmfe_board_info *db, u32 ioaddr)
+{
+       struct tx_desc *tmp_tx;
+       struct rx_desc *tmp_rx;
+       unsigned char *tmp_buf;
+       int i;
+
+       DMFE_DBUG(0, "dmfe_descriptor_init()", 0);
+
+       /* tx descriptor start pointer */
+       db->tx_insert_ptr = db->first_tx_desc;
+       db->tx_remove_ptr = db->first_tx_desc;
+       outl(virt_to_bus(db->first_tx_desc), ioaddr + DCR4);    /* Init CR4 */
+
+       /* rx descriptor start pointer */
+       db->first_rx_desc = (struct rx_desc *)
+           ((u32) db->first_tx_desc + sizeof(struct rx_desc) * TX_DESC_CNT);
+       db->rx_insert_ptr = db->first_rx_desc;
+       db->rx_ready_ptr = db->first_rx_desc;
+       outl(virt_to_bus(db->first_rx_desc), ioaddr + DCR3);    /* Init CR3 */
+
+       /* Init Transmit chain */
+       tmp_buf = db->buf_pool_start;
+       for (tmp_tx = db->first_tx_desc, i = 0; i < TX_DESC_CNT; i++, tmp_tx++) {
+               tmp_tx->tx_buf_ptr = (u32) tmp_buf;
+               tmp_tx->tdes0 = 0;
+               tmp_tx->tdes1 = 0x81000000;     /* IC, chain */
+               tmp_tx->tdes2 = (u32) virt_to_bus(tmp_buf);
+               tmp_tx->tdes3 = (u32) virt_to_bus(tmp_tx) + sizeof(struct tx_desc);
+               tmp_tx->next_tx_desc = (u32) ((u32) tmp_tx + sizeof(struct tx_desc));
+               tmp_buf = (unsigned char *) ((u32) tmp_buf + TX_BUF_ALLOC);
+       }
+       (--tmp_tx)->tdes3 = (u32) virt_to_bus(db->first_tx_desc);
+       tmp_tx->next_tx_desc = (u32) db->first_tx_desc;
+
+       /* Init Receive descriptor chain */
+       for (tmp_rx = db->first_rx_desc, i = 0; i < RX_DESC_CNT; i++, tmp_rx++) {
+               tmp_rx->rdes0 = 0;
+               tmp_rx->rdes1 = 0x01000600;
+               tmp_rx->rdes3 = (u32) virt_to_bus(tmp_rx) + sizeof(struct rx_desc);
+               tmp_rx->next_rx_desc = (u32) ((u32) tmp_rx + sizeof(struct rx_desc));
+       }
+       (--tmp_rx)->rdes3 = (u32) virt_to_bus(db->first_rx_desc);
+       tmp_rx->next_rx_desc = (u32) db->first_rx_desc;
+
+       /* pre-allocated Rx buffer */
+       allocated_rx_buffer(db);
+}
+
+/*
+ *     Update CR6 vaule
+ *     Firstly stop DM910X , then written value and start
+ */
+static void update_cr6(u32 cr6_data, u32 ioaddr)
+{
+       u32 cr6_tmp;
+
+       cr6_tmp = cr6_data & ~0x2002;   /* stop Tx/Rx */
+       outl(cr6_tmp, ioaddr + DCR6);
+       DELAY_5US;
+       outl(cr6_data, ioaddr + DCR6);
+       cr6_tmp = inl(ioaddr + DCR6);
+       /* printk("CR6 update %x ", cr6_tmp); */
+}
+
+/*
+ *     Send a setup frame
+ *     This setup frame initilize DM910X addres filter mode
+ */
+static void send_filter_frame(struct net_device *dev, int mc_cnt)
+{
+       struct dmfe_board_info *db = dev->priv;
+       struct dev_mc_list *mcptr;
+       struct tx_desc *txptr;
+       u16 *addrptr;
+       u32 *suptr;
+       int i;
+
+       DMFE_DBUG(0, "send_filetr_frame()", 0);
+
+       txptr = db->tx_insert_ptr;
+       suptr = (u32 *) txptr->tx_buf_ptr;
+
+       /* broadcast address */
+       *suptr++ = 0xffff;
+       *suptr++ = 0xffff;
+       *suptr++ = 0xffff;
+
+       /* Node address */
+       addrptr = (u16 *) dev->dev_addr;
+       *suptr++ = addrptr[0];
+       *suptr++ = addrptr[1];
+       *suptr++ = addrptr[2];
+
+       /* fit the multicast address */
+       for (mcptr = dev->mc_list, i = 0; i < mc_cnt; i++, mcptr = mcptr->next) {
+               addrptr = (u16 *) mcptr->dmi_addr;
+               *suptr++ = addrptr[0];
+               *suptr++ = addrptr[1];
+               *suptr++ = addrptr[2];
+       }
+
+       for (; i < 14; i++) {
+               *suptr++ = 0xffff;
+               *suptr++ = 0xffff;
+               *suptr++ = 0xffff;
+       }
+
+       /* prepare the setup frame */
+       db->tx_packet_cnt++;
+       dev->tbusy = 1;
+       txptr->tdes1 = 0x890000c0;
+       txptr->tdes0 = 0x80000000;
+       db->tx_insert_ptr = (struct tx_desc *) txptr->next_tx_desc;
+
+       update_cr6(db->cr6_data | 0x2000, dev->base_addr);
+       outl(0x1, dev->base_addr + DCR1);
+       update_cr6(db->cr6_data, dev->base_addr);
+       dev->trans_start = jiffies;
+
+}
+
+/*
+ *     Allocate rx buffer,
+ *     Allocate as many Rx buffers as possible.
+ */
+static void allocated_rx_buffer(struct dmfe_board_info *db)
+{
+       struct rx_desc *rxptr;
+       struct sk_buff *skb;
+
+       rxptr = db->rx_insert_ptr;
+
+       while (db->rx_avail_cnt < RX_DESC_CNT) {
+               if ((skb = alloc_skb(RX_ALLOC_SIZE, GFP_ATOMIC)) == NULL)
+                       break;
+               rxptr->rx_skb_ptr = (u32) skb;
+               rxptr->rdes2 = virt_to_bus(skb->tail);
+               rxptr->rdes0 = 0x80000000;
+               rxptr = (struct rx_desc *) rxptr->next_rx_desc;
+               db->rx_avail_cnt++;
+       }
+
+       db->rx_insert_ptr = rxptr;
+}
+
+/*
+ *     Read one word data from the serial ROM
+ */
+static u16 read_srom_word(long ioaddr, int offset)
+{
+       int i;
+       u16 srom_data = 0;
+       long cr9_ioaddr = ioaddr + DCR9;
+
+       outl(CR9_SROM_READ, cr9_ioaddr);
+       outl(CR9_SROM_READ | CR9_SRCS, cr9_ioaddr);
+
+       /* Send the Read Command 110b */
+       SROM_CLK_WRITE(SROM_DATA_1, cr9_ioaddr);
+       SROM_CLK_WRITE(SROM_DATA_1, cr9_ioaddr);
+       SROM_CLK_WRITE(SROM_DATA_0, cr9_ioaddr);
+
+       /* Send the offset */
+       for (i = 5; i >= 0; i--) {
+               srom_data = (offset & (1 << i)) ? SROM_DATA_1 : SROM_DATA_0;
+               SROM_CLK_WRITE(srom_data, cr9_ioaddr);
+       }
+
+       outl(CR9_SROM_READ | CR9_SRCS, cr9_ioaddr);
+
+       for (i = 16; i > 0; i--) {
+               outl(CR9_SROM_READ | CR9_SRCS | CR9_SRCLK, cr9_ioaddr);
+               DELAY_5US;
+               srom_data = (srom_data << 1) | ((inl(cr9_ioaddr) & CR9_CRDOUT) ? 1 : 0);
+               outl(CR9_SROM_READ | CR9_SRCS, cr9_ioaddr);
+               DELAY_5US;
+       }
+
+       outl(CR9_SROM_READ, cr9_ioaddr);
+       return srom_data;
+}
+
+/*
+ *     Parser Control media block to get Phy address
+ */
+static void parser_ctrl_info(struct dmfe_board_info *db)
+{
+       int i;
+       char *sdata = db->srom;
+       unsigned char count;
+
+       /* point to info leaf0 */
+       count = *(sdata + 33);
+
+       /* Point to First media block */
+       sdata += 34;
+       for (i = 0; i < count; i++) {
+               if (*(sdata + 1) == 1) {
+                       db->phy_addr = *(sdata + 2);
+                       break;
+               }
+               sdata += ((unsigned char) *(sdata) & 0x7f) + 1;
+       }
+
+       if (i >= count) {
+               printk("Can't found Control Block\n");
+               db->phy_addr = 1;
+       }
+}
+
+/*
+ *     Auto sense the media mode
+ */
+static void dmfe_sense_speed(struct dmfe_board_info *db)
+{
+       int i;
+       u16 phy_mode;
+
+       for (i = 1000; i; i--) {
+               DELAY_5US;
+               phy_mode = phy_read(db->ioaddr, db->phy_addr, 1);
+               if ((phy_mode & 0x24) == 0x24)
+                       break;
+       }
+
+       if (i) {
+               phy_mode = phy_read(db->ioaddr, db->phy_addr, 17) & 0xf000;
+               /* printk("Phy_mode %x ",phy_mode); */
+               switch (phy_mode) {
+               case 0x1000:
+                       db->op_mode = DMFE_10MHF;
+                       break;
+               case 0x2000:
+                       db->op_mode = DMFE_10MFD;
+                       break;
+               case 0x4000:
+                       db->op_mode = DMFE_100MHF;
+                       break;
+               case 0x8000:
+                       db->op_mode = DMFE_100MFD;
+                       break;
+               default:
+                       db->op_mode = DMFE_100MHF;
+                       DMFE_DBUG(1, "Media Type error, phy reg17", phy_mode);
+                       break;
+               }
+       } else {
+               db->op_mode = DMFE_100MHF;
+               DMFE_DBUG(0, "Link Failed :", phy_mode);
+       }
+}
+
+/*
+ *     Process op-mode
+ *     AUTO mode : PHY controller in Auto-negotiation Mode
+ *     Force mode: PHY controller in force mode with HUB
+ *     N-way force capability with SWITCH
+ */
+static void dmfe_process_mode(struct dmfe_board_info *db)
+{
+       u16 phy_reg;
+
+       /* Full Duplex Mode Check */
+       db->cr6_data &= ~CR6_FDM;       /* Clear Full Duplex Bit */
+       if (db->op_mode & 0x4)
+               db->cr6_data |= CR6_FDM;
+
+       if (!(db->media_mode & DMFE_AUTO)) {    /* Force Mode Check */
+               /* User force the media type */
+               phy_reg = phy_read(db->ioaddr, db->phy_addr, 5);
+               /* printk("Nway phy_reg5 %x ",phy_reg); */
+               if (phy_reg & 0x1) {
+                       /* parter own the N-Way capability */
+                       phy_reg = phy_read(db->ioaddr, db->phy_addr, 4) & ~0x1e0;
+                       switch (db->op_mode) {
+                       case DMFE_10MHF:
+                               phy_reg |= 0x20;
+                               break;
+                       case DMFE_10MFD:
+                               phy_reg |= 0x40;
+                               break;
+                       case DMFE_100MHF:
+                               phy_reg |= 0x80;
+                               break;
+                       case DMFE_100MFD:
+                               phy_reg |= 0x100;
+                               break;
+                       }
+                       phy_write(db->ioaddr, db->phy_addr, 4, phy_reg);
+               } else {
+                       /* parter without the N-Way capability */
+                       switch (db->op_mode) {
+                       case DMFE_10MHF:
+                               phy_reg = 0x0;
+                               break;
+                       case DMFE_10MFD:
+                               phy_reg = 0x100;
+                               break;
+                       case DMFE_100MHF:
+                               phy_reg = 0x2000;
+                               break;
+                       case DMFE_100MFD:
+                               phy_reg = 0x2100;
+                               break;
+                       }
+                       phy_write(db->ioaddr, db->phy_addr, 0, phy_reg);
+               }
+       }
+}
+
+/*
+ *     Write a word to Phy register
+ */
+static void phy_write(u32 iobase, u8 phy_addr, u8 offset, u16 phy_data)
+{
+       u16 i;
+       u32 ioaddr = iobase + DCR9;
+
+       /* Send 33 synchronization clock to Phy controller */
+       for (i = 0; i < 35; i++)
+               phy_write_1bit(ioaddr, PHY_DATA_1);
+
+       /* Send start command(01) to Phy */
+       phy_write_1bit(ioaddr, PHY_DATA_0);
+       phy_write_1bit(ioaddr, PHY_DATA_1);
+
+       /* Send write command(01) to Phy */
+       phy_write_1bit(ioaddr, PHY_DATA_0);
+       phy_write_1bit(ioaddr, PHY_DATA_1);
+
+       /* Send Phy addres */
+       for (i = 0x10; i > 0; i = i >> 1)
+               phy_write_1bit(ioaddr, phy_addr & i ? PHY_DATA_1 : PHY_DATA_0);
+
+       /* Send register addres */
+       for (i = 0x10; i > 0; i = i >> 1)
+               phy_write_1bit(ioaddr, offset & i ? PHY_DATA_1 : PHY_DATA_0);
+
+       /* written trasnition */
+       phy_write_1bit(ioaddr, PHY_DATA_1);
+       phy_write_1bit(ioaddr, PHY_DATA_0);
+
+       /* Write a word data to PHY controller */
+       for (i = 0x8000; i > 0; i >>= 1)
+               phy_write_1bit(ioaddr, phy_data & i ? PHY_DATA_1 : PHY_DATA_0);
+}
+
+/*
+ *     Read a word data from phy register
+ */
+static u16 phy_read(u32 iobase, u8 phy_addr, u8 offset)
+{
+       int i;
+       u16 phy_data;
+       u32 ioaddr = iobase + DCR9;
+
+       /* Send 33 synchronization clock to Phy controller */
+       for (i = 0; i < 35; i++)
+               phy_write_1bit(ioaddr, PHY_DATA_1);
+
+       /* Send start command(01) to Phy */
+       phy_write_1bit(ioaddr, PHY_DATA_0);
+       phy_write_1bit(ioaddr, PHY_DATA_1);
+
+       /* Send read command(10) to Phy */
+       phy_write_1bit(ioaddr, PHY_DATA_1);
+       phy_write_1bit(ioaddr, PHY_DATA_0);
+
+       /* Send Phy addres */
+       for (i = 0x10; i > 0; i = i >> 1)
+               phy_write_1bit(ioaddr, phy_addr & i ? PHY_DATA_1 : PHY_DATA_0);
+
+       /* Send register addres */
+       for (i = 0x10; i > 0; i = i >> 1)
+               phy_write_1bit(ioaddr, offset & i ? PHY_DATA_1 : PHY_DATA_0);
+
+       /* Skip transition state */
+       phy_read_1bit(ioaddr);
+
+       /* read 16bit data */
+       for (phy_data = 0, i = 0; i < 16; i++) {
+               phy_data <<= 1;
+               phy_data |= phy_read_1bit(ioaddr);
+       }
+
+       return phy_data;
+}
+
+/*
+ *     Write one bit data to Phy Controller
+ */
+static void phy_write_1bit(u32 ioaddr, u32 phy_data)
+{
+       outl(phy_data, ioaddr); /* MII Clock Low */
+       DELAY_1US;
+       outl(phy_data | MDCLKH, ioaddr);        /* MII Clock High */
+       DELAY_1US;
+       outl(phy_data, ioaddr); /* MII Clock Low */
+       DELAY_1US;
+}
+
+/*
+ *     Read one bit phy data from PHY controller
+ */
+static u16 phy_read_1bit(u32 ioaddr)
+{
+       u16 phy_data;
+
+       outl(0x50000, ioaddr);
+       DELAY_1US;
+       phy_data = (inl(ioaddr) >> 19) & 0x1;
+       outl(0x40000, ioaddr);
+       DELAY_1US;
+
+       return phy_data;
+}
+
+/*
+ *     Calculate the CRC valude of the Rx packet
+ */
+static unsigned long cal_CRC(unsigned char *Data, unsigned int Len)
+{
+       unsigned long Crc = 0xffffffff;
+
+       while (Len--) {
+               Crc = CrcTable[(Crc ^ *Data++) & 0xFF] ^ (Crc >> 8);
+       }
+
+       return ~Crc;
+
+}
+
+#ifdef MODULE
+
+MODULE_AUTHOR("Sten Wang, sten_wang@davicom.com.tw");
+MODULE_DESCRIPTION("Davicom DM910X fast ethernet driver");
+MODULE_PARM(debug, "i");
+MODULE_PARM(mode, "i");
+MODULE_PARM(cr6set, "i");
+MODULE_PARM(chkmode, "i");
+
+/*     Description: 
+ *     when user used insmod to add module, system invoked init_module()
+ *     to initilize and register.
+ */
+int init_module(void)
+{
+       DMFE_DBUG(0, "init_module() ", debug);
+
+       if (debug)
+               dmfe_debug = debug;     /* set debug flag */
+       if (cr6set)
+               dmfe_cr6_user_set = cr6set;
+
+       switch (mode) {
+       case 0:
+       case 1:
+       case 4:
+       case 5:
+               dmfe_media_mode = mode;
+               break;
+       default:
+               dmfe_media_mode = 8;
+               break;
+       }
+
+       return dmfe_reg_board(0);       /* search board and register */
+}
+
+/*
+ *     Description: 
+ *     when user used rmmod to delete module, system invoked clean_module()
+ *     to un-register device.
+ */
+void cleanup_module(void)
+{
+       struct net_device *next_dev;
+
+       DMFE_DBUG(0, "clean_module()", 0);
+
+       while (dmfe_root_dev) {
+               next_dev = ((struct dmfe_board_info *) dmfe_root_dev->priv)->next_dev;
+               unregister_netdev(dmfe_root_dev);
+               release_region(dmfe_root_dev->base_addr, DM9102_IO_SIZE);
+               kfree(dmfe_root_dev->priv);     /* free board information */
+               kfree(dmfe_root_dev);   /* free device structure */
+               dmfe_root_dev = next_dev;
+       }
+       DMFE_DBUG(0, "clean_module() exit", 0);
+}
+
+#endif                         /* MODULE */
index df5cc8a9b74aa703b4b72239f8da65bd7cf1739a..1d45998f4402d40a11fd3aa28bd129d06c57f419 100644 (file)
@@ -7,8 +7,8 @@ dep_tristate 'BPQ Ethernet driver' CONFIG_BPQETHER $CONFIG_AX25
 dep_tristate 'High-speed (DMA) SCC driver for AX.25' CONFIG_DMASCC $CONFIG_AX25
 dep_tristate 'Z8530 SCC driver' CONFIG_SCC $CONFIG_AX25
 if [ "$CONFIG_SCC" != "n" ]; then
-  bool '   additional delay for PA0HZP OptoSCC compatible boards' CONFIG_SCC_DELAY
-  bool '   support for TRX that feedback the tx signal to rx' CONFIG_SCC_TRXECHO
+   bool '  additional delay for PA0HZP OptoSCC compatible boards' CONFIG_SCC_DELAY
+   bool '  support for TRX that feedback the tx signal to rx' CONFIG_SCC_TRXECHO
 fi
     
 dep_tristate 'BAYCOM ser12 fullduplex driver for AX.25' CONFIG_BAYCOM_SER_FDX $CONFIG_AX25
@@ -18,15 +18,16 @@ dep_tristate 'BAYCOM epp driver for AX.25' CONFIG_BAYCOM_EPP $CONFIG_PARPORT $CO
 
 dep_tristate 'Soundcard modem driver' CONFIG_SOUNDMODEM $CONFIG_PARPORT $CONFIG_AX25
 if [ "$CONFIG_SOUNDMODEM" != "n" ]; then
-  bool '   soundmodem support for Soundblaster and compatible cards' CONFIG_SOUNDMODEM_SBC
-  bool '   soundmodem support for WSS and Crystal cards' CONFIG_SOUNDMODEM_WSS
-  bool '   soundmodem support for 1200 baud AFSK modulation' CONFIG_SOUNDMODEM_AFSK1200
-  bool '   soundmodem support for 2400 baud AFSK modulation (7.3728MHz crystal)' CONFIG_SOUNDMODEM_AFSK2400_7
-  bool '   soundmodem support for 2400 baud AFSK modulation (8MHz crystal)' CONFIG_SOUNDMODEM_AFSK2400_8
-  bool '   soundmodem support for 2666 baud AFSK modulation' CONFIG_SOUNDMODEM_AFSK2666
-  bool '   soundmodem support for 4800 baud HAPN-1 modulation' CONFIG_SOUNDMODEM_HAPN4800
-  bool '   soundmodem support for 4800 baud PSK modulation' CONFIG_SOUNDMODEM_PSK4800
-  bool '   soundmodem support for 9600 baud FSK G3RUH modulation' CONFIG_SOUNDMODEM_FSK9600
+   bool '  soundmodem support for Soundblaster and compatible cards' CONFIG_SOUNDMODEM_SBC
+   bool '  soundmodem support for WSS and Crystal cards' CONFIG_SOUNDMODEM_WSS
+   bool '  soundmodem support for 1200 baud AFSK modulation' CONFIG_SOUNDMODEM_AFSK1200
+   bool '  soundmodem support for 2400 baud AFSK modulation (7.3728MHz crystal)' CONFIG_SOUNDMODEM_AFSK2400_7
+   bool '  soundmodem support for 2400 baud AFSK modulation (8MHz crystal)' CONFIG_SOUNDMODEM_AFSK2400_8
+   bool '  soundmodem support for 2666 baud AFSK modulation' CONFIG_SOUNDMODEM_AFSK2666
+   bool '  soundmodem support for 4800 baud HAPN-1 modulation' CONFIG_SOUNDMODEM_HAPN4800
+   bool '  soundmodem support for 4800 baud PSK modulation' CONFIG_SOUNDMODEM_PSK4800
+   bool '  soundmodem support for 9600 baud FSK G3RUH modulation' CONFIG_SOUNDMODEM_FSK9600
 fi
 
-tristate 'YAM driver for AX.25' CONFIG_YAM
+dep_tristate 'YAM driver for AX.25' CONFIG_YAM $CONFIG_AX25
+
index c4846c63f76469881635bd54f4445d065d695c76..9c6e69cf64203924e8799f5f03959df5436d0234 100644 (file)
@@ -688,7 +688,7 @@ module_exit(cleanup_baycomserfdx);
 
 static int __init baycom_ser_fdx_setup(char *str)
 {
-        static unsigned __initdata nr_dev = 0;
+        static unsigned nr_dev = 0;
         int ints[4];
 
         if (nr_dev >= NR_PORTS)
index 2845d2f0f86edaa03fa3ae8ba473e87cba63f5c8..c44395f84c419cac62cda449879c7804d3fd098d 100644 (file)
@@ -728,7 +728,7 @@ module_exit(cleanup_baycomserhdx);
 
 static int __init baycom_ser_hdx_setup(char *str)
 {
-        static unsigned __initdata nr_dev = 0;
+        static unsigned nr_dev = 0;
        int ints[3];
 
         if (nr_dev >= NR_PORTS)
index e04660f7a702af21e430539dbf5e56068386bed7..2c468c8c1480fd8f6d2194d1ced345ec7c6a0280 100644 (file)
@@ -893,10 +893,12 @@ static int yam_net_get_info(char *buffer, char **start, off_t offset, int length
 }
 
 #ifdef CONFIG_INET
+
 #ifndef PROC_NET_YAM
 #define PROC_NET_YAM (PROC_NET_LAST+10)                /* Sorry again... */
 #endif
 
+#ifdef CONFIG_PROC_FS
 struct proc_dir_entry yam_proc_dir_entry =
 {
        PROC_NET_YAM, 3, "yam", S_IFREG | S_IRUGO, 1, 0, 0, 0,
@@ -909,6 +911,10 @@ struct proc_dir_entry yam_proc_dir_entry =
 #define yam_net_procfs_init()
 #define yam_net_procfs_remove()
 #endif
+#else
+#define yam_net_procfs_init()
+#define yam_net_procfs_remove()
+#endif
 
 /* --------------------------------------------------------------------- */
 
index 703abe287b41979b8aeccb8ce4acd5b47e223725..6e511f4b7e3a99d0d257cadedcaafd9d6366cc11 100644 (file)
@@ -2,9 +2,9 @@
 
     A PCMCIA ethernet driver for the 3com 3c589 card.
     
-    Copyright (C) 1998 David A. Hinds -- dhinds@hyper.stanford.edu
+    Copyright (C) 1999 David A. Hinds -- dhinds@hyper.stanford.edu
 
-    3c589_cs.c 1.126 1999/06/14 17:35:34
+    3c589_cs.c 1.134 1999/09/15 15:33:09
 
     The network driver code is based on Donald Becker's 3c589 code:
     
@@ -18,6 +18,7 @@
 ======================================================================*/
 
 #include <linux/module.h>
+#include <linux/init.h>
 #include <linux/kernel.h>
 #include <linux/sched.h>
 #include <linux/ptrace.h>
@@ -53,8 +54,9 @@
 #define EL3_TIMER      0x0a
 #define EL3_CMD                0x0e
 #define EL3_STATUS     0x0e
-#define ID_PORT                0x100
-#define        EEPROM_READ     0x80
+
+#define EEPROM_READ    0x0080
+#define EEPROM_BUSY    0x8000
 
 #define EL3WINDOW(win_num) outw(SelectWindow + (win_num), ioaddr + EL3_CMD)
 
@@ -113,7 +115,7 @@ static int pc_debug = PCMCIA_DEBUG;
 MODULE_PARM(pc_debug, "i");
 #define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args)
 static char *version =
-"3c589_cs.c 1.126 1999/06/14 17:35:34 (David Hinds)";
+"3c589_cs.c 1.134 1999/09/15 15:33:09 (David Hinds)";
 #else
 #define DEBUG(n, args...)
 #endif
@@ -329,10 +331,10 @@ static void tc589_detach(dev_link_t *link)
        if (link->dev != NULL)
            unregister_netdev(dev);
        if (dev->priv)
-           kfree_s(dev->priv, sizeof(struct el3_private));
-       kfree_s(link->priv, sizeof(struct net_device));
+           kfree(dev->priv);
+       kfree(link->priv);
     }
-    kfree_s(link, sizeof(struct dev_link_t));
+    kfree(link);
     
 } /* tc589_detach */
 
@@ -444,14 +446,15 @@ static void tc589_config(dev_link_t *link)
     else
        printk(KERN_NOTICE "3c589_cs: invalid if_port requested\n");
     
-    printk(KERN_INFO "%s: 3Com 3c%s, io %#3lx, irq %d, %s xcvr, "
-          "hw_addr ", dev->name, (multi ? "562" : "589"),
-          dev->base_addr, dev->irq, if_names[dev->if_port]);
+    printk(KERN_INFO "%s: 3Com 3c%s, io %#3lx, irq %d, hw_addr ",
+          dev->name, (multi ? "562" : "589"), dev->base_addr,
+          dev->irq);
     for (i = 0; i < 6; i++)
        printk("%02X%s", dev->dev_addr[i], ((i<5) ? ":" : "\n"));
     i = inl(ioaddr);
-    printk(KERN_INFO "  %dK FIFO split %s Rx:Tx\n",
-          (i & 7) ? 32 : 8, ram_split[(i >> 16) & 3]);
+    printk(KERN_INFO "  %dK FIFO split %s Rx:Tx, %s xcvr\n",
+          (i & 7) ? 32 : 8, ram_split[(i >> 16) & 3],
+          if_names[dev->if_port]);
     return;
 
 cs_failed:
@@ -513,7 +516,7 @@ static int tc589_event(event_t event, int priority,
        link->state &= ~DEV_PRESENT;
        if (link->state & DEV_CONFIG) {
            dev->tbusy = 1; dev->start = 0;
-           link->release.expires = jiffies + (HZ/20);
+           link->release.expires = jiffies + HZ/20;
            add_timer(&link->release);
        }
        break;
@@ -574,7 +577,7 @@ static ushort read_eeprom(short ioaddr, int index)
     outw(EEPROM_READ + index, ioaddr + 10);
     /* Reading the eeprom takes 162 us */
     for (i = 1620; i >= 0; i--)
-       if ((inw(ioaddr + 10) & 0x8000) == 0)
+       if ((inw(ioaddr + 10) & EEPROM_BUSY) == 0)
            break;
     return inw(ioaddr + 12);
 }
@@ -600,8 +603,10 @@ static void tc589_set_xcvr(struct net_device *dev, int if_port)
     EL3WINDOW(4);
     outw(MEDIA_LED | ((if_port < 2) ? MEDIA_TP : 0), ioaddr + WN4_MEDIA);
     EL3WINDOW(1);
-    lp->media_status = (if_port < 2) ? 0x8800 : 0x4800;
-    lp->last_irq = jiffies;
+    if (if_port == 2)
+       lp->media_status = ((dev->if_port == 0) ? 0x8000 : 0x4000);
+    else
+       lp->media_status = ((dev->if_port == 0) ? 0x4010 : 0x8800);
 }
 
 static void dump_status(struct net_device *dev)
@@ -898,7 +903,7 @@ static void media_check(u_long arg)
     }
     if (lp->fast_poll) {
        lp->fast_poll--;
-       lp->media.expires = jiffies + 2;
+       lp->media.expires = jiffies + 1;
        add_timer(&lp->media);
        return;
     }
@@ -918,8 +923,9 @@ static void media_check(u_long arg)
        errs = inb(ioaddr + 0);
        outw(StatsEnable, ioaddr + EL3_CMD);
        lp->stats.tx_carrier_errors += errs;
-       if (errs) media |= 0x0010;
+       if (errs || (lp->media_status & 0x0010)) media |= 0x0010;
     }
+
     if (media != lp->media_status) {
        if ((media & lp->media_status & 0x8000) &&
            ((lp->media_status ^ media) & 0x0800))
@@ -927,8 +933,8 @@ static void media_check(u_long arg)
                   (lp->media_status & 0x0800 ? "lost" : "found"));
        else if ((media & lp->media_status & 0x4000) &&
                 ((lp->media_status ^ media) & 0x0010))
-           printk(KERN_INFO "%s: cable %s\n", dev->name,
-                  (lp->media_status & 0x0010 ? "fixed" : "problem"));
+           printk(KERN_INFO "%s: coax cable %s\n", dev->name,
+                  (lp->media_status & 0x0010 ? "ok" : "problem"));
        if (dev->if_port == 0) {
            if (media & 0x8000) {
                if (media & 0x0800)
@@ -936,8 +942,7 @@ static void media_check(u_long arg)
                           dev->name);
                else
                    tc589_set_xcvr(dev, 2);
-           }
-           if (media & 0x4000) {
+           } else if (media & 0x4000) {
                if (media & 0x0010)
                    tc589_set_xcvr(dev, 1);
                else
@@ -1147,7 +1152,7 @@ static int el3_close(struct net_device *dev)
 
 /*====================================================================*/
 
-int init_3c589_cs(void)
+static int __init init_3c589_cs(void)
 {
     servinfo_t serv;
     DEBUG(0, "%s\n", version);
@@ -1157,21 +1162,17 @@ int init_3c589_cs(void)
               "does not match!\n");
        return -1;
     }
-    register_pcmcia_driver(&dev_info, &tc589_attach, &tc589_detach);
+    register_pccard_driver(&dev_info, &tc589_attach, &tc589_detach);
     return 0;
 }
 
-#ifdef MODULE
-int init_module(void)
-{
-       return init_3c589_cs();
-}
-
-void cleanup_module(void)
+static void __exit exit_3c589_cs(void)
 {
     DEBUG(0, "3c589_cs: unloading\n");
-    unregister_pcmcia_driver(&dev_info);
+    unregister_pccard_driver(&dev_info);
     while (dev_list != NULL)
        tc589_detach(dev_list);
 }
-#endif
+
+module_init(init_3c589_cs);
+module_exit(exit_3c589_cs);
index 938e9cec431b6f2d4a2a2a4d0b36c00a66eb6f53..cc4efbf886dcfa605090870b5450525093c6188d 100644 (file)
@@ -5,8 +5,12 @@
 mainmenu_option next_comment
 comment 'PCMCIA network devices'
 
-tristate 'PCMCIA ethernet cards (NE2000 compatibles: DE-650, ...)' CONFIG_PCMCIA_PCNET
-tristate '3Com 3c589 PCMCIA card' CONFIG_PCMCIA_3C589
-tristate 'Aviator/Raytheon 2.4MHz wireless' CONFIG_PCMCIA_RAYCS
+dep_tristate 'PCMCIA ethernet cards (NE2000 compatibles: DE-650, ...)' CONFIG_PCMCIA_PCNET $CONFIG_PCMCIA
+dep_tristate '3Com 3c589 PCMCIA card' CONFIG_PCMCIA_3C589 $CONFIG_PCMCIA
+dep_tristate 'Aviator/Raytheon 2.4MHz wireless' CONFIG_PCMCIA_RAYCS $CONFIG_PCMCIA
+
+if [ "$CONFIG_PCMCIA_3C589" = "y" -o "$CONFIG_PCMCIA_RAYCS" = "y" -o "$CONFIG_PCMCIA_PCNET" = "y" ]; then
+   define_bool CONFIG_PCMCIA_NETCARD y
+fi
 
 endmenu
index 0b239091a5b6a5acbfe9deba6f1f981be1f4ab70..3b59b1b93ed9d8950201ab4deda5b149689d44ee 100644 (file)
@@ -11,7 +11,7 @@ ALL_SUB_DIRS := $(SUB_DIRS)
 O_TARGET := pcmcia_net.o
 O_OBJS   :=
 M_OBJS   :=
-MOD_LIST_NAME := NET_MODULES
+MOD_LIST_NAME := PCMCIA_MODULES
 
 ifeq ($(CONFIG_PCMCIA_PCNET),y)
   O_OBJS += pcnet_cs.o
index b061559b8deb8865940a7f0dfb7b32842a8b9c77..f5d4b3c49c7ea88a873ce0b8288d8ff96299f146 100644 (file)
@@ -9,9 +9,9 @@
     Conrad ethernet card, and the Kingston KNE-PCM/x in shared-memory
     mode.  It will also handle the Socket EA card in either mode.
 
-    Copyright (C) 1998 David A. Hinds -- dhinds@hyper.stanford.edu
+    Copyright (C) 1999 David A. Hinds -- dhinds@hyper.stanford.edu
 
-    pcnet_cs.c 1.94 1999/07/29 06:04:49
+    pcnet_cs.c 1.99 1999/09/15 15:33:09
     
     The network driver code is based on Donald Becker's NE2000 code:
 
@@ -29,6 +29,7 @@
 ======================================================================*/
 
 #include <linux/module.h>
+#include <linux/init.h>
 #include <linux/kernel.h>
 #include <linux/sched.h>
 #include <linux/ptrace.h>
@@ -40,7 +41,7 @@
 #include <asm/system.h>
 
 #include <linux/netdevice.h>
-#include "../8390.h"
+#include <../drivers/net/8390.h>
 
 #include <pcmcia/version.h>
 #include <pcmcia/cs_types.h>
 
 static char *if_names[] = { "auto", "10baseT", "10base2"};
 
-#define PCMCIA_DEBUG 6
 #ifdef PCMCIA_DEBUG
 static int pc_debug = PCMCIA_DEBUG;
 MODULE_PARM(pc_debug, "i");
 #define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args)
 static char *version =
-"pcnet_cs.c 1.94 1999/07/29 06:04:49 (David Hinds)";
+"pcnet_cs.c 1.99 1999/09/15 15:33:09 (David Hinds)";
 #else
 #define DEBUG(n, args...)
 #endif
@@ -125,6 +125,8 @@ static int pcnet_event(event_t event, int priority,
 
 static int pcnet_open(struct net_device *dev);
 static int pcnet_close(struct net_device *dev);
+static void ei_irq_wrapper(int irq, void *dev_id, struct pt_regs *regs);
+static void ei_watchdog(u_long arg);
 
 static void pcnet_reset_8390(struct net_device *dev);
 
@@ -226,6 +228,9 @@ typedef struct pcnet_dev_t {
     dev_node_t         node;
     u_long             flags;
     caddr_t            base;
+    struct timer_list  watchdog;
+    int                        stale;
+    u_short            fast_poll;
 } pcnet_dev_t;
 
 /*======================================================================
@@ -890,7 +895,13 @@ static int pcnet_open(struct net_device *dev)
     }
     
     set_misc_reg(dev);
-    request_irq(dev->irq, ei_interrupt, SA_SHIRQ, dev_info, dev);
+    request_irq(dev->irq, ei_irq_wrapper, SA_SHIRQ, dev_info, dev);
+
+    info->watchdog.function = &ei_watchdog;
+    info->watchdog.data = (u_long)info;
+    info->watchdog.expires = jiffies + HZ;
+    add_timer(&info->watchdog);
+
     return ei_open(dev);
 } /* pcnet_open */
 
@@ -909,8 +920,9 @@ static int pcnet_close(struct net_device *dev)
     free_irq(dev->irq, dev);
     
     link->open--; dev->start = 0;
+    del_timer(&((pcnet_dev_t *)dev)->watchdog);
     if (link->state & DEV_STALE_CONFIG) {
-       link->release.expires = jiffies+HZ/20;
+       link->release.expires = jiffies + HZ/20;
        link->state |= DEV_RELEASE_PENDING;
        add_timer(&link->release);
     }
@@ -973,6 +985,44 @@ static int set_config(struct net_device *dev, struct ifmap *map)
 
 /* ======================================================================= */
 
+static void ei_irq_wrapper(int irq, void *dev_id, struct pt_regs *regs)
+{
+    pcnet_dev_t *info = dev_id;
+    info->stale = 0;
+    ei_interrupt(irq, dev_id, regs);
+}
+
+static void ei_watchdog(u_long arg)
+{
+    pcnet_dev_t *info = (pcnet_dev_t *)(arg);
+    struct net_device *dev = &info->dev;
+    int nic_base = dev->base_addr;
+
+    if (dev->start == 0) goto reschedule;
+
+    /* Check for pending interrupt with expired latency timer: with
+       this, we can limp along even if the interrupt is blocked */
+    outb_p(E8390_NODMA+E8390_PAGE0, nic_base + E8390_CMD);
+    if (info->stale++ && inb_p(nic_base + EN0_ISR)) {
+       if (!info->fast_poll)
+           printk(KERN_INFO "%s: interrupt(s) dropped!\n", dev->name);
+       ei_irq_wrapper(dev->irq, dev, NULL);
+       info->fast_poll = HZ;
+    }
+    if (info->fast_poll) {
+       info->fast_poll--;
+       info->watchdog.expires = jiffies + 1;
+       add_timer(&info->watchdog);
+       return;
+    }
+
+reschedule:
+    info->watchdog.expires = jiffies + HZ;
+    add_timer(&info->watchdog);
+}
+
+/* ======================================================================= */
+
 static void dma_get_8390_hdr(struct net_device *dev,
                             struct e8390_pkt_hdr *hdr,
                             int ring_page)
@@ -1180,7 +1230,7 @@ static void copyin(unsigned char *dest, unsigned char *src, int c)
     odd = (c & 01); c >>= 1;
 
     if (c) {
-       do { *d++ = readw(s++); } while (--c);
+       do { *d++ = __raw_readw(s++); } while (--c);
     }
     /* get last byte by fetching a word and masking */
     if (odd)
@@ -1198,7 +1248,7 @@ static void copyout(unsigned char *dest, const unsigned char *src, int c)
     odd = (c & 01); c >>= 1;
 
     if (c) {
-       do { writew(*s++, d++); } while (--c);
+       do { __raw_writew(*s++, d++); } while (--c);
     }
     /* copy last byte doing a read-modify-write */
     if (odd)
@@ -1291,10 +1341,10 @@ static int setup_shmem_window(dev_link_t *link, int start_pg,
     /* Try scribbling on the buffer */
     info->base = ioremap(req.Base, window_size);
     for (i = 0; i < (TX_PAGES<<8); i += 2)
-       writew((i>>1), info->base+offset+i);
+       __raw_writew((i>>1), info->base+offset+i);
     udelay(100);
     for (i = 0; i < (TX_PAGES<<8); i += 2)
-       if (readw(info->base+offset+i) != (i>>1)) break;
+       if (__raw_readw(info->base+offset+i) != (i>>1)) break;
     pcnet_reset_8390(dev);
     if (i != (TX_PAGES<<8)) {
        iounmap(info->base);
@@ -1327,11 +1377,7 @@ failed:
 
 /*====================================================================*/
 
-#ifdef MODULE
-int init_module(void)
-#else
-int init_pcnet_cs(void)
-#endif
+static int __init init_pcnet_cs(void)
 {
     servinfo_t serv;
     DEBUG(0, "%s\n", version);
@@ -1341,19 +1387,17 @@ int init_pcnet_cs(void)
               "does not match!\n");
        return -1;
     }
-    register_pcmcia_driver(&dev_info, &pcnet_attach, &pcnet_detach);
-    DEBUG(0, "pcnet driver registered\n" );
+    register_pccard_driver(&dev_info, &pcnet_attach, &pcnet_detach);
     return 0;
 }
 
-//__initcall(init_pcnet_cs);
-
-#ifdef MODULE
-void cleanup_module(void)
+static void __exit exit_pcnet_cs(void)
 {
     DEBUG(0, "pcnet_cs: unloading\n");
-    unregister_pcmcia_driver(&dev_info);
+    unregister_pccard_driver(&dev_info);
     while (dev_list != NULL)
        pcnet_detach(dev_list);
 }
-#endif
+
+module_init(init_pcnet_cs);
+module_exit(exit_pcnet_cs);
index 8d2a678d096a137657fd35610df0a46e0546f3de..8af63739cfe215c0e2471400dcd55c66397fd384 100644 (file)
@@ -2297,7 +2297,7 @@ int  build_auth_frame(ray_dev_t *local, UCHAR *dest, int auth_type)
     return 0;
 } /* End build_auth_frame */
 /*===========================================================================*/
-int init_ray_cs(void)
+static int __init init_ray_cs(void)
 {
     int rc;
     servinfo_t serv;
@@ -2310,30 +2310,29 @@ int init_ray_cs(void)
     }
     rc = register_pcmcia_driver(&dev_info, &ray_attach, &ray_detach);
     DEBUG(1, "raylink init_module register_pcmcia_driver returns 0x%x\n",rc);
+#ifdef CONFIG_PROC_FS    
     proc_register(&proc_root, &ray_cs_proc_entry);
+#endif    
     if (translate != 0) translate = 1;
     return 0;
-} /* init_module */
+} /* init_ray_cs */
 
-static char init_ess_id[ESSID_SIZE];
+#ifndef MODULE
 
+static char init_ess_id[ESSID_SIZE];
 static int __init essid_setup(char *str)
 {
        strncpy(init_ess_id, str, ESSID_SIZE);
        essid = init_ess_id;
        return 1;
 }
-
 __setup("essid=", essid_setup);
 
+#endif
+
 /*===========================================================================*/
-#ifdef MODULE
-int init_module(void)
-{
-       init_ray_cs();
-}
 
-void cleanup_module(void)
+static void __exit exit_ray_cs(void)
 {
     DEBUG(0, "ray_cs: cleanup_module\n");
 
@@ -2342,7 +2341,12 @@ void cleanup_module(void)
         if (dev_list->state & DEV_CONFIG) ray_release((u_long)dev_list);
         ray_detach(dev_list);
     }
+#ifdef CONFIG_PROC_FS    
     proc_unregister(&proc_root, ray_cs_proc_entry.low_ino);
-} /* cleanup_module */
-#endif
+#endif   
+} /* exit_ray_cs */
+
+module_init(init_ray_cs);
+module_exit(exit_ray_cs);
+
 /*===========================================================================*/
diff --git a/drivers/net/ppp.c b/drivers/net/ppp.c
deleted file mode 100644 (file)
index 13f0b88..0000000
+++ /dev/null
@@ -1,3153 +0,0 @@
-/*  PPP for Linux
- *
- *  Michael Callahan <callahan@maths.ox.ac.uk>
- *  Al Longyear <longyear@netcom.com>
- *  Extensively rewritten by Paul Mackerras <paulus@cs.anu.edu.au>
- *
- *  ==FILEVERSION 990510==
- *
- *  NOTE TO MAINTAINERS:
- *     If you modify this file at all, please set the number above to the
- *     date of the modification as YYMMDD (year month day).
- *     ppp.c is shipped with a PPP distribution as well as with the kernel;
- *     if everyone increases the FILEVERSION number above, then scripts
- *     can do the right thing when deciding whether to install a new ppp.c
- *     file.  Don't change the format of that line otherwise, so the
- *     installation script can recognize it.
- */
-
-/*
-   Sources:
-
-   slip.c
-
-   RFC1331: The Point-to-Point Protocol (PPP) for the Transmission of
-   Multi-protocol Datagrams over Point-to-Point Links
-
-   RFC1332: IPCP
-
-   ppp-2.0
-
-   Flags for this module (any combination is acceptable for testing.):
-
-   OPTIMIZE_FLAG_TIME - Number of jiffies to force sending of leading flag
-                       character. This is normally set to ((HZ * 3) / 2).
-                       This is 1.5 seconds. If zero then the leading
-                       flag is always sent.
-
-   CHECK_CHARACTERS   - Enable the checking on all received characters for
-                       8 data bits, no parity. This adds a small amount of
-                       processing for each received character.
-*/
-
-#define OPTIMIZE_FLAG_TIME     ((HZ * 3)/2)
-#define CHECK_CHARACTERS       1
-
-#define PPP_MAX_RCV_QLEN       32      /* max # frames we queue up for pppd */
-
-/* $Id: ppp.c,v 1.24 1999/03/31 06:07:57 paulus Exp $ */
-
-#include <linux/config.h>
-#include <linux/module.h>
-#include <linux/kernel.h>
-#include <linux/sched.h>
-#include <linux/types.h>
-#include <linux/fcntl.h>
-#include <linux/interrupt.h>
-#include <linux/ptrace.h>
-#include <linux/poll.h>
-#include <linux/in.h>
-#include <linux/malloc.h>
-#include <linux/tty.h>
-#include <linux/errno.h>
-#include <linux/string.h>      /* used in new tty drivers */
-#include <linux/signal.h>      /* used in new tty drivers */
-#include <asm/system.h>
-#include <asm/bitops.h>
-#include <asm/uaccess.h>
-
-#include <linux/if.h>
-#include <linux/if_ether.h>
-#include <linux/netdevice.h>
-#include <linux/skbuff.h>
-#include <linux/inet.h>
-#include <linux/ioctl.h>
-#include <linux/ip.h>
-#include <linux/tcp.h>
-#include <linux/if_arp.h>
-#include <net/slhc_vj.h>
-
-#define fcstab ppp_crc16_table         /* Name of the table in the kernel */
-#include <linux/ppp_defs.h>
-
-#include <linux/socket.h>
-#include <linux/if_ppp.h>
-#include <linux/if_pppvar.h>
-#include <linux/ppp-comp.h>
-
-#ifdef CONFIG_KMOD
-#include <linux/kmod.h>
-#endif
-
-/*
- * Local functions
- */
-
-#ifdef CONFIG_MODULES
-static int ppp_register_compressor (struct compressor *cp);
-static void ppp_unregister_compressor (struct compressor *cp);
-#endif
-
-static void ppp_async_init(struct ppp *ppp);
-static void ppp_async_release(struct ppp *ppp);
-static int ppp_tty_sync_push(struct ppp *ppp);
-static int ppp_tty_push(struct ppp *ppp);
-static int ppp_async_encode(struct ppp *ppp);
-static int ppp_async_send(struct ppp *, struct sk_buff *);
-static int ppp_sync_send(struct ppp *, struct sk_buff *);
-static void ppp_tty_flush_output(struct ppp *);
-
-static int ppp_ioctl(struct ppp *, unsigned int, unsigned long);
-static int ppp_set_compression (struct ppp *ppp, struct ppp_option_data *odp);
-static void ppp_proto_ccp(struct ppp *ppp, __u8 *dp, int len, int rcvd);
-static void ppp_ccp_closed(struct ppp *ppp);
-static int ppp_receive_frame(struct ppp *, struct sk_buff *);
-static void ppp_receive_error(struct ppp *ppp);
-static void ppp_output_wakeup(struct ppp *ppp);
-static void ppp_send_ctrl(struct ppp *ppp, struct sk_buff *skb);
-static void ppp_send_frame(struct ppp *ppp, struct sk_buff *skb);
-static void ppp_send_frames(struct ppp *ppp);
-static struct sk_buff *ppp_vj_compress(struct ppp *ppp, struct sk_buff *skb);
-
-static struct ppp *ppp_find (int pid_value);
-static struct ppp *ppp_alloc (void);
-static void ppp_generic_init(struct ppp *ppp);
-static void ppp_release(struct ppp *ppp);
-static void ppp_print_buffer (const char *, const __u8 *, int);
-static struct compressor *find_compressor (int type);
-
-#ifndef OPTIMIZE_FLAG_TIME
-#define OPTIMIZE_FLAG_TIME     0
-#endif
-
-/*
- * Parameters which may be changed via insmod.
- */
-
-static int  flag_time = OPTIMIZE_FLAG_TIME;
-MODULE_PARM(flag_time, "i");
-
-#define CHECK_PPP_MAGIC(ppp)   do { \
-       if (ppp->magic != PPP_MAGIC) { \
-               printk(ppp_magic_warn, ppp, __FILE__, __LINE__); \
-       } \
-} while (0)
-#define CHECK_PPP(a)   do { \
-       CHECK_PPP_MAGIC(ppp); \
-       if (!ppp->inuse) { \
-               printk(ppp_warning, __LINE__); \
-               return a; \
-       } \
-} while (0)
-#define CHECK_PPP_VOID() do { \
-       CHECK_PPP_MAGIC(ppp); \
-       if (!ppp->inuse) { \
-               printk(ppp_warning, __LINE__); \
-               return; \
-       } \
-} while (0)
-
-#define tty2ppp(tty)   ((struct ppp *) ((tty)->disc_data))
-#define dev2ppp(dev)   ((struct ppp *) ((dev)->priv))
-#define ppp2tty(ppp)   ((ppp)->tty)
-#define ppp2dev(ppp)   (&(ppp)->dev)
-
-static struct ppp *ppp_list = NULL;
-static struct ppp *ppp_last = NULL;
-
-/* Define these strings only once for all macro invocations */
-static char ppp_warning[] = KERN_WARNING "PPP: ALERT! not INUSE! %d\n";
-static char ppp_magic_warn[] = KERN_WARNING "bad magic for ppp %p at %s:%d\n";
-
-static char szVersion[]                = PPP_VERSION;
-
-EXPORT_SYMBOL(ppp_register_compressor);
-EXPORT_SYMBOL(ppp_unregister_compressor);
-
-/*************************************************************
- * LINE DISCIPLINE SUPPORT
- *    The following code implements the PPP line discipline
- *    and supports using PPP on an async serial line.
- *************************************************************/
-
-#define in_xmap(ppp,c) (ppp->xmit_async_map[(c) >> 5] & (1 << ((c) & 0x1f)))
-#define in_rmap(ppp,c) ((((unsigned int) (__u8) (c)) < 0x20) && \
-                       ppp->recv_async_map & (1 << (c)))
-
-/*
- * TTY callbacks
- */
-
-static ssize_t ppp_tty_read(struct tty_struct *, struct file *, __u8 *,
-                           size_t);
-static ssize_t ppp_tty_write(struct tty_struct *, struct file *, const __u8 *,
-                            size_t);
-static int ppp_tty_ioctl(struct tty_struct *, struct file *, unsigned int,
-                        unsigned long);
-static unsigned int ppp_tty_poll(struct tty_struct *tty, struct file *filp,
-                                poll_table * wait);
-static int ppp_tty_open (struct tty_struct *);
-static void ppp_tty_close (struct tty_struct *);
-static int ppp_tty_room (struct tty_struct *tty);
-static void ppp_tty_receive (struct tty_struct *tty, const __u8 * cp,
-                            char *fp, int count);
-static void ppp_tty_wakeup (struct tty_struct *tty);
-
-__u16 ppp_crc16_table[256] =
-{
-       0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf,
-       0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7,
-       0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e,
-       0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876,
-       0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd,
-       0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5,
-       0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c,
-       0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974,
-       0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb,
-       0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3,
-       0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a,
-       0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72,
-       0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9,
-       0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1,
-       0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738,
-       0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70,
-       0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7,
-       0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff,
-       0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036,
-       0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e,
-       0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5,
-       0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd,
-       0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134,
-       0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c,
-       0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3,
-       0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb,
-       0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232,
-       0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a,
-       0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1,
-       0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9,
-       0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330,
-       0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78
-};
-EXPORT_SYMBOL(ppp_crc16_table);
-
-#ifdef CHECK_CHARACTERS
-static __u32 paritytab[8] =
-{
-       0x96696996, 0x69969669, 0x69969669, 0x96696996,
-       0x69969669, 0x96696996, 0x96696996, 0x69969669
-};
-#endif
-
-/*
- * This procedure is called at initialization time to register
- * the PPP line discipline.
- */
-static int
-ppp_first_time(void)
-{
-       static struct tty_ldisc ppp_ldisc;
-       int    status;
-
-       printk(KERN_INFO
-              "PPP: version %s (demand dialling)"
-              "\n", szVersion);
-
-#ifndef MODULE /* slhc module logic has its own copyright announcement */
-       printk(KERN_INFO
-              "TCP compression code copyright 1989 Regents of the "
-              "University of California\n");
-#endif
-
-       /*
-        * Register the tty discipline
-        */
-       (void) memset (&ppp_ldisc, 0, sizeof (ppp_ldisc));
-       ppp_ldisc.magic         = TTY_LDISC_MAGIC;
-       ppp_ldisc.name          = "ppp";
-       ppp_ldisc.open          = ppp_tty_open;
-       ppp_ldisc.close         = ppp_tty_close;
-       ppp_ldisc.read          = ppp_tty_read;
-       ppp_ldisc.write         = ppp_tty_write;
-       ppp_ldisc.ioctl         = ppp_tty_ioctl;
-       ppp_ldisc.poll          = ppp_tty_poll;
-       ppp_ldisc.receive_room  = ppp_tty_room;
-       ppp_ldisc.receive_buf   = ppp_tty_receive;
-       ppp_ldisc.write_wakeup  = ppp_tty_wakeup;
-
-       status = tty_register_ldisc (N_PPP, &ppp_ldisc);
-       if (status == 0)
-               printk(KERN_INFO "PPP line discipline registered.\n");
-       else
-               printk(KERN_ERR "error registering line discipline: %d\n",
-                      status);
-       return status;
-}
-
-
-#ifndef MODULE
-/*
- * Called at boot time if the PPP driver is compiled into the kernel.
- */
-int
-ppp_init(struct net_device *dev)
-{
-       static int first_time = 1;
-       int    answer = 0;
-
-       if (first_time) {
-               first_time = 0;
-               answer     = ppp_first_time();
-       }
-       if (answer == 0)
-               answer = -ENODEV;
-       return answer;
-}
-#endif
-
-/*
- * Initialize the async-specific parts of the ppp structure.
- */
-static void
-ppp_async_init(struct ppp *ppp)
-{
-       ppp->escape = 0;
-       ppp->toss   = 0xE0;
-       ppp->tty_pushing = 0;
-
-       memset (ppp->xmit_async_map, 0, sizeof (ppp->xmit_async_map));
-       ppp->xmit_async_map[0] = 0xffffffff;
-       ppp->xmit_async_map[3] = 0x60000000;
-       ppp->recv_async_map    = 0xffffffff;
-
-       ppp->tpkt = NULL;
-       ppp->tfcs = PPP_INITFCS;
-       ppp->optr = ppp->obuf;
-       ppp->olim = ppp->obuf;
-
-       ppp->rpkt = NULL;
-       ppp->rfcs = PPP_INITFCS;
-
-       ppp->tty  = NULL;
-       ppp->backup_tty = NULL;
-
-       ppp->bytes_sent = 0;
-       ppp->bytes_rcvd = 0;
-}
-
-/*
- * Clean up the async-specific parts of the ppp structure.
- */
-static void
-ppp_async_release(struct ppp *ppp)
-{
-       struct sk_buff *skb;
-
-       if ((skb = ppp->rpkt) != NULL)
-               kfree_skb(skb);
-       ppp->rpkt = NULL;
-       if ((skb = ppp->tpkt) != NULL)
-               kfree_skb(skb);
-       ppp->tpkt = NULL;
-}
-
-/*
- * TTY callback.
- *
- * Called when the tty discipline is switched to PPP.
- */
-
-static int
-ppp_tty_open (struct tty_struct *tty)
-{
-       struct ppp *ppp;
-
-       /*
-        * Allocate a ppp structure to use.
-        */
-       tty->disc_data = NULL;
-       ppp = ppp_find(current->pid);
-       if (ppp != NULL) {
-               /*
-                * If we are taking over a ppp unit which is currently
-                * connected to a loopback pty, there's not much to do.
-                */
-               CHECK_PPP(-EINVAL);
-
-       } else {
-               ppp = ppp_alloc();
-               if (ppp == NULL) {
-                       printk(KERN_ERR "ppp_alloc failed\n");
-                       return -ENFILE;
-               }
-
-               /*
-                * Initialize the control block
-                */
-               ppp_generic_init(ppp);
-               ppp_async_init(ppp);
-
-               MOD_INC_USE_COUNT;
-       }
-
-       tty->disc_data = ppp;
-       ppp->tty       = tty;
-
-       /*
-        * Flush any pending characters in the driver
-        */
-       if (tty->driver.flush_buffer)
-               tty->driver.flush_buffer (tty);
-
-       return ppp->line;
-}
-
-/*
- * TTY callback.
- *
- * Called when the line discipline is changed to something
- * else, the tty is closed, or the tty detects a hangup.
- */
-
-static void
-ppp_tty_close (struct tty_struct *tty)
-{
-       struct ppp *ppp = tty2ppp(tty);
-
-       if (ppp == NULL)
-               return;
-       tty->disc_data = NULL;
-       if (ppp->magic != PPP_MAGIC) {
-               printk(KERN_WARNING "ppp_tty_close: bogus\n");
-               return;
-       }
-       if (!ppp->inuse) {
-               printk(KERN_WARNING "ppp_tty_close: not inuse\n");
-               ppp->tty = ppp->backup_tty = 0;
-               return;
-       }
-       if (tty == ppp->backup_tty)
-               ppp->backup_tty = 0;
-       if (tty != ppp->tty)
-               return;
-       if (ppp->backup_tty) {
-               ppp->tty = ppp->backup_tty;
-               if (ppp_tty_push(ppp))
-                       ppp_output_wakeup(ppp);
-               wake_up_interruptible(&ppp->read_wait);
-       } else {
-               ppp->tty = 0;
-               ppp->sc_xfer = 0;
-               if (ppp->flags & SC_DEBUG)
-                       printk(KERN_INFO "ppp: channel %s closing.\n",
-                              ppp2dev(ppp)->name);
-
-               ppp_async_release(ppp);
-               ppp_release(ppp);
-               MOD_DEC_USE_COUNT;
-       }
-}
-
-/*
- * Read a PPP frame from the rcv_q list,
- * waiting if necessary
- */
-static ssize_t
-ppp_tty_read(struct tty_struct *tty, struct file *file, __u8 * buf,
-            size_t nr)
-{
-       struct ppp *ppp = tty2ppp (tty);
-       struct sk_buff *skb;
-       ssize_t len, err;
-
-       /*
-        * Validate the pointers
-        */
-       if (!ppp)
-               return -EIO;
-       CHECK_PPP(-ENXIO);
-
-       /*
-        * Before we attempt to write the frame to the user, ensure that the
-        * user has access to the pages for the total buffer length.
-        */
-       err = verify_area(VERIFY_WRITE, buf, nr);
-       if (err != 0)
-               return (err);
-
-       /*
-        * Wait for a frame to arrive if necessary.
-        * We increment the module use count so that the module
-        * can't go away while we're sleeping.
-        */
-       MOD_INC_USE_COUNT;
-       skb = NULL;
-       for (;;) {
-               ppp = tty2ppp(tty);
-               err = 0;
-               if (!ppp || ppp->magic != PPP_MAGIC || !ppp->inuse
-                   || tty != ppp->tty)
-                       break;
-
-               skb = skb_dequeue(&ppp->rcv_q);
-               if (skb != 0)
-                       break;
-
-               /*
-                * If no frame is available, return -EAGAIN or wait.
-                */
-               err = -EAGAIN;
-               if (file->f_flags & O_NONBLOCK)
-                       break;
-
-               interruptible_sleep_on(&ppp->read_wait);
-               err = -EINTR;
-               if (signal_pending(current))
-                       break;
-       }
-       MOD_DEC_USE_COUNT;
-       if (skb == 0)
-               return err;
-
-       /*
-        * Ensure that the frame will fit within the caller's buffer.
-        * If not, just discard the frame.
-        */
-       len = skb->len;
-       if (len > nr) {
-               if (ppp->flags & SC_DEBUG)
-                       printk(KERN_DEBUG
-                              "ppp: read of %lu bytes too small for %ld "
-                              "frame\n", (unsigned long) nr, (long) len);
-               ppp->stats.ppp_ierrors++;
-               err = -EOVERFLOW;
-               goto out;
-       }
-
-       /*
-        * Copy the received data from the buffer to the caller's area.
-        */
-       err = len;
-       if (copy_to_user(buf, skb->data, len))
-               err = -EFAULT;
-
-out:
-       kfree_skb(skb);
-       return err;
-}
-
-/*
- * Writing to a tty in ppp line discipline sends a PPP frame.
- * Used by pppd to send control packets (LCP, etc.).
- */
-static ssize_t
-ppp_tty_write(struct tty_struct *tty, struct file *file, const __u8 * data,
-             size_t count)
-{
-       struct ppp *ppp = tty2ppp (tty);
-       __u8 *new_data;
-       struct sk_buff *skb;
-
-       /*
-        * Verify the pointers.
-        */
-       if (!ppp)
-               return -EIO;
-
-       if (ppp->magic != PPP_MAGIC)
-               return -EIO;
-
-       CHECK_PPP(-ENXIO);
-
-       /*
-        * Ensure that the caller does not wish to send too much.
-        */
-       if (count > PPP_MTU + PPP_HDRLEN) {
-               if (ppp->flags & SC_DEBUG)
-                       printk(KERN_WARNING
-                              "ppp_tty_write: truncating user packet "
-                              "from %lu to mtu %d\n", (unsigned long) count,
-                              PPP_MTU + PPP_HDRLEN);
-               count = PPP_MTU + PPP_HDRLEN;
-       }
-
-       /*
-        * Allocate a buffer for the data and fetch it from the user space.
-        */
-       skb = alloc_skb(count, GFP_KERNEL);
-       if (skb == NULL) {
-               printk(KERN_ERR "ppp_tty_write: no memory\n");
-               return 0;
-       }
-       new_data = skb_put(skb, count);
-
-       /*
-        * Retrieve the user's buffer
-        */
-       if (copy_from_user(new_data, data, count)) {
-               kfree_skb(skb);
-               return -EFAULT;
-       }
-
-       /*
-        * Send the frame
-        */
-       ppp_send_ctrl(ppp, skb);
-
-       return (ssize_t) count;
-}
-
-/*
- * Process the IOCTL call for the tty device.
- * Only the ioctls that relate to using ppp on async serial lines
- * are processed here; the rest are handled by ppp_ioctl.
- */
-static int
-ppp_tty_ioctl (struct tty_struct *tty, struct file * file,
-               unsigned int param2, unsigned long param3)
-{
-       struct ppp *ppp = tty2ppp (tty);
-       register int temp_i = 0;
-       int error = -EFAULT;
-
-       /*
-        * Verify the status of the PPP device.
-        */
-       if (!ppp || ppp->magic != PPP_MAGIC || !ppp->inuse)
-               return -ENXIO;
-
-       /*
-        * The user must have an euid of root to do these requests.
-        */
-       if (!capable(CAP_NET_ADMIN))
-               return -EPERM;
-
-       switch (param2) {
-       case PPPIOCGASYNCMAP:
-               /*
-                * Retrieve the transmit async map
-                */
-               if (put_user(ppp->xmit_async_map[0], (int *) param3))
-                       break;
-               error = 0;
-               break;
-
-       case PPPIOCSASYNCMAP:
-               /*
-                * Set the transmit async map
-                */
-               if (get_user(temp_i, (int *) param3))
-                       break;
-               ppp->xmit_async_map[0] = temp_i;
-               if (ppp->flags & SC_DEBUG)
-                       printk(KERN_INFO
-                              "ppp_tty_ioctl: set xmit asyncmap %x\n",
-                              ppp->xmit_async_map[0]);
-               error = 0;
-               break;
-
-       case PPPIOCSRASYNCMAP:
-               /*
-                * Set the receive async map
-                */
-               if (get_user(temp_i, (int *) param3))
-                       break;
-               ppp->recv_async_map = temp_i;
-               if (ppp->flags & SC_DEBUG)
-                       printk(KERN_INFO
-                              "ppp_tty_ioctl: set rcv asyncmap %x\n",
-                              ppp->recv_async_map);
-               error = 0;
-               break;
-
-       case PPPIOCGXASYNCMAP:
-               /*
-                * Get the map of characters to be escaped on transmission.
-                */
-               if (copy_to_user((void *) param3, ppp->xmit_async_map,
-                                sizeof (ppp->xmit_async_map)))
-                       break;
-               error = 0;
-               break;
-
-       case PPPIOCSXASYNCMAP:
-               /*
-                * Set the map of characters to be escaped on transmission.
-                */
-               {
-                       __u32 temp_tbl[8];
-
-                       if (copy_from_user(temp_tbl, (void *) param3,
-                                          sizeof (temp_tbl)))
-                               break;
-
-                       temp_tbl[1]  =  0x00000000;
-                       temp_tbl[2] &= ~0x40000000;
-                       temp_tbl[3] |=  0x60000000;
-
-                       memcpy(ppp->xmit_async_map, temp_tbl,
-                              sizeof (ppp->xmit_async_map));
-
-                       if (ppp->flags & SC_DEBUG)
-                               printk(KERN_INFO
-                                      "ppp_tty_ioctl: set xasyncmap\n");
-                       error = 0;
-               }
-               break;
-
-       case PPPIOCXFERUNIT:
-               /*
-                * Set up this PPP unit to be used next time this
-                * process sets a tty to PPP line discipline.
-                */
-               ppp->backup_tty = tty;
-               ppp->sc_xfer = current->pid;
-               error = 0;
-               break;
-
-       case TCGETS:
-       case TCGETA:
-               /*
-                * Allow users to read, but not set, the serial port parameters
-                */
-               error = n_tty_ioctl (tty, file, param2, param3);
-               break;
-
-       case TCFLSH:
-               /*
-                * Flush our buffers, then call the generic code to
-                * flush the serial port's buffer.
-                */
-               if (param3 == TCIFLUSH || param3 == TCIOFLUSH) {
-                       struct sk_buff *skb;
-                       while ((skb = skb_dequeue(&ppp->rcv_q)) != NULL)
-                               kfree_skb(skb);
-               }
-               if (param3 == TCIOFLUSH || param3 == TCOFLUSH)
-                       ppp_tty_flush_output(ppp);
-               error = n_tty_ioctl (tty, file, param2, param3);
-               break;
-
-       case FIONREAD:
-               /*
-                * Returns how many bytes are available for a read().
-                */
-               {
-                       unsigned long flags;
-                       struct sk_buff *skb;
-                       int count = 0;
-
-                       save_flags(flags);
-                       cli();
-                       skb = skb_peek(&ppp->rcv_q);
-                       if (skb != 0)
-                               count = skb->len;
-                       restore_flags(flags);
-                       if (put_user(count, (int *) param3))
-                               break;
-                       error = 0;
-               }
-               break;
-
-       default:
-               /*
-                *  All other ioctl() events will come here.
-                */
-               error = ppp_ioctl(ppp, param2, param3);
-               break;
-       }
-       return error;
-}
-
-/*
- * TTY callback.
- *
- * Process the poll() statement for the PPP device.
- */
-
-static unsigned int
-ppp_tty_poll(struct tty_struct *tty, struct file *filp, poll_table * wait)
-{
-       struct ppp *ppp = tty2ppp(tty);
-       unsigned int mask = 0;
-
-       if (ppp && ppp->magic == PPP_MAGIC && tty == ppp->tty) {
-               CHECK_PPP(0);
-
-               poll_wait(filp, &ppp->read_wait, wait);
-
-               if (skb_peek(&ppp->rcv_q) != NULL)
-                       mask |= POLLIN | POLLRDNORM;
-               if (tty->flags & (1 << TTY_OTHER_CLOSED)
-                   || tty_hung_up_p(filp))
-                       mask |= POLLHUP;
-               mask |= POLLOUT | POLLWRNORM;
-       }
-       return mask;
-}
-
-/*
- * This function is called by the tty driver when the transmit buffer has
- * additional space. It is used by the ppp code to continue to transmit
- * the current buffer should the buffer have been partially sent.
- */
-static void
-ppp_tty_wakeup (struct tty_struct *tty)
-{
-       struct ppp *ppp = tty2ppp (tty);
-
-       tty->flags &= ~(1 << TTY_DO_WRITE_WAKEUP);
-       if (!ppp)
-               return;
-       CHECK_PPP_VOID();
-       if (tty != ppp->tty)
-               return;
-
-       if (ppp_tty_push(ppp))
-               ppp_output_wakeup(ppp);
-}
-
-/*
- * Send a packet to the peer over a synchronous tty line.
- * All encoding and FCS are handled by hardware.
- * Addr/Ctrl and Protocol field compression implemented.
- * Returns -1 iff the packet could not be accepted at present,
- * 0 if the packet was accepted but we can't accept another yet, or
- * 1 if we can accept another packet immediately.
- * If this procedure returns 0, ppp_output_wakeup will be called
- * exactly once.
- */
-static int
-ppp_sync_send(struct ppp *ppp, struct sk_buff *skb)
-{
-       unsigned char *data;
-       int islcp;
-       
-       CHECK_PPP(0);
-
-       if (ppp->tpkt != NULL)
-               return -1;
-       ppp->tpkt = skb;
-
-       data = ppp->tpkt->data;
-       
-       /*
-        * LCP packets with code values between 1 (configure-reqest)
-        * and 7 (code-reject) must be sent as though no options
-        * had been negotiated.
-        */
-       islcp = PPP_PROTOCOL(data) == PPP_LCP
-               && 1 <= data[PPP_HDRLEN] && data[PPP_HDRLEN] <= 7;
-
-       /* only reset idle time for data packets */
-       if (PPP_PROTOCOL(data) < 0x8000)
-               ppp->last_xmit = jiffies;
-       ++ppp->stats.ppp_opackets;
-       ppp->stats.ppp_ooctects += ppp->tpkt->len;
-
-       if ( !(data[2]) && (ppp->flags & SC_COMP_PROT) ) {
-               /* compress protocol field */
-               data[2] = data[1];
-               data[1] = data[0];
-               skb_pull(ppp->tpkt,1);
-               data = ppp->tpkt->data;
-       }
-       
-       /*
-        * Do address/control compression
-        */
-       if ((ppp->flags & SC_COMP_AC) && !islcp
-           && PPP_ADDRESS(data) == PPP_ALLSTATIONS
-           && PPP_CONTROL(data) == PPP_UI) {
-               /* strip addr and control field */
-               skb_pull(ppp->tpkt,2);
-       }
-
-       return ppp_tty_sync_push(ppp);
-}
-
-/*
- * Push a synchronous frame out to the tty.
- * Returns 1 if frame accepted (or discarded), 0 otherwise.
- */
-static int
-ppp_tty_sync_push(struct ppp *ppp)
-{
-       int sent;
-       struct tty_struct *tty = ppp2tty(ppp);
-       unsigned long flags;
-               
-       CHECK_PPP(0);
-
-       if (ppp->tpkt == NULL)
-               return 0;
-               
-       /* prevent reentrancy with tty_pushing flag */          
-       save_flags(flags);
-       cli();
-       if (ppp->tty_pushing) {
-               /* record wakeup attempt so we don't lose */
-               /* a wakeup call while doing push processing */
-               ppp->woke_up=1;
-               restore_flags(flags);
-               return 0;
-       }
-       ppp->tty_pushing = 1;
-       restore_flags(flags);
-       
-       if (tty == NULL || tty->disc_data != (void *) ppp)
-               goto flush;
-               
-       for(;;){
-               ppp->woke_up=0;
-               
-               /* Note: Sync driver accepts complete frame or nothing */
-               tty->flags |= (1 << TTY_DO_WRITE_WAKEUP);
-               sent = tty->driver.write(tty, 0, ppp->tpkt->data, ppp->tpkt->len);
-               if (sent < 0) {
-                       /* write error (possible loss of CD) */
-                       /* record error and discard current packet */
-                       ppp->stats.ppp_oerrors++;
-                       break;
-               }
-               ppp->stats.ppp_obytes += sent;
-               if (sent < ppp->tpkt->len) {
-                       /* driver unable to accept frame just yet */
-                       save_flags(flags);
-                       cli();
-                       if (ppp->woke_up) {
-                               /* wake up called while processing */
-                               /* try to send the frame again */
-                               restore_flags(flags);
-                               continue;
-                       }
-                       /* wait for wakeup callback to try send again */
-                       ppp->tty_pushing = 0;
-                       restore_flags(flags);
-                       return 0;
-               }
-               break;
-       }
-flush: 
-       /* done with current packet (sent or discarded) */
-       kfree_skb(ppp->tpkt);
-       ppp->tpkt = 0;
-       ppp->tty_pushing = 0;
-       return 1;
-}
-
-/*
- * Send a packet to the peer over an async tty line.
- * Returns -1 iff the packet could not be accepted at present,
- * 0 if the packet was accepted but we can't accept another yet, or
- * 1 if we can accept another packet immediately.
- * If this procedure returns 0, ppp_output_wakeup will be called
- * exactly once.
- */
-static int
-ppp_async_send(struct ppp *ppp, struct sk_buff *skb)
-{
-       CHECK_PPP(0);
-
-       ppp_tty_push(ppp);
-
-       if (ppp->tpkt != NULL)
-               return -1;
-       ppp->tpkt = skb;
-       ppp->tpkt_pos = 0;
-
-       return ppp_tty_push(ppp);
-}
-
-/*
- * Push as much data as possible out to the tty.
- * Returns 1 if we finished encoding the current frame, 0 otherwise.
- */
-static int
-ppp_tty_push(struct ppp *ppp)
-{
-       int avail, sent, done = 0;
-       struct tty_struct *tty = ppp2tty(ppp);
-       
-       if (ppp->flags & SC_SYNC) 
-               return ppp_tty_sync_push(ppp);
-
-       CHECK_PPP(0);
-       if (ppp->tty_pushing) {
-               ppp->woke_up = 1;
-               return 0;
-       }
-       if (tty == NULL || tty->disc_data != (void *) ppp)
-               goto flush;
-       while (ppp->optr < ppp->olim || ppp->tpkt != 0) {
-               ppp->tty_pushing = 1;
-               mb();
-               ppp->woke_up = 0;
-               avail = ppp->olim - ppp->optr;
-               if (avail > 0) {
-                       tty->flags |= (1 << TTY_DO_WRITE_WAKEUP);
-                       sent = tty->driver.write(tty, 0, ppp->optr, avail);
-                       if (sent < 0)
-                               goto flush;     /* error, e.g. loss of CD */
-                       ppp->stats.ppp_obytes += sent;
-                       ppp->optr += sent;
-                       if (sent < avail) {
-                               wmb();
-                               ppp->tty_pushing = 0;
-                               mb();
-                               if (ppp->woke_up)
-                                       continue;
-                               return done;
-                       }
-               }
-               if (ppp->tpkt != 0)
-                       done = ppp_async_encode(ppp);
-               wmb();
-               ppp->tty_pushing = 0;
-       }
-       return done;
-
-flush:
-       ppp->tty_pushing = 1;
-       mb();
-       ppp->stats.ppp_oerrors++;
-       if (ppp->tpkt != 0) {
-               kfree_skb(ppp->tpkt);
-               ppp->tpkt = 0;
-               done = 1;
-       }
-       ppp->optr = ppp->olim;
-       wmb();
-       ppp->tty_pushing = 0;
-       return done;
-}
-
-/*
- * Procedure to encode the data for async serial transmission.
- * Does octet stuffing (escaping) and address/control
- * and protocol compression.
- * Assumes ppp->opkt != 0 on entry.
- * Returns 1 if we finished the current frame, 0 otherwise.
- */
-static int
-ppp_async_encode(struct ppp *ppp)
-{
-       int fcs, i, count, c;
-       unsigned char *buf, *buflim;
-       unsigned char *data;
-       int islcp;
-
-       CHECK_PPP(0);
-
-       buf = ppp->obuf;
-       ppp->olim = buf;
-       ppp->optr = buf;
-       i = ppp->tpkt_pos;
-       data = ppp->tpkt->data;
-       count = ppp->tpkt->len;
-       fcs = ppp->tfcs;
-
-       /*
-        * LCP packets with code values between 1 (configure-reqest)
-        * and 7 (code-reject) must be sent as though no options
-        * had been negotiated.
-        */
-       islcp = PPP_PROTOCOL(data) == PPP_LCP
-               && 1 <= data[PPP_HDRLEN] && data[PPP_HDRLEN] <= 7;
-
-       if (i == 0) {
-               /*
-                * Start of a new packet - insert the leading FLAG
-                * character if necessary.
-                */
-               if (islcp || flag_time == 0
-                   || jiffies - ppp->last_xmit >= flag_time)
-                       *buf++ = PPP_FLAG;
-               /* only reset idle time for data packets */
-               if (PPP_PROTOCOL(data) < 0x8000)
-                       ppp->last_xmit = jiffies;
-               fcs = PPP_INITFCS;
-               ++ppp->stats.ppp_opackets;
-               ppp->stats.ppp_ooctects += count;
-
-               /*
-                * Do address/control compression
-                */
-               if ((ppp->flags & SC_COMP_AC) != 0 && !islcp
-                   && PPP_ADDRESS(data) == PPP_ALLSTATIONS
-                   && PPP_CONTROL(data) == PPP_UI)
-                       i += 2;
-       }
-
-       /*
-        * Once we put in the last byte, we need to put in the FCS
-        * and closing flag, so make sure there is at least 7 bytes
-        * of free space in the output buffer.
-        */
-       buflim = buf + OBUFSIZE - 6;
-       while (i < count && buf < buflim) {
-               c = data[i++];
-               if (i == 3 && c == 0 && (ppp->flags & SC_COMP_PROT))
-                       continue;       /* compress protocol field */
-               fcs = PPP_FCS(fcs, c);
-               if (in_xmap(ppp, c) || (islcp && c < 0x20)) {
-                       *buf++ = PPP_ESCAPE;
-                       c ^= 0x20;
-               }
-               *buf++ = c;
-       }
-
-       if (i == count) {
-               /*
-                * We have finished the packet.  Add the FCS and flag.
-                */
-               fcs = ~fcs;
-               c = fcs & 0xff;
-               if (in_xmap(ppp, c) || (islcp && c < 0x20)) {
-                       *buf++ = PPP_ESCAPE;
-                       c ^= 0x20;
-               }
-               *buf++ = c;
-               c = (fcs >> 8) & 0xff;
-               if (in_xmap(ppp, c) || (islcp && c < 0x20)) {
-                       *buf++ = PPP_ESCAPE;
-                       c ^= 0x20;
-               }
-               *buf++ = c;
-               *buf++ = PPP_FLAG;
-               ppp->olim = buf;
-
-               kfree_skb(ppp->tpkt);
-               ppp->tpkt = 0;
-               return 1;
-       }
-
-       /*
-        * Remember where we are up to in this packet.
-        */
-       ppp->olim = buf;
-       ppp->tpkt_pos = i;
-       ppp->tfcs = fcs;
-       return 0;
-}
-
-/*
- * Flush output from our internal buffers.
- * Called for the TCFLSH ioctl.
- */
-static void
-ppp_tty_flush_output(struct ppp *ppp)
-{
-       struct sk_buff *skb;
-       int done = 0;
-
-       while ((skb = skb_dequeue(&ppp->xmt_q)) != NULL)
-               kfree_skb(skb);
-       ppp->tty_pushing = 1;
-       mb();
-       ppp->optr = ppp->olim;
-       if (ppp->tpkt != NULL) {
-               kfree_skb(ppp->tpkt);
-               ppp->tpkt = 0;
-               done = 1;
-       }
-       wmb();
-       ppp->tty_pushing = 0;
-       if (done)
-               ppp_output_wakeup(ppp);
-}
-
-/*
- * Callback function from tty driver. Return the amount of space left
- * in the receiver's buffer to decide if remote transmitter is to be
- * throttled.
- */
-static int
-ppp_tty_room (struct tty_struct *tty)
-{
-       return 65536;       /* We can handle an infinite amount of data. :-) */
-}
-
-/*
- * Callback function when data is available at the tty driver.
- */
-static void
-ppp_tty_receive (struct tty_struct *tty, const __u8 * data,
-                char *flags, int count)
-{
-       register struct ppp *ppp = tty2ppp (tty);
-       struct sk_buff *skb;
-       int chr, flg;
-       unsigned char *p;
-
-       if (ppp != 0)
-               CHECK_PPP_VOID();
-       /*
-        * This can happen if stuff comes in on the backup tty.
-        */
-       if (ppp == 0 || tty != ppp->tty)
-               return;
-       /*
-        * Verify the table pointer and ensure that the line is
-        * still in PPP discipline.
-        */
-       if (ppp->magic != PPP_MAGIC) {
-               if (ppp->flags & SC_DEBUG)
-                       printk(KERN_DEBUG
-                              "PPP: tty_receive called but couldn't find "
-                              "PPP struct.\n");
-               return;
-       }
-       /*
-        * Print the buffer if desired
-        */
-       if (ppp->flags & SC_LOG_RAWIN)
-               ppp_print_buffer ("receive buffer", data, count);
-
-       ppp->stats.ppp_ibytes += count;
-       skb = ppp->rpkt;
-       
-       if ( ppp->flags & SC_SYNC ) {
-               /* synchronous mode */
-               
-               if (ppp->toss==0xE0) {
-                       /* this is the 1st frame, reset vj comp */
-                       ppp_receive_error(ppp);
-                       ppp->toss = 0;
-               }
-               
-               /*
-                * Allocate an skbuff for frame.
-                * The 128 is room for VJ header expansion.
-                */
-               
-               if (skb == NULL)
-                       skb = dev_alloc_skb(ppp->mru + 128 + PPP_HDRLEN);
-                       
-               if (skb == NULL) {
-                       if (ppp->flags & SC_DEBUG)
-                               printk(KERN_DEBUG "couldn't "
-                                      "alloc skb for recv\n");
-               } else {
-                       /*
-                        * Decompress A/C and protocol compression here.
-                        */
-                       p = skb_put(skb, 2);
-                       p[0] = PPP_ALLSTATIONS;
-                       p[1] = PPP_UI;
-                       if (*data == PPP_ALLSTATIONS) {
-                               data += 2;
-                               count -= 2;
-                       }
-                       if ((*data & 1) != 0) {
-                               p = skb_put(skb, 1);
-                               p[0] = 0;
-                       }
-
-                       /* copy frame to socket buffer */
-                       p = skb_put(skb, count);
-                       memcpy(p,data,count);
-                       
-                       /*
-                        * Check if we've overflowed the MRU
-                        */
-                       if (skb->len >= ppp->mru + PPP_HDRLEN + 2
-                           || skb_tailroom(skb) <= 0) {
-                               ++ppp->estats.rx_length_errors;
-                               if (ppp->flags & SC_DEBUG)
-                                       printk(KERN_DEBUG "rcv frame too long: "
-                                              "len=%d mru=%d hroom=%d troom=%d\n",
-                                              skb->len, ppp->mru, skb_headroom(skb),
-                                              skb_tailroom(skb));
-                       } else {
-                               if (!ppp_receive_frame(ppp, skb)) {
-                                       kfree_skb(skb);
-                                       ppp_receive_error(ppp);
-                               }
-                       }
-               
-                       /* Reset for the next frame */
-                       skb = NULL;
-               }
-               ppp->rpkt = skb;
-               return;
-       }
-       
-       while (count-- > 0) {
-               /*
-                * Collect the character and error condition for the character.
-                * Set the toss flag for the first character error.
-                */
-               chr = *data++;
-               if (flags) {
-                       flg = *flags++;
-                       if (flg) {
-                               if (ppp->toss == 0)
-                                       ppp->toss = flg;
-                               switch (flg) {
-                               case TTY_OVERRUN:
-                                       ++ppp->estats.rx_fifo_errors;
-                                       break;
-                               case TTY_FRAME:
-                               case TTY_BREAK:
-                                       ++ppp->estats.rx_frame_errors;
-                                       break;
-                               }
-                               continue;
-                       }
-               }
-
-               /*
-                * Set the flags for d7 being 0/1 and parity being
-                * even/odd so that the normal processing would have
-                * all flags set at the end of the session.  A
-                * missing flag bit indicates an error condition.
-                */
-
-#ifdef CHECK_CHARACTERS
-               if (chr & 0x80)
-                       ppp->flags |= SC_RCV_B7_1;
-               else
-                       ppp->flags |= SC_RCV_B7_0;
-
-               if (paritytab[chr >> 5] & (1 << (chr & 0x1F)))
-                       ppp->flags |= SC_RCV_ODDP;
-               else
-                       ppp->flags |= SC_RCV_EVNP;
-#endif
-
-               if (chr == PPP_FLAG) {
-                       /*
-                        * FLAG. This is the end of the block. If the block
-                        * ends with ESC FLAG, then the block is to be ignored.
-                        */
-                       if (ppp->escape)
-                               ppp->toss |= 0x80;
-                       /*
-                        * Process the frame if it was received correctly.
-                        * If there was an error, let the VJ decompressor know.
-                        * There are 4 cases here:
-                        * skb != NULL, toss != 0: error in frame
-                        * skb != NULL, toss == 0: frame ok
-                        * skb == NULL, toss != 0: very first frame,
-                        *      error on 1st char, or alloc_skb failed
-                        * skb == NULL, toss == 0: empty frame (~~)
-                        */
-                       if (ppp->toss || !ppp_receive_frame(ppp, skb)) {
-                               if (ppp->toss && (ppp->flags & SC_DEBUG))
-                                       printk(KERN_DEBUG
-                                              "ppp: tossing frame (%x)\n",
-                                              ppp->toss);
-                               if (skb != NULL)
-                                       kfree_skb(skb);
-                               if (!(ppp->toss == 0xE0 || ppp->toss == 0x80))
-                                       ++ppp->stats.ppp_ierrors;
-                               ppp_receive_error(ppp);
-                       }
-                       /*
-                        * Reset for the next frame.
-                        */
-                       skb = NULL;
-                       ppp->rfcs = PPP_INITFCS;
-                       ppp->escape = 0;
-                       ppp->toss = 0;
-                       continue;
-               }
-
-               /* If we're tossing, look no further. */
-               if (ppp->toss != 0)
-                       continue;
-
-               /* If this is a control char to be ignored, do so */
-               if (in_rmap(ppp, chr))
-                       continue;
-
-               /*
-                * Modify the next character if preceded by escape.
-                * The escape character (0x7d) could be an escaped
-                * 0x5d, if it follows an escape :-)
-                */
-               if (ppp->escape) {
-                       chr ^= PPP_TRANS;
-                       ppp->escape = 0;
-               } else if (chr == PPP_ESCAPE) {
-                       ppp->escape = PPP_TRANS;
-                       continue;
-               }
-
-               /*
-                * Allocate an skbuff on the first character received.
-                * The 128 is room for VJ header expansion and FCS.
-                */
-               if (skb == NULL) {
-                       skb = dev_alloc_skb(ppp->mru + 128 + PPP_HDRLEN);
-                       if (skb == NULL) {
-                               if (ppp->flags & SC_DEBUG)
-                                       printk(KERN_DEBUG "couldn't "
-                                              "alloc skb for recv\n");
-                               ppp->toss = 1;
-                               continue;
-                       }
-               }
-
-               /*
-                * Decompress A/C and protocol compression here.
-                */
-               if (skb->len == 0 && chr != PPP_ALLSTATIONS) {
-                       p = skb_put(skb, 2);
-                       p[0] = PPP_ALLSTATIONS;
-                       p[1] = PPP_UI;
-               }
-               if (skb->len == 2 && (chr & 1) != 0) {
-                       p = skb_put(skb, 1);
-                       p[0] = 0;
-               }
-
-               /*
-                * Check if we've overflowed the MRU
-                */
-               if (skb->len >= ppp->mru + PPP_HDRLEN + 2
-                   || skb_tailroom(skb) <= 0) {
-                       ++ppp->estats.rx_length_errors;
-                       ppp->toss = 0xC0;
-                       if (ppp->flags & SC_DEBUG)
-                               printk(KERN_DEBUG "rcv frame too long: "
-                                      "len=%d mru=%d hroom=%d troom=%d\n",
-                                      skb->len, ppp->mru, skb_headroom(skb),
-                                      skb_tailroom(skb));
-                       continue;
-               }
-
-               /*
-                * Store the character and update the FCS.
-                */
-               p = skb_put(skb, 1);
-               *p = chr;
-               ppp->rfcs = PPP_FCS(ppp->rfcs, chr);
-       }
-       ppp->rpkt = skb;
-}
-
-/*************************************************************
- * PPP NETWORK INTERFACE SUPPORT
- *     The following code implements the PPP network
- *     interface device and handles those parts of
- *     the PPP processing which are independent of the
- *     type of hardware link being used, including
- *     VJ and packet compression.
- *************************************************************/
-
-/*
- * Network device driver callback routines
- */
-
-static int ppp_init_dev(struct net_device *dev);
-static int ppp_dev_open(struct net_device *);
-static int ppp_dev_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd);
-static int ppp_dev_close(struct net_device *);
-static int ppp_dev_xmit(struct sk_buff *, struct net_device *);
-static struct net_device_stats *ppp_dev_stats (struct net_device *);
-
-/*
- * Information for the protocol decoder
- */
-
-typedef int (*pfn_proto)  (struct ppp *, struct sk_buff *);
-
-typedef struct ppp_proto_struct {
-       int             proto;
-       pfn_proto       func;
-} ppp_proto_type;
-
-static int rcv_proto_ip                (struct ppp *, struct sk_buff *);
-static int rcv_proto_ipv6      (struct ppp *, struct sk_buff *);
-static int rcv_proto_ipx       (struct ppp *, struct sk_buff *);
-static int rcv_proto_at                (struct ppp *, struct sk_buff *);
-static int rcv_proto_vjc_comp  (struct ppp *, struct sk_buff *);
-static int rcv_proto_vjc_uncomp (struct ppp *, struct sk_buff *);
-static int rcv_proto_ccp       (struct ppp *, struct sk_buff *);
-static int rcv_proto_unknown   (struct ppp *, struct sk_buff *);
-
-static
-ppp_proto_type proto_list[] = {
-       { PPP_IP,         rcv_proto_ip         },
-       { PPP_IPV6,       rcv_proto_ipv6       },
-       { PPP_IPX,        rcv_proto_ipx        },
-       { PPP_AT,         rcv_proto_at         },
-       { PPP_VJC_COMP,   rcv_proto_vjc_comp   },
-       { PPP_VJC_UNCOMP, rcv_proto_vjc_uncomp },
-       { PPP_CCP,        rcv_proto_ccp        },
-       { 0,              rcv_proto_unknown    }  /* !!! MUST BE LAST !!! */
-};
-
-/*
- * Called when the PPP network interface device is actually created.
- */
-static int
-ppp_init_dev (struct net_device *dev)
-{
-       dev->hard_header_len  = PPP_HDRLEN;
-
-       /* device INFO */
-       dev->mtu              = PPP_MTU;
-       dev->hard_start_xmit  = ppp_dev_xmit;
-       dev->open             = ppp_dev_open;
-       dev->stop             = ppp_dev_close;
-       dev->get_stats        = ppp_dev_stats;
-       dev->do_ioctl         = ppp_dev_ioctl;
-       dev->addr_len         = 0;
-       dev->tx_queue_len     = 10;
-       dev->type             = ARPHRD_PPP;
-
-       dev_init_buffers(dev);
-
-       dev->flags = IFF_POINTOPOINT | IFF_NOARP | IFF_MULTICAST;
-
-       return 0;
-}
-
-/*
- * Callback from the network layer when the device goes up.
- */
-
-static int
-ppp_dev_open (struct net_device *dev)
-{
-       struct ppp *ppp = dev2ppp(dev);
-
-       if (!ppp->inuse || ppp2tty(ppp) == NULL) {
-               printk(KERN_ERR "ppp: %s not active\n", dev->name);
-               return -ENXIO;
-       }
-
-       MOD_INC_USE_COUNT;
-
-       return 0;
-}
-
-/*
- * Callback from the network layer when the ppp device goes down.
- */
-
-static int
-ppp_dev_close (struct net_device *dev)
-{
-       struct ppp *ppp = dev2ppp (dev);
-
-       CHECK_PPP_MAGIC(ppp);
-
-       MOD_DEC_USE_COUNT;
-
-       return 0;
-}
-
-static inline void
-get_vj_stats(struct vjstat *vj, struct slcompress *slc)
-{
-       vj->vjs_packets    = slc->sls_o_compressed + slc->sls_o_uncompressed;
-       vj->vjs_compressed = slc->sls_o_compressed;
-       vj->vjs_searches   = slc->sls_o_searches;
-       vj->vjs_misses     = slc->sls_o_misses;
-       vj->vjs_errorin    = slc->sls_i_error;
-       vj->vjs_tossed     = slc->sls_i_tossed;
-       vj->vjs_uncompressedin = slc->sls_i_uncompressed;
-       vj->vjs_compressedin   = slc->sls_i_compressed;
-}
-
-/*
- * Callback from the network layer to process the sockioctl functions.
- */
-static int
-ppp_dev_ioctl (struct net_device *dev, struct ifreq *ifr, int cmd)
-{
-       struct ppp *ppp = dev2ppp(dev);
-       int nb;
-       union {
-               struct ppp_stats stats;
-               struct ppp_comp_stats cstats;
-               char vers[32];
-       } u;
-
-       CHECK_PPP_MAGIC(ppp);
-
-       memset(&u, 0, sizeof(u));
-       switch (cmd) {
-       case SIOCGPPPSTATS:
-               u.stats.p = ppp->stats;
-               if (ppp->slcomp != NULL)
-                       get_vj_stats(&u.stats.vj, ppp->slcomp);
-               nb = sizeof(u.stats);
-               break;
-
-       case SIOCGPPPCSTATS:
-               if (ppp->sc_xc_state != NULL)
-                       (*ppp->sc_xcomp->comp_stat)
-                               (ppp->sc_xc_state, &u.cstats.c);
-               if (ppp->sc_rc_state != NULL)
-                       (*ppp->sc_rcomp->decomp_stat)
-                               (ppp->sc_rc_state, &u.cstats.d);
-               nb = sizeof(u.cstats);
-               break;
-
-       case SIOCGPPPVER:
-               strcpy(u.vers, szVersion);
-               nb = strlen(u.vers) + 1;
-               break;
-
-       default:
-               return -EINVAL;
-       }
-
-       if (copy_to_user((void *) ifr->ifr_ifru.ifru_data, &u, nb))
-               return -EFAULT;
-       return 0;
-}
-
-/*
- * Process the generic PPP ioctls, i.e. those which are not specific
- * to any particular type of hardware link.
- */
-static int
-ppp_ioctl(struct ppp *ppp, unsigned int param2, unsigned long param3)
-{
-       register int temp_i = 0, oldflags;
-       int error = -EFAULT;
-       unsigned long flags;
-       struct ppp_idle cur_ddinfo;
-       struct npioctl npi;
-
-       CHECK_PPP(-ENXIO);
-
-       /*
-        * The user must have an euid of root to do these requests.
-        */
-       if (!capable(CAP_NET_ADMIN))
-               return -EPERM;
-
-       switch (param2) {
-       case PPPIOCSMRU:
-               /*
-                * Set the MRU value
-                */
-               if (get_user(temp_i, (int *) param3))
-                       break;
-               if (temp_i < PPP_MRU)
-                       temp_i = PPP_MRU;
-               ppp->mru = temp_i;
-               if (ppp->flags & SC_DEBUG)
-                       printk(KERN_INFO
-                              "ppp_ioctl: set mru to %x\n", temp_i);
-               error = 0;
-               break;
-
-       case PPPIOCGFLAGS:
-               /*
-                * Fetch the current flags
-                */
-               temp_i = ppp->flags & SC_MASK;
-#ifndef CHECK_CHARACTERS /* Don't generate errors if we don't check chars. */
-               temp_i |= SC_RCV_B7_1 | SC_RCV_B7_0 |
-                         SC_RCV_ODDP | SC_RCV_EVNP;
-#endif
-               if (put_user(temp_i, (int *) param3))
-                       break;
-               error = 0;
-               break;
-
-       case PPPIOCSFLAGS:
-               /*
-                * Set the flags for the various options
-                */
-               if (get_user(temp_i, (int *) param3))
-                       break;
-
-               if (ppp->flags & ~temp_i & SC_CCP_OPEN)
-                       ppp_ccp_closed(ppp);
-
-               save_flags(flags);
-               cli();
-               oldflags = ppp->flags;
-               temp_i = (temp_i & SC_MASK) | (oldflags & ~SC_MASK);
-               ppp->flags = temp_i;
-               restore_flags(flags);
-
-               if ((oldflags | temp_i) & SC_DEBUG)
-                       printk(KERN_INFO
-                              "ppp_ioctl: set flags to %x\n", temp_i);
-               error = 0;
-               break;
-
-       case PPPIOCSCOMPRESS:
-               /*
-                * Set the compression mode
-                */
-               error = ppp_set_compression
-                       (ppp, (struct ppp_option_data *) param3);
-               break;
-
-       case PPPIOCGUNIT:
-               /*
-                * Obtain the unit number for this device.
-                */
-               if (put_user(ppp->line, (int *) param3))
-                       break;
-               if (ppp->flags & SC_DEBUG)
-                       printk(KERN_INFO
-                              "ppp_ioctl: get unit: %d\n", ppp->line);
-               error = 0;
-               break;
-
-       case PPPIOCSDEBUG:
-               /*
-                * Set the debug level
-                */
-               if (get_user(temp_i, (int *) param3))
-                       break;
-               temp_i = (temp_i & 0x1F) << 16;
-
-               if ((ppp->flags | temp_i) & SC_DEBUG)
-                       printk(KERN_INFO
-                              "ppp_ioctl: set dbg flags to %x\n", temp_i);
-
-               save_flags(flags);
-               cli();
-               ppp->flags = (ppp->flags & ~0x1F0000) | temp_i;
-               restore_flags(flags);
-               error = 0;
-               break;
-
-       case PPPIOCGDEBUG:
-               /*
-                * Get the debug level
-                */
-               temp_i = (ppp->flags >> 16) & 0x1F;
-               if (put_user(temp_i, (int *) param3))
-                       break;
-               error = 0;
-               break;
-
-       case PPPIOCGIDLE:
-               /*
-                * Get the times since the last send/receive frame operation
-                */
-               /* change absolute times to relative times. */
-               cur_ddinfo.xmit_idle = (jiffies - ppp->last_xmit) / HZ;
-               cur_ddinfo.recv_idle = (jiffies - ppp->last_recv) / HZ;
-               if (copy_to_user((void *) param3, &cur_ddinfo,
-                                sizeof (cur_ddinfo)))
-                       break;
-               error = 0;
-               break;
-
-       case PPPIOCSMAXCID:
-               /*
-                * Set the maximum VJ header compression slot number.
-                */
-               if (get_user(temp_i, (int *) param3))
-                       break;
-               error = -EINVAL;
-               if (temp_i < 2 || temp_i > 255)
-                       break;
-               ++temp_i;
-               if (ppp->flags & SC_DEBUG)
-                       printk(KERN_INFO "ppp_ioctl: set maxcid to %d\n",
-                              temp_i);
-               if (ppp->slcomp != NULL)
-                       slhc_free(ppp->slcomp);
-               ppp->slcomp = slhc_init(16, temp_i);
-
-               error = -ENOMEM;
-               if (ppp->slcomp == NULL) {
-                       printk(KERN_ERR "ppp: no memory for VJ compression\n");
-                       break;
-               }
-               error = 0;
-               break;
-
-       case PPPIOCGNPMODE:
-       case PPPIOCSNPMODE:
-               if (copy_from_user(&npi, (void *) param3, sizeof(npi)))
-                       break;
-
-               switch (npi.protocol) {
-               case PPP_IP:
-                       npi.protocol = NP_IP;
-                       break;
-               case PPP_IPX:
-                       npi.protocol = NP_IPX;
-                       break;
-               case PPP_AT:
-                       npi.protocol = NP_AT;
-                       break;
-               default:
-                       if (ppp->flags & SC_DEBUG)
-                               printk(KERN_DEBUG "pppioc[gs]npmode: "
-                                      "invalid proto %d\n", npi.protocol);
-                       error = -EINVAL;
-                       goto out;
-               }
-
-               if (param2 == PPPIOCGNPMODE) {
-                       npi.mode = ppp->sc_npmode[npi.protocol];
-                       if (copy_to_user((void *) param3, &npi, sizeof(npi)))
-                               break;
-               } else {
-                       ppp->sc_npmode[npi.protocol] = npi.mode;
-                       if (ppp->flags & SC_DEBUG)
-                               printk(KERN_DEBUG "ppp: set np %d to %d\n",
-                                      npi.protocol, npi.mode);
-                       mark_bh(NET_BH);
-               }
-               error = 0;
-               break;
-
-       default:
-               /*
-                *  All other ioctl() events will come here.
-                */
-               if (ppp->flags & SC_DEBUG)
-                       printk(KERN_ERR
-                              "ppp_ioctl: invalid ioctl: %x, addr %lx\n",
-                              param2, param3);
-
-               error = -ENOIOCTLCMD;
-               break;
-       }
-out:
-       return error;
-}
-
-/*
- * Process the set-compression ioctl.
- */
-static int
-ppp_set_compression (struct ppp *ppp, struct ppp_option_data *odp)
-{
-       struct compressor *cp;
-       int error, nb;
-       unsigned long flags;
-       __u8 *ptr;
-       __u8 ccp_option[CCP_MAX_OPTION_LENGTH];
-       struct ppp_option_data data;
-
-       /*
-        * Fetch the compression parameters
-        */
-       error = -EFAULT;
-       if (copy_from_user(&data, odp, sizeof (data)))
-               goto out;
-
-       nb  = data.length;
-       ptr = data.ptr;
-       if ((unsigned) nb >= CCP_MAX_OPTION_LENGTH)
-               nb = CCP_MAX_OPTION_LENGTH;
-
-       if (copy_from_user(ccp_option, ptr, nb))
-               goto out;
-
-       error = -EINVAL;
-       if (ccp_option[1] < 2)  /* preliminary check on the length byte */
-               goto out;
-
-       save_flags(flags);
-       cli();
-       ppp->flags &= ~(data.transmit? SC_COMP_RUN: SC_DECOMP_RUN);
-       restore_flags(flags);
-
-       cp = find_compressor (ccp_option[0]);
-#ifdef CONFIG_KMOD
-       if (cp == NULL) {
-               char modname[32];
-               sprintf(modname, "ppp-compress-%d", ccp_option[0]);
-               request_module(modname);
-               cp = find_compressor(ccp_option[0]);
-       }
-#endif /* CONFIG_KMOD */
-
-       if (cp == NULL) {
-               if (ppp->flags & SC_DEBUG)
-                       printk(KERN_DEBUG
-                              "%s: no compressor for [%x %x %x], %x\n",
-                              ppp->name, ccp_option[0], ccp_option[1],
-                              ccp_option[2], nb);
-               goto out;               /* compressor not loaded */
-       }
-
-       /*
-        * Found a handler for the protocol - try to allocate
-        * a compressor or decompressor.
-        */
-       error = 0;
-       if (data.transmit) {
-               if (ppp->sc_xc_state != NULL)
-                       (*ppp->sc_xcomp->comp_free)(ppp->sc_xc_state);
-               ppp->sc_xc_state = NULL;
-
-               ppp->sc_xcomp    = cp;
-               ppp->sc_xc_state = cp->comp_alloc(ccp_option, nb);
-               if (ppp->sc_xc_state == NULL) {
-                       if (ppp->flags & SC_DEBUG)
-                               printk(KERN_DEBUG "%s: comp_alloc failed\n",
-                                      ppp->name);
-                       error = -ENOBUFS;
-               }
-       } else {
-               if (ppp->sc_rc_state != NULL)
-                       (*ppp->sc_rcomp->decomp_free)(ppp->sc_rc_state);
-               ppp->sc_rc_state = NULL;
-
-               ppp->sc_rcomp    = cp;
-               ppp->sc_rc_state = cp->decomp_alloc(ccp_option, nb);
-               if (ppp->sc_rc_state == NULL) {
-                       if (ppp->flags & SC_DEBUG)
-                               printk(KERN_DEBUG "%s: decomp_alloc failed\n",
-                                      ppp->name);
-                       error = -ENOBUFS;
-               }
-       }
-out:
-       return error;
-}
-
-/*
- * Handle a CCP packet.
- *
- * The CCP packet is passed along to the pppd process just like any
- * other PPP frame. The difference is that some processing needs to be
- * immediate or the compressors will become confused on the peer.
- */
-
-static void ppp_proto_ccp(struct ppp *ppp, __u8 *dp, int len, int rcvd)
-{
-       int slen    = CCP_LENGTH(dp);
-       __u8 *opt = dp   + CCP_HDRLEN;
-       int opt_len = slen - CCP_HDRLEN;
-       unsigned long flags;
-
-       if (slen > len)
-               return;
-
-       if (ppp->flags & SC_DEBUG)
-               printk(KERN_DEBUG "ppp_proto_ccp rcvd=%d code=%x flags=%x\n",
-                      rcvd, CCP_CODE(dp), ppp->flags);
-       save_flags(flags);
-       switch (CCP_CODE(dp)) {
-       case CCP_CONFREQ:
-       case CCP_TERMREQ:
-       case CCP_TERMACK:
-               /*
-                * CCP must be going down - disable compression
-                */
-               if (ppp->flags & SC_CCP_UP) {
-                       cli();
-                       ppp->flags &= ~(SC_CCP_UP   |
-                                       SC_COMP_RUN |
-                                       SC_DECOMP_RUN);
-               }
-               break;
-
-       case CCP_CONFACK:
-               if ((ppp->flags & SC_CCP_OPEN) == 0)
-                       break;
-               if (ppp->flags & SC_CCP_UP)
-                       break;
-               if (slen < (CCP_HDRLEN + CCP_OPT_MINLEN))
-                       break;
-               if (slen < (CCP_OPT_LENGTH (opt) + CCP_HDRLEN))
-                       break;
-               if (!rcvd) {
-                       /*
-                        * we're agreeing to send compressed packets.
-                        */
-                       if (ppp->sc_xc_state == NULL)
-                               break;
-
-                       if ((*ppp->sc_xcomp->comp_init)
-                           (ppp->sc_xc_state,
-                            opt, opt_len,
-                            ppp->line, 0, ppp->flags & SC_DEBUG)) {
-                               if (ppp->flags & SC_DEBUG)
-                                       printk(KERN_DEBUG "%s: comp running\n",
-                                              ppp->name);
-                               cli();
-                               ppp->flags |= SC_COMP_RUN;
-                       }
-                       break;
-               }
-
-               /*
-                * peer is agreeing to send compressed packets.
-                */
-               if (ppp->sc_rc_state == NULL)
-                       break;
-
-               if ((*ppp->sc_rcomp->decomp_init)
-                   (ppp->sc_rc_state,
-                    opt, opt_len,
-                    ppp->line, 0, ppp->mru, ppp->flags & SC_DEBUG)) {
-                       if (ppp->flags & SC_DEBUG)
-                               printk(KERN_DEBUG "%s: decomp running\n",
-                                      ppp->name);
-                       cli();
-                       ppp->flags |= SC_DECOMP_RUN;
-                       ppp->flags &= ~(SC_DC_ERROR | SC_DC_FERROR);
-               }
-               break;
-
-       case CCP_RESETACK:
-               /*
-                * CCP Reset-ack resets compressors and decompressors
-                * as it passes through.
-                */
-               if ((ppp->flags & SC_CCP_UP) == 0)
-                       break;
-
-               if (!rcvd) {
-                       if (ppp->sc_xc_state && (ppp->flags & SC_COMP_RUN)) {
-                               (*ppp->sc_xcomp->comp_reset)(ppp->sc_xc_state);
-                               if (ppp->flags & SC_DEBUG)
-                                       printk(KERN_DEBUG "%s: comp reset\n",
-                                              ppp->name);
-                       }
-               } else {
-                       if (ppp->sc_rc_state && (ppp->flags & SC_DECOMP_RUN)) {
-                             (*ppp->sc_rcomp->decomp_reset)(ppp->sc_rc_state);
-                             if (ppp->flags & SC_DEBUG)
-                                       printk(KERN_DEBUG "%s: decomp reset\n",
-                                              ppp->name);
-                             cli();
-                             ppp->flags &= ~SC_DC_ERROR;
-                       }
-               }
-               break;
-       }
-       restore_flags(flags);
-}
-
-/*
- * CCP is down; free (de)compressor state if necessary.
- */
-
-static void
-ppp_ccp_closed(struct ppp *ppp)
-{
-       unsigned long flags;
-
-       save_flags(flags);
-       cli();
-       ppp->flags &= ~(SC_CCP_OPEN | SC_CCP_UP | SC_COMP_RUN | SC_DECOMP_RUN);
-       restore_flags(flags);
-       if (ppp->flags & SC_DEBUG)
-               printk(KERN_DEBUG "%s: ccp closed\n", ppp->name);
-       if (ppp->sc_xc_state) {
-               (*ppp->sc_xcomp->comp_free) (ppp->sc_xc_state);
-               ppp->sc_xc_state = NULL;
-       }
-
-       if (ppp->sc_rc_state) {
-               (*ppp->sc_rcomp->decomp_free) (ppp->sc_rc_state);
-               ppp->sc_rc_state = NULL;
-       }
-}
-
-/*************************************************************
- * RECEIVE-SIDE ROUTINES
- *************************************************************/
-
-/*
- * On entry, a received frame is in skb.
- * Check it and dispose as appropriate.
- */
-static int
-ppp_receive_frame(struct ppp *ppp, struct sk_buff *skb)
-{
-       __u8    *data;
-       int     count;
-       int     proto;
-       int     new_count;
-       struct sk_buff *new_skb;
-       ppp_proto_type  *proto_ptr;
-
-       /*
-        * An empty frame is ignored. This occurs if the FLAG sequence
-        * precedes and follows each frame.
-        */
-       if (skb == NULL)
-               return 1;
-       if (skb->len == 0) {
-               kfree_skb(skb);
-               return 1;
-       }
-       data = skb->data;
-       count = skb->len;
-
-       /*
-        * Generate an error if the frame is too small.
-        */
-       if (count < PPP_HDRLEN + 2) {
-               if (ppp->flags & SC_DEBUG)
-                       printk(KERN_DEBUG
-                              "ppp: got runt ppp frame, %d chars\n", count);
-               ++ppp->estats.rx_length_errors;
-               return 0;
-       }
-
-       if ( !(ppp->flags & SC_SYNC) ) { 
-               /*
-                * Verify the FCS of the frame and discard the FCS characters
-                * from the end of the buffer.
-                */
-               if (ppp->rfcs != PPP_GOODFCS) {
-                       if (ppp->flags & SC_DEBUG) {
-                               printk(KERN_DEBUG
-                                      "ppp: frame with bad fcs, length = %d\n",
-                                      count);
-                               ppp_print_buffer("bad frame", data, count);
-                       }
-                       ++ppp->estats.rx_crc_errors;
-                       return 0;
-               }
-               count -= 2;             /* ignore the fcs characters */
-               skb_trim(skb, count);
-       }
-       
-       /*
-        * Process the active decompressor.
-        */
-       if (ppp->sc_rc_state != NULL &&
-           (ppp->flags & SC_DECOMP_RUN) &&
-           ((ppp->flags & (SC_DC_FERROR | SC_DC_ERROR)) == 0)) {
-               if (PPP_PROTOCOL(data) == PPP_COMP) {
-                       /*
-                        * If the frame is compressed then decompress it.
-                        */
-                       new_skb = dev_alloc_skb(ppp->mru + 128 + PPP_HDRLEN);
-                       if (new_skb == NULL) {
-                               printk(KERN_ERR "ppp_recv_frame: no memory\n");
-                               new_count = DECOMP_ERROR;
-                       } else {
-                               new_count = (*ppp->sc_rcomp->decompress)
-                                       (ppp->sc_rc_state, data, count,
-                                        new_skb->data, ppp->mru + PPP_HDRLEN);
-                       }
-                       if (new_count > 0) {
-                               /* Frame was decompressed OK */
-                               kfree_skb(skb);
-                               skb = new_skb;
-                               count = new_count;
-                               data = skb_put(skb, count);
-
-                       } else {
-                               /*
-                                * On a decompression error, we pass the
-                                * compressed frame up to pppd as an
-                                * error indication.
-                                */
-                               if (ppp->flags & SC_DEBUG)
-                                       printk(KERN_INFO "%s: decomp err %d\n",
-                                              ppp->name, new_count);
-                               if (new_skb != 0)
-                                       kfree_skb(new_skb);
-                               if (ppp->slcomp != 0)
-                                       slhc_toss(ppp->slcomp);
-                               ++ppp->stats.ppp_ierrors;
-                               if (new_count == DECOMP_FATALERROR) {
-                                       ppp->flags |= SC_DC_FERROR;
-                               } else {
-                                       ppp->flags |= SC_DC_ERROR;
-                               }
-                       }
-
-
-               } else {
-                       /*
-                        * The frame is not compressed. Pass it to the
-                        * decompression code so it can update its
-                        * dictionary if necessary.
-                        */
-                       (*ppp->sc_rcomp->incomp)(ppp->sc_rc_state,
-                                                data, count);
-               }
-       }
-       else if (PPP_PROTOCOL(data) == PPP_COMP && (ppp->flags & SC_DEBUG))
-               printk(KERN_INFO "%s: not decomp, rc_state=%p flags=%x\n",
-                      ppp->name, ppp->sc_rc_state, ppp->flags);
-
-       /*
-        * Count the frame and print it
-        */
-       ++ppp->stats.ppp_ipackets;
-       ppp->stats.ppp_ioctects += count;
-       if (ppp->flags & SC_LOG_INPKT)
-               ppp_print_buffer ("receive frame", data, count);
-
-       /*
-        * Find the procedure to handle this protocol.
-        * The last one is marked as protocol 0 which is the 'catch-all'
-        * to feed it to the pppd daemon.
-        */
-       proto = PPP_PROTOCOL(data);
-       proto_ptr = proto_list;
-       while (proto_ptr->proto != 0 && proto_ptr->proto != proto)
-               ++proto_ptr;
-
-       /*
-        * Update the appropriate statistic counter.
-        */
-       if (!(*proto_ptr->func)(ppp, skb)) {
-               kfree_skb(skb);
-               ++ppp->stats.ppp_discards;
-       }
-
-       return 1;
-}
-
-/*
- * An input error has been detected, so we need to inform
- * the VJ decompressor.
- */
-static void
-ppp_receive_error(struct ppp *ppp)
-{
-       CHECK_PPP_VOID();
-
-       if (ppp->slcomp != 0)
-               slhc_toss(ppp->slcomp);
-}
-
-/*
- * Put the input frame into the networking system for the indicated protocol
- */
-static int
-ppp_rcv_rx(struct ppp *ppp, __u16 proto, struct sk_buff *skb)
-{
-
-       /*
-        * Fill in a few fields of the skb and give it to netif_rx().
-        */
-       skb->dev      = ppp2dev(ppp);   /* We are the device */
-       skb->protocol = htons(proto);
-       skb_pull(skb, PPP_HDRLEN);      /* pull off ppp header */
-       skb->mac.raw   = skb->data;
-       ppp->last_recv = jiffies;
-       netif_rx (skb);
-       return 1;
-}
-
-/*
- * Process the receipt of an IP frame
- */
-static int
-rcv_proto_ip(struct ppp *ppp, struct sk_buff *skb)
-{
-       CHECK_PPP(0);
-       if ((ppp2dev(ppp)->flags & IFF_UP) && (skb->len > 0)
-           && ppp->sc_npmode[NP_IP] == NPMODE_PASS)
-               return ppp_rcv_rx(ppp, ETH_P_IP, skb);
-       return 0;
-}
-
-/*
- * Process the receipt of an IPv6 frame
- */
-static int
-rcv_proto_ipv6(struct ppp *ppp, struct sk_buff *skb)
-{
-       CHECK_PPP(0);
-       if ((ppp2dev(ppp)->flags & IFF_UP) && (skb->len > 0)
-           && ppp->sc_npmode[NP_IPV6] == NPMODE_PASS)
-               return ppp_rcv_rx(ppp, ETH_P_IPV6, skb);
-       return 0;
-}
-
-/*
- * Process the receipt of an IPX frame
- */
-static int
-rcv_proto_ipx(struct ppp *ppp, struct sk_buff *skb)
-{
-       CHECK_PPP(0);
-       if (((ppp2dev(ppp)->flags & IFF_UP) != 0) && (skb->len > 0)
-           && ppp->sc_npmode[NP_IPX] == NPMODE_PASS)
-               return ppp_rcv_rx(ppp, ETH_P_IPX, skb);
-       return 0;
-}
-
-/*
- * Process the receipt of an Appletalk frame
- */
-static int
-rcv_proto_at(struct ppp *ppp, struct sk_buff *skb)
-{
-       CHECK_PPP(0);
-       if ((ppp2dev(ppp)->flags & IFF_UP) && (skb->len > 0)
-           && ppp->sc_npmode[NP_AT] == NPMODE_PASS)
-               return ppp_rcv_rx(ppp, ETH_P_PPPTALK, skb);
-       return 0;
-}
-
-/*
- * Process the receipt of an VJ Compressed frame
- */
-static int
-rcv_proto_vjc_comp(struct ppp *ppp, struct sk_buff *skb)
-{
-       int new_count;
-
-       CHECK_PPP(0);
-       if ((ppp->flags & SC_REJ_COMP_TCP) || ppp->slcomp == NULL)
-               return 0;
-       new_count = slhc_uncompress(ppp->slcomp, skb->data + PPP_HDRLEN,
-                                   skb->len - PPP_HDRLEN);
-       if (new_count <= 0) {
-               if (ppp->flags & SC_DEBUG)
-                       printk(KERN_NOTICE
-                              "ppp: error in VJ decompression\n");
-               return 0;
-       }
-       new_count += PPP_HDRLEN;
-       if (new_count > skb->len)
-               skb_put(skb, new_count - skb->len);
-       else
-               skb_trim(skb, new_count);
-       return rcv_proto_ip(ppp, skb);
-}
-
-/*
- * Process the receipt of an VJ Un-compressed frame
- */
-static int
-rcv_proto_vjc_uncomp(struct ppp *ppp, struct sk_buff *skb)
-{
-       CHECK_PPP(0);
-       if ((ppp->flags & SC_REJ_COMP_TCP) || ppp->slcomp == NULL)
-               return 0;
-       if (slhc_remember(ppp->slcomp, skb->data + PPP_HDRLEN,
-                         skb->len - PPP_HDRLEN) <= 0) {
-               if (ppp->flags & SC_DEBUG)
-                       printk(KERN_NOTICE "ppp: error in VJ memorizing\n");
-               return 0;
-       }
-       return rcv_proto_ip(ppp, skb);
-}
-
-static int
-rcv_proto_ccp(struct ppp *ppp, struct sk_buff *skb)
-{
-       CHECK_PPP(0);
-       ppp_proto_ccp (ppp, skb->data + PPP_HDRLEN, skb->len - PPP_HDRLEN, 1);
-       return rcv_proto_unknown(ppp, skb);
-}
-
-/*
- * Receive all unclassified protocols.
- */
-static int
-rcv_proto_unknown(struct ppp *ppp, struct sk_buff *skb)
-{
-       CHECK_PPP(0);
-
-       /*
-        * Limit queue length by dropping old frames.
-        */
-       skb_queue_tail(&ppp->rcv_q, skb);
-       while (ppp->rcv_q.qlen > PPP_MAX_RCV_QLEN) {
-               struct sk_buff *skb = skb_dequeue(&ppp->rcv_q);
-               if (skb)
-                       kfree_skb(skb);
-       }
-
-       wake_up_interruptible (&ppp->read_wait);
-       if (ppp->tty->fasync != NULL)
-               kill_fasync (ppp->tty->fasync, SIGIO);
-
-       return 1;
-}
-
-/*************************************************************
- * TRANSMIT-SIDE ROUTINES
- *************************************************************/
-
-/* local function to store a value into the LQR frame */
-extern inline __u8 * store_long (register __u8 *p, register int value) {
-       *p++ = (__u8) (value >> 24);
-       *p++ = (__u8) (value >> 16);
-       *p++ = (__u8) (value >>  8);
-       *p++ = (__u8) value;
-       return p;
-}
-
-/*
- * Compress and send an frame to the peer.
- * Should be called with xmit_busy == 1, having been set by the caller.
- * That is, we use xmit_busy as a lock to prevent reentry of this
- * procedure.
- */
-static void
-ppp_send_frame(struct ppp *ppp, struct sk_buff *skb)
-{
-       int     proto;
-       __u8    *data;
-       int     count;
-       __u8    *p;
-       int     ret;
-
-       CHECK_PPP_VOID();
-       data = skb->data;
-       count = skb->len;
-
-       /* dump the buffer */
-       if (ppp->flags & SC_LOG_OUTPKT)
-               ppp_print_buffer ("write frame", data, count);
-
-       /*
-        * Handle various types of protocol-specific compression
-        * and other processing, including:
-        * - VJ TCP header compression
-        * - updating LQR packets
-        * - updating CCP state on CCP packets
-        */
-       proto = PPP_PROTOCOL(data);
-       switch (proto) {
-       case PPP_IP:
-               if ((ppp->flags & SC_COMP_TCP) && ppp->slcomp != NULL)
-                       skb = ppp_vj_compress(ppp, skb);
-               break;
-
-       case PPP_LQR:
-               /*
-                * Update the LQR frame with the current MIB information.
-                * This way the information is accurate and up-to-date.
-                */
-               if (count < 48)
-                       break;
-               p = data + 40;  /* Point to last two items. */
-               p = store_long(p, ppp->stats.ppp_opackets + 1);
-               p = store_long(p, ppp->stats.ppp_ooctects + count);
-               ++ppp->stats.ppp_olqrs;
-               break;
-
-       case PPP_CCP:
-               /*
-                * Outbound compression control frames
-                */
-               ppp_proto_ccp(ppp, data + PPP_HDRLEN, count - PPP_HDRLEN, 0);
-               break;
-       }
-       data = skb->data;
-       count = skb->len;
-
-       /*
-        * Compress the whole frame if possible.
-        */
-       if (((ppp->flags & SC_COMP_RUN) != 0)   &&
-           (ppp->sc_xc_state != (void *) 0)    &&
-           (proto != PPP_LCP)                  &&
-           (proto != PPP_CCP)) {
-               struct sk_buff *new_skb;
-               int new_count;
-
-               /* Allocate an skb for the compressed frame. */
-               new_skb = alloc_skb(ppp->mtu + PPP_HDRLEN, GFP_ATOMIC);
-               if (new_skb == NULL) {
-                       printk(KERN_ERR "ppp_send_frame: no memory\n");
-                       kfree_skb(skb);
-                       ppp->xmit_busy = 0;
-                       return;
-               }
-
-               /* Compress the frame. */
-               new_count = (*ppp->sc_xcomp->compress)
-                       (ppp->sc_xc_state, data, new_skb->data,
-                        count, ppp->mtu + PPP_HDRLEN);
-
-               /* Did it compress? */
-               if (new_count > 0 && (ppp->flags & SC_CCP_UP)) {
-                       skb_put(new_skb, new_count);
-                       kfree_skb(skb);
-                       skb = new_skb;
-               } else {
-                       /*
-                        * The frame could not be compressed, or it could not
-                        * be sent in compressed form because CCP is down.
-                        */
-                       kfree_skb(new_skb);
-               }
-       }
-
-       /*
-        * Send the frame
-        */
-       if ( ppp->flags & SC_SYNC ) 
-               ret = ppp_sync_send(ppp, skb);
-       else
-               ret = ppp_async_send(ppp, skb);
-       if (ret > 0) {
-               /* we can release the lock */
-               ppp->xmit_busy = 0;
-       } else if (ret < 0) {
-               /* can't happen, since the caller got the xmit_busy lock */
-               printk(KERN_ERR "ppp: ppp_async_send didn't accept pkt\n");
-       }
-}
-
-/*
- * Apply VJ TCP header compression to a packet.
- */
-static struct sk_buff *
-ppp_vj_compress(struct ppp *ppp, struct sk_buff *skb)
-{
-       __u8 *orig_data, *data;
-       struct sk_buff *new_skb;
-       int len, proto;
-
-       new_skb = alloc_skb(skb->len, GFP_ATOMIC);
-       if (new_skb == NULL) {
-               printk(KERN_ERR "ppp: no memory for vj compression\n");
-               return skb;
-       }
-
-       orig_data = data = skb->data + PPP_HDRLEN;
-       len = slhc_compress(ppp->slcomp, data, skb->len - PPP_HDRLEN,
-                           new_skb->data + PPP_HDRLEN, &data,
-                           (ppp->flags & SC_NO_TCP_CCID) == 0);
-
-       if (data == orig_data) {
-               /* Couldn't compress the data */
-               kfree_skb(new_skb);
-               return skb;
-       }
-
-       /* The data has been changed */
-       if (data[0] & SL_TYPE_COMPRESSED_TCP) {
-               proto = PPP_VJC_COMP;
-               data[0] ^= SL_TYPE_COMPRESSED_TCP;
-       } else {
-               if (data[0] >= SL_TYPE_UNCOMPRESSED_TCP)
-                       proto = PPP_VJC_UNCOMP;
-               else
-                       proto = PPP_IP;
-               data[0] = orig_data[0];
-       }
-
-       data = skb_put(new_skb, len + PPP_HDRLEN);
-       data[0] = PPP_ALLSTATIONS;
-       data[1] = PPP_UI;
-       data[2] = 0;
-       data[3] = proto;
-
-       kfree_skb(skb);
-       return new_skb;
-}
-
-static inline void
-ppp_send_frames(struct ppp *ppp)
-{
-       struct sk_buff *skb;
-
-       while (!test_and_set_bit(0, &ppp->xmit_busy)) {
-               skb = skb_dequeue(&ppp->xmt_q);
-               if (skb == NULL) {
-                       ppp->xmit_busy = 0;
-                       break;
-               }
-               ppp_send_frame(ppp, skb);
-       }
-       if (!ppp->xmit_busy && ppp->dev.tbusy) {
-               ppp->dev.tbusy = 0;
-               mark_bh(NET_BH);
-       }
-}
-
-/*
- * Called from the hardware (tty) layer when it can accept
- * another packet.
- */
-static void
-ppp_output_wakeup(struct ppp *ppp)
-{
-       CHECK_PPP_VOID();
-
-       if (!ppp->xmit_busy) {
-               printk(KERN_ERR "ppp_output_wakeup called but xmit_busy==0\n");
-               return;
-       }
-       ppp->xmit_busy = 0;
-       ppp_send_frames(ppp);
-}
-
-/*
- * Send a control frame (from pppd).
- */
-static void
-ppp_send_ctrl(struct ppp *ppp, struct sk_buff *skb)
-{
-       CHECK_PPP_VOID();
-
-       /*
-        * Put the packet on the queue, then send as many as we can.
-        */
-       skb_queue_tail(&ppp->xmt_q, skb);
-       ppp_send_frames(ppp);
-}
-
-
-/*************************************************************
- * NETWORK OUTPUT
- *    This routine accepts requests from the network layer
- *    and attempts to deliver the packets.
- *************************************************************/
-/*
- * Send a frame to the peer.
- * Returns 1 iff the frame was not accepted.
- */
-static int
-ppp_dev_xmit(struct sk_buff *skb, struct net_device *dev)
-{
-       struct ppp *ppp = dev2ppp(dev);
-       struct tty_struct *tty = ppp2tty(ppp);
-       enum NPmode npmode;
-       int proto;
-       unsigned char *hdr;
-
-       /* just a little sanity check. */
-       if (skb == NULL)
-               return 0;
-       if (skb->data == NULL) {
-               kfree_skb(skb);
-               return 0;
-       }
-
-       /*
-        * Avoid timing problem should tty hangup while data is
-        * queued to be sent.
-        */
-       if (!ppp->inuse) {
-               dev_kfree_skb(skb);
-               return 0;
-       }
-
-       /*
-        * Validate the tty interface
-        */
-       if (tty == NULL) {
-               if (ppp->flags & SC_DEBUG)
-                       printk(KERN_ERR
-                              "ppp_dev_xmit: %s not connected to a TTY!\n",
-                              dev->name);
-               dev_kfree_skb(skb);
-               return 0;
-       }
-
-       /*
-        * Work out the appropriate network-protocol mode for this packet.
-        */
-       npmode = NPMODE_PASS;   /* default */
-       switch (ntohs(skb->protocol)) {
-       case ETH_P_IP:
-               proto = PPP_IP;
-               npmode = ppp->sc_npmode[NP_IP];
-               break;
-       case ETH_P_IPV6:
-               proto = PPP_IPV6;
-               npmode = ppp->sc_npmode[NP_IPV6];
-               break;
-       case ETH_P_IPX:
-               proto = PPP_IPX;
-               npmode = ppp->sc_npmode[NP_IPX];
-               break;
-       case ETH_P_PPPTALK:
-       case ETH_P_ATALK:
-               proto = PPP_AT;
-               npmode = ppp->sc_npmode[NP_AT];
-               break;
-       default:
-               if (ppp->flags & SC_DEBUG)
-                       printk(KERN_INFO "%s: packet for unknown proto %x\n",
-                              ppp->name, ntohs(skb->protocol));
-               dev_kfree_skb(skb);
-               return 0;
-       }
-
-       /*
-        * Drop, accept or reject the packet depending on the mode.
-        */
-       switch (npmode) {
-       case NPMODE_PASS:
-               break;
-
-       case NPMODE_QUEUE:
-               /*
-                * We may not send the packet now, so drop it.
-                * XXX It would be nice to be able to return it to the
-                * network system to be queued and retransmitted later.
-                */
-               if (ppp->flags & SC_DEBUG)
-                       printk(KERN_DEBUG "%s: returning frame\n", ppp->name);
-               dev_kfree_skb(skb);
-               return 0;
-
-       case NPMODE_ERROR:
-       case NPMODE_DROP:
-               if (ppp->flags & SC_DEBUG)
-                       printk(KERN_DEBUG
-                              "ppp_dev_xmit: dropping (npmode = %d) on %s\n",
-                              npmode, ppp->name);
-               dev_kfree_skb(skb);
-               return 0;
-       }
-
-       /*
-        * The dev->tbusy field acts as a lock to allow only
-        * one packet to be processed at a time.  If we can't
-        * get the lock, try again later.
-        * We deliberately queue as little as possible inside
-        * the ppp driver in order to minimize the latency
-        * for high-priority packets.
-        */
-       if (test_and_set_bit(0, &ppp->xmit_busy)) {
-               dev->tbusy = 1; /* can't take it now */
-               return 1;
-       }
-       dev->tbusy = 0;
-
-       /*
-        * Put the 4-byte PPP header on the packet.
-        * If there isn't room for it, we have to copy the packet.
-        */
-       if (skb_headroom(skb) < PPP_HDRLEN) {
-               struct sk_buff *new_skb;
-
-               new_skb = alloc_skb(skb->len + PPP_HDRLEN, GFP_ATOMIC);
-               if (new_skb == NULL) {
-                       printk(KERN_ERR "%s: skb hdr alloc failed\n",
-                              ppp->name);
-                       dev_kfree_skb(skb);
-                       ppp->xmit_busy = 0;
-                       ppp_send_frames(ppp);
-                       return 0;
-               }
-               skb_reserve(new_skb, PPP_HDRLEN);
-               memcpy(skb_put(new_skb, skb->len), skb->data, skb->len);
-               dev_kfree_skb(skb);
-               skb = new_skb;
-       }
-
-       hdr = skb_push(skb, PPP_HDRLEN);
-       hdr[0] = PPP_ALLSTATIONS;
-       hdr[1] = PPP_UI;
-       hdr[2] = proto >> 8;
-       hdr[3] = proto;
-
-       ppp_send_frame(ppp, skb);
-       if (!ppp->xmit_busy)
-               ppp_send_frames(ppp);
-       return 0;
-}
-
-/*
- * Generate the statistic information for the /proc/net/dev listing.
- */
-static struct net_device_stats *
-ppp_dev_stats (struct net_device *dev)
-{
-       struct ppp *ppp = dev2ppp (dev);
-
-       ppp->estats.rx_packets = ppp->stats.ppp_ipackets;
-       ppp->estats.rx_errors  = ppp->stats.ppp_ierrors;
-       ppp->estats.tx_packets = ppp->stats.ppp_opackets;
-       ppp->estats.tx_errors  = ppp->stats.ppp_oerrors;
-       ppp->estats.rx_bytes   = ppp->stats.ppp_ibytes;
-       ppp->estats.tx_bytes   = ppp->stats.ppp_obytes;
-
-       return &ppp->estats;
-}
-
-/*************************************************************
- * UTILITIES
- *    Miscellany called by various functions above.
- *************************************************************/
-
-/* Locate the previous instance of the PPP channel */
-static struct ppp *
-ppp_find(int pid_value)
-{
-       struct ppp      *ppp;
-
-       /* try to find the device which this pid is already using */
-       for (ppp = ppp_list; ppp != 0; ppp = ppp->next) {
-               if (ppp->inuse && ppp->sc_xfer == pid_value) {
-                       ppp->sc_xfer = 0;
-                       break;
-               }
-       }
-       return ppp;
-}
-
-/* allocate or create a PPP channel */
-static struct ppp *
-ppp_alloc(void)
-{
-       int             if_num;
-       int             status;
-       struct net_device       *dev;
-       struct ppp      *ppp;
-
-       /* try to find an free device */
-       for (ppp = ppp_list; ppp != 0; ppp = ppp->next) {
-               if (!test_and_set_bit(0, &ppp->inuse)) {
-                       dev = ppp2dev(ppp);
-                       if (dev->flags & IFF_UP) {
-                               clear_bit(0, &ppp->inuse);
-                               continue;
-                       }
-                       /* Reregister device */
-                       unregister_netdev(dev);
-                       if (register_netdev(dev) == 0)
-                               return ppp;
-                       printk(KERN_DEBUG "could not reregister ppp device\n");
-                       /* leave inuse set in this case */
-               }
-       }
-
-       /*
-        * There are no available units, so make a new one.
-        */
-       ppp = (struct ppp *) kmalloc(sizeof(struct ppp), GFP_KERNEL);
-       if (ppp == 0) {
-               printk(KERN_ERR "ppp: struct ppp allocation failed\n");
-               return 0;
-       }
-       memset(ppp, 0, sizeof(*ppp));
-
-       /* initialize channel control data */
-       ppp->magic = PPP_MAGIC;
-       ppp->next = NULL;
-       ppp->inuse = 1;
-       init_waitqueue_head(&ppp->read_wait);
-
-       /*
-        * Make up a suitable name for this device
-        */
-       dev = ppp2dev(ppp);
-       dev->name = ppp->name;
-       if_num = dev_alloc_name(dev, "ppp%d");
-       if (if_num < 0) {
-               printk(KERN_ERR "ppp: dev_alloc_name failed (%d)\n", if_num);
-               kfree(ppp);
-               return 0;
-       }
-       ppp->line = if_num;
-       ppp->slcomp = NULL;
-
-       dev->next = NULL;
-       dev->init = ppp_init_dev;
-       dev->name = ppp->name;
-       dev->priv = (void *) ppp;
-
-       /* register device so that we can be ifconfig'd */
-       /* ppp_init_dev() will be called as a side-effect */
-       status = register_netdev (dev);
-       if (status == 0) {
-               printk(KERN_INFO "registered device %s\n", dev->name);
-       } else {
-               printk(KERN_ERR
-                      "ppp_alloc - register_netdev(%s) = %d failure.\n",
-                      dev->name, status);
-               kfree(ppp);
-               ppp = NULL;
-       }
-
-       /* link this unit into our list */
-       if (ppp_list == 0)
-               ppp_list = ppp;
-       else
-               ppp_last->next = ppp;
-       ppp_last = ppp;
-
-       return ppp;
-}
-
-/*
- * Initialize the generic parts of the ppp structure.
- */
-static void
-ppp_generic_init(struct ppp *ppp)
-{
-       int indx;
-
-       ppp->flags  = 0;
-       ppp->mtu    = PPP_MTU;
-       ppp->mru    = PPP_MRU;
-
-       skb_queue_head_init(&ppp->xmt_q);
-       skb_queue_head_init(&ppp->rcv_q);
-
-       ppp->last_xmit  = jiffies;
-       ppp->last_recv  = jiffies;
-       ppp->xmit_busy  = 0;
-
-       /* clear statistics */
-       memset(&ppp->stats, 0, sizeof (struct pppstat));
-       memset(&ppp->estats, 0, sizeof(struct net_device_stats));
-
-       /* PPP compression data */
-       ppp->sc_xc_state = NULL;
-       ppp->sc_rc_state = NULL;
-
-       for (indx = 0; indx < NUM_NP; ++indx)
-               ppp->sc_npmode[indx] = NPMODE_PASS;
-}
-
-/*
- * Called to clean up the generic parts of the ppp structure.
- */
-static void
-ppp_release(struct ppp *ppp)
-{
-       struct sk_buff *skb;
-
-       CHECK_PPP_MAGIC(ppp);
-
-       if (ppp->flags & SC_DEBUG)
-               printk(KERN_DEBUG "%s released\n", ppp->name);
-
-       ppp_ccp_closed(ppp);
-
-        /* Ensure that the pppd process is not hanging on select()/poll() */
-        wake_up_interruptible(&ppp->read_wait);
-
-       if (ppp->slcomp) {
-               slhc_free(ppp->slcomp);
-               ppp->slcomp = NULL;
-       }
-
-       while ((skb = skb_dequeue(&ppp->rcv_q)) != NULL)
-               kfree_skb(skb);
-       while ((skb = skb_dequeue(&ppp->xmt_q)) != NULL)
-               kfree_skb(skb);
-
-       ppp->inuse = 0;
-       if (ppp->dev.tbusy) {
-               ppp->dev.tbusy = 0;
-               mark_bh(NET_BH);
-       }
-}
-
-/*
- * Utility procedures to print a buffer in hex/ascii
- */
-static void
-ppp_print_hex (register __u8 * out, const __u8 * in, int count)
-{
-       register __u8 next_ch;
-       static char hex[] = "0123456789ABCDEF";
-
-       while (count-- > 0) {
-               next_ch = *in++;
-               *out++ = hex[(next_ch >> 4) & 0x0F];
-               *out++ = hex[next_ch & 0x0F];
-               ++out;
-       }
-}
-
-static void
-ppp_print_char (register __u8 * out, const __u8 * in, int count)
-{
-       register __u8 next_ch;
-
-       while (count-- > 0) {
-               next_ch = *in++;
-
-               if (next_ch < 0x20 || next_ch > 0x7e)
-                       *out++ = '.';
-               else {
-                       *out++ = next_ch;
-                       if (next_ch == '%')   /* printk/syslogd has a bug !! */
-                               *out++ = '%';
-               }
-       }
-       *out = '\0';
-}
-
-static void
-ppp_print_buffer (const char *name, const __u8 *buf, int count)
-{
-       __u8 line[44];
-
-       if (name != NULL)
-               printk(KERN_DEBUG "ppp: %s, count = %d\n", name, count);
-
-       while (count > 8) {
-               memset (line, 32, 44);
-               ppp_print_hex (line, buf, 8);
-               ppp_print_char (&line[8 * 3], buf, 8);
-               printk(KERN_DEBUG "%s\n", line);
-               count -= 8;
-               buf += 8;
-       }
-
-       if (count > 0) {
-               memset (line, 32, 44);
-               ppp_print_hex (line, buf, count);
-               ppp_print_char (&line[8 * 3], buf, count);
-               printk(KERN_DEBUG "%s\n", line);
-       }
-}
-
-/*************************************************************
- * Compressor module interface
- *************************************************************/
-
-struct compressor_link {
-       struct compressor_link  *next;
-       struct compressor       *comp;
-};
-
-static struct compressor_link *ppp_compressors = (struct compressor_link *) 0;
-
-static struct compressor *find_compressor (int type)
-{
-       struct compressor_link *lnk;
-       unsigned long flags;
-
-       save_flags(flags);
-       cli();
-
-       lnk = ppp_compressors;
-       while (lnk != (struct compressor_link *) 0) {
-               if ((int) (__u8) lnk->comp->compress_proto == type) {
-                       restore_flags(flags);
-                       return lnk->comp;
-               }
-               lnk = lnk->next;
-       }
-
-       restore_flags(flags);
-       return (struct compressor *) 0;
-}
-
-#ifdef CONFIG_MODULES
-static int ppp_register_compressor (struct compressor *cp)
-{
-       struct compressor_link *new;
-       unsigned long flags;
-
-       new = (struct compressor_link *)
-               kmalloc (sizeof (struct compressor_link), GFP_KERNEL);
-
-       if (new == (struct compressor_link *) 0)
-               return 1;
-
-       save_flags(flags);
-       cli();
-
-       if (find_compressor (cp->compress_proto)) {
-               restore_flags(flags);
-               kfree (new);
-               return 0;
-       }
-
-       new->next       = ppp_compressors;
-       new->comp       = cp;
-       ppp_compressors = new;
-
-       restore_flags(flags);
-       return 0;
-}
-
-static void ppp_unregister_compressor (struct compressor *cp)
-{
-       struct compressor_link *prev = (struct compressor_link *) 0;
-       struct compressor_link *lnk;
-       unsigned long flags;
-
-       save_flags(flags);
-       cli();
-
-       lnk  = ppp_compressors;
-       while (lnk != (struct compressor_link *) 0) {
-               if (lnk->comp == cp) {
-                       if (prev)
-                               prev->next = lnk->next;
-                       else
-                               ppp_compressors = lnk->next;
-                       kfree (lnk);
-                       break;
-               }
-               prev = lnk;
-               lnk  = lnk->next;
-       }
-       restore_flags(flags);
-}
-#endif
-
-/*************************************************************
- * Module support routines
- *************************************************************/
-
-#ifdef MODULE
-int
-init_module(void)
-{
-       int status;
-
-       /* register our line disciplines */
-       status = ppp_first_time();
-       if (status != 0)
-               printk(KERN_INFO "PPP: ppp_init() failure %d\n", status);
-
-       return status;
-}
-
-void
-cleanup_module(void)
-{
-       int status;
-       struct ppp *ppp, *next_ppp;
-       int busy = 0;
-
-       /*
-        * Ensure that the devices are not in operation.
-        */
-       for (ppp = ppp_list; ppp != 0; ppp = ppp->next) {
-               CHECK_PPP_MAGIC(ppp);
-               if (ppp->inuse || (ppp->dev.flags & IFF_UP))
-                       ++busy;
-       }
-       if (busy)
-               printk(KERN_CRIT "PPP: removing despite %d units in use!\n",
-                      busy);
-
-       /*
-        * Release the tty registration of the line discipline so that
-        * ttys can no longer be put into PPP line discipline.
-        */
-       status = tty_register_ldisc (N_PPP, NULL);
-       if (status != 0)
-               printk(KERN_ERR
-                      "PPP: Unable to unregister ppp line discipline "
-                      "(err = %d)\n", status);
-       else
-               printk(KERN_INFO
-                      "PPP: ppp line discipline successfully unregistered\n");
-
-       /*
-        * De-register the devices so that there is no problem with them
-        */
-       for (ppp = ppp_list; ppp != 0; ppp = next_ppp) {
-               next_ppp = ppp->next;
-               unregister_netdev(&ppp->dev);
-               kfree (ppp);
-       }
-}
-#endif
index b2e278dfce9f8b852ae6afdd811ee31353e7a4aa..23644ef1d3b2518fa35f41a79d9b28cbc3bdcddf 100644 (file)
@@ -1,4 +1,4 @@
-/* smc-ultra.c: A SMC Ultra ethernet driver for linux. */
+/* smc-mca.c: A SMC Ultra ethernet driver for linux. */
 /*
     Most of this driver, except for ultramca_probe is nearly
     verbatim from smc-ultra.c by Donald Becker. The rest is
@@ -8,7 +8,7 @@
 
     This driver uses the cards in the 8390-compatible, shared memory mode.
     Most of the run-time complexity is handled by the generic code in
-    8390.c.  The code in this file is responsible for
+    8390.c.
 
     This driver enables the shared memory only when doing the actual data
     transfers to avoid a bug in early version of the card that corrupted
 
     Changelog:
 
-    Paul Gortmaker  : multiple card support for module users.
-    David Weis      : Micro Channel-ized it.
-
+    Paul Gortmaker      : multiple card support for module users.
+    David Weis          : Micro Channel-ized it.
+    Tom Sightler        : Added support for IBM PS/2 Ethernet Adapter/A
+    Christopher Turcksin : Changed MCA-probe so that multiple adapters are
+                          found correctly (Jul 16, 1997)
+    Chris Beauregard    : Tried to merge the two changes above (Dec 15, 1997)
+    Tom Sightler        : Fixed minor detection bug caused by above merge
+    Tom Sightler        : Added support for three more Western Digital
+                          MCA-adapters
+    Tom Sightler        : Added support for 2.2.x mca_find_unused_adapter
+    Hartmut Schmidt     : - Modified parameter detection to handle each
+                            card differently depending on a switch-list
+                          - 'card_ver' removed from the adapter list
+                          - Some minor bug fixes
 */
 
 
@@ -66,52 +77,176 @@ static int ultramca_close_card(struct net_device *dev);
 #define ULTRA_IO_EXTENT 32
 #define EN0_ERWCNT      0x08  /* Early receive warning count. */
 
+#define _61c8_SMC_Ethercard_PLUS_Elite_A_BNC_AUI_WD8013EP_A            0
+#define _61c9_SMC_Ethercard_PLUS_Elite_A_UTP_AUI_WD8013EP_A            1
+#define _6fc0_WD_Ethercard_PLUS_A_WD8003E_A_OR_WD8003ET_A              2
+#define _6fc1_WD_Starcard_PLUS_A_WD8003ST_A                            3
+#define _6fc2_WD_Ethercard_PLUS_10T_A_WD8003W_A                        4
+#define _efd4_IBM_PS2_Adapter_A_for_Ethernet_UTP_AUI_WD8013WP_A        5
+#define _efd5_IBM_PS2_Adapter_A_for_Ethernet_BNC_AUI_WD8013WP_A        6
+#define _efe5_IBM_PS2_Adapter_A_for_Ethernet                           7
+
+struct smc_mca_adapters_t {
+       unsigned int id;
+       char *name;
+};
+
+const struct smc_mca_adapters_t smc_mca_adapters[] = {
+    { 0x61c8, "SMC Ethercard PLUS Elite/A BNC/AUI (WD8013EP/A)" },
+    { 0x61c9, "SMC Ethercard PLUS Elite/A UTP/AUI (WD8013WP/A)" },
+    { 0x6fc0, "WD Ethercard PLUS/A (WD8003E/A or WD8003ET/A)" },
+    { 0x6fc1, "WD Starcard PLUS/A (WD8003ST/A)" },
+    { 0x6fc2, "WD Ethercard PLUS 10T/A (WD8003W/A)" },
+    { 0xefd4, "IBM PS/2 Adapter/A for Ethernet UTP/AUI (WD8013WP/A)" },
+    { 0xefd5, "IBM PS/2 Adapter/A for Ethernet BNC/AUI (WD8013EP/A)" },
+    { 0xefe5, "IBM PS/2 Adapter/A for Ethernet" },
+    { 0x0000, NULL }
+};
+
 int __init ultramca_probe(struct net_device *dev)
 {
        unsigned short ioaddr;
        unsigned char reg4, num_pages;
-       char slot;
-       unsigned char pos2, pos3, pos4, pos5;
-       int i;
+       char slot = -1;
+       unsigned char pos2 = 0xff, pos3 = 0xff, pos4 = 0xff, pos5 = 0xff;
+       int i, j;
+       int adapter_found = 0;
+       int adapter = 0;
+       int tbase = 0;
+       int tirq = 0;
+       int base_addr = dev ? dev->base_addr : 0;
+       int irq = dev ? dev->irq : 0;
+
+       if (!MCA_bus) {
+               return ENODEV;
+       }
 
-       /* Look for two flavors of SMC Elite/A (3013EP/A) -jeh- */
-       if(( (slot=mca_find_adapter(0x61c8,0)) != MCA_NOTFOUND) ||
-            ((slot=mca_find_adapter(0xefd5,0)) != MCA_NOTFOUND) )
+       if (base_addr || irq) {
+               printk(KERN_INFO "Probing for SMC MCA adapter");
+               if (base_addr) {
+                       printk(KERN_INFO " at I/O address 0x%04x%c",
+                              base_addr, irq ? ' ' : '\n');
+               }
+               if (irq) {
+                       printk(KERN_INFO "using irq %d\n", irq);
+               }
+       }
 
-       {
-#ifndef MODULE
-               mca_set_adapter_name( slot, "SMC Elite/A (8013EP/A)" );
-#endif
+        /* proper multicard detection by ZP Gu (zpg@castle.net) */
+
+       for (j = 0; (smc_mca_adapters[j].name != NULL) && !adapter_found; j++) {
+               slot = mca_find_unused_adapter(smc_mca_adapters[j].id, 0);
+
+               while((slot != MCA_NOTFOUND) && !adapter_found) {
+                       tirq = 0;
+                       tbase = 0;
+
+                        /* If we're trying to match a specificied irq or
+                        * io address, we'll reject the adapter
+                        * found unless it's the one we're looking for
+                        */
+
+                       pos2 = mca_read_stored_pos(slot, 2); /* io_addr */
+                       pos3 = mca_read_stored_pos(slot, 3); /* shared mem */
+                       pos4 = mca_read_stored_pos(slot, 4); /* ROM bios addr
+                                                             * range */
+                       pos5 = mca_read_stored_pos(slot, 5); /* irq, media
+                                                             * and RIPL */
+
+                       /* Test the following conditions:
+                        * - If an irq parameter is supplied, compare it
+                        *   with the irq of the adapter we found
+                        * - If a base_addr paramater is given, compare it
+                        *   with the base_addr of the adapter we found
+                        * - Check that the irq and the base_addr of the
+                        *   adapter we found is not already in use by
+                        *   this driver
+                        */
+
+                       switch (j) { /* j = card-idx (card array above) [hs] */
+                               case _61c8_SMC_Ethercard_PLUS_Elite_A_BNC_AUI_WD8013EP_A:
+                               case _61c9_SMC_Ethercard_PLUS_Elite_A_UTP_AUI_WD8013EP_A:
+                               case _efd4_IBM_PS2_Adapter_A_for_Ethernet_UTP_AUI_WD8013WP_A:
+                               case _efd5_IBM_PS2_Adapter_A_for_Ethernet_BNC_AUI_WD8013WP_A:
+                               {
+                                       tbase = addr_table[(pos2 & 0xf0) >> 4].base_addr;
+                                       tirq  = irq_table[(pos5 & 0xc) >> 2].new_irq;
+                                       break;
+                               }
+                               case _6fc0_WD_Ethercard_PLUS_A_WD8003E_A_OR_WD8003ET_A:
+                               case _6fc1_WD_Starcard_PLUS_A_WD8003ST_A:
+                               case _6fc2_WD_Ethercard_PLUS_10T_A_WD8003W_A:
+                               case _efe5_IBM_PS2_Adapter_A_for_Ethernet:
+                               {
+                                       tbase = ((pos2 & 0x0fe) * 0x10);
+                                       tirq  = irq_table[(pos5 & 3)].old_irq;
+                                       break;
+                               }
+                       }
+
+                       if(!tirq || !tbase || (irq && irq != tirq) || (base_addr && tbase != base_addr)) {
+                               slot = mca_find_unused_adapter(smc_mca_adapters[j].id, slot + 1);
+                       } else {
+                               adapter_found = 1;
+                               adapter = j;
+                       }
+               }
        }
-       else if( (slot=mca_find_adapter(0x61c9,0)) != MCA_NOTFOUND)
-       {
-#ifndef MODULE
-               mca_set_adapter_name( slot, "SMC Elite10T/A (8013WP/A)" );
-#endif
+
+       if(!adapter_found) {
+               return ((base_addr || irq) ? ENXIO : ENODEV);
        }
-       else
-               return -ENODEV;
 
-       pos2 = mca_read_stored_pos(slot, 2);     /* IO range */
-       pos3 = mca_read_stored_pos(slot, 3);     /* shared mem */
-       pos4 = mca_read_stored_pos(slot, 4);     /* bios base */
-       pos5 = mca_read_stored_pos(slot, 5);     /* irq and media */
+        /* Adapter found. */
+
+       printk(KERN_INFO "%s: %s found in slot %d\n",
+              dev->name, smc_mca_adapters[adapter].name, slot + 1);
+
+       mca_set_adapter_name(slot, smc_mca_adapters[adapter].name);
+       mca_mark_as_used(slot);
 
-       dev->base_addr = ioaddr = addr_table[pos2 >> 4].base_addr;
-       dev->irq = irq_table[(pos5 & ~IRQ_MASK) >> 2].irq;
 
+       dev->base_addr = ioaddr = tbase;
+       dev->irq       = tirq;
        dev->mem_start = 0;
-       num_pages = 40;
-       for (i = 0; i < 15; i++)
-       {
-               if (mem_table[i].mem_index == (pos3 & ~MEM_MASK))
+       num_pages      = 40;
+
+       switch (j) {    /* 'j' = card-# in const array above [hs] */
+               case _61c8_SMC_Ethercard_PLUS_Elite_A_BNC_AUI_WD8013EP_A:
+               case _61c9_SMC_Ethercard_PLUS_Elite_A_UTP_AUI_WD8013EP_A:
                {
-                       dev->mem_start = mem_table[i].mem_start;
-                       num_pages = mem_table[i].num_pages;
+                       for (i = 0; i < 16; i++) { /* taking 16 counts
+                                                   * up to 15 [hs] */
+                               if (mem_table[i].mem_index == (pos3 & ~MEM_MASK)) {
+                                       dev->mem_start = mem_table[i].mem_start;
+                                       num_pages = mem_table[i].num_pages;
+                               }
+                       }
+                       break;
+               }
+               case _6fc0_WD_Ethercard_PLUS_A_WD8003E_A_OR_WD8003ET_A:
+               case _6fc1_WD_Starcard_PLUS_A_WD8003ST_A:
+               case _6fc2_WD_Ethercard_PLUS_10T_A_WD8003W_A:
+               case _efe5_IBM_PS2_Adapter_A_for_Ethernet:
+               {
+                       dev->mem_start = ((pos3 & 0xfc) * 0x1000);
+                       num_pages = 0x40;
+                       break;
+               }
+               case _efd4_IBM_PS2_Adapter_A_for_Ethernet_UTP_AUI_WD8013WP_A:
+               case _efd5_IBM_PS2_Adapter_A_for_Ethernet_BNC_AUI_WD8013WP_A:
+               {
+                       /* courtesy of gamera@quartz.ocn.ne.jp, pos3 indicates
+                        * the index of the 0x2000 step.
+                        * beware different number of pages [hs]
+                        */
+                       dev->mem_start = 0xc0000 + (0x2000 * (pos3 & 0xf));
+                       num_pages = 0x20 + (2 * (pos3 & 0x10));
+                       break;
                }
        }
 
-       if (dev->mem_start == 0)      /* sanity check, shouldn't happen */
+       if (dev->mem_start == 0) /* sanity check, shouldn't happen */
                return -ENODEV;
 
        reg4 = inb(ioaddr + 4) & 0x7f;
@@ -120,52 +255,45 @@ int __init ultramca_probe(struct net_device *dev)
        if (load_8390_module("wd.c"))
                return -ENOSYS;
 
-       printk("%s: SMC Ultra MCA at %#3x,", dev->name, ioaddr);
+       printk(KERN_INFO "%s: Parameters: %#3x,", dev->name, ioaddr);
 
        for (i = 0; i < 6; i++)
-               printk(" %2.2X", dev->dev_addr[i] = inb(ioaddr + 8 + i));
+               printk(KERN_INFO " %2.2X", dev->dev_addr[i] = inb(ioaddr + 8 + i));
 
-       /*
-        *      Switch from the station address to the alternate register set and
-        *      read the useful registers there.
+       /* Switch from the station address to the alternate register set
+        * and read the useful registers there.
         */
 
        outb(0x80 | reg4, ioaddr + 4);
 
-       /*
-        *      Enable FINE16 mode to avoid BIOS ROM width mismatches @ reboot.
+       /* Enable FINE16 mode to avoid BIOS ROM width mismatches @ reboot.
         */
 
        outb(0x80 | inb(ioaddr + 0x0c), ioaddr + 0x0c);
 
-       /*
-        *      Switch back to the station address register set so that the MS-DOS driver
-        *      can find the card after a warm boot.
+       /* Switch back to the station address register set so that
+        * the MS-DOS driver can find the card after a warm boot.
         */
 
        outb(reg4, ioaddr + 4);
 
-       /*
-        *      Allocate dev->priv and fill in 8390 specific dev fields.
+       /* Allocate dev->priv and fill in 8390 specific dev fields.
         */
 
-       if (ethdev_init(dev))
-       {
-               printk (", no memory for dev->priv.\n");
+       if (ethdev_init(dev)) {
+               printk (KERN_INFO ", no memory for dev->priv.\n");
                return -ENOMEM;
        }
 
-       /*
-        *      OK, we are certain this is going to work.  Setup the device.
+       /* OK, we are certain this is going to work.  Setup the device.
         */
 
        request_region(ioaddr, ULTRA_IO_EXTENT, "smc-mca");
 
-       /*
-        *      The 8390 isn't at the base address, so fake the offset
+       /* The 8390 isn't at the base address, so fake the offset
         */
 
-       dev->base_addr = ioaddr+ULTRA_NIC_OFFSET;
+       dev->base_addr = ioaddr + ULTRA_NIC_OFFSET;
 
        ei_status.name = "SMC Ultra MCA";
        ei_status.word16 = 1;
@@ -173,16 +301,20 @@ int __init ultramca_probe(struct net_device *dev)
        ei_status.rx_start_page = START_PG + TX_PAGES;
        ei_status.stop_page = num_pages;
 
-       dev->rmem_start = dev->mem_start + TX_PAGES*256;
+       dev->rmem_start = dev->mem_start + TX_PAGES * 256;
        dev->mem_end = dev->rmem_end =
-       dev->mem_start + (ei_status.stop_page - START_PG)*256;
+       dev->mem_start + (ei_status.stop_page - START_PG) * 256;
 
-       printk(", IRQ %d memory %#lx-%#lx.\n", dev->irq, dev->mem_start, dev->mem_end-1);
+       printk(KERN_INFO ", IRQ %d memory %#lx-%#lx.\n",
+       dev->irq, dev->mem_start, dev->mem_end - 1);
 
        ei_status.reset_8390 = &ultramca_reset_8390;
        ei_status.block_input = &ultramca_block_input;
        ei_status.block_output = &ultramca_block_output;
        ei_status.get_8390_hdr = &ultramca_get_8390_hdr;
+
+       ei_status.priv = slot;
+
        dev->open = &ultramca_open;
        dev->stop = &ultramca_close_card;
        NS8390_init(dev, 0);
@@ -195,21 +327,19 @@ static int ultramca_open(struct net_device *dev)
        int ioaddr = dev->base_addr - ULTRA_NIC_OFFSET; /* ASIC addr */
 
        if (request_irq(dev->irq, ei_interrupt, 0, ei_status.name, dev))
-       return -EAGAIN;
+               return -EAGAIN;
 
        outb(ULTRA_MEMENB, ioaddr); /* Enable memory */
        outb(0x80, ioaddr + 5);     /* ??? */
        outb(0x01, ioaddr + 6);     /* Enable interrupts and memory. */
        outb(0x04, ioaddr + 5);     /* ??? */
 
-       /*
-        *      Set the early receive warning level in window 0 high enough not
-        *      to receive ERW interrupts.
+       /* Set the early receive warning level in window 0 high enough not
+        * to receive ERW interrupts.
         */
 
-       /*
-        *      outb_p(E8390_NODMA+E8390_PAGE0, dev->base_addr);
-        *      outb(0xff, dev->base_addr + EN0_ERWCNT);
+       /* outb_p(E8390_NODMA + E8390_PAGE0, dev->base_addr);
+        * outb(0xff, dev->base_addr + EN0_ERWCNT);
         */
 
        ei_open(dev);
@@ -222,7 +352,8 @@ static void ultramca_reset_8390(struct net_device *dev)
        int ioaddr = dev->base_addr - ULTRA_NIC_OFFSET; /* ASIC addr */
 
        outb(ULTRA_RESET, ioaddr);
-       if (ei_debug > 1) printk("resetting Ultra, t=%ld...", jiffies);
+       if (ei_debug > 1)
+               printk("resetting Ultra, t=%ld...", jiffies);
        ei_status.txing = 0;
 
        outb(0x80, ioaddr + 5);     /* ??? */
@@ -234,12 +365,13 @@ static void ultramca_reset_8390(struct net_device *dev)
 }
 
 /* Grab the 8390 specific header. Similar to the block_input routine, but
-   we don't need to be concerned with ring wrap as the header will be at
-   the start of a page, so we optimize accordingly. */
+ * we don't need to be concerned with ring wrap as the header will be at
+ * the start of a page, so we optimize accordingly.
+ */
 
 static void ultramca_get_8390_hdr(struct net_device *dev, struct e8390_pkt_hdr *hdr, int ring_page)
 {
-       unsigned long hdr_start = dev->mem_start + ((ring_page - START_PG)<<8);
+       unsigned long hdr_start = dev->mem_start + ((ring_page - START_PG) << 8);
 
 #ifdef notdef
        /* Officially this is what we are doing, but the readl() is faster */
@@ -250,22 +382,20 @@ static void ultramca_get_8390_hdr(struct net_device *dev, struct e8390_pkt_hdr *
 }
 
 /* Block input and output are easy on shared memory ethercards, the only
-   complication is when the ring buffer wraps. */
+ * complication is when the ring buffer wraps.
+ */
 
 static void ultramca_block_input(struct net_device *dev, int count, struct sk_buff *skb, int ring_offset)
 {
-       unsigned long xfer_start = dev->mem_start + ring_offset - (START_PG<<8);
+       unsigned long xfer_start = dev->mem_start + ring_offset - (START_PG << 8);
 
-       if (xfer_start + count > dev->rmem_end)
-       {
-               /* We must wrap the input move. */
+       if (xfer_start + count > dev->rmem_end) {
+               /* We must wrap the input move. */
                int semi_count = dev->rmem_end - xfer_start;
                memcpy_fromio(skb->data, xfer_start, semi_count);
                count -= semi_count;
                memcpy_fromio(skb->data + semi_count, dev->rmem_start, count);
-       }
-       else
-       {
+       } else {
                /* Packet is in one chunk -- we can copy + cksum. */
                eth_io_copy_and_sum(skb, xfer_start, count, 0);
        }
@@ -275,7 +405,7 @@ static void ultramca_block_input(struct net_device *dev, int count, struct sk_bu
 static void ultramca_block_output(struct net_device *dev, int count, const unsigned char *buf,
                 int start_page)
 {
-       unsigned long shmem = dev->mem_start + ((start_page - START_PG)<<8);
+       unsigned long shmem = dev->mem_start + ((start_page - START_PG) << 8);
 
        memcpy_toio(shmem, buf, count);
 }
@@ -295,7 +425,8 @@ static int ultramca_close_card(struct net_device *dev)
 
        NS8390_init(dev, 0);
        /* We should someday disable shared memory and change to 8-bit mode
-       "just in case"... */
+         * "just in case"...
+        */
 
        MOD_DEC_USE_COUNT;
 
@@ -306,8 +437,9 @@ static int ultramca_close_card(struct net_device *dev)
 #ifdef MODULE
 #undef MODULE        /* don't want to bother now! */
 
-#define MAX_ULTRAMCA_CARDS  4   /* Max number of Ultra cards per module */
-#define NAMELEN     8   /* # of chars for storing dev->name */
+#define MAX_ULTRAMCA_CARDS 4   /* Max number of Ultra cards per module */
+#define NAMELEN 8              /* # of chars for storing dev->name */
+
 static char namelist[NAMELEN * MAX_ULTRAMCA_CARDS] = { 0, };
 
 static struct net_device dev_ultra[MAX_ULTRAMCA_CARDS] =
@@ -326,33 +458,23 @@ static int irq[MAX_ULTRAMCA_CARDS]  = { 0, };
 MODULE_PARM(io, "1-" __MODULE_STRING(MAX_ULTRAMCA_CARDS) "i");
 MODULE_PARM(irq, "1-" __MODULE_STRING(MAX_ULTRAMCA_CARDS) "i");
 
-/* This is set up so that only a single autoprobe takes place per call.
-ISA device autoprobes on a running machine are not recommended. */
-
 int init_module(void)
 {
        int this_dev, found = 0;
 
-       for (this_dev = 0; this_dev < MAX_ULTRAMCA_CARDS; this_dev++)
-       {
+       for (this_dev = 0; this_dev < MAX_ULTRAMCA_CARDS; this_dev++) {
                struct net_device *dev = &dev_ultra[this_dev];
-               dev->name = namelist+(NAMELEN*this_dev);
+               dev->name = namelist + (NAMELEN * this_dev);
                dev->irq = irq[this_dev];
                dev->base_addr = io[this_dev];
                dev->init = ultramca_probe;
-               if (io[this_dev] == 0)
-               {
-                       if (this_dev != 0)
-                               break; /* only autoprobe 1st one */
-                       printk(KERN_NOTICE "smc-mca.c: Presently autoprobing (not recommended) for a single card.\n");
-               }
-               if (register_netdev(dev) != 0)
-               {
-                       printk(KERN_WARNING "smc-mca.c: No SMC Ultra card found (i/o = 0x%x).\n", io[this_dev]);
+
+               if (register_netdev(dev) != 0) {
                        if (found != 0) {       /* Got at least one. */
                                lock_8390_module();
                                return 0;
                        }
+                       printk(KERN_NOTICE "smc-mca.c: No SMC Ultra card found (i/o = 0x%x).\n", io[this_dev]);
                        return -ENXIO;
                }
                found++;
@@ -365,14 +487,13 @@ void cleanup_module(void)
 {
        int this_dev;
 
-       for (this_dev = 0; this_dev < MAX_ULTRAMCA_CARDS; this_dev++)
-       {
+       for (this_dev = 0; this_dev < MAX_ULTRAMCA_CARDS; this_dev++) {
                struct net_device *dev = &dev_ultra[this_dev];
-               if (dev->priv != NULL)
-               {
+               if (dev->priv != NULL) {
                        void *priv = dev->priv;
                        /* NB: ultra_close_card() does free_irq */
                        int ioaddr = dev->base_addr - ULTRA_NIC_OFFSET;
+                       mca_mark_as_unused(ei_status.priv);
                        release_region(ioaddr, ULTRA_IO_EXTENT);
                        unregister_netdev(dev);
                        kfree(priv);
@@ -382,7 +503,6 @@ void cleanup_module(void)
 }
 #endif /* MODULE */
 
-
 /*
  * Local variables:
  *  compile-command: "gcc -D__KERNEL__ -Wall -O6 -I/usr/src/linux/net/inet -c smc-mca.c"
index dc6657d177550fc0755beb1d3db38d4de9e4d544..ac50117a7e847dcdd12591267e04f67fb05fbbd4 100644 (file)
@@ -1,7 +1,7 @@
-/* 
-   djweis weisd3458@uni.edu 
  most of this file was taken from ps2esdi.h
-*/
+/*
+ * djweis weisd3458@uni.edu
* most of this file was taken from ps2esdi.h
+ */
 
 struct {
   unsigned int base_addr;
@@ -25,6 +25,7 @@ struct {
 };
 
 #define MEM_MASK 64
+
 struct {
   unsigned char mem_index;
   unsigned long mem_start;
@@ -50,13 +51,11 @@ struct {
 
 #define IRQ_MASK 243
 struct {
-   unsigned char irq;
+   unsigned char new_irq;
+   unsigned char old_irq;
 } irq_table[] = {
-   {  3 }, 
-   {  4 },
-   { 10 },
-   { 14 }
+   {  3,  3 },
+   {  4,  4 },
+   { 10, 10 },
+   { 14, 15 }
 };
-
-   
index a1e65b20ad0bd95b92d285612a843830f11c697a..21275376c1cf5cf642d13b88541a6debae7f751f 100644 (file)
@@ -109,7 +109,7 @@ static const int multicast_filter_limit = 32;
 
 #define RUN_AT(x) (jiffies + (x))
 
-#if (LINUX_VERSION_CODE >= 0x20100)
+#ifdef MODULE
 char kernel_version[] = UTS_RELEASE;
 #else
 #ifndef __alpha__
@@ -1056,6 +1056,7 @@ static int netdev_rx(struct net_device *dev)
                                np->rx_skbuff[entry] = NULL;
                        }
                        skb->protocol = eth_type_trans(skb, dev);
+                       np->stats.rx_bytes+=skb->len;
                        netif_rx(skb);
                        dev->last_rx = jiffies;
                        np->stats.rx_packets++;
index 96a4e479055e8068f3f278601bd6923da6dd7be8..2dd4eaa120020a5b6477e8654e637a1dd5daa86f 100644 (file)
@@ -2094,7 +2094,7 @@ wavelan_ioctl(struct net_device * dev,    /* device on which the ioctl is applied *
          wrq->u.data.length = sizeof(struct iw_range);
 
          /* Set information in the range struct.  */
-         range.throughput = 1.6 * 1024 * 1024; /* don't argue on this ! */
+         range.throughput = 1.6 * 1000 * 1000; /* don't argue on this ! */
          range.min_nwid = 0x0000;
          range.max_nwid = 0xFFFF;
 
@@ -2240,7 +2240,10 @@ wavelan_ioctl(struct net_device *        dev,    /* device on which the ioctl is applied *
 
     case SIOCSIPQTHR:
       if(!suser())
-       return -EPERM;
+        {
+         ret = -EPERM;
+         break;
+       }
       psa.psa_quality_thr = *(wrq->u.name) & 0x0F;
       psa_write(ioaddr, lp->hacr, (char *)&psa.psa_quality_thr - (char *)&psa,
               (unsigned char *)&psa.psa_quality_thr, 1);
@@ -2259,7 +2262,10 @@ wavelan_ioctl(struct net_device *        dev,    /* device on which the ioctl is applied *
     case SIOCSIPHISTO:
       /* Verify that the user is root. */
       if(!suser())
-       return -EPERM;
+        {
+         ret = -EPERM;
+         break;
+       }
 
       /* Check the number of intervals. */
       if(wrq->u.data.length > 16)
index d0020f950ae6a492bd4e34dd233eb34bf2a6c2c5..2883046c133235902648da5e642b2d0e99e35fb8 100644 (file)
@@ -6,7 +6,9 @@ comment 'PCMCIA/Cardbus support'
 
 tristate 'PCMCIA/Cardbus support' CONFIG_PCMCIA
 if [ "$CONFIG_PCMCIA" != "n" ]; then
-  bool '  CardBus support' CONFIG_CARDBUS
+   if [ "$CONFIG_PCI" != "n" ]; then
+      bool '  CardBus support' CONFIG_CARDBUS
+   fi
 fi
 
 endmenu
index 579bb03604ca16d5a7465db1ec49f8fe00909ddf..71750544d22862415cd920f462681d9a3a38eed5 100644 (file)
@@ -12,17 +12,28 @@ SUB_DIRS     :=
 MOD_SUB_DIRS := $(SUB_DIRS)
 ALL_SUB_DIRS := $(SUB_DIRS)
 
-O_TARGET := pcmcia.o
+MOD_LIST_NAME := PCMCIA_MODULES
 
-O_OBJS   := i82365.o tcic.o cistpl.o rsrc_mgr.o bulkmem.o
-OX_OBJS  := ds.o cs.o
-
-ifeq ($(CONFIG_CARDBUS),y)
-  O_OBJS += cardbus.o
+ifeq ($(CONFIG_PCMCIA),y)
+  O_OBJS   := i82365.o tcic.o cistpl.o rsrc_mgr.o bulkmem.o
+  OX_OBJS  := ds.o cs.o
+  O_TARGET := pcmcia.o
+  ifeq ($(CONFIG_CARDBUS),y)
+    O_OBJS += cardbus.o
+  endif
 else
-  ifeq ($(CONFIG_CARDBUS),m)
-    MX_OBJS += cardbus.o
+  ifeq ($(CONFIG_PCMCIA),m)
+     M_OBJS   := i82365.o tcic.o pcmcia_core.o 
+     MX_OBJS  := ds.o
+     MIX_OBJS  := cs.o
+     CORE_OBJS := cistpl.o rsrc_mgr.o bulkmem.o cs.o
+     ifeq ($(CONFIG_CARDBUS),y)
+       CORE_OBJS += cardbus.o
+     endif
   endif
 endif
 
 include $(TOPDIR)/Rules.make
+
+pcmcia_core.o:  $(CORE_OBJS)
+       $(LD) $(LD_RFLAG) -r -o $@ $(CORE_OBJS)
index f1a8969f9b755fab67a4a43746a0df9c98f77dc9..7eaad9626ed81c391984abb248a14510e00d08c2 100644 (file)
@@ -2,7 +2,7 @@
 
     PCMCIA Bulk Memory Services
 
-    bulkmem.c 1.29 1999/08/28 04:01:45
+    bulkmem.c 1.32 1999/09/15 15:32:19
 
     The contents of this file are subject to the Mozilla Public
     License Version 1.1 (the "License"); you may not use this file
@@ -112,7 +112,7 @@ static int do_mtd_request(memory_handle_t handle, mtd_request_t *req,
 
 static void insert_queue(erase_busy_t *head, erase_busy_t *entry)
 {
-    DEBUG(2, ("cs: adding 0x%p to queue 0x%p\n", entry, head));
+    DEBUG(2, "cs: adding 0x%p to queue 0x%p\n", entry, head);
     entry->next = head;
     entry->prev = head->prev;
     head->prev->next = entry;
@@ -121,7 +121,7 @@ static void insert_queue(erase_busy_t *head, erase_busy_t *entry)
 
 static void remove_queue(erase_busy_t *entry)
 {
-    DEBUG(2, ("cs: unqueueing 0x%p\n", entry));
+    DEBUG(2, "cs: unqueueing 0x%p\n", entry);
     entry->next->prev = entry->prev;
     entry->prev->next = entry->next;
 }
@@ -134,7 +134,7 @@ static void retry_erase(erase_busy_t *busy, u_int cause)
     socket_info_t *s;
     int ret;
 
-    DEBUG(2, ("cs: trying erase request 0x%p...\n", busy));
+    DEBUG(2, "cs: trying erase request 0x%p...\n", busy);
     if (busy->next)
        remove_queue(busy);
     req.Function = MTD_REQ_ERASE | cause;
@@ -146,7 +146,7 @@ static void retry_erase(erase_busy_t *busy, u_int cause)
     mtd->event_callback_args.mtdrequest = &req;
     ret = EVENT(mtd, CS_EVENT_MTD_REQUEST, CS_EVENT_PRI_LOW);
     if (ret == CS_BUSY) {
-       DEBUG(2, ("  Status = %d, requeueing.\n", req.Status));
+       DEBUG(2, "  Status = %d, requeueing.\n", req.Status);
        switch (req.Status) {
        case MTD_WAITREQ:
        case MTD_WAITPOWER:
@@ -162,7 +162,7 @@ static void retry_erase(erase_busy_t *busy, u_int cause)
        }
     } else {
        /* update erase queue status */
-       DEBUG(2, ("  Ret = %d\n", ret));
+       DEBUG(2, "  Ret = %d\n", ret);
        switch (ret) {
        case CS_SUCCESS:
            erase->State = ERASE_PASSED; break;
@@ -190,7 +190,7 @@ void retry_erase_list(erase_busy_t *list, u_int cause)
 {
     erase_busy_t tmp = *list;
 
-    DEBUG(2, ("cs: rescanning erase queue list 0x%p\n", list));
+    DEBUG(2, "cs: rescanning erase queue list 0x%p\n", list);
     if (list->next == list)
        return;
     /* First, truncate the original list */
@@ -207,7 +207,7 @@ void retry_erase_list(erase_busy_t *list, u_int cause)
 
 static void handle_erase_timeout(u_long arg)
 {
-    DEBUG(0, ("cs: erase timeout for entry 0x%lx\n", arg));
+    DEBUG(0, "cs: erase timeout for entry 0x%lx\n", arg);
     retry_erase((erase_busy_t *)arg, MTD_REQ_TIMEOUT);
 }
 
@@ -326,8 +326,8 @@ static void setup_regions(client_handle_t handle, int attr,
     cistpl_device_geo_t geo;
     memory_handle_t r;
 
-    DEBUG(1, ("cs: setup_regions(0x%p, %d, 0x%p)\n",
-             handle, attr, list));
+    DEBUG(1, "cs: setup_regions(0x%p, %d, 0x%p)\n",
+         handle, attr, list);
 
     code = (attr) ? CISTPL_DEVICE_A : CISTPL_DEVICE;
     if (read_tuple(handle, code, &device) != CS_SUCCESS)
@@ -447,8 +447,8 @@ int register_mtd(client_handle_t handle, mtd_reg_t *reg)
        list = s->a_region;
     else
        list = s->c_region;
-    DEBUG(1, ("cs: register_mtd(0x%p, '%s', 0x%x)\n",
-             handle, handle->dev_info, reg->Offset));
+    DEBUG(1, "cs: register_mtd(0x%p, '%s', 0x%x)\n",
+         handle, handle->dev_info, reg->Offset);
     while (list) {
        if (list->info.CardOffset == reg->Offset) break;
        list = list->info.next;
@@ -466,7 +466,7 @@ int register_mtd(client_handle_t handle, mtd_reg_t *reg)
 
 /*======================================================================
 
-    
+    Erase queue management functions
     
 ======================================================================*/
 
@@ -535,8 +535,8 @@ int open_memory(client_handle_t *handle, open_mem_t *open)
     }
     if (region && region->mtd) {
        *handle = (client_handle_t)region;
-       DEBUG(1, ("cs: open_memory(0x%p, 0x%x) = 0x%p\n",
-                 handle, open->Offset, region));
+       DEBUG(1, "cs: open_memory(0x%p, 0x%x) = 0x%p\n",
+             handle, open->Offset, region);
        return CS_SUCCESS;
     } else
        return CS_BAD_OFFSET;
@@ -552,7 +552,7 @@ int open_memory(client_handle_t *handle, open_mem_t *open)
 
 int close_memory(memory_handle_t handle)
 {
-    DEBUG(1, ("cs: close_memory(0x%p)\n", handle));
+    DEBUG(1, "cs: close_memory(0x%p)\n", handle);
     if (CHECK_REGION(handle))
        return CS_BAD_HANDLE;
     return CS_SUCCESS;
@@ -612,6 +612,7 @@ int write_memory(memory_handle_t handle, mem_op_t *req, caddr_t buf)
 
 /*======================================================================
 
+    This isn't needed for anything I could think of.
     
 ======================================================================*/
 
@@ -620,5 +621,5 @@ int copy_memory(memory_handle_t handle, copy_op_t *req)
     if (CHECK_REGION(handle))
        return CS_BAD_HANDLE;
     return CS_UNSUPPORTED_FUNCTION;
-} /* close_memory */
+}
 
index 66b7835c8eac8d87ac630b666f3ec9786f171a1b..de8b76da328dfebee0a04dd1293f56328c59cdd9 100644 (file)
@@ -2,7 +2,7 @@
   
     Cardbus device configuration
     
-    cardbus.c 1.57 1999/09/07 15:19:32
+    cardbus.c 1.59 1999/09/15 15:32:19
 
     The contents of this file are subject to the Mozilla Public
     License Version 1.1 (the "License"); you may not use this file
@@ -40,6 +40,7 @@
 
 #include <linux/module.h>
 #include <linux/kernel.h>
+#include <linux/config.h>
 #include <linux/string.h>
 #include <linux/malloc.h>
 #include <linux/mm.h>
@@ -324,7 +325,9 @@ int cb_alloc(socket_info_t *s)
        pci_readl(bus, i, PCI_CLASS_REVISION, &c[i].dev.class);
        c[i].dev.class >>= 8;
        c[i].dev.hdr_type = hdr;
+#ifdef CONFIG_PROC_FS  
        pci_proc_attach_device(&c[i].dev);
+#endif 
     }
     
     return CS_SUCCESS;
@@ -332,24 +335,24 @@ int cb_alloc(socket_info_t *s)
 
 void cb_free(socket_info_t *s)
 {
-    struct pci_dev **p, *q;
     cb_config_t *c = s->cb_config;
 
     if (c) {
+       struct pci_dev **p, *q;
        /* Unlink from PCI device chain */
        for (p = &pci_devices; *p; p = &((*p)->next))
            if (*p == &c[0].dev) break;
        for (q = *p; q; q = q->next) {
            if (q->bus != (*p)->bus) break;
+#ifdef CONFIG_PROC_FS      
            pci_proc_detach_device(q);
+#endif     
        }
        if (*p) *p = q;
        s->cap.cb_bus->devices = NULL;
-    }
-    printk(KERN_INFO "cs: cb_free(bus %d)\n", s->cap.cardbus);
-    if (s->cb_config) {
        kfree(s->cb_config);
        s->cb_config = NULL;
+       printk(KERN_INFO "cs: cb_free(bus %d)\n", s->cap.cardbus);
     }
 }
 
index b8ac90e9d3b749271e448a8c1f68440f9b284a4d..b0e75ceecade5ff980212647e5a808cb0ed87646 100644 (file)
@@ -2,7 +2,7 @@
 
     Cardbus device enabler
 
-    cb_enabler.c 1.21 1999/08/28 04:01:45
+    cb_enabler.c 1.23 1999/09/15 15:32:19
 
     The contents of this file are subject to the Mozilla Public
     License Version 1.1 (the "License"); you may not use this file
@@ -40,6 +40,7 @@
 ======================================================================*/
 
 #include <linux/module.h>
+#include <linux/init.h>
 #include <linux/kernel.h>
 #include <linux/sched.h>
 #include <linux/malloc.h>
@@ -57,7 +58,7 @@ static int pc_debug = PCMCIA_DEBUG;
 MODULE_PARM(pc_debug, "i");
 #define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args)
 static char *version =
-"cb_enabler.c 1.21 1999/08/28 04:01:45 (David Hinds)";
+"cb_enabler.c 1.23 1999/09/15 15:32:19 (David Hinds)";
 #else
 #define DEBUG(n, args...) do { } while (0)
 #endif
@@ -107,7 +108,6 @@ static void cb_detach(dev_link_t *);
 
 static bus_info_t bus_table[MAX_DRIVER];
 
-
 /*====================================================================*/
 
 static void cs_error(client_handle_t handle, int func, int ret)
@@ -129,8 +129,6 @@ struct dev_link_t *cb_attach(int n)
     MOD_INC_USE_COUNT;
     link = kmalloc(sizeof(struct dev_link_t), GFP_KERNEL);
     memset(link, 0, sizeof(struct dev_link_t));
-    link->release.function = &cb_release;
-    link->release.data = (u_long)link;
 
     link->conf.IntType = INT_CARDBUS;
     link->conf.Vcc = 33;
@@ -166,7 +164,6 @@ static void cb_detach(dev_link_t *link)
     driver_info_t *dev = link->priv;
     dev_link_t **linkp;
     bus_info_t *b = (void *)link->win;
-    u_long flags;
     
     DEBUG(0, "cb_detach(0x%p)\n", link);
     
@@ -176,14 +173,6 @@ static void cb_detach(dev_link_t *link)
     if (*linkp == NULL)
        return;
 
-    save_flags(flags);
-    cli();
-    if (link->state & DEV_RELEASE_PENDING) {
-       del_timer(&link->release);
-       link->state &= ~DEV_RELEASE_PENDING;
-    }
-    restore_flags(flags);
-    
     if (link->state & DEV_CONFIG)
        cb_release((u_long)link);
     
@@ -309,11 +298,8 @@ static int cb_event(event_t event, int priority,
     switch (event) {
     case CS_EVENT_CARD_REMOVAL:
        link->state &= ~DEV_PRESENT;
-       if (link->state & DEV_CONFIG) {
-           link->release.expires = jiffies + HZ/20;
-           link->state |= DEV_RELEASE_PENDING;
-           add_timer(&link->release);
-       }
+       if (link->state & DEV_CONFIG)
+           cb_release((u_long)link);
        break;
     case CS_EVENT_CARD_INSERTION:
        link->state |= DEV_PRESENT | DEV_CONFIG_PENDING;
@@ -386,7 +372,8 @@ void unregister_driver(struct driver_operations *ops)
 
 /*====================================================================*/
 
-int init_module(void) {
+static int __init init_cb_enabler(void)
+{
     servinfo_t serv;
     DEBUG(0, "%s\n", version);
     CardServices(GetCardServicesInfo, &serv);
@@ -398,8 +385,13 @@ int init_module(void) {
     return 0;
 }
 
-void cleanup_module(void) {
+static void __exit exit_cb_enabler(void)
+{
     DEBUG(0, "cb_enabler: unloading\n");
 }
 
+module_init(init_cb_enabler);
+module_exit(exit_cb_enabler);
+
 /*====================================================================*/
+
index fe58a43df6037e45869b13680c1608543582d32c..690ea894f307fbc77c5f73e6b9a4d685dde45cd0 100644 (file)
@@ -2,7 +2,7 @@
 
     PCMCIA Card Information Structure parser
 
-    cistpl.c 1.70 1999/09/07 15:18:58
+    cistpl.c 1.72 1999/09/15 15:32:19
 
     The contents of this file are subject to the Mozilla Public
     License Version 1.1 (the "License"); you may not use this file
@@ -55,8 +55,6 @@
 #include "cs_internal.h"
 #include "rsrc_mgr.h"
 
-#define MIN(a, b)              (((a) < (b)) ? (a) : (b))
-
 static const u_char mantissa[] = {
     10, 12, 13, 15, 20, 25, 30, 35,
     40, 45, 50, 55, 60, 70, 80, 90
@@ -524,6 +522,8 @@ int get_next_tuple(client_handle_t handle, tuple_t *tuple)
 
 /*====================================================================*/
 
+#define _MIN(a, b)             (((a) < (b)) ? (a) : (b))
+
 int get_tuple_data(client_handle_t handle, tuple_t *tuple)
 {
     socket_info_t *s;
@@ -542,7 +542,7 @@ int get_tuple_data(client_handle_t handle, tuple_t *tuple)
        return CS_SUCCESS;
     read_cis_cache(s, SPACE(tuple->Flags),
                   tuple->CISOffset + tuple->TupleOffset,
-                  MIN(len, tuple->TupleDataMax), tuple->TupleData);
+                  _MIN(len, tuple->TupleDataMax), tuple->TupleData);
     return CS_SUCCESS;
 }
 
index 7362da136d36e10cf97e99bdf038e48d7ff45d15..470514c556afb514e839e3b73e10d93978fd98d5 100644 (file)
@@ -2,7 +2,7 @@
 
     PCMCIA Card Services -- core services
 
-    cs.c 1.225 1999/09/07 15:19:32
+    cs.c 1.228 1999/09/15 15:32:19
     
     The contents of this file are subject to the Mozilla Public
     License Version 1.1 (the "License"); you may not use this file
@@ -32,7 +32,9 @@
 ======================================================================*/
 
 #include <linux/module.h>
+#include <linux/init.h>
 #include <linux/kernel.h>
+#include <linux/config.h>
 #include <linux/string.h>
 #include <linux/major.h>
 #include <linux/errno.h>
@@ -43,6 +45,7 @@
 #include <linux/ioport.h>
 #include <linux/delay.h>
 #include <linux/proc_fs.h>
+#include <linux/compile.h>
 #include <asm/system.h>
 #include <asm/irq.h>
 
@@ -67,11 +70,13 @@ static int handle_apm_event(apm_event_t event);
 int pc_debug = PCMCIA_DEBUG;
 MODULE_PARM(pc_debug, "i");
 static const char *version =
-"cs.c 1.225 1999/09/07 15:19:32 (David Hinds)";
+"cs.c 1.228 1999/09/15 15:32:19 (David Hinds)";
 #endif
 
 static const char *release = "Linux PCMCIA Card Services " CS_RELEASE;
-
+#ifdef MODULE
+static const char *kernel = "kernel build: " UTS_RELEASE " " UTS_VERSION;
+#endif
 static const char *options = "options: "
 #ifdef CONFIG_PCI
 " [pci]"
@@ -82,7 +87,8 @@ static const char *options = "options: "
 #ifdef CONFIG_APM
 " [apm]"
 #endif
-#if !defined(CONFIG_CARDBUS) && !defined(CONFIG_PCI) && !defined(CONFIG_APM)
+#if !defined(CONFIG_CARDBUS) && !defined(CONFIG_PCI) && \
+    !defined(CONFIG_APM) && !defined(CONFIG_PNP_BIOS)
 " none"
 #endif
 ;
@@ -2197,9 +2203,12 @@ EXPORT_SYMBOL(unregister_ss_entry);
 EXPORT_SYMBOL(CardServices);
 EXPORT_SYMBOL(MTDHelperEntry);
 
-static int pcmcia_cs_init(void)
+static int __init init_pcmcia_cs(void)
 {
     printk(KERN_INFO "%s\n", release);
+#ifdef MODULE
+    printk(KERN_INFO "  %s\n", kernel);
+#endif
     printk(KERN_INFO "  %s\n", options);
     DEBUG(0, "%s\n", version);
 #ifdef CONFIG_APM
@@ -2212,14 +2221,7 @@ static int pcmcia_cs_init(void)
     return 0;
 }
 
-#ifdef MODULE
-
-int init_module(void)
-{
-       return pcmcia_cs_init();
-}
-
-void cleanup_module(void)
+static void __exit exit_pcmcia_cs(void)
 {
     printk(KERN_INFO "unloading PCMCIA Card Services\n");
 #ifdef CONFIG_PROC_FS
@@ -2234,36 +2236,8 @@ void cleanup_module(void)
     release_resource_db();
 }
 
-#else
-
-extern int pcmcia_ds_init(void);
-extern int pcmcia_i82365_init(void);
-extern int init_pcnet_cs(void);
-extern int init_ray_cs(void);
-
-int pcmcia_init(void)
-{
-       /* Start core services */
-       pcmcia_cs_init();
-
-       /* Load the socket drivers */
-       pcmcia_i82365_init();
-
-       /* Get the ball rolling.. */
-       pcmcia_ds_init();
-
-#ifdef CONFIG_PCMCIA_PCNET
-       init_pcnet_cs();
-#endif
-#ifdef CONFIG_PCMCIA_3C589
-       init_3c589_cs();
-#endif
-#ifdef CONFIG_PCMCIA_RAYCS
-       init_ray_cs();
-#endif
-       return 0;
-}
-
-#endif
+module_init(init_pcmcia_cs);
+module_exit(exit_pcmcia_cs);
 
 /*====================================================================*/
+
index 59ae7a44c9e7b31b285a2c9caf12dd86b13b124f..aca0a0d0cac546c5d8d674db5ad139427adb7315 100644 (file)
@@ -272,7 +272,7 @@ extern struct proc_dir_entry *proc_pccard;
 
 #ifdef PCMCIA_DEBUG
 extern int pc_debug;
-#define DEBUG(n, args...) do { if (pc_debug>(n)) printk(args); } while (0)
+#define DEBUG(n, args...) do { if (pc_debug>(n)) printk(KERN_DEBUG args); } while (0)
 #else
 #define DEBUG(n, args...) do { } while (0)
 #endif
index 59b5d5303e1d8bd4742b38275684ebea87b8eee8..71550228ba21bdb34389e304867c674f24828c6e 100644 (file)
@@ -2,7 +2,7 @@
 
     PC Card Driver Services
     
-    ds.c 1.96 1999/09/02 18:35:34
+    ds.c 1.98 1999/09/15 15:32:19
     
     The contents of this file are subject to the Mozilla Public
     License Version 1.1 (the "License"); you may not use this file
@@ -32,6 +32,7 @@
 ======================================================================*/
 
 #include <linux/module.h>
+#include <linux/init.h>
 #include <linux/kernel.h>
 #include <linux/major.h>
 #include <linux/string.h>
@@ -56,7 +57,7 @@ int pc_debug = PCMCIA_DEBUG;
 MODULE_PARM(pc_debug, "i");
 #define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args)
 static const char *version =
-"ds.c 1.96 1999/09/02 18:35:34 (David Hinds)";
+"ds.c 1.98 1999/09/15 15:32:19 (David Hinds)";
 #else
 #define DEBUG(n, args...)
 #endif
@@ -537,7 +538,7 @@ static int ds_release(struct inode *inode, struct file *file)
 /*====================================================================*/
 
 static ssize_t ds_read(struct file *file, char *buf,
-                             size_t count, loff_t *ppos)
+                      size_t count, loff_t *ppos)
 {
     socket_t i = MINOR(file->f_dentry->d_inode->i_rdev);
     socket_info_t *s;
@@ -566,7 +567,7 @@ static ssize_t ds_read(struct file *file, char *buf,
 /*====================================================================*/
 
 static ssize_t ds_write(struct file *file, const char *buf,
-                              size_t count, loff_t *ppos)
+                       size_t count, loff_t *ppos)
 {
     socket_t i = MINOR(file->f_dentry->d_inode->i_rdev);
     socket_info_t *s;
@@ -804,7 +805,7 @@ EXPORT_SYMBOL(unregister_pccard_driver);
 
 /*====================================================================*/
 
-int pcmcia_ds_init(void)
+int __init init_pcmcia_ds(void)
 {
     client_reg_t client_reg;
     servinfo_t serv;
@@ -879,12 +880,12 @@ int pcmcia_ds_init(void)
 
 #ifdef MODULE
 
-static int init_module(void)
+int __init init_module(void)
 {
-       return pcmcia_ds_init();
+    return init_pcmcia_ds();
 }
 
-void cleanup_module(void)
+void __exit cleanup_module(void)
 {
     int i;
     if (major_dev != -1)
index 225ffa7579180b5ff2da3ca80bf33777f39c014a..9e80943e4d9521a4c559dea99f32fa207ce6bbf3 100644 (file)
@@ -3,7 +3,7 @@
     Device driver for Intel 82365 and compatible PC Card controllers,
     and Yenta-compatible PCI-to-CardBus controllers.
 
-    i82365.c 1.251 1999/09/07 15:19:23
+    i82365.c 1.254 1999/09/15 15:32:19
 
     The contents of this file are subject to the Mozilla Public
     License Version 1.1 (the "License"); you may not use this file
@@ -33,6 +33,8 @@
 ======================================================================*/
 
 #include <linux/module.h>
+#include <linux/init.h>
+#include <linux/config.h>
 #include <linux/types.h>
 #include <linux/fcntl.h>
 #include <linux/string.h>
@@ -72,9 +74,9 @@
 #ifdef PCMCIA_DEBUG
 static int pc_debug = PCMCIA_DEBUG;
 MODULE_PARM(pc_debug, "i");
-#define DEBUG(n, args...) do { if (pc_debug>(n)) printk(KERN_DEBUG args); } while (0)
+#define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args)
 static const char *version =
-"i82365.c $Revision: 1.249 $ $Date: 1999/08/28 04:01:46 $ (David Hinds)";
+"i82365.c 1.254 1999/09/15 15:32:19 (David Hinds)";
 #else
 #define DEBUG(n, args...) do { } while (0)
 #endif
@@ -82,11 +84,10 @@ static const char *version =
 static void irq_count(int, void *, struct pt_regs *);
 static inline int _check_irq(int irq, int flags)
 {
-    if (request_irq(irq, irq_count, flags, "x", NULL) == 0) {
-       free_irq(irq, NULL);
-       return 0;
-    }
-    return -1;
+    if (request_irq(irq, irq_count, flags, "x", NULL) != 0)
+       return -1;
+    free_irq(irq, NULL);
+    return 0;
 }
 
 /*====================================================================*/
@@ -576,7 +577,7 @@ static int cirrus_set_irq_mode(u_short s, int pcsc, int pint)
 }
 #endif /* CONFIG_PCI */
 
-static u_int cirrus_set_opts(u_short s, char *buf)
+static u_int __init cirrus_set_opts(u_short s, char *buf)
 {
     socket_info_t *t = &socket[s];
     cirrus_state_t *p = &socket[s].state.cirrus;
@@ -660,7 +661,7 @@ static void vg46x_set_state(u_short s)
        i365_set(s, VG469_EXT_MODE, p->ema);
 }
 
-static u_int vg46x_set_opts(u_short s, char *buf)
+static u_int __init vg46x_set_opts(u_short s, char *buf)
 {
     vg46x_state_t *p = &socket[s].state.vg46x;
     
@@ -742,7 +743,7 @@ static int ti113x_set_irq_mode(u_short s, int pcsc, int pint)
     return 0;
 }
 
-static u_int ti113x_set_opts(u_short s, char *buf)
+static u_int __init ti113x_set_opts(u_short s, char *buf)
 {
     socket_info_t *t = &socket[s];
     ti113x_state_t *p = &t->state.ti113x;
@@ -838,7 +839,7 @@ static void rl5c4xx_set_state(u_short s)
     pci_writew(t->bus, t->devfn, RL5C4XX_16BIT_MEM_0, p->mem);
 }
 
-static u_int rl5c4xx_set_opts(u_short s, char *buf)
+static u_int __init rl5c4xx_set_opts(u_short s, char *buf)
 {
     rl5c4xx_state_t *p = &socket[s].state.rl5c4xx;
     u_int mask = 0xffff;
@@ -939,7 +940,7 @@ static void o2micro_set_state(u_short s)
     }
 }
 
-static u_int o2micro_set_opts(u_short s, char *buf)
+static u_int __init o2micro_set_opts(u_short s, char *buf)
 {
     socket_info_t *t = &socket[s];
     o2micro_state_t *p = &socket[s].state.o2micro;
@@ -1009,7 +1010,7 @@ static int topic_set_irq_mode(u_short s, int pcsc, int pint)
     }
 }
 
-static u_int topic_set_opts(u_short s, char *buf)
+static u_int __init topic_set_opts(u_short s, char *buf)
 {
     topic_state_t *p = &socket[s].state.topic;
 
@@ -1034,38 +1035,34 @@ static u_int topic_set_opts(u_short s, char *buf)
 static void cb_get_state(u_short s)
 {
     socket_info_t *t = &socket[s];
-    struct pci_dev *dev = pci_find_slot(t->bus, t->devfn);
-
-    if (!dev)
-       return;
-    pci_read_config_byte(dev, PCI_CACHE_LINE_SIZE, &t->cache);
-    pci_read_config_byte(dev, PCI_LATENCY_TIMER, &t->pci_lat);
-    pci_read_config_byte(dev, CB_LATENCY_TIMER, &t->cb_lat);
-    pci_read_config_byte(dev, CB_CARDBUS_BUS, &t->cap.cardbus);
-    pci_read_config_byte(dev, CB_SUBORD_BUS, &t->sub_bus);
-    pci_read_config_word(dev, CB_BRIDGE_CONTROL, &t->bcr);
-
-    t->cap.pci_irq = dev->irq;
+    
+    pci_readb(t->bus, t->devfn, PCI_CACHE_LINE_SIZE, &t->cache);
+    pci_readb(t->bus, t->devfn, PCI_LATENCY_TIMER, &t->pci_lat);
+    pci_readb(t->bus, t->devfn, CB_LATENCY_TIMER, &t->cb_lat);
+    pci_readb(t->bus, t->devfn, CB_CARDBUS_BUS, &t->cap.cardbus);
+    pci_readb(t->bus, t->devfn, CB_SUBORD_BUS, &t->sub_bus);
+    pci_readw(t->bus, t->devfn, CB_BRIDGE_CONTROL, &t->bcr);
+    {
+       struct pci_dev *pdev = pci_find_slot(t->bus, t->devfn);
+       t->cap.pci_irq = (pdev) ? pdev->irq : 0;
+    }
     if (t->cap.pci_irq >= NR_IRQS) t->cap.pci_irq = 0;
 }
 
 static void cb_set_state(u_short s)
 {
     socket_info_t *t = &socket[s];
-    struct pci_dev *dev = pci_find_slot(t->bus, t->devfn);
-
     if (t->pmcs)
-       pci_write_config_word(dev, t->pmcs, PCI_PMCS_PWR_STATE_D0);
-
-    pci_write_config_dword(dev, CB_LEGACY_MODE_BASE, 0);
-    pci_write_config_dword(dev, PCI_BASE_ADDRESS_0, t->cb_phys);
-    pci_write_config_word(dev, PCI_COMMAND, CMD_DFLT);
-    pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE, t->cache);
-    pci_write_config_byte(dev, PCI_LATENCY_TIMER, t->pci_lat);
-    pci_write_config_byte(dev, CB_LATENCY_TIMER, t->cb_lat);
-    pci_write_config_byte(dev, CB_CARDBUS_BUS, t->cap.cardbus);
-    pci_write_config_byte(dev, CB_SUBORD_BUS, t->sub_bus);
-    pci_write_config_word(dev, CB_BRIDGE_CONTROL, t->bcr);
+       pci_writew(t->bus, t->devfn, t->pmcs, PCI_PMCS_PWR_STATE_D0);
+    pci_writel(t->bus, t->devfn, CB_LEGACY_MODE_BASE, 0);
+    pci_writel(t->bus, t->devfn, PCI_BASE_ADDRESS_0, t->cb_phys);
+    pci_writew(t->bus, t->devfn, PCI_COMMAND, CMD_DFLT);
+    pci_writeb(t->bus, t->devfn, PCI_CACHE_LINE_SIZE, t->cache);
+    pci_writeb(t->bus, t->devfn, PCI_LATENCY_TIMER, t->pci_lat);
+    pci_writeb(t->bus, t->devfn, CB_LATENCY_TIMER, t->cb_lat);
+    pci_writeb(t->bus, t->devfn, CB_CARDBUS_BUS, t->cap.cardbus);
+    pci_writeb(t->bus, t->devfn, CB_SUBORD_BUS, t->sub_bus);
+    pci_writew(t->bus, t->devfn, CB_BRIDGE_CONTROL, t->bcr);
 }
 
 static int cb_get_irq_mode(u_short s)
@@ -1086,9 +1083,9 @@ static int cb_set_irq_mode(u_short s, int pcsc, int pint)
     return 0;
 }
 
-static void pci_scan(u_short sock);
+static void __init pci_scan(u_short sock);
 
-static void cb_set_opts(u_short s, char *buf)
+static void __init cb_set_opts(u_short s, char *buf)
 {
     socket_info_t *t = &socket[s];
     t->bcr |= CB_BCR_WRITE_POST;
@@ -1181,7 +1178,7 @@ static void set_host_state(u_short s)
 #endif
 }
 
-static u_int set_host_opts(u_short s, u_short ns)
+static u_int __init set_host_opts(u_short s, u_short ns)
 {
     u_short i;
     u_int m = 0xffff;
@@ -1247,10 +1244,10 @@ static void irq_count(int irq, void *dev, struct pt_regs *regs)
 #endif
     i365_get(irq_sock, I365_CSC);
     irq_hits++;
-    DEBUG(2, ("-> hit on irq %d\n", irq));
+    DEBUG(2, "-> hit on irq %d\n", irq);
 }
 
-static u_int test_irq(u_short sock, int irq, int pci)
+static u_int __init test_irq(u_short sock, int irq, int pci)
 {
     u_char csc = (pci) ? 0 : irq;
     DEBUG(2, "  testing %s irq %d\n", pci ? "PCI" : "ISA", irq);
@@ -1262,7 +1259,7 @@ static u_int test_irq(u_short sock, int irq, int pci)
     schedule_timeout(HZ/100);
     if (irq_hits) {
        free_irq(irq, NULL);
-       DEBUG(2, ("    spurious hit!\n"));
+       DEBUG(2, "    spurious hit!\n");
        return 1;
     }
 
@@ -1296,7 +1293,7 @@ static u_int test_irq(u_short sock, int irq, int pci)
 
 #ifdef CONFIG_ISA
 
-static u_int isa_scan(u_short sock, u_int mask0)
+static u_int __init isa_scan(u_short sock, u_int mask0)
 {
     u_int mask1 = 0;
     int i;
@@ -1349,7 +1346,7 @@ static u_int isa_scan(u_short sock, u_int mask0)
 
 #ifdef CONFIG_PCI
 
-static void pci_scan(u_short sock)
+static void __init pci_scan(u_short sock)
 {
     u_int i;
 
@@ -1385,7 +1382,7 @@ static int to_ns(int cycles)
 
 #ifdef CONFIG_ISA
 
-static int identify(u_short port, u_short sock)
+static int __init identify(u_short port, u_short sock)
 {
     u_char val;
     int type = -1;
@@ -1455,7 +1452,7 @@ static int identify(u_short port, u_short sock)
     
 ======================================================================*/
 
-static int is_alive(u_short sock)
+static int __init is_alive(u_short sock)
 {
     u_char stat;
     u_short start, stop;
@@ -1475,7 +1472,7 @@ static int is_alive(u_short sock)
 
 /*====================================================================*/
 
-static void add_socket(u_short port, int psock, int type)
+static void __init add_socket(u_short port, int psock, int type)
 {
     socket[sockets].ioaddr = port;
     socket[sockets].psock = psock;
@@ -1486,7 +1483,7 @@ static void add_socket(u_short port, int psock, int type)
     sockets++;
 }
 
-static void add_pcic(int ns, int type)
+static void __init add_pcic(int ns, int type)
 {
     u_int mask = 0, i, base;
     int use_pci = 0, isa_irq = 0;
@@ -1595,8 +1592,8 @@ static void add_pcic(int ns, int type)
 #ifdef CONFIG_PCI
 
 typedef struct pci_dev *pci_id_t;
-static int pci_lookup(u_int class, pci_id_t *id,
-                     u_char *bus, u_char *devfn)
+static int __init pci_lookup(u_int class, pci_id_t *id,
+                            u_char *bus, u_char *devfn)
 {
     if ((*id = pci_find_class(class<<8, *id)) != NULL) {
        *bus = (*id)->bus->number;
@@ -1605,8 +1602,8 @@ static int pci_lookup(u_int class, pci_id_t *id,
     } else return -1;
 }
 
-static void add_pci_bridge(int type, u_char bus, u_char devfn,
-                          u_short v, u_short d)
+static void __init add_pci_bridge(int type, u_char bus, u_char devfn,
+                                 u_short v, u_short d)
 {
     socket_info_t *s = &socket[sockets];
     u_short i, ns;
@@ -1625,8 +1622,8 @@ static void add_pci_bridge(int type, u_char bus, u_char devfn,
     add_pcic(ns, type);
 }
 
-static void add_cb_bridge(int type, u_char bus, u_char devfn,
-                         u_short v, u_short d0)
+static void __init add_cb_bridge(int type, u_char bus, u_char devfn,
+                                u_short v, u_short d0)
 {
     socket_info_t *s = &socket[sockets];
     u_short d, ns;
@@ -1739,8 +1736,8 @@ static void add_cb_bridge(int type, u_char bus, u_char devfn,
     }
 }
 
-static void pci_probe(u_int class, void (add_fn)(int, u_char, u_char,
-                                                u_short, u_short))
+static void __init pci_probe(u_int class, void (add_fn)
+                            (int, u_char, u_char, u_short, u_short))
 {
     u_short i, v, d;
     u_char bus, devfn;
@@ -1763,7 +1760,7 @@ static void pci_probe(u_int class, void (add_fn)(int, u_char, u_char,
 
 #ifdef CONFIG_ISA
 
-static void isa_probe(void)
+static void __init isa_probe(void)
 {
     int i, j, sock, k;
     int ns, id;
@@ -1815,8 +1812,15 @@ static void isa_probe(void)
 
 /*====================================================================*/
 
-static int pcic_init(void)
+static int __init init_i82365(void)
 {
+    servinfo_t serv;
+    CardServices(GetCardServicesInfo, &serv);
+    if (serv.Revision != CS_RELEASE_CODE) {
+       printk(KERN_NOTICE "i82365: Card Services release "
+              "does not match!\n");
+       return -1;
+    }
     DEBUG(0, "%s\n", version);
     printk(KERN_INFO "Intel PCIC probe: ");
     sockets = 0;
@@ -1837,7 +1841,7 @@ static int pcic_init(void)
        return -ENODEV;
     }
 
-    /* Set up interrupt handler, and/or polling */
+    /* Set up interrupt handler(s) */
 #ifdef CONFIG_ISA
     if (grab_irq != 0)
        request_irq(cs_irq, pcic_interrupt, 0, "i82365", NULL);
@@ -1868,11 +1872,11 @@ static int pcic_init(void)
     
     return 0;
     
-} /* pcic_init */
+} /* init_i82365 */
   
 /*====================================================================*/
 
-static void pcic_finish(void)
+static void __exit exit_i82365(void)
 {
     int i;
 #ifdef CONFIG_PROC_FS
@@ -1906,7 +1910,7 @@ static void pcic_finish(void)
 #endif
            release_region(socket[i].ioaddr, 2);
     }
-} /* pcic_finish */
+} /* exit_i82365 */
 
 /*====================================================================*/
 
@@ -1917,7 +1921,8 @@ static void pcic_interrupt_wrapper(u_long data)
     add_timer(&poll_timer);
 }
 
-static void pcic_interrupt(int irq, void *dev, struct pt_regs *regs)
+static void pcic_interrupt(int irq, void *dev,
+                                   struct pt_regs *regs)
 {
     int i, j, csc;
     u_int events, active;
@@ -1968,7 +1973,7 @@ static void pcic_interrupt(int irq, void *dev, struct pt_regs *regs)
     if (j == 20)
        printk(KERN_NOTICE "i82365: infinite loop in interrupt handler\n");
 
-    DEBUG(4, ("i82365: interrupt done\n"));
+    DEBUG(4, "i82365: interrupt done\n");
 } /* pcic_interrupt */
 
 /*====================================================================*/
@@ -2641,7 +2646,6 @@ static int proc_read_exca(char *buf, char **start, off_t pos,
     return (p - buf);
 }
 
-
 #ifdef CONFIG_PCI
 static int proc_read_pci(char *buf, char **start, off_t pos,
                         int count, int *eof, void *data)
@@ -2793,31 +2797,8 @@ static int pcic_service(u_int sock, u_int cmd, void *arg)
 
 /*====================================================================*/
 
-int pcmcia_i82365_init(void)
-{
-    servinfo_t serv;
-    CardServices(GetCardServicesInfo, &serv);
-    if (serv.Revision != CS_RELEASE_CODE) {
-       printk(KERN_NOTICE "i82365: Card Services release "
-              "does not match!\n");
-       return -1;
-    }
-    return pcic_init();
-}
-
-#ifdef MODULE
-
-int init_module(void)
-{
-       return pcmcia_i82365_init();
-}
-
-void cleanup_module(void)
-{
-    pcic_finish();
-}
-
-#endif
+module_init(init_i82365);
+module_exit(exit_i82365);
 
 /*====================================================================*/
 
index e7c9a840e025f6add8cd245ed7b27234b0b24a22..52813cb5a2f89bd7bde3582c5dbc68affd07f1cc 100644 (file)
@@ -2,7 +2,7 @@
 
     Resource management routines
 
-    rsrc_mgr.c 1.70 1999/09/07 15:19:32
+    rsrc_mgr.c 1.71 1999/09/15 15:32:19
 
     The contents of this file are subject to the Mozilla Public
     License Version 1.1 (the "License"); you may not use this file
@@ -34,6 +34,7 @@
 #define __NO_VERSION__
 
 #include <linux/module.h>
+#include <linux/init.h>
 #include <linux/sched.h>
 #include <linux/kernel.h>
 #include <linux/errno.h>
@@ -113,9 +114,6 @@ typedef struct resource_entry_t {
 
 /* Ordered linked lists of allocated IO and memory blocks */
 static resource_entry_t io_list = { 0, 0, NULL, NULL };
-#ifndef HAVE_MEMRESERVE
-static resource_entry_t mem_list = { 0, 0, NULL, NULL };
-#endif
 
 static resource_entry_t *find_gap(resource_entry_t *root,
                                  resource_entry_t *entry)
@@ -219,7 +217,6 @@ int proc_read_io(char *buf, char **start, off_t pos,
 }
 #endif
 
-
 /*======================================================================
 
     These manage the internal databases of available resources.
@@ -361,7 +358,6 @@ static int do_mem_probe(u_long base, u_long num,
 
     printk(KERN_INFO "cs: memory probe 0x%06lx-0x%06lx:",
           base, base+num-1);
-
     bad = fail = 0;
     step = (num < 0x20000) ? 0x2000 : ((num>>4) & ~0x1fff);
     for (i = base; i < base+num; i = j + step) {
@@ -385,7 +381,6 @@ static int do_mem_probe(u_long base, u_long num,
        }
     }
     printk(bad ? "\n" : " clean.\n");
-
     return (num - bad);
 }
 
@@ -492,7 +487,6 @@ int find_io_region(ioaddr_t *base, ioaddr_t num, char *name)
     }
     
     for (align = 1; align < num; align *= 2) ;
-
     for (m = io_db.next; m != &io_db; m = m->next) {
        for (*base = (m->base + align - 1) & (~(align-1));
             *base+align <= m->base + m->num;
@@ -793,10 +787,4 @@ void release_resource_db(void)
        v = u->next;
        kfree(u);
     }
-#ifndef HAVE_MEMRESERVE
-    for (u = mem_list.next; u; u = v) {
-       v = u->next;
-       kfree(u);
-    }
-#endif
 }
index 9d25d62f5575ded5012e67091f45571b2345dd60..ca2818d7c9efe4ddbe61ce8a076ffce3ce5cb04e 100644 (file)
@@ -2,7 +2,7 @@
 
     Device driver for Databook TCIC-2 PCMCIA controller
 
-    tcic.c 1.105 1999/09/06 06:55:14
+    tcic.c 1.106 1999/09/15 15:32:19
 
     The contents of this file are subject to the Mozilla Public
     License Version 1.1 (the "License"); you may not use this file
@@ -32,6 +32,7 @@
 ======================================================================*/
 
 #include <linux/module.h>
+#include <linux/init.h>
 #include <linux/types.h>
 #include <linux/fcntl.h>
 #include <linux/string.h>
@@ -59,7 +60,7 @@
 static int pc_debug = PCMCIA_DEBUG;
 MODULE_PARM(pc_debug, "i");
 static const char *version =
-"tcic.c 1.105 1999/09/06 06:55:14 (David Hinds)";
+"tcic.c 1.106 1999/09/15 15:32:19 (David Hinds)";
 #define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args)
 #else
 #define DEBUG(n, args...)
@@ -229,12 +230,12 @@ static int to_ns(int cycles)
 
 static volatile u_int irq_hits;
 
-static void irq_count(int irq, void *dev, struct pt_regs *regs)
+static void __init irq_count(int irq, void *dev, struct pt_regs *regs)
 {
     irq_hits++;
 }
 
-static u_int try_irq(int irq)
+static u_int __init try_irq(int irq)
 {
     u_short cfg;
 
@@ -265,7 +266,7 @@ static u_int try_irq(int irq)
     return (irq_hits != 1);
 }
 
-static u_int irq_scan(u_int mask0)
+static u_int __init irq_scan(u_int mask0)
 {
     u_int mask1;
     int i;
@@ -320,7 +321,7 @@ static u_int irq_scan(u_int mask0)
     
 ======================================================================*/
 
-static int is_active(int s)
+static int __init is_active(int s)
 {
     u_short scf1, ioctl, base, num;
     u_char pwr, sstat;
@@ -358,7 +359,7 @@ static int is_active(int s)
     
 ======================================================================*/
 
-static int get_tcic_id(void)
+static int __init get_tcic_id(void)
 {
     u_short id;
     
@@ -371,12 +372,19 @@ static int get_tcic_id(void)
 
 /*====================================================================*/
 
-int tcic_init(void)
+static int __init init_tcic(void)
 {
     int i, sock;
     u_int mask, scan;
+    servinfo_t serv;
 
     DEBUG(0, "%s\n", version);
+    CardServices(GetCardServicesInfo, &serv);
+    if (serv.Revision != CS_RELEASE_CODE) {
+       printk(KERN_NOTICE "tcic: Card Services release "
+              "does not match!\n");
+       return -1;
+    }
     
     printk(KERN_INFO "Databook TCIC-2 PCMCIA probe: ");
     sock = 0;
@@ -496,11 +504,11 @@ int tcic_init(void)
 
     return 0;
     
-} /* tcic_init */
+} /* init_tcic */
 
 /*====================================================================*/
 
-static void tcic_finish(void)
+static void __exit exit_tcic(void)
 {
     u_long flags;
     unregister_ss_entry(&tcic_service);
@@ -514,7 +522,7 @@ static void tcic_finish(void)
        del_timer(&poll_timer);
     restore_flags(flags);
     release_region(tcic_base, 16);
-} /* tcic_finish */
+} /* exit_tcic */
 
 /*====================================================================*/
 
@@ -954,26 +962,5 @@ static int tcic_service(u_int lsock, u_int cmd, void *arg)
 
 /*====================================================================*/
 
-int pcmcia_tcic_init(void)
-{
-    servinfo_t serv;
-    CardServices(GetCardServicesInfo, &serv);
-    if (serv.Revision != CS_RELEASE_CODE) {
-       printk(KERN_NOTICE "tcic: Card Services release "
-              "does not match!\n");
-       return -1;
-    }
-    return tcic_init();
-}
-
-#ifdef MODULE
-int init_module(void)
-{
-       return pcmcia_tcic_init();
-}
-
-void cleanup_module(void)
-{
-    tcic_finish();
-}
-#endif
+module_init(init_tcic);
+module_exit(exit_tcic);
index 4ecb7cc77fef829a2ab91f0a4bd62d91ca3ea0d1..ebd8cbe05afd69d8121fe62db5f52f2d2ab50e2b 100644 (file)
@@ -20,7 +20,7 @@
  *        Recognize that DMA0 is valid DMA channel -- 13-Jul-98
  *  Modified by Chris Faulhaber        <jedgar@fxp.org>
  *        Added module command-line options
- *        18-Jul-99
+ *        19-Jul-99
  */
 
 #include <linux/module.h>
@@ -482,7 +482,10 @@ static void aha1542_intr_handle(int irq, void *dev_id, struct pt_regs *regs)
       }
       
       my_done = SCtmp->scsi_done;
-      if (SCtmp->host_scribble) scsi_free(SCtmp->host_scribble, 512);
+      if (SCtmp->host_scribble) {
+         scsi_free(SCtmp->host_scribble, 512);
+         SCtmp->host_scribble = 0;
+      }
       
       /* Fetch the sense data, and tuck it away, in the required slot.  The
         Adaptec automatically fetches it, and there is no guarantee that
@@ -556,15 +559,18 @@ int aha1542_queuecommand(Scsi_Cmnd * SCpnt, void (*done)(Scsi_Cmnd *))
       done(SCpnt); return 0;});
     
     if(*cmd == REQUEST_SENSE){
-#ifndef DEBUG
-      if (bufflen != sizeof(SCpnt->sense_buffer)) {
-       printk("Wrong buffer length supplied for request sense (%d)\n",bufflen);
-      };
+      /* Don't do the command - we have the sense data already */
+#if 0
+      /* scsi_request_sense() provides a buffer of size 256,
+        so there is no reason to expect equality */
+      if (bufflen != sizeof(SCpnt->sense_buffer))
+       printk("aha1542: Wrong buffer length supplied "
+              "for request sense (%d)\n", bufflen);
 #endif
       SCpnt->result = 0;
       done(SCpnt); 
       return 0;
-    };
+    }
 
 #ifdef DEBUG
     if (*cmd == READ_10 || *cmd == WRITE_10)
@@ -964,11 +970,30 @@ int aha1542_detect(Scsi_Host_Template * tpnt)
     tpnt->proc_dir = &proc_scsi_aha1542;
 
 #ifdef MODULE
-    bases[0] = 4;
-    bases[1] = aha1542[0];
-    bases[2] = aha1542[1];
-    bases[3] = aha1542[2];
-    bases[4] = aha1542[3];
+    bases[0]        = aha1542[0];              
+    setup_buson[0]  = aha1542[1];              
+    setup_busoff[0] = aha1542[2];              
+    {                                          
+      int atbt = -1;                           
+      switch (aha1542[3]) {                    
+        case 5:                                
+            atbt = 0x00;                       
+            break;                             
+        case 6:                                
+            atbt = 0x04;                       
+            break;                             
+        case 7:                                
+            atbt = 0x01;                       
+            break;                             
+        case 8:                                
+            atbt = 0x02;                       
+            break;                             
+        case 10:                               
+            atbt = 0x03;                       
+            break;                             
+      };                                       
+    setup_dmaspeed[0] = atbt;                  
+    }
 #endif
 
     for(indx = 0; indx < sizeof(bases)/sizeof(bases[0]); indx++)
index f1b3eadc91b106301a6617e15031561b85a8f74f..d943724c0548c9124c650f499cfc5830efd58765 100644 (file)
 
 /* choose adaption for Kernellevel */
 #define local_LinuxVersionCode(v, p, s) (((v)<<16)+((p)<<8)+(s))
-#if LINUX_VERSION_CODE < local_LinuxVersionCode(2,1,0)
-#define OLDKERN
-#else
-#undef OLDKERN
-#endif
 
 #include <linux/module.h>
 #include <linux/kernel.h>
@@ -36,9 +31,7 @@
 #include <linux/stat.h>
 #include <linux/mca.h>
 #include <asm/system.h>
-#ifndef OLDKERN
 #include <linux/spinlock.h>
-#endif
 #include <asm/io.h>
 #include "sd.h"
 #include "scsi.h"
 /* driver debugging - #undef all for normal operation */
 
 /* if defined: count interrupts and ignore this special one: */
-#undef  IM_DEBUG_TIMEOUT  50            
+#undef  IM_DEBUG_TIMEOUT  50
 #define TIMEOUT_PUN   0
 #define TIMEOUT_LUN   0
 /* verbose interrupt: */
-#undef  IM_DEBUG_INT                   
+#undef  IM_DEBUG_INT
 /* verbose queuecommand: */
-#undef  IM_DEBUG_CMD    
+#undef  IM_DEBUG_CMD
 /* verbose queucommand for specific SCSI-device type: */
-#undef  IM_DEBUG_CMD_SPEC_DEV          
+#undef  IM_DEBUG_CMD_SPEC_DEV
 /* verbose device probing */
 #undef  IM_DEBUG_PROBE
 
@@ -280,7 +273,7 @@ struct subsys_list_struct subsys_list[] =
   {0x8ef8, "IBM Expansion Unit SCSI Controller"},/* special = 2 */
   {0x8eff, "IBM SCSI Adapter w/Cache"}, /* special = 3 */
   {0x8efe, "IBM SCSI Adapter"}, /* special = 4 */
-};                   
+};
 
 /*for /proc filesystem */
 struct proc_dir_entry proc_scsi_ibmmca =
@@ -288,7 +281,7 @@ struct proc_dir_entry proc_scsi_ibmmca =
   PROC_SCSI_IBMMCA, 6, "ibmmca",
   S_IFDIR | S_IRUGO | S_IXUGO, 2,
   0, 0, 0, NULL, NULL, NULL, NULL,
-  NULL, NULL, NULL 
+  NULL, NULL, NULL
 };
 
 /* Max number of logical devices (can be up from 0 to 14).  15 is the address
@@ -303,7 +296,7 @@ struct logical_device
     struct im_sge sge[16]; /* scatter gather list structure */
     unsigned char buf[256]; /* SCSI command return data buffer */
     Scsi_Cmnd *cmd;  /* SCSI-command that is currently in progress */
-     
+
     int device_type; /* type of the SCSI-device. See include/scsi/scsi.h
                        for interpretation of the possible values */
     int block_length;/* blocksize of a particular logical SCSI-device */
@@ -334,7 +327,7 @@ struct Driver_Statistics
 struct ibmmca_hostdata
 {
    /* array of logical devices: */
-   struct logical_device _ld[MAX_LOG_DEV+1];   
+   struct logical_device _ld[MAX_LOG_DEV+1];
    /* array to convert (pun, lun) into logical device number: */
    unsigned char _get_ldn[8][8];
    /*array that contains the information about the physical SCSI-devices
@@ -352,8 +345,8 @@ struct ibmmca_hostdata
    int _last_scsi_command[MAX_LOG_DEV+1];
    /* identifier of the last SCSI-command type */
    int _last_scsi_type[MAX_LOG_DEV+1];
-   /* Counter that points on the next reassignable ldn for dynamical 
-    remapping. The default value is 7, that is the first reassignable 
+   /* Counter that points on the next reassignable ldn for dynamical
+    remapping. The default value is 7, that is the first reassignable
     number in the list at boottime: */
    int _next_ldn;
    /* Statistics-structure for this IBM-SCSI-host: */
@@ -382,7 +375,7 @@ struct ibmmca_hostdata
 #define pos2(hi) (((struct ibmmca_hostdata *) hosts[(hi)]->hostdata)->_pos2)
 #define pos3(hi) (((struct ibmmca_hostdata *) hosts[(hi)]->hostdata)->_pos3)
 
-/* Define a arbitrary number as subsystem-marker-type. This number is, as 
+/* Define a arbitrary number as subsystem-marker-type. This number is, as
    described in the ANSI-SCSI-standard, not occupied by other device-types. */
 #define TYPE_IBM_SCSI_ADAPTER   0x2F
 
@@ -425,30 +418,17 @@ struct ibmmca_hostdata
 static int io_port[IM_MAX_HOSTS] = { 0, 0, 0, 0, 0, 0, 0, 0 };
 static int scsi_id[IM_MAX_HOSTS] = { 7, 7, 7, 7, 7, 7, 7, 7 };
 
-/* fill module-parameters only, when this define is present.
-   (that is kernel version 2.1.x) */
-#ifdef MODULE_PARM
-MODULE_PARM(io_port, "1-" __MODULE_STRING(IM_MAX_HOSTS) "i");
-MODULE_PARM(scsi_id, "1-" __MODULE_STRING(IM_MAX_HOSTS) "i"); 
-MODULE_PARM(display, "1i");
-MODULE_PARM(adisplay, "1i");
-MODULE_PARM(bypass, "1i");
-MODULE_PARM(normal, "1i");
-MODULE_PARM(ansi, "1i");
-#endif
 
 /*counter of concurrent disk read/writes, to turn on/off disk led */
 static int disk_rw_in_progress = 0;
 
 /* spinlock handling to avoid command clash while in operation */
-#ifndef OLDKERN
 spinlock_t info_lock  = SPIN_LOCK_UNLOCKED;
 spinlock_t proc_lock  = SPIN_LOCK_UNLOCKED;
 spinlock_t abort_lock = SPIN_LOCK_UNLOCKED;
 spinlock_t reset_lock = SPIN_LOCK_UNLOCKED;
 spinlock_t issue_lock = SPIN_LOCK_UNLOCKED;
 spinlock_t intr_lock  = SPIN_LOCK_UNLOCKED;
-#endif
 
 /* host information */
 static int found = 0;
@@ -468,13 +448,11 @@ static char ibm_ansi_order = 0;
 /******************* FUNCTIONS IN FORWARD DECLARATION ************************/
 
 static void interrupt_handler (int, void *, struct pt_regs *);
-#ifndef OLDKERN
 static void do_interrupt_handler (int, void *, struct pt_regs *);
-#endif
 static void issue_cmd (int, unsigned long, unsigned char);
 static void internal_done (Scsi_Cmnd * cmd);
 static void check_devices (int);
-static int immediate_assign(int, unsigned int, unsigned int, unsigned int, 
+static int immediate_assign(int, unsigned int, unsigned int, unsigned int,
                             unsigned int);
 #ifdef CONFIG_IBMMCA_SCSI_DEV_RESET
 static int immediate_reset(int, unsigned int);
@@ -484,7 +462,7 @@ static int read_capacity(int, int);
 static char *ti_p(int);
 static char *ti_l(int);
 static int device_exists (int, int, int *, int *);
-static struct Scsi_Host *ibmmca_register(Scsi_Host_Template *, 
+static struct Scsi_Host *ibmmca_register(Scsi_Host_Template *,
                                         int, int, char *);
 
 /* local functions needed for proc_info */
@@ -496,7 +474,6 @@ static int bypass_controller = 0;   /* bypass integrated SCSI-cmd set flag */
 
 /******************* LOCAL FUNCTIONS IMPLEMENTATION *************************/
 
-#ifndef OLDKERN
 /* newer Kernels need the spinlock interrupt handler */
 static void do_interrupt_handler (int irq, void *dev_id, struct pt_regs *regs)
 {
@@ -505,9 +482,8 @@ static void do_interrupt_handler (int irq, void *dev_id, struct pt_regs *regs)
   spin_lock_irqsave(&io_request_lock, flags);
   interrupt_handler(irq, dev_id, regs);
   spin_unlock_irqrestore(&io_request_lock, flags);
-  return; 
+  return;
 }
-#endif
 
 static void interrupt_handler (int irq, void *dev_id, struct pt_regs *regs)
 {
@@ -523,12 +499,12 @@ static void interrupt_handler (int irq, void *dev_id, struct pt_regs *regs)
    host_index=0; /* make sure, host_index is 0, else this won't work and
                    never dare to ask, what happens, if an interrupt-handler
                    does not work :-((( .... */
-   
+
    /* search for one adapter-response on shared interrupt */
    while (hosts[host_index]
          && !(inb(IM_STAT_REG(host_index)) & IM_INTR_REQUEST))
      host_index++;
-   
+
    /* return if some other device on this IRQ caused the interrupt */
    if (!hosts[host_index]) return;
 
@@ -540,38 +516,25 @@ static void interrupt_handler (int irq, void *dev_id, struct pt_regs *regs)
        reset_status(host_index) = IM_RESET_NOT_IN_PROGRESS;
        return;
      }
-   
+
    /*get command result and logical device */
    intr_reg = inb (IM_INTR_REG(host_index));
    cmd_result = intr_reg & 0xf0;
    ldn = intr_reg & 0x0f;
 
    /*must wait for attention reg not busy, then send EOI to subsystem */
-   while (1) 
+   while (1)
      {
-#ifdef OLDKERN
-       save_flags(flags);
-       cli();
-#else
        spin_lock_irqsave(&intr_lock, flags);
-#endif 
-       if (!(inb (IM_STAT_REG(host_index)) & IM_BUSY)) 
+       if (!(inb (IM_STAT_REG(host_index)) & IM_BUSY))
          break;
-#ifdef OLDKERN 
-       restore_flags(flags);
-#else
        spin_unlock_irqrestore(&intr_lock, flags);
-#endif
      }
    outb (IM_EOI | ldn, IM_ATTN_REG(host_index));
    /* get the last_scsi_command here */
-   interror = last_scsi_command(host_index)[ldn];   
-#ifdef OLDKERN
-   restore_flags(flags);
-#else
+   interror = last_scsi_command(host_index)[ldn];
    spin_unlock_irqrestore(&intr_lock, flags);
-#endif      
-   errorflag = 0; /* no errors by default */   
+   errorflag = 0; /* no errors by default */
    /*these should never happen (hw fails, or a local programming bug) */
    if (cmd_result == IM_ADAPTER_HW_FAILURE)
      {
@@ -587,7 +550,7 @@ static void interrupt_handler (int irq, void *dev_id, struct pt_regs *regs)
        printk("IBM MCA SCSI: ERROR - software sequencing error!\n");
        printk("              Last SCSI-command=0x%X, ldn=%d, host=%d.\n",
               last_scsi_command(host_index)[ldn],ldn,host_index);
-       errorflag = 1;  
+       errorflag = 1;
      }
    if (cmd_result == IM_CMD_ERROR)
      {
@@ -595,7 +558,7 @@ static void interrupt_handler (int irq, void *dev_id, struct pt_regs *regs)
        printk("IBM MCA SCSI: ERROR - command error!\n");
        printk("              Last SCSI-command=0x%X, ldn=%d, host=%d.\n",
               last_scsi_command(host_index)[ldn],ldn,host_index);
-       errorflag = 1;  
+       errorflag = 1;
      }
    if (errorflag)
      { /* if errors appear, enter this section to give detailed info */
@@ -631,7 +594,7 @@ static void interrupt_handler (int irq, void *dev_id, struct pt_regs *regs)
        printk("              Send report to the maintainer.\n");
        panic("IBM MCA SCSI: Fatal errormessage from the subsystem!\n");
      }
-   
+
    /* if no panic appeared, increase the interrupt-counter */
    IBM_DS(host_index).total_interrupts++;
 
@@ -643,7 +606,7 @@ static void interrupt_handler (int irq, void *dev_id, struct pt_regs *regs)
        reset_status(host_index) = IM_RESET_FINISHED_OK;
        last_scsi_command(host_index)[ldn] = NO_SCSI;
        return;
-     }   
+     }
    /*handling of commands coming from upper level of scsi driver */
    else
      {
@@ -674,7 +637,7 @@ static void interrupt_handler (int irq, void *dev_id, struct pt_regs *regs)
               { /* react on SCSI abort command */
 #ifdef IM_DEBUG_PROBE
                  printk("IBM MCA SCSI: Interrupt from SCSI-abort.\n");
-#endif 
+#endif
                  disk_rw_in_progress = 0;
                  PS2_DISK_LED_OFF();
                  cmd = ld(host_index)[ldn].cmd;
@@ -696,9 +659,9 @@ static void interrupt_handler (int irq, void *dev_id, struct pt_regs *regs)
                  stat_result(host_index) = cmd_result;
                  last_scsi_command(host_index)[ldn] = NO_SCSI;
                  return;
-              }             
+              }
          }
-       last_scsi_command(host_index)[ldn] = NO_SCSI;        
+       last_scsi_command(host_index)[ldn] = NO_SCSI;
        cmd = ld(host_index)[ldn].cmd;
 #ifdef IM_DEBUG_TIMEOUT
        if (cmd)
@@ -715,16 +678,16 @@ static void interrupt_handler (int irq, void *dev_id, struct pt_regs *regs)
        if (!cmd)
          return;
        ld(host_index)[ldn].cmd = NULL;
-       
+
 #ifdef IM_DEBUG_INT
-       printk("cmd=%02x ireg=%02x ds=%02x cs=%02x de=%02x ce=%02x\n", 
-              cmd->cmnd[0], intr_reg, 
-              ld(host_index)[ldn].tsb.dev_status, 
+       printk("cmd=%02x ireg=%02x ds=%02x cs=%02x de=%02x ce=%02x\n",
+              cmd->cmnd[0], intr_reg,
+              ld(host_index)[ldn].tsb.dev_status,
               ld(host_index)[ldn].tsb.cmd_status,
-              ld(host_index)[ldn].tsb.dev_error, 
+              ld(host_index)[ldn].tsb.dev_error,
               ld(host_index)[ldn].tsb.cmd_error);
 #endif
-       
+
        /*if this is end of media read/write, may turn off PS/2 disk led */
        if ((ld(host_index)[ldn].device_type!=TYPE_NO_LUN)&&
            (ld(host_index)[ldn].device_type!=TYPE_NO_DEVICE))
@@ -762,35 +725,22 @@ static void interrupt_handler (int irq, void *dev_id, struct pt_regs *regs)
 
 /*--------------------------------------------------------------------*/
 
-static void issue_cmd (int host_index, unsigned long cmd_reg, 
+static void issue_cmd (int host_index, unsigned long cmd_reg,
                       unsigned char attn_reg)
 {
    static unsigned long flags;
-   /* must wait for attention reg not busy */   
+   /* must wait for attention reg not busy */
    while (1)
      {
-#ifdef OLDKERN 
-       save_flags(flags);
-       cli();
-#else
        spin_lock_irqsave(&issue_lock, flags);
-#endif 
        if (!(inb (IM_STAT_REG(host_index)) & IM_BUSY))
          break;
-#ifdef OLDKERN 
-       restore_flags(flags);
-#else
        spin_unlock_irqrestore(&issue_lock, flags);
-#endif 
      }
    /*write registers and enable system interrupts */
    outl (cmd_reg, IM_CMD_REG(host_index));
    outb (attn_reg, IM_ATTN_REG(host_index));
-#ifdef OLDKERN   
-   restore_flags(flags);
-#else
    spin_unlock_irqrestore(&issue_lock, flags);
-#endif
 }
 
 /*--------------------------------------------------------------------*/
@@ -804,13 +754,13 @@ static void internal_done (Scsi_Cmnd * cmd)
 
 /* SCSI-SCB-command for device_inquiry */
 static int device_inquiry(int host_index, int ldn)
-{   
+{
    int retries;
    Scsi_Cmnd cmd;
    struct im_scb *scb;
    struct im_tsb *tsb;
    unsigned char *buf;
-   
+
    scb = &(ld(host_index)[ldn].scb);
    tsb = &(ld(host_index)[ldn].tsb);
    buf = (unsigned char *)(&(ld(host_index)[ldn].buf));
@@ -822,13 +772,13 @@ static int device_inquiry(int host_index, int ldn)
         memset (&(cmd.cmnd), 0x0, sizeof(char) * cmd.cmd_len);
        cmd.cmnd[0] = INQUIRY; /* device inquiry */
        cmd.cmnd[4] = 0xff; /* return buffer size = 255 */
-     }   
+     }
    for (retries = 0; retries < 3; retries++)
      {
        if (bypass_controller)
          { /* bypass the hardware integrated command set */
-            scb->command = IM_OTHER_SCSI_CMD_CMD;      
-            scb->enable |= IM_READ_CONTROL | IM_SUPRESS_EXCEPTION_SHORT; 
+            scb->command = IM_OTHER_SCSI_CMD_CMD;
+            scb->enable |= IM_READ_CONTROL | IM_SUPRESS_EXCEPTION_SHORT;
             scb->u1.scsi_cmd_length = cmd.cmd_len;
             memcpy (scb->u2.scsi_command, &(cmd.cmnd), cmd.cmd_len);
             last_scsi_command(host_index)[ldn] = INQUIRY;
@@ -840,18 +790,18 @@ static int device_inquiry(int host_index, int ldn)
             scb->command = IM_DEVICE_INQUIRY_CMD;
             scb->enable = IM_READ_CONTROL | IM_SUPRESS_EXCEPTION_SHORT;
             last_scsi_command(host_index)[ldn] = IM_DEVICE_INQUIRY_CMD;
-            last_scsi_type(host_index)[ldn] = IM_SCB;       
+            last_scsi_type(host_index)[ldn] = IM_SCB;
          }
        scb->sys_buf_adr = virt_to_bus(buf);
        scb->sys_buf_length = 0xff; /* maximum bufferlength gives max info */
        scb->tsb_adr = virt_to_bus(tsb);
-       
+
        /*issue scb to passed ldn, and busy wait for interrupt */
        got_interrupt(host_index) = 0;
        issue_cmd (host_index, virt_to_bus(scb), IM_SCB | ldn);
        while (!got_interrupt(host_index))
          barrier ();
-       
+
        /*if command succesful, break */
        if ((stat_result(host_index) == IM_SCB_CMD_COMPLETED)||
            (stat_result(host_index) == IM_SCB_CMD_COMPLETED_WITH_RETRIES))
@@ -859,7 +809,7 @@ static int device_inquiry(int host_index, int ldn)
             return 1;
          }
      }
-   
+
    /*if all three retries failed, return "no device at this ldn" */
    if (retries >= 3)
      return 0;
@@ -874,24 +824,24 @@ static int read_capacity(int host_index, int ldn)
    struct im_scb *scb;
    struct im_tsb *tsb;
    unsigned char *buf;
-   
+
    scb = &(ld(host_index)[ldn].scb);
    tsb = &(ld(host_index)[ldn].tsb);
    buf = (unsigned char *)(&(ld(host_index)[ldn].buf));
    ld(host_index)[ldn].tsb.dev_status = 0;
-   
+
    if (bypass_controller)
      { /* read capacity in commonly known default SCSI-format */
        cmd.cmd_len = 10;
         memset (&(cmd.cmnd), 0x0, sizeof(char) * cmd.cmd_len);
        cmd.cmnd[0] = READ_CAPACITY; /* read capacity */
-     } 
+     }
    for (retries = 0; retries < 3; retries++)
      {
        /*fill scb with read capacity command */
        if (bypass_controller)
          { /* bypass the SCSI-command */
-            scb->command = IM_OTHER_SCSI_CMD_CMD;      
+            scb->command = IM_OTHER_SCSI_CMD_CMD;
             scb->enable |= IM_READ_CONTROL;
             scb->u1.scsi_cmd_length = cmd.cmd_len;
             memcpy (scb->u2.scsi_command, &(cmd.cmnd), cmd.cmd_len);
@@ -903,18 +853,18 @@ static int read_capacity(int host_index, int ldn)
             scb->command = IM_READ_CAPACITY_CMD;
             scb->enable = IM_READ_CONTROL;
             last_scsi_command(host_index)[ldn] = IM_READ_CAPACITY_CMD;
-            last_scsi_type(host_index)[ldn] = IM_SCB;       
+            last_scsi_type(host_index)[ldn] = IM_SCB;
          }
        scb->sys_buf_adr = virt_to_bus(buf);
        scb->sys_buf_length = 8;
        scb->tsb_adr = virt_to_bus(tsb);
-       
+
        /*issue scb to passed ldn, and busy wait for interrupt */
        got_interrupt(host_index) = 0;
        issue_cmd (host_index, virt_to_bus(scb), IM_SCB | ldn);
        while (!got_interrupt(host_index))
          barrier ();
-            
+
             /*if got capacity, get block length and return one device found */
        if ((stat_result(host_index) == IM_SCB_CMD_COMPLETED)||
            (stat_result(host_index) == IM_SCB_CMD_COMPLETED_WITH_RETRIES))
@@ -932,13 +882,13 @@ static int read_capacity(int host_index, int ldn)
 /* SCSI-immediate-command for assign. This functions maps/unmaps specific
  ldn-numbers on SCSI (PUN,LUN). It is needed for presetting of the
  subsystem and for dynamical remapping od ldns. */
-static int immediate_assign(int host_index, unsigned int pun, 
-                            unsigned int lun, unsigned int ldn, 
+static int immediate_assign(int host_index, unsigned int pun,
+                            unsigned int lun, unsigned int ldn,
                             unsigned int operation)
 {
    int retries;
    unsigned long imm_command;
-   
+
    for (retries=0; retries<3; retries ++)
      {
         imm_command = inl(IM_CMD_REG(host_index));
@@ -948,22 +898,22 @@ static int immediate_assign(int host_index, unsigned int pun,
         imm_command |= (unsigned long)((operation & 1) << 23);
         imm_command |= (unsigned long)((pun & 7) << 20);
         imm_command |= (unsigned long)((ldn & 15) << 16);
-       
+
        last_scsi_command(host_index)[0xf] = IM_ASSIGN_IMM_CMD;
        last_scsi_type(host_index)[0xf] = IM_IMM_CMD;
         got_interrupt(host_index) = 0;
         issue_cmd (host_index, (unsigned long)(imm_command), IM_IMM_CMD | 0xf);
         while (!got_interrupt(host_index))
          barrier ();
-       
+
         /*if command succesful, break */
        if (stat_result(host_index) == IM_IMMEDIATE_CMD_COMPLETED)
          {
             return 1;
          }
      }
-   
-   if (retries >= 3) 
+
+   if (retries >= 3)
      return 0;
    else
      return 1;
@@ -975,7 +925,7 @@ static int immediate_reset(int host_index, unsigned int ldn)
    int retries;
    int ticks;
    unsigned long imm_command;
-   
+
    for (retries=0; retries<3; retries ++)
      {
         imm_command = inl(IM_CMD_REG(host_index));
@@ -985,20 +935,20 @@ static int immediate_reset(int host_index, unsigned int ldn)
        last_scsi_type(host_index)[ldn] = IM_IMM_CMD;
 
        got_interrupt(host_index) = 0;
-       reset_status(host_index) = IM_RESET_IN_PROGRESS;        
+       reset_status(host_index) = IM_RESET_IN_PROGRESS;
        issue_cmd (host_index, (unsigned long)(imm_command), IM_IMM_CMD | ldn);
-       ticks = IM_RESET_DELAY*HZ;      
-       while (reset_status(host_index) == IM_RESET_IN_PROGRESS && --ticks) 
+       ticks = IM_RESET_DELAY*HZ;
+       while (reset_status(host_index) == IM_RESET_IN_PROGRESS && --ticks)
          {
             mdelay(1+999/HZ);
             barrier();
          }
        /* if reset did not complete, just claim */
-       if (!ticks) 
+       if (!ticks)
          {
             printk("IBM MCA SCSI: reset did not complete within %d seconds.\n",
                    IM_RESET_DELAY);
-            reset_status(host_index) = IM_RESET_FINISHED_OK; 
+            reset_status(host_index) = IM_RESET_FINISHED_OK;
             /* did not work, finish */
             return 1;
          }
@@ -1008,8 +958,8 @@ static int immediate_reset(int host_index, unsigned int ldn)
             return 1;
          }
      }
-   
-   if (retries >= 3) 
+
+   if (retries >= 3)
      return 0;
    else
      return 1;
@@ -1042,17 +992,17 @@ static char *ti_l(int value)
 {
    const char hex[16] = "0123456789abcdef";
    static char answer[2];
-   
+
    answer[1] = (char)(0x0);
    if (value<=MAX_LOG_DEV)
      answer[0] = hex[value];
    else
      answer[0] = '-';
-   
+
    return (char *)&answer;
 }
 
-/* 
+/*
  The following routine probes the SCSI-devices in four steps:
  1. The current ldn -> pun,lun mapping is removed on the SCSI-adapter.
  2. ldn 0 is used to go through all possible combinations of pun,lun and
@@ -1076,7 +1026,7 @@ static void check_devices (int host_index)
 {
    int id, lun, ldn, ticks;
    int count_devices; /* local counter for connected device */
-   
+
    /* assign default values to certain variables */
 
    ticks = 0;
@@ -1091,13 +1041,13 @@ static void check_devices (int host_index)
      }
 
    /* initialize the very important driver-informational arrays/structs */
-   memset (ld(host_index), 0, 
+   memset (ld(host_index), 0,
           sizeof(ld(host_index)));
-   memset (get_ldn(host_index), TYPE_NO_DEVICE, 
+   memset (get_ldn(host_index), TYPE_NO_DEVICE,
           sizeof(get_ldn(host_index))); /* this is essential ! */
    memset (get_scsi(host_index), TYPE_NO_DEVICE,
           sizeof(get_scsi(host_index))); /* this is essential ! */
-   
+
    for (lun=0; lun<8; lun++) /* mark the adapter at its pun on all luns*/
      {
        get_scsi(host_index)[subsystem_pun(host_index)][lun] = TYPE_IBM_SCSI_ADAPTER;
@@ -1105,7 +1055,7 @@ static void check_devices (int host_index)
                                                                ldn is active for all
                                                                luns. */
      }
-   
+
    /* STEP 1: */
 #ifdef IM_DEBUG_PROBE
    printk("IBM MCA SCSI: Current SCSI-host index: %d\n",host_index);
@@ -1120,7 +1070,7 @@ static void check_devices (int host_index)
      }
 
    lun = 0; /* default lun is 0 */
-   
+
    /* STEP 2: */
    printk("\nIBM MCA SCSI: Probing SCSI-devices.");
    for (id=0; id<8; id++)
@@ -1134,7 +1084,7 @@ static void check_devices (int host_index)
        if (id != subsystem_pun(host_index))
          {            /* if pun is not the adapter: */
             /*set ldn=0 to pun,lun*/
-            immediate_assign(host_index,id,lun,PROBE_LDN,SET_LDN); 
+            immediate_assign(host_index,id,lun,PROBE_LDN,SET_LDN);
             if (device_inquiry(host_index, PROBE_LDN)) /* probe device */
               {
                  get_scsi(host_index)[id][lun]=
@@ -1144,17 +1094,17 @@ static void check_devices (int host_index)
                    count_devices++; /* a existing device is found */
               }
             /* remove ldn */
-            immediate_assign(host_index,id,lun,PROBE_LDN,REMOVE_LDN); 
+            immediate_assign(host_index,id,lun,PROBE_LDN,REMOVE_LDN);
          }
      }
-   
-   /* STEP 3: */   
+
+   /* STEP 3: */
    printk("\nIBM MCA SCSI: Mapping SCSI-devices.");
-   
+
    ldn = 0;
    lun = 0;
-   
-#ifdef CONFIG_SCSI_MULTI_LUN   
+
+#ifdef CONFIG_SCSI_MULTI_LUN
    for (lun=0; lun<8 && ldn<MAX_LOG_DEV; lun++)
 #endif
      for (id=0; id<8 && ldn<MAX_LOG_DEV; id++)
@@ -1164,14 +1114,14 @@ static void check_devices (int host_index)
 #endif
        if (id != subsystem_pun(host_index))
          {
-            if (get_scsi(host_index)[id][lun] != TYPE_NO_LUN && 
+            if (get_scsi(host_index)[id][lun] != TYPE_NO_LUN &&
                 get_scsi(host_index)[id][lun] != TYPE_NO_DEVICE)
               {
-                 /* Only map if accepted type. Always enter for 
+                 /* Only map if accepted type. Always enter for
                   lun == 0 to get no gaps into ldn-mapping for ldn<7. */
                  immediate_assign(host_index,id,lun,ldn,SET_LDN);
                  get_ldn(host_index)[id][lun]=ldn; /* map ldn */
-                 if (device_exists (host_index, ldn, 
+                 if (device_exists (host_index, ldn,
                                     &ld(host_index)[ldn].block_length,
                                     &ld(host_index)[ldn].device_type))
                    {
@@ -1201,11 +1151,11 @@ static void check_devices (int host_index)
                  get_ldn(host_index)[id][lun]=ldn; /* map ldn */
                  ldn++;
               }
-         }      
+         }
      }
-   
+
    /* STEP 4: */
-   
+
    /* map remaining ldns to non-existing devices */
    for (lun=1; lun<8 && ldn<MAX_LOG_DEV; lun++)
      for (id=0; id<8 && ldn<MAX_LOG_DEV; id++)
@@ -1221,14 +1171,14 @@ static void check_devices (int host_index)
             get_ldn(host_index)[id][lun]=ldn;
             ldn++;
          }
-     } 
-   
+     }
+
    printk("\n");
    if (ibm_ansi_order)
      printk("IBM MCA SCSI: Device order: IBM/ANSI (pun=7 is first).\n");
    else
      printk("IBM MCA SCSI: Device order: New Industry Standard (pun=0 is first).\n");
-   
+
 #ifdef IM_DEBUG_PROBE
    /* Show the physical and logical mapping during boot. */
    printk("IBM MCA SCSI: Determined SCSI-device-mapping:\n");
@@ -1245,52 +1195,52 @@ static void check_devices (int host_index)
        printk("\n");
      }
 #endif
-   
+
    /* assign total number of found SCSI-devices to the statistics struct */
    IBM_DS(host_index).total_scsi_devices = count_devices;
-   
+
    /* decide for output in /proc-filesystem, if the configuration of
     SCSI-devices makes dynamical reassignment of devices necessary */
-   if (count_devices>=MAX_LOG_DEV) 
+   if (count_devices>=MAX_LOG_DEV)
      IBM_DS(host_index).dyn_flag = 1; /* dynamical assignment is necessary */
-   else 
+   else
      IBM_DS(host_index).dyn_flag = 0; /* dynamical assignment is not necessary */
-   
+
    /* If no SCSI-devices are assigned, return 1 in order to cause message. */
    if (ldn == 0)
      printk("IBM MCA SCSI: Warning: No SCSI-devices found/assigned!\n");
-   
+
    /* reset the counters for statistics on the current adapter */
    IBM_DS(host_index).total_accesses = 0;
    IBM_DS(host_index).total_interrupts = 0;
    IBM_DS(host_index).dynamical_assignments = 0;
-   memset (IBM_DS(host_index).ldn_access, 0x0, 
+   memset (IBM_DS(host_index).ldn_access, 0x0,
           sizeof (IBM_DS(host_index).ldn_access));
-   memset (IBM_DS(host_index).ldn_read_access, 0x0, 
+   memset (IBM_DS(host_index).ldn_read_access, 0x0,
           sizeof (IBM_DS(host_index).ldn_read_access));
-   memset (IBM_DS(host_index).ldn_write_access, 0x0, 
+   memset (IBM_DS(host_index).ldn_write_access, 0x0,
           sizeof (IBM_DS(host_index).ldn_write_access));
-   memset (IBM_DS(host_index).ldn_inquiry_access, 0x0, 
+   memset (IBM_DS(host_index).ldn_inquiry_access, 0x0,
           sizeof (IBM_DS(host_index).ldn_inquiry_access));
-   memset (IBM_DS(host_index).ldn_modeselect_access, 0x0, 
+   memset (IBM_DS(host_index).ldn_modeselect_access, 0x0,
           sizeof (IBM_DS(host_index).ldn_modeselect_access));
-   memset (IBM_DS(host_index).ldn_assignments, 0x0, 
+   memset (IBM_DS(host_index).ldn_assignments, 0x0,
           sizeof (IBM_DS(host_index).ldn_assignments));
-   
+
    return;
 }
 
 /*--------------------------------------------------------------------*/
 
-static int device_exists (int host_index, int ldn, int *block_length, 
+static int device_exists (int host_index, int ldn, int *block_length,
                          int *device_type)
 {
    unsigned char *buf;
-   
+
    /* if no valid device found, return immediately with 0 */
    if (!(device_inquiry(host_index, ldn)))
      return 0;
-   
+
    buf = (unsigned char *)(&(ld(host_index)[ldn].buf));
 
    /*if device is CD_ROM, assume block size 2048 and return */
@@ -1300,64 +1250,64 @@ static int device_exists (int host_index, int ldn, int *block_length,
        *block_length = 2048; /* (standard blocksize for yellow-/red-book) */
        return 1;
      }
-   
-   if (*buf == TYPE_WORM) /* CD-burner, WORM, Linux handles this as CD-ROM 
+
+   if (*buf == TYPE_WORM) /* CD-burner, WORM, Linux handles this as CD-ROM
                             therefore, the block_length is also 2048. */
      {
        *device_type = TYPE_WORM;
        *block_length = 2048;
        return 1;
      }
-   
+
    /* if device is disk, use "read capacity" to find its block size */
    if (*buf == TYPE_DISK)
      {
        *device_type = TYPE_DISK;
         if (read_capacity( host_index, ldn))
          {
-            *block_length = *(buf+7) + (*(buf+6) << 8) + 
+            *block_length = *(buf+7) + (*(buf+6) << 8) +
                            (*(buf+5) << 16) + (*(buf+4) << 24);
             return 1;
          }
        else
          return 0;
      }
-   
+
    /* if this is a magneto-optical drive, treat it like a harddisk */
    if (*buf == TYPE_MOD)
      {
        *device_type = TYPE_MOD;
         if (read_capacity( host_index, ldn))
          {
-            *block_length = *(buf+7) + (*(buf+6) << 8) + 
+            *block_length = *(buf+7) + (*(buf+6) << 8) +
                            (*(buf+5) << 16) + (*(buf+4) << 24);
             return 1;
          }
        else
          return 0;
-     }   
-   
+     }
+
    if (*buf == TYPE_TAPE) /* TAPE-device found */
      {
        *device_type = TYPE_TAPE;
        *block_length = 0; /* not in use (setting by mt and mtst in op.) */
-       return 1;   
+       return 1;
      }
-   
+
    if (*buf == TYPE_PROCESSOR) /* HP-Scanners, diverse SCSI-processing units*/
      {
        *device_type = TYPE_PROCESSOR;
        *block_length = 0; /* they set their stuff on drivers */
        return 1;
      }
-   
+
    if (*buf == TYPE_SCANNER) /* other SCSI-scanners */
      {
        *device_type = TYPE_SCANNER;
        *block_length = 0; /* they set their stuff on drivers */
        return 1;
      }
-   
+
    if (*buf == TYPE_MEDIUM_CHANGER) /* Medium-Changer */
      {
        *device_type = TYPE_MEDIUM_CHANGER;
@@ -1365,24 +1315,24 @@ static int device_exists (int host_index, int ldn, int *block_length,
                            changer device. */
        return 1;
      }
-   
+
    /* Up to now, no SCSI-devices that are known up to kernel 2.1.31 are
-      ignored! MO-drives are now supported and treated as harddisk. */   
+      ignored! MO-drives are now supported and treated as harddisk. */
    return 0;
 }
 
 /*--------------------------------------------------------------------*/
-   
+
 #ifdef CONFIG_SCSI_IBMMCA
 
 void ibmmca_scsi_setup (char *str, int *ints)
 {
    int i, j, io_base, id_base;
    char *token;
-   
+
    io_base = 0;
    id_base = 0;
-   
+
    if (str)
      {
        token = strtok(str,",");
@@ -1426,7 +1376,7 @@ void ibmmca_scsi_setup (char *str, int *ints)
      }
    else if (ints)
      {
-       for (i = 0; i < IM_MAX_HOSTS && 2*i+2 < ints[0]; i++) 
+       for (i = 0; i < IM_MAX_HOSTS && 2*i+2 < ints[0]; i++)
          {
             io_port[i] = ints[2*i+2];
             scsi_id[i] = ints[2*i+2];
@@ -1445,21 +1395,16 @@ static int ibmmca_getinfo (char *buf, int slot, void *dev)
    int len, special;
    unsigned int pos2, pos3;
    static unsigned long flags;
-     
-#ifdef OLDKERN   
-   save_flags(flags);
-   cli();   
-#else
+
    spin_lock_irqsave(&info_lock, flags);
-#endif   
-   
+
    shpnt = dev; /* assign host-structure to local pointer */
    len = 0; /* set filled text-buffer index to 0 */
    /* get the _special contents of the hostdata structure */
    special = ((struct ibmmca_hostdata *)shpnt->hostdata)->_special;
    pos2 = ((struct ibmmca_hostdata *)shpnt->hostdata)->_pos2;
    pos3 = ((struct ibmmca_hostdata *)shpnt->hostdata)->_pos3;
-   
+
    if (special == FORCED_DETECTION) /* forced detection */
      {
        len += sprintf (buf + len, "Adapter cathegory: forced detected\n");
@@ -1506,21 +1451,17 @@ static int ibmmca_getinfo (char *buf, int slot, void *dev)
      }
    len += sprintf (buf + len, "\n");
 
-#ifdef OLDKERN   
-   restore_flags(flags);
-#else
    spin_unlock_irqrestore(&info_lock, flags);
-#endif   
    return len;
 }
-   
+
 int ibmmca_detect (Scsi_Host_Template * scsi_template)
 {
    struct Scsi_Host *shpnt;
    int port, id, i, j, list_size, slot;
-   
+
    found = 0; /* make absolutely sure, that found is set to 0 */
-   
+
    /* if this is not MCA machine, return "nothing found" */
    if (!MCA_bus)
      {
@@ -1529,20 +1470,15 @@ int ibmmca_detect (Scsi_Host_Template * scsi_template)
      }
    else
      printk("IBM MCA SCSI: Version %s\n",IBMMCA_SCSI_DRIVER_VERSION);
-   
+
    /* get interrupt request level */
-#ifdef OLDKERN
-   if (request_irq (IM_IRQ, interrupt_handler, SA_SHIRQ, "ibmmcascsi",
-                   hosts))
-#else
    if (request_irq (IM_IRQ, do_interrupt_handler, SA_SHIRQ, "ibmmcascsi",
                    hosts))
-#endif
      {
        printk("IBM MCA SCSI: Unable to get shared IRQ %d.\n", IM_IRQ);
        return 0;
      }
-   
+
    /* if ibmmcascsi setup option was passed to kernel, return "found" */
    for (i = 0; i < IM_MAX_HOSTS; i++)
      if (io_port[i] > 0 && scsi_id[i] >= 0 && scsi_id[i] < 8)
@@ -1554,16 +1490,16 @@ int ibmmca_detect (Scsi_Host_Template * scsi_template)
          {
             ((struct ibmmca_hostdata *)shpnt->hostdata)->_pos2 = 0;
             ((struct ibmmca_hostdata *)shpnt->hostdata)->_pos3 = 0;
-            ((struct ibmmca_hostdata *)shpnt->hostdata)->_special = 
+            ((struct ibmmca_hostdata *)shpnt->hostdata)->_special =
               FORCED_DETECTION;
             mca_set_adapter_name(MCA_INTEGSCSI, "forced detected SCSI Adapter");
             mca_set_adapter_procfn(MCA_INTEGSCSI, (MCA_ProcFn) ibmmca_getinfo,
                                    shpnt);
             mca_mark_as_used(MCA_INTEGSCSI);
-         }     
+         }
      }
    if (found) return found;
-   
+
    /* The POS2-register of all PS/2 model SCSI-subsystems has the following
     * interpretation of bits:
     *                             Bit 7 - 4 : Chip Revision ID (Release)
@@ -1575,16 +1511,16 @@ int ibmmca_detect (Scsi_Host_Template * scsi_template)
     *                             Bit 4     : Reserved = 0
     *                             Bit 3 - 0 : Reserved = 0
     * (taken from "IBM, PS/2 Hardware Interface Technical Reference, Common
-    * Interfaces (1991)"). 
-    * In short words, this means, that IBM PS/2 machines only support 
-    * 1 single subsystem by default. The slot-adapters must have another 
+    * Interfaces (1991)").
+    * In short words, this means, that IBM PS/2 machines only support
+    * 1 single subsystem by default. The slot-adapters must have another
     * configuration on pos2. Here, one has to assume the following
     * things for POS2-register:
     *                             Bit 7 - 4 : Chip Revision ID (Release)
     *                             Bit 3 - 1 : port offset factor
     *                             Bit 0     : Chip Enable (EN-Signal)
     * As I found a patch here, setting the IO-registers to 0x3540 forced,
-    * as there was a 0x05 in POS2 on a model 56, I assume, that the 
+    * as there was a 0x05 in POS2 on a model 56, I assume, that the
     * port 0x3540 must be fix for integrated SCSI-controllers.
     * Ok, this discovery leads to the following implementation: (M.Lang) */
 
@@ -1597,8 +1533,8 @@ int ibmmca_detect (Scsi_Host_Template * scsi_template)
        if ((pos[2] & 1) == 1) /* is the subsystem chip enabled ? */
          {
             port = IM_IO_PORT;
-         } 
-       else 
+         }
+       else
          { /* if disabled, no IRQs will be generated, as the chip won't
             * listen to the incomming commands and will do really nothing,
             * except for listening to the pos-register settings. If this
@@ -1609,10 +1545,10 @@ int ibmmca_detect (Scsi_Host_Template * scsi_template)
             port = IM_IO_PORT; /* anyway, set the portnumber and warn */
             printk("IBM MCA SCSI: WARNING - Your SCSI-subsystem is disabled!\n");
             printk("              SCSI-operations may not work.\n");
-         }      
+         }
        id = (pos[3] & 0xe0) >> 5; /* this is correct and represents the PUN */
-       
-       /* give detailed information on the subsystem. This helps me 
+
+       /* give detailed information on the subsystem. This helps me
         * additionally during debugging and analyzing bug-reports. */
        printk("IBM MCA SCSI: IBM Integrated SCSI Controller found, io=0x%x, scsi id=%d,\n",
               port, id);
@@ -1626,7 +1562,7 @@ int ibmmca_detect (Scsi_Host_Template * scsi_template)
          {
             ((struct ibmmca_hostdata *)shpnt->hostdata)->_pos2 = pos[2];
             ((struct ibmmca_hostdata *)shpnt->hostdata)->_pos3 = pos[3];
-            ((struct ibmmca_hostdata *)shpnt->hostdata)->_special = 
+            ((struct ibmmca_hostdata *)shpnt->hostdata)->_special =
               INTEGRATED_SCSI;
             mca_set_adapter_name(MCA_INTEGSCSI, "IBM Integrated SCSI Controller");
             mca_set_adapter_procfn(MCA_INTEGSCSI, (MCA_ProcFn) ibmmca_getinfo,
@@ -1634,8 +1570,8 @@ int ibmmca_detect (Scsi_Host_Template * scsi_template)
             mca_mark_as_used(MCA_INTEGSCSI);
          }
      }
-   
-   /* now look for other adapters in MCA slots, */   
+
+   /* now look for other adapters in MCA slots, */
    /* determine the number of known IBM-SCSI-subsystem types */
    /* see the pos[2] dependence to get the adapter port-offset. */
    list_size = sizeof(subsys_list) / sizeof(struct subsys_list_struct);
@@ -1650,21 +1586,21 @@ int ibmmca_detect (Scsi_Host_Template * scsi_template)
             if ((pos[2] & 1) == 1) /* is the subsystem chip enabled ? */
               { /* (explanations see above) */
                  port = IM_IO_PORT + ((pos[2] & 0x0e) << 2);
-              } 
-            else 
+              }
+            else
               { /* anyway, set the portnumber and warn */
-                 port = IM_IO_PORT + ((pos[2] & 0x0e) << 2); 
+                 port = IM_IO_PORT + ((pos[2] & 0x0e) << 2);
                  printk("IBM MCA SCSI: WARNING - Your SCSI-subsystem is disabled!\n");
                  printk("              SCSI-operations may not work.\n");
-              }             
+              }
             id = (pos[3] & 0xe0) >> 5; /* get subsystem PUN */
             printk("IBM MCA SCSI: %s found in slot %d, io=0x%x, scsi id=%d,\n",
                     subsys_list[i].description, slot + 1, port, id);
             printk("              chip rev.=%d, port-offset=0x%x, subsystem=%s\n",
-                   ((pos[2] & 0xf0) >> 4), 
+                   ((pos[2] & 0xf0) >> 4),
                    ((pos[2] & 0x0e) << 2),
                    (pos[2] & 1) ? "enabled." : "disabled.");
-            
+
             /* register the hostadapter */
             if ((shpnt = ibmmca_register(scsi_template, port, id,
                          subsys_list[i].description)))
@@ -1681,12 +1617,12 @@ int ibmmca_detect (Scsi_Host_Template * scsi_template)
             slot++; /* advance to next slot */
          } /* advance to next adapter id in the list of IBM-SCSI-subsystems*/
      }
-   
-   if (!found) 
+
+   if (!found)
      { /* maybe ESDI, or other producers' SCSI-hosts */
        free_irq (IM_IRQ, hosts);
        printk("IBM MCA SCSI: No IBM SCSI-subsystem adapter attached.\n");
-     }  
+     }
    return found; /* return the number of found SCSI hosts. Should be 1 or 0. */
 }
 
@@ -1697,7 +1633,7 @@ ibmmca_register(Scsi_Host_Template * scsi_template, int port, int id,
    struct Scsi_Host *shpnt;
    int i, j;
    unsigned int ctrl;
-   
+
    /* check I/O region */
    if (check_region(port, IM_N_IO_PORT))
      {
@@ -1705,7 +1641,7 @@ ibmmca_register(Scsi_Host_Template * scsi_template, int port, int id,
               port, port + IM_N_IO_PORT - 1, IM_N_IO_PORT);
        return NULL;
      }
-   
+
    /* register host */
    shpnt = scsi_register(scsi_template, sizeof(struct ibmmca_hostdata));
    if (!shpnt)
@@ -1713,7 +1649,7 @@ ibmmca_register(Scsi_Host_Template * scsi_template, int port, int id,
        printk("IBM MCA SCSI: Unable to register host.\n");
        return NULL;
      }
-   
+
    /* request I/O region */
    request_region(port, IM_N_IO_PORT, hostname);
 
@@ -1735,7 +1671,7 @@ ibmmca_register(Scsi_Host_Template * scsi_template, int port, int id,
    if (bypass_controller)
      printk("IBM MCA SCSI: Subsystem SCSI-commands get bypassed.\n");
 #endif
-   
+
    reset_status(found) = IM_RESET_NOT_IN_PROGRESS;
 
    for (i = 0; i < 8; i++) /* reset the tables */
@@ -1746,7 +1682,7 @@ ibmmca_register(Scsi_Host_Template * scsi_template, int port, int id,
    local_checking_phase_flag(found) = 1;
    check_devices(found); /* call by value, using the global variable hosts*/
    local_checking_phase_flag(found) = 0;
-   
+
    found++; /* now increase index to be prepared for next found subsystem */
    /* an ibm mca subsystem has been detected */
    return shpnt;
@@ -1776,21 +1712,21 @@ int ibmmca_release(struct Scsi_Host *shpnt)
 /*--------------------------------------------------------------------*/
 
 /* The following routine is the SCSI command queue. The old edition is
-   now improved by dynamical reassignment of ldn numbers that are 
+   now improved by dynamical reassignment of ldn numbers that are
    currently not assigned. The mechanism works in a way, that first
    the physical structure is checked. If at a certain pun,lun a device
    should be present, the routine proceeds to the ldn check from
    get_ldn. An answer of 0xff would show-up, that the aimed device is
-   currently not assigned any ldn. At this point, the dynamical 
+   currently not assigned any ldn. At this point, the dynamical
    remapping algorithm is called. It works in a way, that it goes in
    cyclic order through the ldns from 7 to 14. If a ldn is assigned,
    it takes 8 dynamical reassignment calls, until a device looses its
-   ldn again. With this method it is assured, that while doing 
+   ldn again. With this method it is assured, that while doing
    intense I/O between up to eight devices, no dynamical remapping is
    done there. ldns 0 through 6(!) are left untouched, which means, that
    puns 0 through 7(!) on lun=0 are always accessible without remapping.
-   These ldns are statically assigned by this driver. The subsystem always 
-   occupies at least one pun, therefore 7 ldns (at lun=0) for other devices 
+   These ldns are statically assigned by this driver. The subsystem always
+   occupies at least one pun, therefore 7 ldns (at lun=0) for other devices
    are sufficient. (The adapter uses always ldn=15, at whatever pun it is.) */
 int ibmmca_queuecommand (Scsi_Cmnd * cmd, void (*done) (Scsi_Cmnd *))
 {
@@ -1802,24 +1738,24 @@ int ibmmca_queuecommand (Scsi_Cmnd * cmd, void (*done) (Scsi_Cmnd *))
    int id,lun;
    int target;
    int host_index;
-   
+
    if (ibm_ansi_order)
      target = 6 - cmd->target;
    else
      target = cmd->target;
-   
+
    shpnt = cmd->host;
-   
+
    /* search for the right hostadapter */
    for (host_index = 0; hosts[host_index] && hosts[host_index]->host_no != shpnt->host_no; host_index++);
-   
+
    if (!hosts[host_index])
      { /* invalid hostadapter descriptor address */
        cmd->result = DID_NO_CONNECT << 16;
        done (cmd);
        return 0;
      }
-   
+
    /*if (target,lun) is NO LUN or not existing at all, return error */
    if ((get_scsi(host_index)[target][cmd->lun] == TYPE_NO_LUN)||
        (get_scsi(host_index)[target][cmd->lun] == TYPE_NO_DEVICE))
@@ -1828,7 +1764,7 @@ int ibmmca_queuecommand (Scsi_Cmnd * cmd, void (*done) (Scsi_Cmnd *))
        done (cmd);
        return 0;
      }
-   
+
    /*if (target,lun) unassigned, do further checks... */
    ldn = get_ldn(host_index)[target][cmd->lun];
    if (ldn >= MAX_LOG_DEV) /* on invalid ldn do special stuff */
@@ -1839,7 +1775,7 @@ int ibmmca_queuecommand (Scsi_Cmnd * cmd, void (*done) (Scsi_Cmnd *))
             while (ld(host_index)[next_ldn(host_index)].cmd) /* search for a occupied, but not in */
               {                      /* command-processing ldn. */
                  next_ldn(host_index)++;
-                 if (next_ldn(host_index)>=MAX_LOG_DEV) 
+                 if (next_ldn(host_index)>=MAX_LOG_DEV)
                    next_ldn(host_index) = 7;
                  if (current_ldn == next_ldn(host_index)) /* One circle done ? */
                    {         /* no non-processing ldn found */
@@ -1852,14 +1788,14 @@ int ibmmca_queuecommand (Scsi_Cmnd * cmd, void (*done) (Scsi_Cmnd *))
                       return 0;
                    }
               }
-            
+
             /* unmap non-processing ldn */
             for (id=0; id<8; id ++)
               for (lun=0; lun<8; lun++)
               {
                  if (get_ldn(host_index)[id][lun] == next_ldn(host_index))
                    {
-                      get_ldn(host_index)[id][lun] = TYPE_NO_DEVICE; 
+                      get_ldn(host_index)[id][lun] = TYPE_NO_DEVICE;
                       /* unmap entry */
                    }
               }
@@ -1874,52 +1810,52 @@ int ibmmca_queuecommand (Scsi_Cmnd * cmd, void (*done) (Scsi_Cmnd *))
             /* change ldn to the right value, that is now next_ldn */
             ldn = next_ldn(host_index);
             /* get device information for ld[ldn] */
-            if (device_exists (host_index, ldn, 
+            if (device_exists (host_index, ldn,
                                &ld(host_index)[ldn].block_length,
                                &ld(host_index)[ldn].device_type))
               {
                  ld(host_index)[ldn].cmd = 0; /* To prevent panic set 0, because
                                                devices that were not assigned,
                                                should have nothing in progress. */
-                 
+
                  /* increase assignment counters for statistics in /proc */
                  IBM_DS(host_index).dynamical_assignments++;
                  IBM_DS(host_index).ldn_assignments[ldn]++;
               }
             else
-              /* panic here, because a device, found at boottime has 
+              /* panic here, because a device, found at boottime has
                vanished */
               panic("IBM MCA SCSI: ldn=0x%x, SCSI-device on (%d,%d) vanished!\n",
                     ldn, target, cmd->lun);
-            
+
             /* set back to normal interrupt_handling */
             local_checking_phase_flag(host_index) = 0;
-            
+
             /* Information on syslog terminal */
             printk("IBM MCA SCSI: ldn=0x%x dynamically reassigned to (%d,%d).\n",
                    ldn, target, cmd->lun);
-            
-            /* increase next_ldn for next dynamical assignment */ 
+
+            /* increase next_ldn for next dynamical assignment */
             next_ldn(host_index)++;
-            if (next_ldn(host_index)>=MAX_LOG_DEV) 
+            if (next_ldn(host_index)>=MAX_LOG_DEV)
               next_ldn(host_index) = 7;
-         }       
+         }
        else
-         {  /* wall against Linux accesses to the subsystem adapter */  
+         {  /* wall against Linux accesses to the subsystem adapter */
             cmd->result = DID_BAD_TARGET << 16;
             done (cmd);
             return 0;
          }
      }
-   
+
    /*verify there is no command already in progress for this log dev */
    if (ld(host_index)[ldn].cmd)
      panic ("IBM MCA SCSI: cmd already in progress for this ldn.\n");
-   
+
    /*save done in cmd, and save cmd for the interrupt handler */
    cmd->scsi_done = done;
    ld(host_index)[ldn].cmd = cmd;
-   
+
    /*fill scb information independent of the scsi command */
    scb = &(ld(host_index)[ldn].scb);
    ld(host_index)[ldn].tsb.dev_status = 0;
@@ -1945,29 +1881,29 @@ int ibmmca_queuecommand (Scsi_Cmnd * cmd, void (*done) (Scsi_Cmnd *))
        scb->sys_buf_adr = virt_to_bus(cmd->request_buffer);
        scb->sys_buf_length = cmd->request_bufflen;
      }
-   
+
    /*fill scb information dependent on scsi command */
    scsi_cmd = cmd->cmnd[0];
-   
+
 #ifdef IM_DEBUG_CMD
    printk("issue scsi cmd=%02x to ldn=%d\n", scsi_cmd, ldn);
 #endif
-   
+
    /* for specific device-type debugging: */
 #ifdef IM_DEBUG_CMD_SPEC_DEV
    if (ld(host_index)[ldn].device_type==IM_DEBUG_CMD_DEVICE)
-     printk("(SCSI-device-type=0x%x) issue scsi cmd=%02x to ldn=%d\n", 
+     printk("(SCSI-device-type=0x%x) issue scsi cmd=%02x to ldn=%d\n",
            ld(host_index)[ldn].device_type, scsi_cmd, ldn);
 #endif
-   
+
    /* for possible panics store current command */
-   last_scsi_command(host_index)[ldn] = scsi_cmd; 
+   last_scsi_command(host_index)[ldn] = scsi_cmd;
    last_scsi_type(host_index)[ldn] = IM_SCB;
-   
+
    /* update statistical info */
    IBM_DS(host_index).total_accesses++;
    IBM_DS(host_index).ldn_access[ldn]++;
-   
+
    switch (scsi_cmd)
      {
       case READ_6:
@@ -1975,23 +1911,23 @@ int ibmmca_queuecommand (Scsi_Cmnd * cmd, void (*done) (Scsi_Cmnd *))
       case READ_10:
       case WRITE_10:
       case READ_12:
-      case WRITE_12:       
+      case WRITE_12:
        /* statistics for proc_info */
        if ((scsi_cmd == READ_6)||(scsi_cmd == READ_10)||(scsi_cmd == READ_12))
          IBM_DS(host_index).ldn_read_access[ldn]++; /* increase READ-access on ldn stat. */
        else if ((scsi_cmd == WRITE_6)||(scsi_cmd == WRITE_10)||
                 (scsi_cmd == WRITE_12))
          IBM_DS(host_index).ldn_write_access[ldn]++; /* increase write-count on ldn stat.*/
-       
+
        /* Distinguish between disk and other devices. Only disks (that are the
-          most frequently accessed devices) should be supported by the 
+          most frequently accessed devices) should be supported by the
          IBM-SCSI-Subsystem commands. */
        switch (ld(host_index)[ldn].device_type)
          {
           case TYPE_DISK: /* for harddisks enter here ... */
           case TYPE_MOD:  /* ... try it also for MO-drives (send flames as */
                           /*     you like, if this won't work.) */
-            if (scsi_cmd == READ_6 || scsi_cmd == READ_10 || 
+            if (scsi_cmd == READ_6 || scsi_cmd == READ_10 ||
                 scsi_cmd == READ_12)
               { /* read command preparations */
                  if (bypass_controller)
@@ -2016,13 +1952,13 @@ int ibmmca_queuecommand (Scsi_Cmnd * cmd, void (*done) (Scsi_Cmnd *))
                       memcpy(scb->u2.scsi_command,cmd->cmnd,cmd->cmd_len);
                    }
                  else
-                   { 
+                   {
                       scb->command = IM_WRITE_DATA_CMD;
                    }
               }
-            
+
             if (!bypass_controller)
-              {                 
+              {
                  if (scsi_cmd == READ_6 || scsi_cmd == WRITE_6)
                    {
                       scb->u1.log_blk_adr = (((unsigned) cmd->cmnd[3]) << 0) |
@@ -2040,11 +1976,11 @@ int ibmmca_queuecommand (Scsi_Cmnd * cmd, void (*done) (Scsi_Cmnd *))
                         (((unsigned) cmd->cmnd[7]) << 8);
                    }
                  scb->u2.blk.length = ld(host_index)[ldn].block_length;
-              }            
+              }
             if (++disk_rw_in_progress == 1)
               PS2_DISK_LED_ON (shpnt->host_no, target);
             break;
-            
+
             /* for other devices, enter here. Other types are not known by
              Linux! TYPE_NO_LUN is forbidden as valid device. */
           case TYPE_ROM:
@@ -2053,29 +1989,29 @@ int ibmmca_queuecommand (Scsi_Cmnd * cmd, void (*done) (Scsi_Cmnd *))
           case TYPE_WORM:
           case TYPE_SCANNER:
           case TYPE_MEDIUM_CHANGER:
-            
+
             /* If there is a sequential-device, IBM recommends to use
-             IM_OTHER_SCSI_CMD_CMD instead of subsystem READ/WRITE. 
+             IM_OTHER_SCSI_CMD_CMD instead of subsystem READ/WRITE.
              Good/modern CD-ROM-drives are capable of
              reading sequential AND random-access. This leads to the problem,
-             that random-accesses are covered by the subsystem, but 
+             that random-accesses are covered by the subsystem, but
              sequentials are not, as like for tape-drives. Therefore, it is
              the easiest way to use IM_OTHER_SCSI_CMD_CMD for all read-ops
              on CD-ROM-drives in order not to run into timing problems and
              to have a stable state. In addition, data-access on CD-ROMs
              works faster like that. Strange, but obvious. */
-           
+
             scb->command = IM_OTHER_SCSI_CMD_CMD;
-            if (scsi_cmd == READ_6 || scsi_cmd == READ_10 || 
+            if (scsi_cmd == READ_6 || scsi_cmd == READ_10 ||
                 scsi_cmd == READ_12) /* enable READ */
               {
                  scb->enable |= IM_READ_CONTROL;
               }
-            
+
             scb->u1.scsi_cmd_length = cmd->cmd_len;
             memcpy (scb->u2.scsi_command, cmd->cmnd, cmd->cmd_len);
-            
-            /* Read/write on this non-disk devices is also displayworthy, 
+
+            /* Read/write on this non-disk devices is also displayworthy,
              so flash-up the LED/display. */
             if (++disk_rw_in_progress == 1)
               PS2_DISK_LED_ON (shpnt->host_no, target);
@@ -2096,7 +2032,7 @@ int ibmmca_queuecommand (Scsi_Cmnd * cmd, void (*done) (Scsi_Cmnd *))
             scb->command = IM_DEVICE_INQUIRY_CMD;
             scb->enable |= IM_READ_CONTROL | IM_SUPRESS_EXCEPTION_SHORT;
          }
-       break;  
+       break;
 
       case READ_CAPACITY:
        /* the length of system memory buffer must be exactly 8 bytes */
@@ -2107,7 +2043,7 @@ int ibmmca_queuecommand (Scsi_Cmnd * cmd, void (*done) (Scsi_Cmnd *))
             scb->command = IM_OTHER_SCSI_CMD_CMD;
             scb->enable |= IM_READ_CONTROL;
             scb->u1.scsi_cmd_length = cmd->cmd_len;
-            memcpy (scb->u2.scsi_command, cmd->cmnd, cmd->cmd_len);         
+            memcpy (scb->u2.scsi_command, cmd->cmnd, cmd->cmd_len);
          }
        else
          {
@@ -2115,7 +2051,7 @@ int ibmmca_queuecommand (Scsi_Cmnd * cmd, void (*done) (Scsi_Cmnd *))
             scb->enable |= IM_READ_CONTROL;
          }
        break;
-       
+
        /* Commands that need read-only-mode (system <- device): */
       case REQUEST_SENSE:
        if (bypass_controller)
@@ -2131,18 +2067,18 @@ int ibmmca_queuecommand (Scsi_Cmnd * cmd, void (*done) (Scsi_Cmnd *))
             scb->enable |= IM_READ_CONTROL;
          }
        break;
-       
+
        /* Commands that need write-only-mode (system -> device): */
       case MODE_SELECT:
       case MODE_SELECT_10:
        IBM_DS(host_index).ldn_modeselect_access[ldn]++;
-       scb->command = IM_OTHER_SCSI_CMD_CMD;      
+       scb->command = IM_OTHER_SCSI_CMD_CMD;
        scb->enable |= IM_SUPRESS_EXCEPTION_SHORT; /*Select needs WRITE-enabled*/
        scb->u1.scsi_cmd_length = cmd->cmd_len;
        memcpy (scb->u2.scsi_command, cmd->cmnd, cmd->cmd_len);
        break;
-       
-       /* For other commands, read-only is useful. Most other commands are 
+
+       /* For other commands, read-only is useful. Most other commands are
         running without an input-data-block. */
       default:
        scb->command = IM_OTHER_SCSI_CMD_CMD;
@@ -2151,7 +2087,7 @@ int ibmmca_queuecommand (Scsi_Cmnd * cmd, void (*done) (Scsi_Cmnd *))
        memcpy (scb->u2.scsi_command, cmd->cmnd, cmd->cmd_len);
        break;
      }
-   
+
    /*issue scb command, and return */
    issue_cmd (host_index, virt_to_bus(scb), IM_SCB | ldn);
    return 0;
@@ -2164,7 +2100,7 @@ int ibmmca_abort (Scsi_Cmnd * cmd)
    /* Abort does not work, as the adapter never generates an interrupt on
     * whatever situation is simulated, even when really pending commands
     * are running on the adapters' hardware ! */
-   
+
    struct Scsi_Host *shpnt;
    unsigned int ldn;
    void (*saved_done) (Scsi_Cmnd *);
@@ -2175,22 +2111,17 @@ int ibmmca_abort (Scsi_Cmnd * cmd)
 
    /* return SCSI_ABORT_SNOOZE ; */
 
-#ifdef OLDKERN   
-   save_flags(flags);
-   cli();   
-#else
    spin_lock_irqsave(&abort_lock, flags);
-#endif         
    if (ibm_ansi_order)
      target = 6 - cmd->target;
    else
      target = cmd->target;
-   
+
    shpnt = cmd->host;
 
    /* search for the right hostadapter */
-   for (host_index = 0; hosts[host_index] && hosts[host_index]->host_no != shpnt->host_no; host_index++);   
-   
+   for (host_index = 0; hosts[host_index] && hosts[host_index]->host_no != shpnt->host_no; host_index++);
+
    if (!hosts[host_index])
      { /* invalid hostadapter descriptor address */
        cmd->result = DID_NO_CONNECT << 16;
@@ -2198,7 +2129,7 @@ int ibmmca_abort (Scsi_Cmnd * cmd)
          (cmd->done) (cmd);
        return SCSI_ABORT_SNOOZE;
      }
+
    /*get logical device number, and disable system interrupts */
    printk ("IBM MCA SCSI: Sending abort to device pun=%d, lun=%d.\n",
           target, cmd->lun);
@@ -2207,17 +2138,13 @@ int ibmmca_abort (Scsi_Cmnd * cmd)
    /*if cmd for this ldn has already finished, no need to abort */
    if (!ld(host_index)[ldn].cmd)
      {
-#ifdef OLDKERN   
-       restore_flags(flags);
-#else
        spin_unlock_irqrestore(&abort_lock, flags);
-#endif         
        return SCSI_ABORT_NOT_RUNNING;
      }
 
-   /* Clear ld.cmd, save done function, install internal done, 
-    * send abort immediate command (this enables sys. interrupts), 
-    * and wait until the interrupt arrives. 
+   /* Clear ld.cmd, save done function, install internal done,
+    * send abort immediate command (this enables sys. interrupts),
+    * and wait until the interrupt arrives.
     */
    saved_done = cmd->scsi_done;
    cmd->scsi_done = internal_done;
@@ -2232,34 +2159,22 @@ int ibmmca_abort (Scsi_Cmnd * cmd)
      {
        if (!(inb (IM_STAT_REG(host_index)) & IM_BUSY))
          break;
-#ifdef OLDKERN 
-       restore_flags (flags);
-#else
        spin_unlock_irqrestore(&abort_lock, flags);
-#endif 
-#ifdef OLDKERN   
-       save_flags(flags);
-       cli();   
-#else
+
        spin_lock_irqsave(&abort_lock, flags);
-#endif   
      }
    /*write registers and enable system interrupts */
    outl (imm_command, IM_CMD_REG(host_index));
    outb (IM_IMM_CMD | ldn, IM_ATTN_REG(host_index));
-#ifdef OLDKERN   
-   restore_flags (flags);
-#else
    spin_unlock_irqrestore(&abort_lock, flags);
-#endif
-   
+
 #ifdef IM_DEBUG_PROBE
        printk("IBM MCA SCSI: Abort submitted, waiting for adapter response...\n");
-#endif 
+#endif
    while (!cmd->SCp.Status)
-     barrier ();   
-   cmd->scsi_done = saved_done;   
-   /*if abort went well, call saved done, then return success or error */   
+     barrier ();
+   cmd->scsi_done = saved_done;
+   /*if abort went well, call saved done, then return success or error */
    if (cmd->result == (DID_ABORT << 16))
      {
        cmd->result |= DID_ABORT << 16;
@@ -2268,7 +2183,7 @@ int ibmmca_abort (Scsi_Cmnd * cmd)
        ld(host_index)[ldn].cmd = NULL;
 #ifdef IM_DEBUG_PROBE
        printk("IBM MCA SCSI: Abort finished with success.\n");
-#endif 
+#endif
        return SCSI_ABORT_SUCCESS;
      }
    else
@@ -2279,7 +2194,7 @@ int ibmmca_abort (Scsi_Cmnd * cmd)
        ld(host_index)[ldn].cmd = NULL;
 #ifdef IM_DEBUG_PROBE
        printk("IBM MCA SCSI: Abort failed.\n");
-#endif         
+#endif
        return SCSI_ABORT_ERROR;
      }
 }
@@ -2294,13 +2209,8 @@ int ibmmca_reset (Scsi_Cmnd * cmd, unsigned int reset_flags)
    int host_index;
    static unsigned long flags;
    unsigned long imm_command;
-   
-#ifdef OLDKERN   
-   save_flags(flags);
-   cli();   
-#else
+
    spin_lock_irqsave(&reset_lock, flags);
-#endif   
    ticks = IM_RESET_DELAY*HZ;
    shpnt = cmd->host;
    /* search for the right hostadapter */
@@ -2320,11 +2230,7 @@ int ibmmca_reset (Scsi_Cmnd * cmd, unsigned int reset_flags)
    if (local_checking_phase_flag(host_index))
      {
        printk("IBM MCA SCSI: unable to reset while checking devices.\n");
-#ifdef OLDKERN 
-       restore_flags(flags);
-#else
        spin_unlock_irqrestore(&reset_lock, flags);
-#endif         
        return SCSI_RESET_SNOOZE;
      }
 
@@ -2341,17 +2247,8 @@ int ibmmca_reset (Scsi_Cmnd * cmd, unsigned int reset_flags)
      {
        if (!(inb (IM_STAT_REG(host_index)) & IM_BUSY))
          break;
-#ifdef OLDKERN 
-       restore_flags(flags);
-#else
        spin_unlock_irqrestore(&reset_lock, flags);
-#endif 
-#ifdef OLDKERN   
-       save_flags(flags);
-       cli();   
-#else
        spin_lock_irqsave(&reset_lock, flags);
-#endif   
      }
    /*write registers and enable system interrupts */
    outl (imm_command, IM_CMD_REG(host_index));
@@ -2368,14 +2265,10 @@ int ibmmca_reset (Scsi_Cmnd * cmd, unsigned int reset_flags)
       printk("IBM MCA SCSI: reset did not complete within %d seconds.\n",
             IM_RESET_DELAY);
       reset_status(host_index) = IM_RESET_FINISHED_FAIL;
-#ifdef OLDKERN   
-      restore_flags(flags);
-#else
       spin_unlock_irqrestore(&reset_lock, flags);
-#endif   
       return SCSI_RESET_ERROR;
    }
-   
+
    if ((inb(IM_INTR_REG(host_index)) & 0x8f)==0x8f)
      { /* analysis done by this routine and not by the intr-routine */
        if (inb(IM_INTR_REG(host_index))==0xaf)
@@ -2385,26 +2278,18 @@ int ibmmca_reset (Scsi_Cmnd * cmd, unsigned int reset_flags)
        else /* failed, 4get it */
          reset_status(host_index) = IM_RESET_NOT_IN_PROGRESS_NO_INT;
        outb (IM_EOI | 0xf, IM_ATTN_REG(host_index));
-     } 
-   
+     }
+
    /* if reset failed, just return an error */
    if (reset_status(host_index) == IM_RESET_FINISHED_FAIL) {
       printk("IBM MCA SCSI: reset failed.\n");
-#ifdef OLDKERN   
-      restore_flags(flags);
-#else
       spin_unlock_irqrestore(&reset_lock, flags);
-#endif         
       return SCSI_RESET_ERROR;
    }
-   
+
    /* so reset finished ok - call outstanding done's, and return success */
    printk ("IBM MCA SCSI: Reset completed without known error.\n");
-#ifdef OLDKERN   
-   restore_flags(flags);
-#else
    spin_unlock_irqrestore(&reset_lock, flags);
-#endif      
    for (i = 0; i < MAX_LOG_DEV; i++)
      {
        cmd_aid = ld(host_index)[i].cmd;
@@ -2455,7 +2340,7 @@ static int ldn_access_total_read_write(int host_index)
 {
    int a;
    int i;
-   
+
    a = 0;
    for (i=0; i<=MAX_LOG_DEV; i++)
      a+=IBM_DS(host_index).ldn_read_access[i]+IBM_DS(host_index).ldn_write_access[i];
@@ -2466,7 +2351,7 @@ static int ldn_access_total_inquiry(int host_index)
 {
    int a;
    int i;
-   
+
    a = 0;
    for (i=0; i<=MAX_LOG_DEV; i++)
      a+=IBM_DS(host_index).ldn_inquiry_access[i];
@@ -2477,7 +2362,7 @@ static int ldn_access_total_modeselect(int host_index)
 {
    int a;
    int i;
-   
+
    a = 0;
    for (i=0; i<=MAX_LOG_DEV; i++)
      a+=IBM_DS(host_index).ldn_modeselect_access[i];
@@ -2493,12 +2378,7 @@ int ibmmca_proc_info (char *buffer, char **start, off_t offset, int length,
    struct Scsi_Host *shpnt;
    unsigned long flags;
 
-#ifdef OLDKERN   
-   save_flags(flags);
-   cli();
-#else
    spin_lock_irqsave(&proc_lock, flags);
-#endif   
 
    for (i = 0; hosts[i] && hosts[i]->host_no != hostno; i++);
    shpnt = hosts[i];
@@ -2550,7 +2430,7 @@ int ibmmca_proc_info (char *buffer, char **start, off_t offset, int length,
                     i, ldn_access_load(host_index, i), IBM_DS(host_index).ldn_read_access[i],
                     IBM_DS(host_index).ldn_write_access[i], IBM_DS(host_index).ldn_assignments[i]);
    len += sprintf(buffer+len, "        -----------------------------------------------------------\n\n");
-   
+
    len += sprintf(buffer+len, " Dynamical-LDN-Assignment-Statistics:\n");
    len += sprintf(buffer+len, "               Number of physical SCSI-devices..: %d (+ Adapter)\n",
                  IBM_DS(host_index).total_scsi_devices);
@@ -2568,26 +2448,23 @@ int ibmmca_proc_info (char *buffer, char **start, off_t offset, int length,
      {
        len += sprintf(buffer+len, "    %2d     ",id);
        for (lun=0; lun<8; lun++)
-         len += sprintf(buffer+len,"%2s ",ti_p(get_scsi(host_index)[id][lun]));        
+         len += sprintf(buffer+len,"%2s ",ti_p(get_scsi(host_index)[id][lun]));
+
        len += sprintf(buffer+len, "      %2d     ",id);
        for (lun=0; lun<8; lun++)
          len += sprintf(buffer+len,"%2s ",ti_l(get_ldn(host_index)[id][lun]));
        len += sprintf(buffer+len,"\n");
      }
-   
+
    len += sprintf(buffer+len, "(A = IBM-Subsystem, D = Harddisk, T = Tapedrive, P = Processor, W = WORM,\n");
    len += sprintf(buffer+len, " R = CD-ROM, S = Scanner, M = MO-Drive, C = Medium-Changer, + = unprovided LUN,\n");
    len += sprintf(buffer+len, " - = nothing found, nothing assigned or unprobed LUN)\n\n");
-   
+
    *start = buffer + offset;
    len -= offset;
-   if (len > length) 
+   if (len > length)
      len = length;
-#ifdef OLDKERN   
-   restore_flags(flags);
-#else
    spin_unlock_irqrestore(&proc_lock, flags);
-#endif   
    return len;
 }
 
@@ -2596,7 +2473,18 @@ int ibmmca_proc_info (char *buffer, char **start, off_t offset, int length,
 Scsi_Host_Template driver_template = IBMMCA;
 
 #include "scsi_module.c"
+
+/*
+ *     Module parameters
+ */
+
+MODULE_PARM(io_port, "1-" __MODULE_STRING(IM_MAX_HOSTS) "i");
+MODULE_PARM(scsi_id, "1-" __MODULE_STRING(IM_MAX_HOSTS) "i");
+MODULE_PARM(display, "1i");
+MODULE_PARM(adisplay, "1i");
+MODULE_PARM(bypass, "1i");
+MODULE_PARM(normal, "1i");
+MODULE_PARM(ansi, "1i");
 #endif
 
 /*--------------------------------------------------------------------*/
-
index f9d334c292825dbb8e78e913bc4c8100a9972d94..f995b9e32d4c2bb03a16da70e91688d1b339eca1 100644 (file)
@@ -62,6 +62,8 @@
  */
 
 #define FAST_READ2_IO()    \
+({ \
+int __dummy_1,__dummy_2; \
    __asm__ __volatile__ ("\n \
    cld                    \n \
    orl %%ecx, %%ecx       \n \
    rep                    \n \
    insw (%%dx),%%es:(%%edi) \n \
 1: "                       \
-   : "=D" (sp)                   /* output */   \
-   : "d" (f), "D" (sp), "c" (i)  /* input */    \
-   : "edx", "ecx", "edi" )       /* trashed */
+   : "=D" (sp) ,"=c" (__dummy_1) ,"=d" (__dummy_2)  /* output */   \
+   : "2" (f), "0" (sp), "1" (i)  /* input */    \
+   );       /* trashed */ \
+})
 
 #define FAST_WRITE2_IO()   \
+({ \
+int __dummy_1,__dummy_2; \
    __asm__ __volatile__ ("\n \
    cld                    \n \
    orl %%ecx, %%ecx       \n \
    rep                    \n \
    outsw %%ds:(%%esi),(%%dx) \n \
 1: "                       \
-   : "=S" (sp)                   /* output */   \
-   : "d" (f), "S" (sp), "c" (i)  /* input */    \
-   : "edx", "ecx", "esi" )       /* trashed */
-
+   : "=S" (sp) ,"=c" (__dummy_1) ,"=d" (__dummy_2)/* output */   \
+   : "2" (f), "0" (sp), "1" (i)  /* input */    \
+   );       /* trashed */ \
+})
 
 /* IN2000 io_port offsets */
 #define IO_WD_ASR       0x00     /* R - 3393 auxstat reg */
index 7e209ac3ab7a338e2dbcee9f08e464e0d1e6be0f..cfaa96e5c329b54f645854c3f31218cbda2897c3 100644 (file)
@@ -629,7 +629,8 @@ struct init_cb {
 #define QLOGICFC_MAX_ID    0x7d
 #endif
 
-#define QLOGICFC_MAX_LOOP_ID 0x7d
+#define QLOGICFC_MAX_LUN       128
+#define QLOGICFC_MAX_LOOP_ID   0x7d
 
 /* adapter_state values */
 #define AS_FIRMWARE_DEAD      -1
@@ -744,6 +745,7 @@ int isp2x00_detect(Scsi_Host_Template * tmpt)
 
                        host = scsi_register(tmpt, sizeof(struct isp2x00_hostdata));
                        host->max_id = QLOGICFC_MAX_ID + 1;
+                       host->max_lun = QLOGICFC_MAX_LUN;
                        host->hostt->use_new_eh_code = 1;
                        hostdata = (struct isp2x00_hostdata *) host->hostdata;
 
index b3f77ac175478909c0c450fd62ce6f0cdf6bef22..931702745b778da0fa272983218a13a3651966ca 100644 (file)
@@ -4,76 +4,76 @@
  */
 
 unsigned short risc_code_addr01 = 0x1000 ;
-unsigned short risc_code_length2100 = 0x65db;
+unsigned short risc_code_length2100 = 0x66e6;
 unsigned short risc_code_length2200 = 0x81bd;
 
 unsigned short risc_code2100[] = { 
-       0x0078, 0x1029, 0x0000, 0x65db, 0x0000, 0x2043, 0x4f50, 0x5952,
+       0x0078, 0x1029, 0x0000, 0x66e6, 0x0000, 0x2043, 0x4f50, 0x5952,
        0x4947, 0x4854, 0x2031, 0x3939, 0x3620, 0x514c, 0x4f47, 0x4943,
        0x2043, 0x4f52, 0x504f, 0x5241, 0x5449, 0x4f4e, 0x2049, 0x5350,
        0x3231, 0x3030, 0x2046, 0x6972, 0x6d77, 0x6172, 0x6520, 0x2056,
        0x6572, 0x7369, 0x6f6e, 0x2030, 0x312e, 0x3135, 0x2020, 0x2020,
-       0x2400, 0x20c1, 0x0021, 0x20a1, 0x75db, 0x2009, 0x0000, 0x20a9,
-       0x0725, 0x41a4, 0x3400, 0x20c9, 0x7aff, 0x2091, 0x2000, 0x2059,
-       0x0000, 0x2b78, 0x7823, 0x0004, 0x2089, 0x209a, 0x2051, 0x7600,
-       0x2a70, 0x705b, 0x9500, 0x705f, 0xffff, 0x7057, 0x94f9, 0x7063,
-       0x0300, 0x1078, 0x127a, 0x20a1, 0x7d00, 0x715c, 0x810d, 0x810d,
+       0x2400, 0x20c1, 0x0021, 0x20a1, 0x76e6, 0x2009, 0x0000, 0x20a9,
+       0x071a, 0x41a4, 0x3400, 0x20c9, 0x7bff, 0x2091, 0x2000, 0x2059,
+       0x0000, 0x2b78, 0x7823, 0x0004, 0x2089, 0x209a, 0x2051, 0x7700,
+       0x2a70, 0x705b, 0x9600, 0x705f, 0xffff, 0x7057, 0x95f9, 0x7063,
+       0x0300, 0x1078, 0x127a, 0x20a1, 0x7e00, 0x715c, 0x810d, 0x810d,
        0x810d, 0x810d, 0xa18c, 0x000f, 0x2001, 0x0007, 0xa112, 0xa00e,
        0x21a8, 0x41a4, 0x3400, 0x8211, 0x00c0, 0x1058, 0x715c, 0x3400,
        0xa102, 0x0040, 0x1068, 0x0048, 0x1068, 0x20a8, 0xa00e, 0x41a4,
        0x1078, 0x1241, 0x1078, 0x1366, 0x1078, 0x14eb, 0x1078, 0x19c0,
-       0x1078, 0x360d, 0x1078, 0x5b8c, 0x1078, 0x12f1, 0x1078, 0x2429,
-       0x1078, 0x3c4e, 0x1078, 0x3a26, 0x1078, 0x448c, 0x1078, 0x1e55,
-       0x1078, 0x46cb, 0x1078, 0x416c, 0x1078, 0x1d74, 0x1078, 0x1e34,
+       0x1078, 0x362b, 0x1078, 0x5cac, 0x1078, 0x12f1, 0x1078, 0x2429,
+       0x1078, 0x3d6e, 0x1078, 0x3b46, 0x1078, 0x45af, 0x1078, 0x1e55,
+       0x1078, 0x47ef, 0x1078, 0x428f, 0x1078, 0x1d74, 0x1078, 0x1e34,
        0x2091, 0x3009, 0x7823, 0x0000, 0x0090, 0x109d, 0x7820, 0xa086,
        0x0002, 0x00c0, 0x109d, 0x7823, 0x4000, 0x0068, 0x1095, 0x781b,
        0x0001, 0x2091, 0x5000, 0x2091, 0x4080, 0x2a70, 0x7003, 0x0000,
        0x2001, 0x017f, 0x2003, 0x0000, 0x2a70, 0x7000, 0xa08e, 0x0003,
-       0x00c0, 0x10bd, 0x1078, 0x2d7e, 0x1078, 0x2451, 0x1078, 0x3c9e,
-       0x1078, 0x3b11, 0x2009, 0x0100, 0x2104, 0xa082, 0x0002, 0x0048,
-       0x10c1, 0x1078, 0x44a4, 0x0078, 0x10a4, 0x1079, 0x10c5, 0x0078,
-       0x10aa, 0x1078, 0x585e, 0x0078, 0x10b9, 0x10cf, 0x10d0, 0x1143,
+       0x00c0, 0x10bd, 0x1078, 0x2d9c, 0x1078, 0x2451, 0x1078, 0x3dbe,
+       0x1078, 0x3c31, 0x2009, 0x0100, 0x2104, 0xa082, 0x0002, 0x0048,
+       0x10c1, 0x1078, 0x45c7, 0x0078, 0x10a4, 0x1079, 0x10c5, 0x0078,
+       0x10aa, 0x1078, 0x597e, 0x0078, 0x10b9, 0x10cf, 0x10d0, 0x1143,
        0x10cd, 0x11be, 0x123e, 0x123f, 0x1240, 0x1078, 0x12cd, 0x007c,
-       0x127e, 0x0f7e, 0x2091, 0x8000, 0x1078, 0x2ea3, 0x2079, 0x0100,
-       0x7844, 0xa005, 0x00c0, 0x1134, 0x2011, 0x353a, 0x1078, 0x4566,
+       0x127e, 0x0f7e, 0x2091, 0x8000, 0x1078, 0x2ec1, 0x2079, 0x0100,
+       0x7844, 0xa005, 0x00c0, 0x1134, 0x2011, 0x3558, 0x1078, 0x4689,
        0x780f, 0x00ff, 0x7840, 0xa084, 0xfffb, 0x7842, 0x2011, 0x8010,
-       0x73b8, 0x1078, 0x2d3b, 0x1078, 0x56a9, 0x2011, 0x0004, 0x1078,
-       0x694d, 0x1078, 0x39c0, 0x70c7, 0x0000, 0x70c3, 0x0000, 0x1078,
-       0x1137, 0x72bc, 0x2079, 0x7651, 0x7804, 0xd0ac, 0x0040, 0x1101,
+       0x73b8, 0x1078, 0x2d59, 0x1078, 0x57c9, 0x2011, 0x0004, 0x1078,
+       0x6a6d, 0x1078, 0x3ae0, 0x70c7, 0x0000, 0x70c3, 0x0000, 0x1078,
+       0x1137, 0x72bc, 0x2079, 0x7751, 0x7804, 0xd0ac, 0x0040, 0x1101,
        0xc295, 0x72be, 0xa296, 0x0004, 0x0040, 0x1122, 0x2011, 0x0001,
-       0x1078, 0x694d, 0x708b, 0x0000, 0x708f, 0xffff, 0x7003, 0x0002,
-       0x0f7f, 0x1078, 0x214a, 0x2011, 0x0005, 0x1078, 0x57b8, 0x1078,
-       0x4c72, 0x0c7e, 0x2061, 0x0100, 0x60e3, 0x0008, 0x0c7f, 0x127f,
+       0x1078, 0x6a6d, 0x708b, 0x0000, 0x708f, 0xffff, 0x7003, 0x0002,
+       0x0f7f, 0x1078, 0x214a, 0x2011, 0x0005, 0x1078, 0x58d8, 0x1078,
+       0x4d96, 0x0c7e, 0x2061, 0x0100, 0x60e3, 0x0008, 0x0c7f, 0x127f,
        0x0078, 0x1136, 0x708b, 0x0000, 0x708f, 0xffff, 0x7003, 0x0002,
-       0x2011, 0x0005, 0x1078, 0x57b8, 0x1078, 0x4c72, 0x0c7e, 0x2061,
+       0x2011, 0x0005, 0x1078, 0x58d8, 0x1078, 0x4d96, 0x0c7e, 0x2061,
        0x0100, 0x60e3, 0x0008, 0x0c7f, 0x0f7f, 0x127f, 0x007c, 0x0c7e,
-       0x20a9, 0x0082, 0x2009, 0x007e, 0x1078, 0x3805, 0x8108, 0x00f0,
+       0x20a9, 0x0082, 0x2009, 0x007e, 0x1078, 0x3834, 0x8108, 0x00f0,
        0x113c, 0x0c7f, 0x007c, 0x127e, 0x2091, 0x8000, 0x708c, 0xa086,
-       0xffff, 0x0040, 0x1151, 0x1078, 0x214a, 0x1078, 0x4c72, 0x0078,
+       0xffff, 0x0040, 0x1151, 0x1078, 0x214a, 0x1078, 0x4d96, 0x0078,
        0x11bc, 0x70bc, 0xd09c, 0x0040, 0x1179, 0xd084, 0x0040, 0x1179,
        0x0f7e, 0x2079, 0x0100, 0x790c, 0xc1b5, 0x790e, 0x0f7f, 0xd08c,
        0x0040, 0x1179, 0x70c0, 0xa086, 0xffff, 0x0040, 0x1175, 0x1078,
-       0x223f, 0x1078, 0x4c72, 0x2011, 0x0001, 0x2019, 0x0000, 0x1078,
-       0x2277, 0x1078, 0x4c72, 0x0078, 0x11bc, 0x70c4, 0xa005, 0x00c0,
-       0x11bc, 0x7088, 0xa005, 0x00c0, 0x11bc, 0x2001, 0x7652, 0x2004,
+       0x223f, 0x1078, 0x4d96, 0x2011, 0x0001, 0x2019, 0x0000, 0x1078,
+       0x2277, 0x1078, 0x4d96, 0x0078, 0x11bc, 0x70c4, 0xa005, 0x00c0,
+       0x11bc, 0x7088, 0xa005, 0x00c0, 0x11bc, 0x2001, 0x7752, 0x2004,
        0xd0ac, 0x0040, 0x119f, 0x157e, 0x0c7e, 0x20a9, 0x007f, 0x2009,
-       0x0000, 0x017e, 0x1078, 0x381d, 0x00c0, 0x1192, 0x6000, 0xd0ec,
+       0x0000, 0x017e, 0x1078, 0x384c, 0x00c0, 0x1192, 0x6000, 0xd0ec,
        0x00c0, 0x119a, 0x017f, 0x8108, 0x00f0, 0x1189, 0x0c7f, 0x157f,
        0x0078, 0x119f, 0x017f, 0x0c7f, 0x157f, 0x0078, 0x11bc, 0x7003,
        0x0003, 0x708f, 0xffff, 0x2001, 0x0000, 0x1078, 0x2025, 0x1078,
-       0x2db9, 0x2001, 0x7837, 0x2004, 0xa086, 0x0005, 0x00c0, 0x11b4,
-       0x2011, 0x0000, 0x1078, 0x57b8, 0x2011, 0x0000, 0x1078, 0x57c2,
-       0x1078, 0x4c72, 0x1078, 0x4d32, 0x127f, 0x007c, 0x017e, 0x0f7e,
+       0x2dd7, 0x2001, 0x7937, 0x2004, 0xa086, 0x0005, 0x00c0, 0x11b4,
+       0x2011, 0x0000, 0x1078, 0x58d8, 0x2011, 0x0000, 0x1078, 0x58e2,
+       0x1078, 0x4d96, 0x1078, 0x4e56, 0x127f, 0x007c, 0x017e, 0x0f7e,
        0x127e, 0x2091, 0x8000, 0x2079, 0x0100, 0x7940, 0xa18c, 0x0010,
        0x7942, 0x7924, 0xd1b4, 0x0040, 0x11cf, 0x7827, 0x0040, 0xd19c,
        0x0040, 0x11d4, 0x7827, 0x0008, 0x007e, 0x037e, 0x157e, 0x7900,
        0xa18a, 0x0003, 0x0050, 0x11fa, 0x7954, 0xd1ac, 0x00c0, 0x11fa,
-       0x2009, 0x00f8, 0x1078, 0x35dc, 0x7843, 0x0090, 0x7843, 0x0010,
+       0x2009, 0x00f8, 0x1078, 0x35fa, 0x7843, 0x0090, 0x7843, 0x0010,
        0x20a9, 0x09c4, 0x7820, 0xd09c, 0x00c0, 0x11f2, 0x7824, 0xd0ac,
        0x00c0, 0x122e, 0x00f0, 0x11ea, 0x2001, 0x0001, 0x1078, 0x2025,
        0x0078, 0x1237, 0x7853, 0x0000, 0x782f, 0x0020, 0x20a9, 0x0008,
        0x00e0, 0x1200, 0x2091, 0x6000, 0x00f0, 0x1200, 0x7853, 0x0400,
-       0x782f, 0x0000, 0x2009, 0x00f8, 0x1078, 0x35dc, 0x20a9, 0x000e,
+       0x782f, 0x0000, 0x2009, 0x00f8, 0x1078, 0x35fa, 0x20a9, 0x000e,
        0x0005, 0x00f0, 0x1210, 0x7853, 0x1400, 0x7843, 0x0090, 0x7843,
        0x0010, 0x2019, 0x61a8, 0x7854, 0x0005, 0x0005, 0xd08c, 0x0040,
        0x1225, 0x7824, 0xd0ac, 0x00c0, 0x122e, 0x8319, 0x00c0, 0x121b,
@@ -82,14 +82,14 @@ unsigned short risc_code2100[] = {
        0x037f, 0x007f, 0x127f, 0x0f7f, 0x017f, 0x007c, 0x007c, 0x007c,
        0x007c, 0x2a70, 0x2009, 0x0100, 0x2104, 0xa082, 0x0002, 0x0048,
        0x124d, 0x704f, 0xffff, 0x0078, 0x124f, 0x704f, 0x0000, 0x7053,
-       0xffff, 0x7067, 0x0000, 0x706b, 0x0000, 0x2061, 0x7820, 0x6003,
+       0xffff, 0x7067, 0x0000, 0x706b, 0x0000, 0x2061, 0x7920, 0x6003,
        0x0909, 0x6007, 0x0000, 0x600b, 0x8800, 0x600f, 0x0200, 0x6013,
        0x00ff, 0x6017, 0x0003, 0x601b, 0x0000, 0x601f, 0x07d0, 0x2061,
-       0x7828, 0x6003, 0x8000, 0x6007, 0x0000, 0x600b, 0x0000, 0x600f,
+       0x7928, 0x6003, 0x8000, 0x6007, 0x0000, 0x600b, 0x0000, 0x600f,
        0x0200, 0x6013, 0x00ff, 0x6017, 0x0000, 0x601b, 0x0001, 0x601f,
        0x0000, 0x007c, 0x1078, 0x12a0, 0x2011, 0x0000, 0x81ff, 0x0040,
        0x129f, 0xa186, 0x0001, 0x00c0, 0x128f, 0x705f, 0x8fff, 0x7057,
-       0x8501, 0x7063, 0x0100, 0x705b, 0x8500, 0x0078, 0x129d, 0xa186,
+       0x8601, 0x7063, 0x0100, 0x705b, 0x8600, 0x0078, 0x129d, 0xa186,
        0x0002, 0x00c0, 0x1297, 0x2011, 0x0000, 0x0078, 0x129d, 0xa186,
        0x0005, 0x00c0, 0x129d, 0x2011, 0x0001, 0x1078, 0x12c7, 0x007c,
        0x2009, 0x0000, 0x2011, 0x0000, 0x1078, 0x12c7, 0x2019, 0xaaaa,
@@ -101,32 +101,32 @@ unsigned short risc_code2100[] = {
        0x12cf, 0x007e, 0x017e, 0x2079, 0x0000, 0x7818, 0xa084, 0x0000,
        0x00c0, 0x12d5, 0x017f, 0x792e, 0x007f, 0x782a, 0x007f, 0x7826,
        0x3900, 0x783a, 0x7823, 0x8002, 0x781b, 0x0001, 0x2091, 0x5000,
-       0x2091, 0x4080, 0x2079, 0x7600, 0x7803, 0x0005, 0x0078, 0x12ee,
-       0x007c, 0x2071, 0x7600, 0x7158, 0x712e, 0x2021, 0x0001, 0xa190,
+       0x2091, 0x4080, 0x2079, 0x7700, 0x7803, 0x0005, 0x0078, 0x12ee,
+       0x007c, 0x2071, 0x7700, 0x7158, 0x712e, 0x2021, 0x0001, 0xa190,
        0x002d, 0xa298, 0x002d, 0x0048, 0x1307, 0x705c, 0xa302, 0x00c8,
        0x1307, 0x220a, 0x2208, 0x2310, 0x8420, 0x0078, 0x12f9, 0x200b,
        0x0000, 0x749e, 0x74a2, 0x007c, 0x0e7e, 0x127e, 0x2091, 0x8000,
-       0x2071, 0x7600, 0x70a0, 0xa0ea, 0x0010, 0x00c8, 0x131a, 0xa06e,
+       0x2071, 0x7700, 0x70a0, 0xa0ea, 0x0010, 0x00c8, 0x131a, 0xa06e,
        0x0078, 0x1324, 0x8001, 0x70a2, 0x702c, 0x2068, 0x2d04, 0x702e,
        0x206b, 0x0000, 0x6807, 0x0000, 0x127f, 0x0e7f, 0x007c, 0x0e7e,
-       0x2071, 0x7600, 0x127e, 0x2091, 0x8000, 0x70a0, 0x8001, 0x00c8,
+       0x2071, 0x7700, 0x127e, 0x2091, 0x8000, 0x70a0, 0x8001, 0x00c8,
        0x1334, 0xa06e, 0x0078, 0x133d, 0x70a2, 0x702c, 0x2068, 0x2d04,
        0x702e, 0x206b, 0x0000, 0x6807, 0x0000, 0x127f, 0x0e7f, 0x007c,
-       0x0e7e, 0x127e, 0x2091, 0x8000, 0x2071, 0x7600, 0x702c, 0x206a,
+       0x0e7e, 0x127e, 0x2091, 0x8000, 0x2071, 0x7700, 0x702c, 0x206a,
        0x2d00, 0x702e, 0x70a0, 0x8000, 0x70a2, 0x127f, 0x0e7f, 0x007c,
        0x8dff, 0x0040, 0x135c, 0x6804, 0x6807, 0x0000, 0x007e, 0x1078,
-       0x1340, 0x0d7f, 0x0078, 0x1350, 0x007c, 0x0e7e, 0x2071, 0x7600,
+       0x1340, 0x0d7f, 0x0078, 0x1350, 0x007c, 0x0e7e, 0x2071, 0x7700,
        0x70a0, 0xa08a, 0x0010, 0xa00d, 0x0e7f, 0x007c, 0x0e7e, 0x2071,
-       0x7859, 0x7007, 0x0000, 0x701b, 0x0000, 0x701f, 0x0000, 0x2071,
+       0x7959, 0x7007, 0x0000, 0x701b, 0x0000, 0x701f, 0x0000, 0x2071,
        0x0000, 0x7010, 0xa085, 0x8004, 0x7012, 0x0e7f, 0x007c, 0x0e7e,
-       0x2270, 0x700b, 0x0000, 0x2071, 0x7859, 0x7018, 0xa088, 0x7862,
+       0x2270, 0x700b, 0x0000, 0x2071, 0x7959, 0x7018, 0xa088, 0x7962,
        0x220a, 0x8000, 0xa084, 0x0007, 0x701a, 0x7004, 0xa005, 0x00c0,
        0x138f, 0x0f7e, 0x2079, 0x0010, 0x1078, 0x13a0, 0x0f7f, 0x0e7f,
-       0x007c, 0x0e7e, 0x2071, 0x7859, 0x7004, 0xa005, 0x00c0, 0x139e,
+       0x007c, 0x0e7e, 0x2071, 0x7959, 0x7004, 0xa005, 0x00c0, 0x139e,
        0x0f7e, 0x2079, 0x0010, 0x1078, 0x13a0, 0x0f7f, 0x0e7f, 0x007c,
        0x7000, 0x0079, 0x13a3, 0x13a7, 0x1411, 0x142e, 0x142e, 0x7018,
        0x711c, 0xa106, 0x00c0, 0x13af, 0x7007, 0x0000, 0x007c, 0x0d7e,
-       0xa180, 0x7862, 0x2004, 0x700a, 0x2068, 0x8108, 0xa18c, 0x0007,
+       0xa180, 0x7962, 0x2004, 0x700a, 0x2068, 0x8108, 0xa18c, 0x0007,
        0x711e, 0x7803, 0x0026, 0x6824, 0x7832, 0x6828, 0x7836, 0x682c,
        0x783a, 0x6830, 0x783e, 0x6810, 0x700e, 0x680c, 0x7016, 0x6804,
        0x0d7f, 0xd084, 0x0040, 0x13d1, 0x7007, 0x0001, 0x1078, 0x13d6,
@@ -138,16 +138,16 @@ unsigned short risc_code2100[] = {
        0x2011, 0x0040, 0xa182, 0x0040, 0x00c8, 0x1400, 0x2110, 0xa006,
        0x700e, 0x22a8, 0x53a6, 0x8203, 0x7822, 0x7803, 0x0020, 0x7803,
        0x0001, 0x3300, 0x7016, 0x157f, 0x147f, 0x137f, 0x027f, 0x017f,
-       0x007c, 0x137e, 0x147e, 0x157e, 0x2099, 0x76e5, 0x20a1, 0x0018,
+       0x007c, 0x137e, 0x147e, 0x157e, 0x2099, 0x77e5, 0x20a1, 0x0018,
        0x20a9, 0x0008, 0x53a3, 0x7803, 0x0020, 0x127e, 0x2091, 0x8000,
        0x7803, 0x0041, 0x7007, 0x0003, 0x7000, 0xc084, 0x7002, 0x700b,
-       0x76e0, 0x127f, 0x157f, 0x147f, 0x137f, 0x007c, 0x137e, 0x147e,
-       0x157e, 0x2001, 0x7714, 0x209c, 0x20a1, 0x0014, 0x7803, 0x0026,
-       0x2001, 0x7715, 0x20ac, 0x53a6, 0x2099, 0x7716, 0x20a1, 0x0018,
+       0x77e0, 0x127f, 0x157f, 0x147f, 0x137f, 0x007c, 0x137e, 0x147e,
+       0x157e, 0x2001, 0x7814, 0x209c, 0x20a1, 0x0014, 0x7803, 0x0026,
+       0x2001, 0x7815, 0x20ac, 0x53a6, 0x2099, 0x7816, 0x20a1, 0x0018,
        0x20a9, 0x0008, 0x53a3, 0x7803, 0x0020, 0x127e, 0x2091, 0x8000,
        0x7803, 0x0001, 0x7007, 0x0004, 0x7000, 0xc08c, 0x7002, 0x700b,
-       0x7711, 0x127f, 0x157f, 0x147f, 0x137f, 0x007c, 0x017e, 0x0e7e,
-       0x2071, 0x7859, 0x0f7e, 0x2079, 0x0010, 0x7904, 0x7803, 0x0002,
+       0x7811, 0x127f, 0x157f, 0x147f, 0x137f, 0x007c, 0x017e, 0x0e7e,
+       0x2071, 0x7959, 0x0f7e, 0x2079, 0x0010, 0x7904, 0x7803, 0x0002,
        0xd1fc, 0x0040, 0x1471, 0xa18c, 0x0700, 0x0040, 0x146e, 0x7008,
        0xa080, 0x0002, 0x2003, 0x0200, 0x0078, 0x1471, 0x7004, 0x1079,
        0x1475, 0x0f7f, 0x0e7f, 0x017f, 0x007c, 0x13a0, 0x147d, 0x149f,
@@ -159,14 +159,14 @@ unsigned short risc_code2100[] = {
        0xa005, 0x0040, 0x14a6, 0x1078, 0x13ec, 0x007c, 0x0d7e, 0x7008,
        0x2068, 0x7830, 0x6826, 0x7834, 0x682a, 0x7838, 0x682e, 0x783c,
        0x6832, 0x680b, 0x0100, 0x0d7f, 0x7007, 0x0000, 0x1078, 0x13a0,
-       0x007c, 0x137e, 0x147e, 0x157e, 0x2001, 0x76e3, 0x2004, 0xa080,
+       0x007c, 0x137e, 0x147e, 0x157e, 0x2001, 0x77e3, 0x2004, 0xa080,
        0x000d, 0x20a0, 0x2099, 0x0014, 0x7803, 0x0040, 0x20a9, 0x0020,
-       0x53a5, 0x2001, 0x76e5, 0x2004, 0xd0bc, 0x0040, 0x14d8, 0x2001,
-       0x76ee, 0x2004, 0xa080, 0x000d, 0x20a0, 0x20a9, 0x0020, 0x53a5,
-       0x157f, 0x147f, 0x137f, 0x7007, 0x0000, 0x1078, 0x3d47, 0x1078,
-       0x13a0, 0x007c, 0x2001, 0x7713, 0x2003, 0x0100, 0x7007, 0x0000,
+       0x53a5, 0x2001, 0x77e5, 0x2004, 0xd0bc, 0x0040, 0x14d8, 0x2001,
+       0x77ee, 0x2004, 0xa080, 0x000d, 0x20a0, 0x20a9, 0x0020, 0x53a5,
+       0x157f, 0x147f, 0x137f, 0x7007, 0x0000, 0x1078, 0x3e67, 0x1078,
+       0x13a0, 0x007c, 0x2001, 0x7813, 0x2003, 0x0100, 0x7007, 0x0000,
        0x1078, 0x13a0, 0x007c, 0x127e, 0x2091, 0x2100, 0x2079, 0x0030,
-       0x2071, 0x786a, 0x7003, 0x0000, 0x700f, 0x7870, 0x7013, 0x7870,
+       0x2071, 0x796a, 0x7003, 0x0000, 0x700f, 0x7970, 0x7013, 0x7970,
        0x780f, 0x0070, 0x127f, 0x007c, 0x6934, 0xa184, 0x0007, 0x0079,
        0x1501, 0x1509, 0x154f, 0x1509, 0x1509, 0x1509, 0x1534, 0x1518,
        0x150d, 0xa085, 0x0001, 0x0078, 0x1569, 0x684c, 0xd0bc, 0x0040,
@@ -188,7 +188,7 @@ unsigned short risc_code2100[] = {
        0x2091, 0x2100, 0x027f, 0x037f, 0x047f, 0x7000, 0xa005, 0x00c0,
        0x1598, 0x7206, 0x2001, 0x15ac, 0x007e, 0x2260, 0x0078, 0x16c4,
        0x710c, 0x220a, 0x8108, 0x230a, 0x8108, 0x240a, 0x8108, 0xa182,
-       0x788b, 0x0048, 0x15a5, 0x2009, 0x7870, 0x710e, 0x7000, 0xa005,
+       0x798b, 0x0048, 0x15a5, 0x2009, 0x7970, 0x710e, 0x7000, 0xa005,
        0x00c0, 0x15ac, 0x1078, 0x16ad, 0x127f, 0x007c, 0x127e, 0x027e,
        0x037e, 0x0c7e, 0x007e, 0x2091, 0x2100, 0x007f, 0x047f, 0x037f,
        0x027f, 0x0d7e, 0x0c7e, 0x2460, 0x6110, 0x2168, 0x6a62, 0x6b5e,
@@ -199,7 +199,7 @@ unsigned short risc_code2100[] = {
        0x2460, 0x0078, 0x15c3, 0x2001, 0x0207, 0x2004, 0xd09c, 0x00c0,
        0x15d6, 0x7804, 0xa084, 0x6000, 0x0040, 0x15f4, 0xa086, 0x6000,
        0x0040, 0x15f4, 0x0078, 0x15d6, 0x7803, 0x0004, 0x7003, 0x0000,
-       0x7004, 0x2060, 0x2009, 0x0048, 0x1078, 0x5c21, 0x0078, 0x166a,
+       0x7004, 0x2060, 0x2009, 0x0048, 0x1078, 0x5d41, 0x0078, 0x166a,
        0x6808, 0xa005, 0x0040, 0x1666, 0x7000, 0xa005, 0x00c0, 0x160a,
        0x0078, 0x1666, 0x700c, 0x7110, 0xa106, 0x00c0, 0x1613, 0x7004,
        0xa406, 0x00c0, 0x1666, 0x2001, 0x0005, 0x2004, 0xd08c, 0x0040,
@@ -213,18 +213,18 @@ unsigned short risc_code2100[] = {
        0x7308, 0x720c, 0x0078, 0x1656, 0x7310, 0x7214, 0x0e7f, 0x0c7f,
        0x7820, 0xa318, 0x7824, 0xa211, 0x6810, 0xa300, 0x6812, 0x6814,
        0xa201, 0x6816, 0x7803, 0x0004, 0x7003, 0x0000, 0x2009, 0x0048,
-       0x1078, 0x5c21, 0x0c7f, 0x0d7f, 0x127f, 0x007c, 0x0f7e, 0x0e7e,
-       0x2071, 0x786a, 0x7000, 0xa086, 0x0000, 0x0040, 0x16aa, 0x7004,
+       0x1078, 0x5d41, 0x0c7f, 0x0d7f, 0x127f, 0x007c, 0x0f7e, 0x0e7e,
+       0x2071, 0x796a, 0x7000, 0xa086, 0x0000, 0x0040, 0x16aa, 0x7004,
        0xac06, 0x00c0, 0x169b, 0x2079, 0x0030, 0x7804, 0xd0fc, 0x00c0,
        0x1697, 0x2001, 0x0207, 0x2004, 0xd09c, 0x00c0, 0x167d, 0x7803,
        0x0004, 0x7804, 0xd0ac, 0x00c0, 0x1689, 0x7803, 0x0002, 0x7803,
        0x0009, 0x7003, 0x0003, 0x7007, 0x0000, 0x0078, 0x169b, 0x1078,
-       0x1785, 0x0078, 0x1672, 0x157e, 0x20a9, 0x0009, 0x2009, 0x7870,
+       0x1785, 0x0078, 0x1672, 0x157e, 0x20a9, 0x0009, 0x2009, 0x7970,
        0x2104, 0xac06, 0x00c0, 0x16a5, 0x200a, 0xa188, 0x0003, 0x00f0,
        0x16a0, 0x157f, 0x0e7f, 0x0f7f, 0x007c, 0x700c, 0x7110, 0xa106,
        0x00c0, 0x16b5, 0x7003, 0x0000, 0x007c, 0x2104, 0x7006, 0x2060,
-       0x8108, 0x211c, 0x8108, 0x2124, 0x8108, 0xa182, 0x788b, 0x0048,
-       0x16c3, 0x2009, 0x7870, 0x7112, 0x8cff, 0x00c0, 0x16cb, 0x1078,
+       0x8108, 0x211c, 0x8108, 0x2124, 0x8108, 0xa182, 0x798b, 0x0048,
+       0x16c3, 0x2009, 0x7970, 0x7112, 0x8cff, 0x00c0, 0x16cb, 0x1078,
        0x1950, 0x0078, 0x16f2, 0x6010, 0x2068, 0x2d58, 0x6828, 0xa406,
        0x00c0, 0x16d6, 0x682c, 0xa306, 0x0040, 0x16da, 0x1078, 0x1c9e,
        0x00c0, 0x16c7, 0x684c, 0xd0f4, 0x00c0, 0x16c7, 0x6824, 0x2050,
@@ -263,21 +263,21 @@ unsigned short risc_code2100[] = {
        0x6826, 0x2c00, 0x681a, 0x2800, 0x6832, 0x7003, 0x0000, 0x6850,
        0xc0fd, 0x6852, 0x6808, 0x8001, 0x680a, 0x00c0, 0x17f9, 0x684c,
        0xd0e4, 0x0040, 0x17f9, 0x7004, 0x2060, 0x2009, 0x0048, 0x1078,
-       0x5c21, 0x7808, 0xd0ec, 0x00c0, 0x1803, 0x7803, 0x0009, 0x7003,
+       0x5d41, 0x7808, 0xd0ec, 0x00c0, 0x1803, 0x7803, 0x0009, 0x7003,
        0x0004, 0x0078, 0x1910, 0x1078, 0x16ad, 0x0078, 0x1910, 0x057e,
-       0x7d0c, 0xd5bc, 0x00c0, 0x180e, 0x1078, 0x7587, 0x057f, 0x1078,
+       0x7d0c, 0xd5bc, 0x00c0, 0x180e, 0x1078, 0x7692, 0x057f, 0x1078,
        0x1914, 0x682b, 0xffff, 0x682f, 0xffff, 0x697c, 0x6912, 0x6980,
        0x6916, 0x7803, 0x0009, 0x7003, 0x0003, 0x0078, 0x1910, 0x684c,
        0xc0f5, 0x684e, 0x7814, 0xa005, 0x00c0, 0x1837, 0x7003, 0x0000,
        0x6808, 0x8001, 0x680a, 0x00c0, 0x1833, 0x7004, 0x2060, 0x2009,
-       0x0048, 0x1078, 0x5c21, 0x1078, 0x16ad, 0x0078, 0x1910, 0x7814,
+       0x0048, 0x1078, 0x5d41, 0x1078, 0x16ad, 0x0078, 0x1910, 0x7814,
        0x6910, 0xa102, 0x6812, 0x6914, 0xa183, 0x0000, 0x6816, 0x7814,
        0x7908, 0xa18c, 0x0fff, 0xa188, 0x0007, 0x8114, 0x8214, 0x8214,
        0xa10a, 0x8104, 0x8004, 0x8004, 0xa20a, 0x810b, 0x810b, 0x810b,
        0x1078, 0x197b, 0x7803, 0x0004, 0x780f, 0xffff, 0x7803, 0x0001,
        0x7804, 0xd0fc, 0x0040, 0x1858, 0x7803, 0x0002, 0x7803, 0x0004,
        0x780f, 0x0070, 0x7004, 0x7007, 0x0000, 0x2060, 0x2009, 0x0048,
-       0x1078, 0x5c21, 0x1078, 0x199e, 0x0040, 0x1833, 0x7908, 0xd1ec,
+       0x1078, 0x5d41, 0x1078, 0x199e, 0x0040, 0x1833, 0x7908, 0xd1ec,
        0x00c0, 0x1876, 0x2009, 0x0009, 0x0078, 0x1878, 0x2009, 0x0019,
        0x7902, 0x7803, 0x0009, 0x7003, 0x0003, 0x0078, 0x1910, 0x8001,
        0x7002, 0xd194, 0x0040, 0x1891, 0x7804, 0xd0fc, 0x00c0, 0x178d,
@@ -290,16 +290,16 @@ unsigned short risc_code2100[] = {
        0xa213, 0x7810, 0xa100, 0x7812, 0x690c, 0x7814, 0xa101, 0x7816,
        0x0078, 0x18ce, 0x6810, 0x2008, 0xa31a, 0x6814, 0xa213, 0x7810,
        0xa100, 0x7812, 0x6914, 0x7814, 0xa101, 0x7816, 0x0f7f, 0x0d7f,
-       0x0078, 0x17c7, 0x057e, 0x7d0c, 0x1078, 0x7587, 0x057f, 0x1078,
+       0x0078, 0x17c7, 0x057e, 0x7d0c, 0x1078, 0x7692, 0x057f, 0x1078,
        0x1914, 0x682b, 0xffff, 0x682f, 0xffff, 0x697c, 0x6912, 0x6980,
        0x6916, 0x7803, 0x0009, 0x7003, 0x0003, 0x0078, 0x1910, 0x7803,
        0x0004, 0x7003, 0x0000, 0x7004, 0xa00d, 0x0040, 0x18fa, 0x6808,
        0x8001, 0x680a, 0x00c0, 0x18fa, 0x7004, 0x2060, 0x2009, 0x0048,
-       0x1078, 0x5c21, 0x1078, 0x16ad, 0x0078, 0x1910, 0x7803, 0x0004,
+       0x1078, 0x5d41, 0x1078, 0x16ad, 0x0078, 0x1910, 0x7803, 0x0004,
        0x7003, 0x0000, 0x7004, 0x2060, 0x6010, 0xa005, 0x0040, 0x18fa,
        0x2068, 0x6808, 0x8000, 0x680a, 0x6c28, 0x6b2c, 0x1078, 0x16c4,
        0x017f, 0x007f, 0x127f, 0x007c, 0x1078, 0x1925, 0x20e1, 0x9028,
-       0x700f, 0x7870, 0x7013, 0x7870, 0x2001, 0x015d, 0x200c, 0x810a,
+       0x700f, 0x7970, 0x7013, 0x7970, 0x2001, 0x015d, 0x200c, 0x810a,
        0x2102, 0x2001, 0x0138, 0x2202, 0x007c, 0x2001, 0x0138, 0x2014,
        0x2003, 0x0000, 0x2021, 0xb015, 0x2001, 0x0141, 0x201c, 0xd3dc,
        0x00c0, 0x1942, 0x2001, 0x0109, 0x201c, 0xa39c, 0x0048, 0x00c0,
@@ -320,7 +320,7 @@ unsigned short risc_code2100[] = {
        0x0001, 0x0078, 0x19bd, 0x2001, 0x020a, 0x81ff, 0x0040, 0x19b6,
        0x20e1, 0x6000, 0x200c, 0x200c, 0x200c, 0x200c, 0x20e1, 0x7000,
        0x200c, 0x200c, 0x7003, 0x0000, 0xa006, 0x007f, 0x20e0, 0x007c,
-       0x0e7e, 0x2071, 0x788b, 0x7003, 0x0000, 0x0e7f, 0x007c, 0x0d7e,
+       0x0e7e, 0x2071, 0x798b, 0x7003, 0x0000, 0x0e7f, 0x007c, 0x0d7e,
        0xa280, 0x0004, 0x206c, 0x694c, 0xd1dc, 0x00c0, 0x1a42, 0x6934,
        0xa184, 0x0007, 0x0079, 0x19d4, 0x19dc, 0x1a2d, 0x19dc, 0x19dc,
        0x19dc, 0x1a12, 0x19ef, 0x19de, 0x1078, 0x12cd, 0x684c, 0xd0b4,
@@ -337,7 +337,7 @@ unsigned short risc_code2100[] = {
        0x1781, 0x6958, 0xa006, 0x682e, 0x682a, 0x2d00, 0x681a, 0x6834,
        0xa084, 0x000f, 0xa080, 0x1c7e, 0x2004, 0x6832, 0x6926, 0x684c,
        0xc0dd, 0x684e, 0x0d7f, 0x007c, 0x0f7e, 0x2079, 0x0020, 0x7804,
-       0xd0fc, 0x10c0, 0x1b4a, 0x0e7e, 0x0d7e, 0x2071, 0x788b, 0x7000,
+       0xd0fc, 0x10c0, 0x1b4a, 0x0e7e, 0x0d7e, 0x2071, 0x798b, 0x7000,
        0xa005, 0x00c0, 0x1ac0, 0x0c7e, 0x7206, 0xa280, 0x0004, 0x205c,
        0x7004, 0x2068, 0x7803, 0x0004, 0x6818, 0x0d7e, 0x2068, 0x686c,
        0x7812, 0x6890, 0x0f7e, 0x20e1, 0x9040, 0x2079, 0x0200, 0x781a,
@@ -370,7 +370,7 @@ unsigned short risc_code2100[] = {
        0xa201, 0x7012, 0x1078, 0x1c3a, 0x0078, 0x1b3f, 0xa006, 0x027f,
        0x037f, 0x047f, 0x057f, 0x067f, 0x077f, 0x007c, 0x1078, 0x12cd,
        0x1078, 0x12cd, 0x127e, 0x2091, 0x2200, 0x007e, 0x017e, 0x0f7e,
-       0x0e7e, 0x0d7e, 0x0c7e, 0x2079, 0x0020, 0x2071, 0x788b, 0x2b68,
+       0x0e7e, 0x0d7e, 0x0c7e, 0x2079, 0x0020, 0x2071, 0x798b, 0x2b68,
        0x6818, 0x2060, 0x7904, 0x7803, 0x0002, 0xa184, 0x0700, 0x00c0,
        0x1b48, 0x7000, 0x0079, 0x1b64, 0x1c0b, 0x1b68, 0x1bd8, 0x1c09,
        0x8001, 0x7002, 0xd19c, 0x00c0, 0x1b7c, 0x8aff, 0x0040, 0x1b9b,
@@ -394,7 +394,7 @@ unsigned short risc_code2100[] = {
        0x00c0, 0x1c00, 0x6808, 0xa31a, 0x680c, 0xa213, 0x0078, 0x1c04,
        0x6810, 0xa31a, 0x6814, 0xa213, 0x0d7f, 0x0078, 0x1b8c, 0x0078,
        0x1b8c, 0x1078, 0x12cd, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x017f,
-       0x007f, 0x127f, 0x007c, 0x0f7e, 0x0e7e, 0x2071, 0x788b, 0x7000,
+       0x007f, 0x127f, 0x007c, 0x0f7e, 0x0e7e, 0x2071, 0x798b, 0x7000,
        0xa086, 0x0000, 0x0040, 0x1c37, 0x2079, 0x0020, 0x20e1, 0x9040,
        0x7804, 0xd0fc, 0x0040, 0x1c1e, 0x1078, 0x1b4a, 0x7000, 0xa086,
        0x0000, 0x00c0, 0x1c1e, 0x7803, 0x0004, 0x7804, 0xd0ac, 0x00c0,
@@ -439,21 +439,21 @@ unsigned short risc_code2100[] = {
        0x1078, 0x1456, 0x007c, 0x1078, 0x1b4a, 0x1078, 0x1456, 0x007c,
        0x1078, 0x1785, 0x1078, 0x1456, 0x007c, 0x1078, 0x1785, 0x1078,
        0x1b4a, 0x1078, 0x1456, 0x007c, 0x127e, 0x2091, 0x2300, 0x2079,
-       0x0200, 0x2071, 0x7b80, 0x2069, 0x7600, 0x2009, 0x0004, 0x7912,
+       0x0200, 0x2071, 0x7c80, 0x2069, 0x7700, 0x2009, 0x0004, 0x7912,
        0x7817, 0x0004, 0x1078, 0x2052, 0x781b, 0x0002, 0x20e1, 0x8700,
        0x127f, 0x007c, 0x127e, 0x2091, 0x2300, 0x781c, 0xa084, 0x0007,
        0x0079, 0x1d92, 0x1db6, 0x1d9a, 0x1d9e, 0x1da2, 0x1da8, 0x1dac,
-       0x1db0, 0x1db4, 0x1078, 0x4175, 0x0078, 0x1db6, 0x1078, 0x41a4,
-       0x0078, 0x1db6, 0x1078, 0x4175, 0x1078, 0x41a4, 0x0078, 0x1db6,
+       0x1db0, 0x1db4, 0x1078, 0x4298, 0x0078, 0x1db6, 0x1078, 0x42c7,
+       0x0078, 0x1db6, 0x1078, 0x4298, 0x1078, 0x42c7, 0x0078, 0x1db6,
        0x1078, 0x1db8, 0x0078, 0x1db6, 0x1078, 0x1db8, 0x0078, 0x1db6,
        0x1078, 0x1db8, 0x0078, 0x1db6, 0x1078, 0x1db8, 0x127f, 0x007c,
        0x007e, 0x017e, 0x027e, 0x7930, 0xa184, 0x0003, 0x0040, 0x1dc2,
        0x1078, 0x12cd, 0xa184, 0x0030, 0x0040, 0x1dd3, 0x6a00, 0xa286,
-       0x0003, 0x00c0, 0x1dcd, 0x1078, 0x12cd, 0x1078, 0x3573, 0x20e1,
+       0x0003, 0x00c0, 0x1dcd, 0x1078, 0x12cd, 0x1078, 0x3591, 0x20e1,
        0x9010, 0x0078, 0x1ddf, 0xa184, 0x00c0, 0x0040, 0x1dd9, 0x1078,
        0x12cd, 0xa184, 0x0300, 0x0040, 0x1ddf, 0x20e1, 0x9020, 0x7932,
        0x027f, 0x017f, 0x007f, 0x007c, 0x017e, 0x0e7e, 0x0f7e, 0x2071,
-       0x7600, 0x7128, 0x2001, 0x7823, 0x2102, 0x2001, 0x782b, 0x2102,
+       0x7700, 0x7128, 0x2001, 0x7923, 0x2102, 0x2001, 0x792b, 0x2102,
        0xa182, 0x0211, 0x00c8, 0x1df8, 0x2009, 0x0008, 0x0078, 0x1e22,
        0xa182, 0x0259, 0x00c8, 0x1e00, 0x2009, 0x0007, 0x0078, 0x1e22,
        0xa182, 0x02c1, 0x00c8, 0x1e08, 0x2009, 0x0006, 0x0078, 0x1e22,
@@ -463,72 +463,72 @@ unsigned short risc_code2100[] = {
        0x2009, 0x0002, 0x2079, 0x0200, 0x7912, 0xa182, 0x0005, 0x00c8,
        0x1e2c, 0x7916, 0x0078, 0x1e2e, 0x7817, 0x0004, 0x1078, 0x2052,
        0x0f7f, 0x0e7f, 0x017f, 0x007c, 0x127e, 0x2091, 0x2200, 0x2061,
-       0x0100, 0x2071, 0x7600, 0x6024, 0x6026, 0x6033, 0x00ef, 0x60e7,
+       0x0100, 0x2071, 0x7700, 0x6024, 0x6026, 0x6033, 0x00ef, 0x60e7,
        0x0000, 0x60eb, 0x00ef, 0x60e3, 0x0008, 0x604b, 0xf7f7, 0x6043,
        0x0000, 0x602f, 0x0080, 0x602f, 0x0000, 0x6007, 0x0caf, 0x600f,
-       0x00ff, 0x602b, 0x002f, 0x127f, 0x007c, 0x2001, 0x762d, 0x2003,
-       0x0000, 0x2001, 0x762c, 0x2003, 0x0001, 0x007c, 0x127e, 0x2091,
+       0x00ff, 0x602b, 0x002f, 0x127f, 0x007c, 0x2001, 0x772d, 0x2003,
+       0x0000, 0x2001, 0x772c, 0x2003, 0x0001, 0x007c, 0x127e, 0x2091,
        0x2200, 0x007e, 0x017e, 0x027e, 0x6124, 0xa184, 0x002c, 0x00c0,
        0x1e6d, 0xa184, 0x0007, 0x0079, 0x1e73, 0xa195, 0x0004, 0xa284,
        0x0007, 0x0079, 0x1e73, 0x1e9f, 0x1e7b, 0x1e7f, 0x1e83, 0x1e89,
-       0x1e8d, 0x1e93, 0x1e99, 0x1078, 0x46de, 0x0078, 0x1e9f, 0x1078,
-       0x47cd, 0x0078, 0x1e9f, 0x1078, 0x47cd, 0x1078, 0x46de, 0x0078,
-       0x1e9f, 0x1078, 0x1ea4, 0x0078, 0x1e9f, 0x1078, 0x46de, 0x1078,
-       0x1ea4, 0x0078, 0x1e9f, 0x1078, 0x47cd, 0x1078, 0x1ea4, 0x0078,
-       0x1e9f, 0x1078, 0x47cd, 0x1078, 0x46de, 0x1078, 0x1ea4, 0x027f,
+       0x1e8d, 0x1e93, 0x1e99, 0x1078, 0x4802, 0x0078, 0x1e9f, 0x1078,
+       0x48f1, 0x0078, 0x1e9f, 0x1078, 0x48f1, 0x1078, 0x4802, 0x0078,
+       0x1e9f, 0x1078, 0x1ea4, 0x0078, 0x1e9f, 0x1078, 0x4802, 0x1078,
+       0x1ea4, 0x0078, 0x1e9f, 0x1078, 0x48f1, 0x1078, 0x1ea4, 0x0078,
+       0x1e9f, 0x1078, 0x48f1, 0x1078, 0x4802, 0x1078, 0x1ea4, 0x027f,
        0x017f, 0x007f, 0x127f, 0x007c, 0xd1ac, 0x0040, 0x1f58, 0x017e,
        0x047e, 0x0c7e, 0x644c, 0x74ba, 0xa48c, 0xff00, 0xa196, 0xff00,
        0x0040, 0x1ed3, 0x6030, 0xa084, 0x00ff, 0x810f, 0xa116, 0x0040,
-       0x1ed3, 0x7130, 0xd18c, 0x00c0, 0x1ed3, 0x2011, 0x7652, 0x2214,
+       0x1ed3, 0x7130, 0xd18c, 0x00c0, 0x1ed3, 0x2011, 0x7752, 0x2214,
        0xd2ec, 0x0040, 0x1ec7, 0xc18d, 0x7132, 0x0078, 0x1ed3, 0x6240,
        0xa294, 0x0010, 0x0040, 0x1f15, 0x6248, 0xa294, 0xff00, 0xa296,
        0xff00, 0x00c0, 0x1f15, 0x037e, 0x73b8, 0x2011, 0x8013, 0x1078,
-       0x2d3b, 0x037f, 0x7130, 0xc185, 0x7132, 0x2011, 0x7652, 0x220c,
+       0x2d59, 0x037f, 0x7130, 0xc185, 0x7132, 0x2011, 0x7752, 0x220c,
        0xd1a4, 0x0040, 0x1efd, 0x017e, 0x2009, 0x0001, 0x2011, 0x0100,
-       0x1078, 0x46ac, 0x2019, 0x000e, 0x1078, 0x74ce, 0xa484, 0x00ff,
+       0x1078, 0x47d0, 0x2019, 0x000e, 0x1078, 0x75d9, 0xa484, 0x00ff,
        0xa080, 0x2329, 0x200c, 0xa18c, 0xff00, 0x810f, 0x8127, 0xa006,
-       0x2009, 0x000e, 0x1078, 0x7536, 0x017f, 0xd1ac, 0x00c0, 0x1f06,
+       0x2009, 0x000e, 0x1078, 0x7641, 0x017f, 0xd1ac, 0x00c0, 0x1f06,
        0x2019, 0x0004, 0x1078, 0x2293, 0x0078, 0x1f15, 0x157e, 0x20a9,
-       0x007f, 0x2009, 0x0000, 0x1078, 0x381d, 0x00c0, 0x1f11, 0x1078,
-       0x3619, 0x8108, 0x00f0, 0x1f0b, 0x157f, 0x0c7f, 0x047f, 0x6043,
-       0x0000, 0x2009, 0x00f7, 0x1078, 0x35dc, 0x0f7e, 0x2079, 0x7849,
+       0x007f, 0x2009, 0x0000, 0x1078, 0x384c, 0x00c0, 0x1f11, 0x1078,
+       0x3637, 0x8108, 0x00f0, 0x1f0b, 0x157f, 0x0c7f, 0x047f, 0x6043,
+       0x0000, 0x2009, 0x00f7, 0x1078, 0x35fa, 0x0f7e, 0x2079, 0x7949,
        0x783c, 0xa086, 0x0000, 0x0040, 0x1f2d, 0x6027, 0x0004, 0x783f,
        0x0000, 0x2079, 0x0140, 0x7803, 0x0000, 0x0f7f, 0x2011, 0x0003,
-       0x1078, 0x57b8, 0x2011, 0x0002, 0x1078, 0x57c2, 0x1078, 0x56ce,
-       0x1078, 0x45e3, 0x037e, 0x2019, 0x0000, 0x1078, 0x5760, 0x037f,
-       0x60e3, 0x0000, 0x017f, 0x2001, 0x7600, 0x2014, 0xa296, 0x0004,
+       0x1078, 0x58d8, 0x2011, 0x0002, 0x1078, 0x58e2, 0x1078, 0x57ee,
+       0x1078, 0x4706, 0x037e, 0x2019, 0x0000, 0x1078, 0x5880, 0x037f,
+       0x60e3, 0x0000, 0x017f, 0x2001, 0x7700, 0x2014, 0xa296, 0x0004,
        0x00c0, 0x1f50, 0xd19c, 0x00c0, 0x1f50, 0x6228, 0xc29d, 0x622a,
-       0x2003, 0x0001, 0x2001, 0x7620, 0x2003, 0x0000, 0x6027, 0x0020,
-       0xd194, 0x0040, 0x1ff9, 0x0f7e, 0x2079, 0x7849, 0x783c, 0xa086,
+       0x2003, 0x0001, 0x2001, 0x7720, 0x2003, 0x0000, 0x6027, 0x0020,
+       0xd194, 0x0040, 0x1ff9, 0x0f7e, 0x2079, 0x7949, 0x783c, 0xa086,
        0x0001, 0x00c0, 0x1f7c, 0x017e, 0x6027, 0x0004, 0x783f, 0x0000,
-       0x2079, 0x0140, 0x7803, 0x1000, 0x7803, 0x0000, 0x2079, 0x7836,
-       0x7807, 0x0000, 0x7833, 0x0000, 0x1078, 0x4c72, 0x1078, 0x4d32,
+       0x2079, 0x0140, 0x7803, 0x1000, 0x7803, 0x0000, 0x2079, 0x7936,
+       0x7807, 0x0000, 0x7833, 0x0000, 0x1078, 0x4d96, 0x1078, 0x4e56,
        0x017f, 0x0f7f, 0x0078, 0x1ff9, 0x0f7f, 0x017e, 0x6220, 0xd2b4,
-       0x0040, 0x1fb1, 0x1078, 0x45e3, 0x1078, 0x557a, 0x6027, 0x0004,
+       0x0040, 0x1fb1, 0x1078, 0x4706, 0x1078, 0x569c, 0x6027, 0x0004,
        0x0d7e, 0x2069, 0x0140, 0x6804, 0xa084, 0x4000, 0x0040, 0x1f94,
-       0x6803, 0x1000, 0x6803, 0x0000, 0x0d7f, 0x0c7e, 0x2061, 0x7836,
+       0x6803, 0x1000, 0x6803, 0x0000, 0x0d7f, 0x0c7e, 0x2061, 0x7936,
        0x6028, 0xa09a, 0x0002, 0x00c8, 0x1fa4, 0x8000, 0x602a, 0x0c7f,
-       0x1078, 0x556c, 0x0078, 0x1ff8, 0x2019, 0x783f, 0x2304, 0xa065,
-       0x0040, 0x1fae, 0x2009, 0x0027, 0x1078, 0x5c21, 0x0c7f, 0x0078,
-       0x1ff8, 0xd2bc, 0x0040, 0x1ff8, 0x1078, 0x45f1, 0x6017, 0x0010,
+       0x1078, 0x568e, 0x0078, 0x1ff8, 0x2019, 0x793f, 0x2304, 0xa065,
+       0x0040, 0x1fae, 0x2009, 0x0027, 0x1078, 0x5d41, 0x0c7f, 0x0078,
+       0x1ff8, 0xd2bc, 0x0040, 0x1ff8, 0x1078, 0x4714, 0x6017, 0x0010,
        0x6027, 0x0004, 0x0d7e, 0x2069, 0x0140, 0x6804, 0xa084, 0x4000,
        0x0040, 0x1fc6, 0x6803, 0x1000, 0x6803, 0x0000, 0x0d7f, 0x0c7e,
-       0x2061, 0x7836, 0x6044, 0xa09a, 0x0002, 0x00c8, 0x1fe7, 0x8000,
-       0x6046, 0x603c, 0x0c7f, 0xa005, 0x0040, 0x1ff8, 0x1078, 0x45e8,
+       0x2061, 0x7936, 0x6044, 0xa09a, 0x0002, 0x00c8, 0x1fe7, 0x8000,
+       0x6046, 0x603c, 0x0c7f, 0xa005, 0x0040, 0x1ff8, 0x1078, 0x470b,
        0xa080, 0x0007, 0x2004, 0xa086, 0x0006, 0x00c0, 0x1fe3, 0x6017,
        0x0012, 0x0078, 0x1ff8, 0x6017, 0x0016, 0x0078, 0x1ff8, 0x037e,
-       0x2019, 0x0001, 0x1078, 0x5760, 0x037f, 0x2019, 0x7845, 0x2304,
-       0xa065, 0x0040, 0x1ff7, 0x2009, 0x004f, 0x1078, 0x5c21, 0x0c7f,
+       0x2019, 0x0001, 0x1078, 0x5880, 0x037f, 0x2019, 0x7945, 0x2304,
+       0xa065, 0x0040, 0x1ff7, 0x2009, 0x004f, 0x1078, 0x5d41, 0x0c7f,
        0x017f, 0xd19c, 0x0040, 0x2021, 0x017e, 0x6028, 0xc09c, 0x602a,
-       0x2011, 0x0003, 0x1078, 0x57b8, 0x2011, 0x0002, 0x1078, 0x57c2,
-       0x1078, 0x56ce, 0x1078, 0x45e3, 0x037e, 0x2019, 0x0000, 0x1078,
-       0x5760, 0x037f, 0x60e3, 0x0000, 0x1078, 0x75a5, 0x1078, 0x75c3,
-       0x2001, 0x7600, 0x2003, 0x0004, 0x6027, 0x0008, 0x1078, 0x11be,
+       0x2011, 0x0003, 0x1078, 0x58d8, 0x2011, 0x0002, 0x1078, 0x58e2,
+       0x1078, 0x57ee, 0x1078, 0x4706, 0x037e, 0x2019, 0x0000, 0x1078,
+       0x5880, 0x037f, 0x60e3, 0x0000, 0x1078, 0x76b0, 0x1078, 0x76ce,
+       0x2001, 0x7700, 0x2003, 0x0004, 0x6027, 0x0008, 0x1078, 0x11be,
        0x017f, 0xa18c, 0xffd0, 0x6126, 0x007c, 0x007e, 0x017e, 0x027e,
-       0x0e7e, 0x0f7e, 0x127e, 0x2091, 0x8000, 0x2071, 0x7600, 0x71b0,
+       0x0e7e, 0x0f7e, 0x127e, 0x2091, 0x8000, 0x2071, 0x7700, 0x71b0,
        0x70b2, 0xa116, 0x0040, 0x204b, 0x81ff, 0x0040, 0x203d, 0x2011,
-       0x8011, 0x1078, 0x2d3b, 0x0078, 0x204b, 0x2011, 0x8012, 0x1078,
-       0x2d3b, 0x037e, 0x0c7e, 0x2061, 0x0100, 0x2019, 0x0028, 0x1078,
+       0x8011, 0x1078, 0x2d59, 0x0078, 0x204b, 0x2011, 0x8012, 0x1078,
+       0x2d59, 0x037e, 0x0c7e, 0x2061, 0x0100, 0x2019, 0x0028, 0x1078,
        0x2293, 0x0c7f, 0x037f, 0x127f, 0x0f7f, 0x0e7f, 0x027f, 0x017f,
        0x007f, 0x007c, 0x0c7e, 0x0f7e, 0x007e, 0x027e, 0x2061, 0x0100,
        0xa190, 0x206d, 0x2204, 0x60f2, 0xa192, 0x0005, 0x00c8, 0x2064,
@@ -537,7 +537,7 @@ unsigned short risc_code2100[] = {
        0x0580, 0x0420, 0x0348, 0x02c0, 0x0258, 0x0210, 0x01a8, 0x01a8,
        0x01a8, 0x01a8, 0x0140, 0x00f8, 0x00d0, 0x00b0, 0x00a0, 0x2028,
        0x2130, 0xa094, 0xff00, 0x00c0, 0x2088, 0x81ff, 0x0040, 0x208c,
-       0x1078, 0x4328, 0x0078, 0x2093, 0xa080, 0x2329, 0x200c, 0xa18c,
+       0x1078, 0x444b, 0x0078, 0x2093, 0xa080, 0x2329, 0x200c, 0xa18c,
        0xff00, 0x810f, 0xa006, 0x007c, 0xa080, 0x2329, 0x200c, 0xa18c,
        0x00ff, 0x007c, 0x20ba, 0x20be, 0x20c2, 0x20c8, 0x20ce, 0x20d4,
        0x20da, 0x20e2, 0x20ea, 0x20f0, 0x20f6, 0x20fe, 0x2106, 0x210e,
@@ -564,10 +564,10 @@ unsigned short risc_code2100[] = {
        0x8001, 0x007c, 0x0c7e, 0x027e, 0x2041, 0x007e, 0x70bc, 0xd09c,
        0x0040, 0x2154, 0x2041, 0x007f, 0x2001, 0x010c, 0x203c, 0x727c,
        0x82ff, 0x0040, 0x219f, 0x037e, 0x738c, 0xa38e, 0xffff, 0x00c0,
-       0x2163, 0x2019, 0x0001, 0x8314, 0xa2e0, 0x7cc0, 0x2c04, 0xa38c,
+       0x2163, 0x2019, 0x0001, 0x8314, 0xa2e0, 0x7dc0, 0x2c04, 0xa38c,
        0x0001, 0x0040, 0x2170, 0xa084, 0xff00, 0x8007, 0x0078, 0x2172,
        0xa084, 0x00ff, 0xa70e, 0x0040, 0x2194, 0xa08e, 0x00ff, 0x0040,
-       0x219a, 0x2009, 0x0000, 0x1078, 0x207f, 0x1078, 0x37e6, 0x00c0,
+       0x219a, 0x2009, 0x0000, 0x1078, 0x207f, 0x1078, 0x3811, 0x00c0,
        0x2197, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x218e,
        0x1078, 0x21f1, 0x0040, 0x2197, 0x0078, 0x2194, 0x1078, 0x22f5,
        0x1078, 0x2218, 0x0040, 0x2197, 0x8318, 0x0078, 0x2163, 0x738e,
@@ -577,49 +577,49 @@ unsigned short risc_code2100[] = {
        0x21eb, 0x2009, 0x0000, 0x70bc, 0xd09c, 0x0040, 0x21bc, 0xd094,
        0x0040, 0x21bc, 0x2009, 0x007e, 0x2100, 0xa802, 0x20a8, 0x0078,
        0x21c5, 0x2008, 0x2810, 0xa202, 0x20a8, 0x2700, 0x157e, 0x017e,
-       0xa106, 0x0040, 0x21e2, 0x1078, 0x37e6, 0x00c0, 0x21eb, 0x6004,
+       0xa106, 0x0040, 0x21e2, 0x1078, 0x3811, 0x00c0, 0x21eb, 0x6004,
        0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x21dc, 0x1078, 0x21f1,
        0x0040, 0x21eb, 0x0078, 0x21e2, 0x1078, 0x22f5, 0x1078, 0x2218,
        0x0040, 0x21eb, 0x017f, 0x8108, 0x157f, 0x00f0, 0x21c5, 0x708f,
        0xffff, 0x0078, 0x21ee, 0x017f, 0x157f, 0x718e, 0x027f, 0x0c7f,
-       0x007c, 0x017e, 0x077e, 0x0d7e, 0x0c7e, 0x2c68, 0x1078, 0x5b94,
+       0x007c, 0x017e, 0x077e, 0x0d7e, 0x0c7e, 0x2c68, 0x1078, 0x5cb4,
        0x0040, 0x2213, 0x2d00, 0x601a, 0x601f, 0x0001, 0x2001, 0x0000,
-       0x1078, 0x37b5, 0x2001, 0x0000, 0x1078, 0x37c9, 0x127e, 0x2091,
+       0x1078, 0x37e0, 0x2001, 0x0000, 0x1078, 0x37f4, 0x127e, 0x2091,
        0x8000, 0x7088, 0x8000, 0x708a, 0x127f, 0x2009, 0x0004, 0x1078,
-       0x5c21, 0xa085, 0x0001, 0x0c7f, 0x0d7f, 0x077f, 0x017f, 0x007c,
-       0x017e, 0x077e, 0x0d7e, 0x0c7e, 0x2c68, 0x1078, 0x5b94, 0x0040,
+       0x5d41, 0xa085, 0x0001, 0x0c7f, 0x0d7f, 0x077f, 0x017f, 0x007c,
+       0x017e, 0x077e, 0x0d7e, 0x0c7e, 0x2c68, 0x1078, 0x5cb4, 0x0040,
        0x223a, 0x2d00, 0x601a, 0x601f, 0x0001, 0x2001, 0x0000, 0x1078,
-       0x37b5, 0x2001, 0x0002, 0x1078, 0x37c9, 0x127e, 0x2091, 0x8000,
-       0x7088, 0x8000, 0x708a, 0x127f, 0x2009, 0x0002, 0x1078, 0x5c21,
+       0x37e0, 0x2001, 0x0002, 0x1078, 0x37f4, 0x127e, 0x2091, 0x8000,
+       0x7088, 0x8000, 0x708a, 0x127f, 0x2009, 0x0002, 0x1078, 0x5d41,
        0xa085, 0x0001, 0x0c7f, 0x0d7f, 0x077f, 0x017f, 0x007c, 0x0c7e,
-       0x027e, 0x2009, 0x0080, 0x1078, 0x37e6, 0x00c0, 0x224d, 0x1078,
+       0x027e, 0x2009, 0x0080, 0x1078, 0x3811, 0x00c0, 0x224d, 0x1078,
        0x2250, 0x0040, 0x224d, 0x70c3, 0xffff, 0x027f, 0x0c7f, 0x007c,
-       0x017e, 0x077e, 0x0d7e, 0x0c7e, 0x2c68, 0x1078, 0x5b94, 0x0040,
+       0x017e, 0x077e, 0x0d7e, 0x0c7e, 0x2c68, 0x1078, 0x5cb4, 0x0040,
        0x2272, 0x2d00, 0x601a, 0x601f, 0x0001, 0x2001, 0x0000, 0x1078,
-       0x37b5, 0x2001, 0x0002, 0x1078, 0x37c9, 0x127e, 0x2091, 0x8000,
-       0x70c4, 0x8000, 0x70c6, 0x127f, 0x2009, 0x0002, 0x1078, 0x5c21,
+       0x37e0, 0x2001, 0x0002, 0x1078, 0x37f4, 0x127e, 0x2091, 0x8000,
+       0x70c4, 0x8000, 0x70c6, 0x127f, 0x2009, 0x0002, 0x1078, 0x5d41,
        0xa085, 0x0001, 0x0c7f, 0x0d7f, 0x077f, 0x017f, 0x007c, 0x0c7e,
-       0x0d7e, 0x2009, 0x007f, 0x1078, 0x37e6, 0x00c0, 0x2290, 0x2c68,
-       0x1078, 0x5b94, 0x0040, 0x2290, 0x2d00, 0x601a, 0x6312, 0x601f,
-       0x0001, 0x620a, 0x2009, 0x0022, 0x1078, 0x5c21, 0xa085, 0x0001,
+       0x0d7e, 0x2009, 0x007f, 0x1078, 0x3811, 0x00c0, 0x2290, 0x2c68,
+       0x1078, 0x5cb4, 0x0040, 0x2290, 0x2d00, 0x601a, 0x6312, 0x601f,
+       0x0001, 0x620a, 0x2009, 0x0022, 0x1078, 0x5d41, 0xa085, 0x0001,
        0x0d7f, 0x0c7f, 0x007c, 0x0e7e, 0x0c7e, 0x067e, 0x037e, 0x027e,
-       0x1078, 0x4961, 0x1078, 0x4911, 0x1078, 0x60f9, 0x20a9, 0x007f,
-       0x2009, 0x0000, 0x017e, 0x1078, 0x381d, 0x00c0, 0x22ab, 0x1078,
-       0x399e, 0x1078, 0x3619, 0x017f, 0x8108, 0x00f0, 0x22a2, 0x027f,
+       0x1078, 0x4a85, 0x1078, 0x4a35, 0x1078, 0x6219, 0x20a9, 0x007f,
+       0x2009, 0x0000, 0x017e, 0x1078, 0x384c, 0x00c0, 0x22ab, 0x1078,
+       0x3a36, 0x1078, 0x3637, 0x017f, 0x8108, 0x00f0, 0x22a2, 0x027f,
        0x037f, 0x067f, 0x0c7f, 0x0e7f, 0x007c, 0x0e7e, 0x0c7e, 0x037e,
        0x027e, 0x017e, 0x6218, 0x2270, 0x72a0, 0x027e, 0x2019, 0x0029,
-       0x1078, 0x495a, 0x1078, 0x489d, 0x2c08, 0x1078, 0x7370, 0x017f,
-       0x2e60, 0x1078, 0x399e, 0x6210, 0x6314, 0x1078, 0x3619, 0x6212,
+       0x1078, 0x4a7e, 0x1078, 0x49c1, 0x2c08, 0x1078, 0x747b, 0x017f,
+       0x2e60, 0x1078, 0x3a36, 0x6210, 0x6314, 0x1078, 0x3637, 0x6212,
        0x6316, 0x017f, 0x027f, 0x037f, 0x0c7f, 0x0e7f, 0x007c, 0x0e7e,
        0x007e, 0x6018, 0xa080, 0x0028, 0x2004, 0xd0bc, 0x00c0, 0x22eb,
-       0x2071, 0x7600, 0x7088, 0xa005, 0x0040, 0x22e8, 0x8001, 0x708a,
-       0x007f, 0x0e7f, 0x007c, 0x2071, 0x7600, 0x70c4, 0xa005, 0x0040,
+       0x2071, 0x7700, 0x7088, 0xa005, 0x0040, 0x22e8, 0x8001, 0x708a,
+       0x007f, 0x0e7f, 0x007c, 0x2071, 0x7700, 0x70c4, 0xa005, 0x0040,
        0x22e8, 0x8001, 0x70c6, 0x0078, 0x22e8, 0x6000, 0xc08c, 0x6002,
        0x007c, 0x0e7e, 0x0c7e, 0x037e, 0x027e, 0x017e, 0x157e, 0x81ff,
        0x00c0, 0x2306, 0x20a9, 0x0001, 0x0078, 0x230a, 0x20a9, 0x007f,
-       0x2011, 0x0000, 0x027e, 0xa2e0, 0x7720, 0x2c64, 0x8cff, 0x0040,
-       0x231c, 0x2019, 0x0029, 0x1078, 0x495a, 0x1078, 0x489d, 0x2c08,
-       0x1078, 0x7370, 0x1078, 0x399e, 0x027f, 0x8210, 0x00f0, 0x230a,
+       0x2011, 0x0000, 0x027e, 0xa2e0, 0x7820, 0x2c64, 0x8cff, 0x0040,
+       0x231c, 0x2019, 0x0029, 0x1078, 0x4a7e, 0x1078, 0x49c1, 0x2c08,
+       0x1078, 0x747b, 0x1078, 0x3a36, 0x027f, 0x8210, 0x00f0, 0x230a,
        0x027e, 0x027f, 0x157f, 0x017f, 0x027f, 0x037f, 0x0c7f, 0x0e7f,
        0x007c, 0x7eef, 0x7de8, 0x7ce4, 0x80e2, 0x7be1, 0x80e0, 0x80dc,
        0x80da, 0x7ad9, 0x80d6, 0x80d5, 0x80d4, 0x80d3, 0x80d2, 0x80d1,
@@ -653,14 +653,14 @@ unsigned short risc_code2100[] = {
        0x8000, 0x0100, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
        0x0000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
        0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
-       0x8000, 0x2071, 0x766d, 0x7003, 0x0002, 0xa006, 0x7012, 0x7016,
-       0x703a, 0x703e, 0x7033, 0x767d, 0x7037, 0x767d, 0x7007, 0x0001,
-       0x2061, 0x76bd, 0x6003, 0x0002, 0x007c, 0x0090, 0x2450, 0x0068,
-       0x2450, 0x2071, 0x766d, 0x2b78, 0x7818, 0xd084, 0x00c0, 0x2450,
+       0x8000, 0x2071, 0x776d, 0x7003, 0x0002, 0xa006, 0x7012, 0x7016,
+       0x703a, 0x703e, 0x7033, 0x777d, 0x7037, 0x777d, 0x7007, 0x0001,
+       0x2061, 0x77bd, 0x6003, 0x0002, 0x007c, 0x0090, 0x2450, 0x0068,
+       0x2450, 0x2071, 0x776d, 0x2b78, 0x7818, 0xd084, 0x00c0, 0x2450,
        0x2a60, 0x7820, 0xa08e, 0x0069, 0x00c0, 0x2537, 0x0079, 0x24d4,
-       0x007c, 0x2071, 0x766d, 0x7004, 0x0079, 0x2456, 0x245a, 0x245b,
+       0x007c, 0x2071, 0x776d, 0x7004, 0x0079, 0x2456, 0x245a, 0x245b,
        0x2465, 0x2477, 0x007c, 0x0090, 0x2464, 0x0068, 0x2464, 0x2b78,
-       0x7818, 0xd084, 0x0040, 0x2483, 0x007c, 0x2b78, 0x2061, 0x76bd,
+       0x7818, 0xd084, 0x0040, 0x2483, 0x007c, 0x2b78, 0x2061, 0x77bd,
        0x6008, 0xa08e, 0x0100, 0x0040, 0x2472, 0xa086, 0x0200, 0x0040,
        0x252f, 0x007c, 0x7014, 0x2068, 0x2a60, 0x7018, 0x007a, 0x7010,
        0x2068, 0x6834, 0xa086, 0x0103, 0x0040, 0x247f, 0x007c, 0x2a60,
@@ -669,2605 +669,2638 @@ unsigned short risc_code2100[] = {
        0x252b, 0x61b0, 0x0079, 0x24d4, 0x250d, 0x253f, 0x2547, 0x254b,
        0x2553, 0x2559, 0x255d, 0x2566, 0x256a, 0x2572, 0x2576, 0x252b,
        0x252b, 0x252b, 0x257a, 0x252b, 0x258a, 0x25a1, 0x25b8, 0x2634,
-       0x2639, 0x2666, 0x26b3, 0x26c2, 0x26e3, 0x2719, 0x2723, 0x2730,
-       0x2743, 0x275b, 0x2764, 0x27a1, 0x27a7, 0x252b, 0x27b7, 0x252b,
-       0x252b, 0x252b, 0x252b, 0x252b, 0x27bb, 0x27c1, 0x252b, 0x252b,
-       0x252b, 0x252b, 0x252b, 0x252b, 0x252b, 0x252b, 0x27c9, 0x252b,
-       0x252b, 0x252b, 0x252b, 0x252b, 0x27d6, 0x27dc, 0x252b, 0x252b,
+       0x2639, 0x2666, 0x26c0, 0x26d1, 0x26ef, 0x2722, 0x272c, 0x2739,
+       0x274c, 0x2766, 0x276f, 0x27ac, 0x27b2, 0x252b, 0x27c2, 0x252b,
+       0x252b, 0x252b, 0x252b, 0x252b, 0x27c6, 0x27cc, 0x252b, 0x252b,
+       0x252b, 0x252b, 0x252b, 0x252b, 0x252b, 0x252b, 0x27d4, 0x252b,
+       0x252b, 0x252b, 0x252b, 0x252b, 0x27e1, 0x27e7, 0x252b, 0x252b,
        0x252b, 0x252b, 0x252b, 0x252b, 0x252b, 0x252b, 0x252b, 0x252b,
        0x252b, 0x252b, 0x252b, 0x252b, 0x252b, 0x252b, 0x252b, 0x252b,
        0x252b, 0x252b, 0x252b, 0x252b, 0x2572, 0x2576, 0x252b, 0x252b,
-       0x27ee, 0x252b, 0x252b, 0x252b, 0x252b, 0x252b, 0x252b, 0x252b,
-       0x252b, 0x252b, 0x252b, 0x252b, 0x283b, 0x2908, 0x291c, 0x2923,
-       0x2986, 0x29d7, 0x29e2, 0x2a24, 0x2a31, 0x2a3e, 0x2a41, 0x27f2,
-       0x2a6a, 0x2ab1, 0x2abe, 0x2bb9, 0x2ca7, 0x2cce, 0x2dc6, 0x2dd4,
-       0x2de1, 0x2e1b, 0x713c, 0x0078, 0x250d, 0x2021, 0x4000, 0x1078,
-       0x2d15, 0x127e, 0x2091, 0x8000, 0x0068, 0x251a, 0x7818, 0xd084,
+       0x27f9, 0x252b, 0x252b, 0x252b, 0x252b, 0x252b, 0x252b, 0x252b,
+       0x252b, 0x252b, 0x252b, 0x252b, 0x2846, 0x2913, 0x2927, 0x292e,
+       0x2991, 0x29e2, 0x29ed, 0x2a2c, 0x2a3b, 0x2a4a, 0x2a4d, 0x27fd,
+       0x2a76, 0x2abd, 0x2aca, 0x2bc5, 0x2cb3, 0x2cda, 0x2de4, 0x2df2,
+       0x2dff, 0x2e39, 0x713c, 0x0078, 0x250d, 0x2021, 0x4000, 0x1078,
+       0x2d33, 0x127e, 0x2091, 0x8000, 0x0068, 0x251a, 0x7818, 0xd084,
        0x0040, 0x251d, 0x127f, 0x0078, 0x2511, 0x781b, 0x0001, 0x7c22,
        0x7926, 0x7a2a, 0x7b2e, 0x2091, 0x4080, 0x7007, 0x0001, 0x2091,
        0x5000, 0x127f, 0x007c, 0x2021, 0x4001, 0x0078, 0x250f, 0x2021,
        0x4002, 0x0078, 0x250f, 0x2021, 0x4003, 0x0078, 0x250f, 0x2021,
        0x4005, 0x0078, 0x250f, 0x2021, 0x4006, 0x0078, 0x250f, 0xa02e,
-       0x2520, 0x7b28, 0x7a2c, 0x7824, 0x7930, 0x0078, 0x2d24, 0x7823,
+       0x2520, 0x7b28, 0x7a2c, 0x7824, 0x7930, 0x0078, 0x2d42, 0x7823,
        0x0004, 0x7824, 0x007a, 0xa02e, 0x2520, 0x7b28, 0x7a2c, 0x7824,
-       0x7930, 0x0078, 0x2d28, 0x7924, 0x7828, 0x2114, 0x200a, 0x0078,
+       0x7930, 0x0078, 0x2d46, 0x7924, 0x7828, 0x2114, 0x200a, 0x0078,
        0x250d, 0x7924, 0x2114, 0x0078, 0x250d, 0x2099, 0x0009, 0x20a1,
        0x0009, 0x20a9, 0x0007, 0x53a3, 0x0078, 0x250d, 0x7824, 0x2060,
        0x0078, 0x257c, 0x2009, 0x0001, 0x2011, 0x000f, 0x2019, 0x0025,
        0x0078, 0x250d, 0x7d38, 0x7c3c, 0x0078, 0x2541, 0x7d38, 0x7c3c,
        0x0078, 0x254d, 0x2061, 0x1000, 0x610c, 0xa006, 0x2c14, 0xa200,
        0x8c60, 0x8109, 0x00c0, 0x257e, 0x2010, 0xa005, 0x0040, 0x250d,
-       0x0078, 0x2533, 0x2061, 0x7651, 0x7824, 0x7930, 0xa11a, 0x00c8,
+       0x0078, 0x2533, 0x2061, 0x7751, 0x7824, 0x7930, 0xa11a, 0x00c8,
        0x253b, 0x8019, 0x0040, 0x253b, 0x604a, 0x6142, 0x782c, 0x6052,
-       0x7828, 0x6056, 0xa006, 0x605a, 0x605e, 0x1078, 0x3c69, 0x0078,
-       0x250d, 0x2061, 0x7651, 0x7824, 0x7930, 0xa11a, 0x00c8, 0x253b,
+       0x7828, 0x6056, 0xa006, 0x605a, 0x605e, 0x1078, 0x3d89, 0x0078,
+       0x250d, 0x2061, 0x7751, 0x7824, 0x7930, 0xa11a, 0x00c8, 0x253b,
        0x8019, 0x0040, 0x253b, 0x604e, 0x6146, 0x782c, 0x6062, 0x7828,
-       0x6066, 0xa006, 0x606a, 0x606e, 0x1078, 0x3a3f, 0x0078, 0x250d,
+       0x6066, 0xa006, 0x606a, 0x606e, 0x1078, 0x3b5f, 0x0078, 0x250d,
        0xa02e, 0x2520, 0x81ff, 0x00c0, 0x2537, 0x7924, 0x7b28, 0x7a2c,
-       0x20a9, 0x0005, 0x20a1, 0x7674, 0x41a1, 0x1078, 0x2cec, 0x0040,
-       0x2537, 0x2009, 0x0020, 0x1078, 0x2d24, 0x701b, 0x25d0, 0x007c,
+       0x20a9, 0x0005, 0x20a1, 0x7774, 0x41a1, 0x1078, 0x2cf8, 0x0040,
+       0x2537, 0x2009, 0x0020, 0x1078, 0x2d42, 0x701b, 0x25d0, 0x007c,
        0x6834, 0x2008, 0xa084, 0x00ff, 0xa096, 0x0011, 0x0040, 0x25dc,
        0xa096, 0x0019, 0x00c0, 0x2537, 0x810f, 0xa18c, 0x00ff, 0x0040,
        0x2537, 0x710e, 0x700c, 0x8001, 0x0040, 0x260d, 0x700e, 0x1078,
-       0x2cec, 0x0040, 0x2537, 0x2009, 0x0020, 0x2061, 0x76bd, 0x6224,
+       0x2cf8, 0x0040, 0x2537, 0x2009, 0x0020, 0x2061, 0x77bd, 0x6224,
        0x6328, 0x642c, 0x6530, 0xa290, 0x0040, 0xa399, 0x0000, 0xa4a1,
-       0x0000, 0xa5a9, 0x0000, 0x1078, 0x2d24, 0x701b, 0x2600, 0x007c,
+       0x0000, 0xa5a9, 0x0000, 0x1078, 0x2d42, 0x701b, 0x2600, 0x007c,
        0x6834, 0xa084, 0x00ff, 0xa096, 0x0002, 0x0040, 0x260b, 0xa096,
        0x000a, 0x00c0, 0x2537, 0x0078, 0x25e2, 0x7010, 0x2068, 0x6838,
-       0xc0fd, 0x683a, 0x1078, 0x371a, 0x00c0, 0x261b, 0x7007, 0x0003,
-       0x701b, 0x261d, 0x007c, 0x1078, 0x3b02, 0x127e, 0x2091, 0x8000,
-       0x20a9, 0x0005, 0x2099, 0x7674, 0x530a, 0x2100, 0xa210, 0xa399,
+       0xc0fd, 0x683a, 0x1078, 0x3744, 0x00c0, 0x261b, 0x7007, 0x0003,
+       0x701b, 0x261d, 0x007c, 0x1078, 0x3c22, 0x127e, 0x2091, 0x8000,
+       0x20a9, 0x0005, 0x2099, 0x7774, 0x530a, 0x2100, 0xa210, 0xa399,
        0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0xad80, 0x000d, 0x2009,
-       0x0020, 0x127f, 0x0078, 0x2d28, 0x6198, 0x7824, 0x609a, 0x0078,
+       0x0020, 0x127f, 0x0078, 0x2d46, 0x6198, 0x7824, 0x609a, 0x0078,
        0x250d, 0x2091, 0x8000, 0x7823, 0x4000, 0x7827, 0x4953, 0x782b,
        0x5020, 0x782f, 0x2020, 0x2009, 0x017f, 0x2104, 0x7832, 0x3f00,
        0x7836, 0x2061, 0x0100, 0x6200, 0x2061, 0x0200, 0x603c, 0x8007,
        0xa205, 0x783a, 0x2009, 0x04fd, 0x2104, 0x783e, 0x781b, 0x0001,
        0x2091, 0x5000, 0x2091, 0x4080, 0x2071, 0x0010, 0x20c1, 0x00f0,
        0xa08a, 0x0003, 0x00c8, 0x0427, 0x0078, 0x0423, 0x81ff, 0x00c0,
-       0x2537, 0x1078, 0x2d04, 0x0040, 0x253b, 0x7c28, 0x7d2c, 0x1078,
-       0x3961, 0xd28c, 0x00c0, 0x2678, 0x1078, 0x38f1, 0x0078, 0x267a,
-       0x1078, 0x392d, 0x00c0, 0x26a4, 0x2061, 0x7d00, 0x127e, 0x2091,
-       0x8000, 0x6000, 0xa086, 0x0000, 0x0040, 0x2692, 0x6010, 0xa06d,
-       0x0040, 0x2692, 0x683c, 0xa406, 0x00c0, 0x2692, 0x6840, 0xa506,
-       0x0040, 0x269d, 0x127f, 0xace0, 0x0008, 0x2001, 0x7615, 0x2004,
-       0xac02, 0x00c8, 0x2537, 0x0078, 0x267e, 0x1078, 0x6732, 0x127f,
-       0x0040, 0x2537, 0x0078, 0x250d, 0xa00e, 0x2001, 0x0005, 0x1078,
-       0x3b02, 0x127e, 0x2091, 0x8000, 0x1078, 0x6b3c, 0x1078, 0x3a72,
-       0x127f, 0x0078, 0x250d, 0x81ff, 0x00c0, 0x2537, 0x1078, 0x2d04,
-       0x0040, 0x253b, 0x1078, 0x38a6, 0x1078, 0x3972, 0x0040, 0x2537,
-       0x0078, 0x250d, 0x81ff, 0x00c0, 0x2537, 0x1078, 0x2d04, 0x0040,
-       0x253b, 0x2031, 0x000f, 0x1078, 0x38a6, 0x8631, 0x00c8, 0x26cb,
-       0x2019, 0x0005, 0x1078, 0x3993, 0x0040, 0x2537, 0x7828, 0xa08a,
-       0x1000, 0x00c8, 0x253b, 0x8003, 0x800b, 0x810b, 0xa108, 0x1078,
-       0x4573, 0x0078, 0x250d, 0x127e, 0x2091, 0x8000, 0x81ff, 0x00c0,
-       0x2713, 0x2029, 0x00ff, 0x644c, 0x2400, 0xa506, 0x0040, 0x270d,
-       0x2508, 0x1078, 0x381d, 0x00c0, 0x270d, 0x2031, 0x000f, 0x1078,
-       0x38a6, 0x8631, 0x00c8, 0x26f7, 0x2019, 0x0004, 0x1078, 0x3993,
-       0x0040, 0x2713, 0x7824, 0xa08a, 0x1000, 0x00c8, 0x2716, 0x8003,
-       0x800b, 0x810b, 0xa108, 0x1078, 0x4573, 0x8529, 0x00c8, 0x26ec,
-       0x127f, 0x0078, 0x250d, 0x127f, 0x0078, 0x2537, 0x127f, 0x0078,
-       0x253b, 0x1078, 0x2d04, 0x0040, 0x253b, 0x1078, 0x38d6, 0x1078,
-       0x3961, 0x0078, 0x250d, 0x81ff, 0x00c0, 0x2537, 0x1078, 0x2d04,
-       0x0040, 0x253b, 0x1078, 0x38bf, 0x1078, 0x3961, 0x0078, 0x250d,
-       0x81ff, 0x00c0, 0x2537, 0x1078, 0x2d04, 0x0040, 0x253b, 0x1078,
-       0x3930, 0x0040, 0x2537, 0x1078, 0x3762, 0x1078, 0x38ea, 0x1078,
-       0x3961, 0x0078, 0x250d, 0x1078, 0x2d04, 0x0040, 0x253b, 0x1078,
-       0x38a6, 0x62a0, 0x2019, 0x0005, 0x0c7e, 0x1078, 0x399e, 0x0c7f,
-       0x1078, 0x495a, 0x1078, 0x489d, 0x2c08, 0x1078, 0x7370, 0x1078,
-       0x3961, 0x0078, 0x250d, 0x1078, 0x2d04, 0x0040, 0x253b, 0x1078,
-       0x3961, 0x2208, 0x0078, 0x250d, 0x157e, 0x0d7e, 0x0e7e, 0x2069,
-       0x76ff, 0x6810, 0x6914, 0xa10a, 0x00c8, 0x2770, 0x2009, 0x0000,
-       0x6816, 0x2011, 0x0000, 0x2019, 0x0000, 0x20a9, 0x007e, 0x2069,
-       0x7720, 0x2d04, 0xa075, 0x0040, 0x2785, 0x704c, 0x1078, 0x278f,
-       0xa210, 0x7080, 0x1078, 0x278f, 0xa318, 0x8d68, 0x00f0, 0x2779,
-       0x2300, 0xa218, 0x0e7f, 0x0d7f, 0x157f, 0x0078, 0x250d, 0x0f7e,
-       0x017e, 0xa07d, 0x0040, 0x279e, 0x2001, 0x0000, 0x8000, 0x2f0c,
-       0x81ff, 0x0040, 0x279e, 0x2178, 0x0078, 0x2796, 0x017f, 0x0f7f,
-       0x007c, 0x2069, 0x76ff, 0x6910, 0x629c, 0x0078, 0x250d, 0x81ff,
-       0x00c0, 0x2537, 0x614c, 0xa190, 0x2329, 0x2214, 0xa294, 0x00ff,
-       0x6068, 0xa084, 0xff00, 0xa215, 0x6364, 0x0078, 0x250d, 0x613c,
-       0x6240, 0x0078, 0x250d, 0x1078, 0x2d04, 0x0040, 0x253b, 0x0078,
-       0x250d, 0x1078, 0x2d04, 0x0040, 0x253b, 0x6244, 0x6338, 0x0078,
-       0x250d, 0x613c, 0x6240, 0x7824, 0x603e, 0x7b28, 0x6342, 0x2069,
-       0x7651, 0x831f, 0xa305, 0x6816, 0x0078, 0x250d, 0x1078, 0x2d04,
-       0x0040, 0x253b, 0x0078, 0x250d, 0x1078, 0x2d04, 0x0040, 0x253b,
-       0x7828, 0xa00d, 0x0040, 0x253b, 0x782c, 0xa005, 0x0040, 0x253b,
-       0x6244, 0x6146, 0x6338, 0x603a, 0x0078, 0x250d, 0x7d38, 0x7c3c,
-       0x0078, 0x25ba, 0x7824, 0xa09c, 0x00ff, 0xa39a, 0x0003, 0x00c8,
-       0x2537, 0x624c, 0xa084, 0xff00, 0x8007, 0xa206, 0x00c0, 0x280a,
-       0x2001, 0x7640, 0x2009, 0x000c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38,
-       0x0078, 0x2d28, 0x81ff, 0x00c0, 0x2537, 0x1078, 0x2d04, 0x0040,
-       0x253b, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x2537,
-       0x0c7e, 0x1078, 0x2cec, 0x0c7f, 0x0040, 0x2537, 0x6837, 0x0000,
-       0x6838, 0xc0fd, 0x683a, 0x1078, 0x6a36, 0x0040, 0x2537, 0x7007,
-       0x0003, 0x701b, 0x282c, 0x007c, 0x6830, 0xa086, 0x0100, 0x0040,
-       0x2537, 0xad80, 0x000e, 0x2009, 0x000c, 0x7a2c, 0x7b28, 0x7c3c,
-       0x7d38, 0x0078, 0x2d28, 0x1078, 0x2cec, 0x0040, 0x2537, 0x2009,
-       0x001c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x1078, 0x2d24, 0x701b,
-       0x284a, 0x007c, 0xade8, 0x000d, 0x6800, 0xa005, 0x0040, 0x253b,
-       0x6804, 0xd0ac, 0x0040, 0x2857, 0xd0a4, 0x0040, 0x253b, 0xd094,
-       0x0040, 0x2862, 0x0c7e, 0x2061, 0x0100, 0x6104, 0xa18c, 0xffdf,
-       0x6106, 0x0c7f, 0xd08c, 0x0040, 0x286d, 0x0c7e, 0x2061, 0x0100,
-       0x6104, 0xa18d, 0x0010, 0x6106, 0x0c7f, 0x2009, 0x0100, 0x210c,
-       0xa18a, 0x0002, 0x0048, 0x2882, 0xd084, 0x0040, 0x2882, 0x6a28,
-       0xa28a, 0x007f, 0x00c8, 0x253b, 0xa288, 0x2329, 0x210c, 0xa18c,
-       0x00ff, 0x6152, 0xd0dc, 0x0040, 0x288b, 0x6828, 0xa08a, 0x007f,
-       0x00c8, 0x253b, 0x604e, 0x6808, 0xa08a, 0x0100, 0x0048, 0x253b,
-       0xa08a, 0x0841, 0x00c8, 0x253b, 0xa084, 0x0007, 0x00c0, 0x253b,
-       0x680c, 0xa005, 0x0040, 0x253b, 0x6810, 0xa005, 0x0040, 0x253b,
-       0x6848, 0x6940, 0xa10a, 0x00c8, 0x253b, 0x8001, 0x0040, 0x253b,
-       0x684c, 0x6944, 0xa10a, 0x00c8, 0x253b, 0x8001, 0x0040, 0x253b,
-       0x20a9, 0x001c, 0x2d98, 0x2069, 0x7651, 0x2da0, 0x53a3, 0x6814,
-       0xa08c, 0x00ff, 0x613e, 0x8007, 0xa084, 0x00ff, 0x6042, 0x1078,
-       0x3c69, 0x1078, 0x3a3f, 0x6000, 0xa086, 0x0000, 0x00c0, 0x2906,
-       0x6808, 0x602a, 0x1078, 0x1de4, 0x6818, 0x691c, 0x6a20, 0x6b24,
-       0x8007, 0x810f, 0x8217, 0x831f, 0x6016, 0x611a, 0x621e, 0x6322,
-       0x6c04, 0xd4f4, 0x0040, 0x28e6, 0x6830, 0x6934, 0x6a38, 0x6b3c,
-       0x8007, 0x810f, 0x8217, 0x831f, 0x0078, 0x28e8, 0xa084, 0xf0ff,
-       0x6006, 0x610a, 0x620e, 0x6312, 0x1078, 0x45ff, 0x0c7e, 0x2061,
-       0x0100, 0x602f, 0x0040, 0x602f, 0x0000, 0x0c7f, 0x60b4, 0xa005,
-       0x0040, 0x2902, 0x6003, 0x0001, 0x2091, 0x301d, 0x1078, 0x3573,
-       0x0078, 0x2906, 0x6003, 0x0004, 0x2091, 0x301d, 0x0078, 0x250d,
-       0x6000, 0xa086, 0x0000, 0x0040, 0x2537, 0x2069, 0x7651, 0x7830,
-       0x6842, 0x7834, 0x6846, 0x2d00, 0x2009, 0x001c, 0x7a2c, 0x7b28,
-       0x7c3c, 0x7d38, 0x0078, 0x2d28, 0x81ff, 0x00c0, 0x2537, 0x1078,
-       0x3573, 0x0078, 0x250d, 0x81ff, 0x00c0, 0x2537, 0x617c, 0x81ff,
-       0x0040, 0x293d, 0x703f, 0x0000, 0x2001, 0x7cc0, 0x2009, 0x0040,
-       0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x127e, 0x2091, 0x8000, 0x1078,
-       0x2d28, 0x701b, 0x250a, 0x127f, 0x007c, 0x703f, 0x0001, 0x0d7e,
-       0x2069, 0x7cc0, 0x20a9, 0x0040, 0x20a1, 0x7cc0, 0x2019, 0xffff,
-       0x43a4, 0x654c, 0xa588, 0x2329, 0x210c, 0xa18c, 0x00ff, 0x216a,
-       0xa00e, 0x2011, 0x0002, 0x2100, 0xa506, 0x0040, 0x296f, 0x1078,
-       0x381d, 0x00c0, 0x296f, 0x6014, 0x821c, 0x0048, 0x2967, 0xa398,
-       0x7cc0, 0xa085, 0xff00, 0x8007, 0x201a, 0x0078, 0x296e, 0xa398,
-       0x7cc0, 0x2324, 0xa4a4, 0xff00, 0xa405, 0x201a, 0x8210, 0x8108,
-       0xa182, 0x0080, 0x00c8, 0x2976, 0x0078, 0x2953, 0x8201, 0x8007,
-       0x2d0c, 0xa105, 0x206a, 0x0d7f, 0x20a9, 0x0040, 0x20a1, 0x7cc0,
-       0x2099, 0x7cc0, 0x1078, 0x35bc, 0x0078, 0x292c, 0x1078, 0x2d04,
-       0x0040, 0x253b, 0x0c7e, 0x1078, 0x2cec, 0x0c7f, 0x0040, 0x2537,
-       0x2001, 0x7652, 0x2004, 0xd0b4, 0x0040, 0x29b3, 0x6000, 0xd08c,
-       0x00c0, 0x29b3, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0,
-       0x29b3, 0x6837, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x1078, 0x6a6e,
-       0x0040, 0x2537, 0x7007, 0x0003, 0x701b, 0x29af, 0x007c, 0x1078,
-       0x2d04, 0x0040, 0x253b, 0x20a9, 0x0029, 0x2c98, 0xade8, 0x0002,
-       0x2da0, 0x53a3, 0x20a9, 0x0004, 0xac80, 0x0006, 0x2098, 0xad80,
-       0x0006, 0x20a0, 0x1078, 0x35bc, 0x20a9, 0x0004, 0xac80, 0x000a,
-       0x2098, 0xad80, 0x000a, 0x20a0, 0x1078, 0x35bc, 0x2d00, 0x2009,
-       0x0029, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0078, 0x2d28, 0x81ff,
-       0x00c0, 0x2537, 0x1078, 0x2d04, 0x0040, 0x253b, 0x1078, 0x397d,
-       0x0078, 0x250d, 0x81ff, 0x00c0, 0x2537, 0x7828, 0xa08a, 0x1000,
-       0x00c8, 0x253b, 0x1078, 0x2d04, 0x0040, 0x253b, 0x2031, 0x000f,
-       0x1078, 0x38a6, 0x8631, 0x00c8, 0x29f0, 0x2019, 0x0004, 0x1078,
-       0x3993, 0x7924, 0x810f, 0x7a28, 0x1078, 0x2a00, 0x0078, 0x250d,
-       0xa186, 0x00ff, 0x0040, 0x2a08, 0x1078, 0x2a18, 0x0078, 0x2a17,
-       0x2029, 0x007e, 0x2061, 0x7600, 0x644c, 0x2400, 0xa506, 0x0040,
-       0x2a14, 0x2508, 0x1078, 0x2a18, 0x8529, 0x00c8, 0x2a0d, 0x007c,
-       0x1078, 0x381d, 0x00c0, 0x2a23, 0x2200, 0x8003, 0x800b, 0x810b,
-       0xa108, 0x1078, 0x4573, 0x007c, 0x81ff, 0x00c0, 0x2537, 0x1078,
-       0x2d04, 0x0040, 0x253b, 0x1078, 0x38a6, 0x1078, 0x3988, 0x0078,
-       0x250d, 0x81ff, 0x00c0, 0x2537, 0x1078, 0x2d04, 0x0040, 0x253b,
-       0x1078, 0x38a6, 0x1078, 0x3972, 0x0078, 0x250d, 0x6100, 0x0078,
-       0x250d, 0x1078, 0x2d04, 0x0040, 0x253b, 0x6004, 0xa086, 0x0707,
-       0x0040, 0x253b, 0x2001, 0x7600, 0x2004, 0xa086, 0x0003, 0x00c0,
-       0x2537, 0x0d7e, 0xace8, 0x000a, 0x7924, 0xd184, 0x0040, 0x2a5a,
-       0xace8, 0x0006, 0x680c, 0x8007, 0x783e, 0x6808, 0x8007, 0x783a,
-       0x6b04, 0x831f, 0x6a00, 0x8217, 0x0d7f, 0x6100, 0xa18c, 0x0200,
-       0x0078, 0x250d, 0x7824, 0xa084, 0x00ff, 0xa086, 0x00ff, 0x0040,
-       0x2a74, 0x81ff, 0x00c0, 0x2537, 0x7828, 0xa08a, 0x1000, 0x00c8,
-       0x253b, 0x7924, 0xa18c, 0xff00, 0x810f, 0xa186, 0x00ff, 0x0040,
-       0x2a88, 0xa182, 0x007f, 0x00c8, 0x253b, 0x2100, 0x1078, 0x2094,
-       0x027e, 0x0c7e, 0x127e, 0x2091, 0x8000, 0x2061, 0x7849, 0x601b,
-       0x0000, 0x601f, 0x0000, 0x2061, 0x0100, 0x6030, 0xa084, 0x00ff,
-       0x810f, 0xa105, 0x604a, 0x6043, 0x0090, 0x6043, 0x0010, 0x2009,
-       0x001e, 0x2011, 0x3598, 0x1078, 0x45f6, 0x7924, 0xa18c, 0xff00,
-       0x810f, 0x7a28, 0x1078, 0x2a00, 0x127f, 0x0c7f, 0x027f, 0x0078,
-       0x250d, 0x7924, 0xa18c, 0xff00, 0x810f, 0x0c7e, 0x1078, 0x37e6,
-       0x2c08, 0x0c7f, 0x00c0, 0x253b, 0x0078, 0x250d, 0x81ff, 0x00c0,
-       0x2537, 0x60bc, 0xd09c, 0x0040, 0x2537, 0x1078, 0x2cec, 0x0040,
-       0x2537, 0x6823, 0x0000, 0x7924, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38,
-       0x1078, 0x2d24, 0x701b, 0x2ad5, 0x007c, 0x2009, 0x0080, 0x1078,
-       0x381d, 0x00c0, 0x2ae2, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006,
-       0x0040, 0x2ae6, 0x2021, 0x400a, 0x0078, 0x250f, 0x0d7e, 0xade8,
-       0x000d, 0x6900, 0x6a08, 0x6b0c, 0x6c10, 0x6d14, 0x6e18, 0x6820,
-       0xa0be, 0x0100, 0x0040, 0x2b59, 0xa0be, 0x0112, 0x0040, 0x2b59,
-       0xa0be, 0x0113, 0x0040, 0x2b59, 0xa0be, 0x0114, 0x0040, 0x2b59,
-       0xa0be, 0x0117, 0x0040, 0x2b59, 0xa0be, 0x011a, 0x0040, 0x2b59,
-       0xa0be, 0x0121, 0x0040, 0x2b4f, 0xa0be, 0x0131, 0x0040, 0x2b4f,
-       0xa0be, 0x0171, 0x0040, 0x2b59, 0xa0be, 0x0173, 0x0040, 0x2b59,
-       0xa0be, 0x01a1, 0x00c0, 0x2b21, 0x6830, 0x8007, 0x6832, 0x0078,
-       0x2b5f, 0xa0be, 0x0212, 0x0040, 0x2b55, 0xa0be, 0x0213, 0x0040,
-       0x2b55, 0xa0be, 0x0214, 0x0040, 0x2b47, 0xa0be, 0x0217, 0x0040,
-       0x2b41, 0xa0be, 0x021a, 0x00c0, 0x2b3a, 0x6838, 0x8007, 0x683a,
-       0x0078, 0x2b59, 0xa0be, 0x0300, 0x0040, 0x2b59, 0x0d7f, 0x0078,
-       0x253b, 0xad80, 0x0010, 0x20a9, 0x0007, 0x1078, 0x2b95, 0xad80,
-       0x000e, 0x20a9, 0x0001, 0x1078, 0x2b95, 0x0078, 0x2b59, 0xad80,
-       0x000c, 0x1078, 0x2ba3, 0x0078, 0x2b5f, 0xad80, 0x000e, 0x1078,
-       0x2ba3, 0xad80, 0x000c, 0x20a9, 0x0001, 0x1078, 0x2b95, 0x0c7e,
-       0x1078, 0x2cec, 0x0040, 0x2b8a, 0x6838, 0xc0fd, 0x683a, 0x6837,
-       0x0119, 0x684f, 0x0020, 0x685b, 0x0001, 0x810b, 0x697e, 0x6883,
-       0x0000, 0x6a86, 0x6b8a, 0x6c8e, 0x6d92, 0x6996, 0x689b, 0x0000,
-       0x0c7f, 0x0d7f, 0x6837, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x6823,
-       0x0000, 0x1078, 0x6a52, 0x0040, 0x2537, 0x7007, 0x0003, 0x701b,
-       0x2b8e, 0x007c, 0x0c7f, 0x0d7f, 0x0078, 0x2537, 0x6820, 0xa086,
-       0x8001, 0x0040, 0x2537, 0x0078, 0x250d, 0x017e, 0x2008, 0x2044,
-       0x8000, 0x204c, 0x8000, 0x290a, 0x8108, 0x280a, 0x8108, 0x00f0,
-       0x2b97, 0x017f, 0x007c, 0x017e, 0x0a7e, 0x0b7e, 0x2008, 0x2044,
-       0x8000, 0x204c, 0x8000, 0x2054, 0x8000, 0x205c, 0x2b0a, 0x8108,
-       0x2a0a, 0x8108, 0x290a, 0x8108, 0x280a, 0x0b7f, 0x0a7f, 0x017f,
-       0x007c, 0x81ff, 0x00c0, 0x2537, 0x7924, 0x2140, 0xa18c, 0xff00,
+       0x2537, 0x7924, 0x810f, 0xa18c, 0x00ff, 0x1078, 0x384c, 0x00c0,
+       0x253b, 0x7e38, 0xa684, 0x3fff, 0xa082, 0x4000, 0x0048, 0x267a,
+       0x0078, 0x253b, 0x7c28, 0x7d2c, 0x1078, 0x39fd, 0xd28c, 0x00c0,
+       0x2685, 0x1078, 0x3991, 0x0078, 0x2687, 0x1078, 0x39cb, 0x00c0,
+       0x26b1, 0x2061, 0x7e00, 0x127e, 0x2091, 0x8000, 0x6000, 0xa086,
+       0x0000, 0x0040, 0x269f, 0x6010, 0xa06d, 0x0040, 0x269f, 0x683c,
+       0xa406, 0x00c0, 0x269f, 0x6840, 0xa506, 0x0040, 0x26aa, 0x127f,
+       0xace0, 0x0008, 0x2001, 0x7715, 0x2004, 0xac02, 0x00c8, 0x2537,
+       0x0078, 0x268b, 0x1078, 0x6852, 0x127f, 0x0040, 0x2537, 0x0078,
+       0x250d, 0xa00e, 0x2001, 0x0005, 0x1078, 0x3c22, 0x127e, 0x2091,
+       0x8000, 0x1078, 0x6c5c, 0x1078, 0x3b92, 0x127f, 0x0078, 0x250d,
+       0x81ff, 0x00c0, 0x2537, 0x1078, 0x2d10, 0x0040, 0x253b, 0x1078,
+       0x38d5, 0x0040, 0x2537, 0x1078, 0x3a0a, 0x0040, 0x2537, 0x0078,
+       0x250d, 0x81ff, 0x00c0, 0x2537, 0x1078, 0x2d22, 0x0040, 0x253b,
+       0x1078, 0x3a71, 0x0040, 0x2537, 0x2019, 0x0005, 0x1078, 0x3a2b,
+       0x0040, 0x2537, 0x7828, 0xa08a, 0x1000, 0x00c8, 0x253b, 0x8003,
+       0x800b, 0x810b, 0xa108, 0x1078, 0x4696, 0x0078, 0x250d, 0x127e,
+       0x2091, 0x8000, 0x81ff, 0x00c0, 0x271c, 0x2029, 0x00ff, 0x644c,
+       0x2400, 0xa506, 0x0040, 0x2716, 0x2508, 0x1078, 0x384c, 0x00c0,
+       0x2716, 0x1078, 0x3a71, 0x0040, 0x271c, 0x2019, 0x0004, 0x1078,
+       0x3a2b, 0x0040, 0x271c, 0x7824, 0xa08a, 0x1000, 0x00c8, 0x271f,
+       0x8003, 0x800b, 0x810b, 0xa108, 0x1078, 0x4696, 0x8529, 0x00c8,
+       0x26f8, 0x127f, 0x0078, 0x250d, 0x127f, 0x0078, 0x2537, 0x127f,
+       0x0078, 0x253b, 0x1078, 0x2d10, 0x0040, 0x253b, 0x1078, 0x3942,
+       0x1078, 0x39fd, 0x0078, 0x250d, 0x81ff, 0x00c0, 0x2537, 0x1078,
+       0x2d10, 0x0040, 0x253b, 0x1078, 0x3931, 0x1078, 0x39fd, 0x0078,
+       0x250d, 0x81ff, 0x00c0, 0x2537, 0x1078, 0x2d10, 0x0040, 0x253b,
+       0x1078, 0x39ce, 0x0040, 0x2537, 0x1078, 0x378d, 0x1078, 0x398a,
+       0x1078, 0x39fd, 0x0078, 0x250d, 0x1078, 0x2d10, 0x0040, 0x253b,
+       0x1078, 0x38d5, 0x0040, 0x2537, 0x62a0, 0x2019, 0x0005, 0x0c7e,
+       0x1078, 0x3a36, 0x0c7f, 0x1078, 0x4a7e, 0x1078, 0x49c1, 0x2c08,
+       0x1078, 0x747b, 0x1078, 0x39fd, 0x0078, 0x250d, 0x1078, 0x2d10,
+       0x0040, 0x253b, 0x1078, 0x39fd, 0x2208, 0x0078, 0x250d, 0x157e,
+       0x0d7e, 0x0e7e, 0x2069, 0x77ff, 0x6810, 0x6914, 0xa10a, 0x00c8,
+       0x277b, 0x2009, 0x0000, 0x6816, 0x2011, 0x0000, 0x2019, 0x0000,
+       0x20a9, 0x007e, 0x2069, 0x7820, 0x2d04, 0xa075, 0x0040, 0x2790,
+       0x704c, 0x1078, 0x279a, 0xa210, 0x7080, 0x1078, 0x279a, 0xa318,
+       0x8d68, 0x00f0, 0x2784, 0x2300, 0xa218, 0x0e7f, 0x0d7f, 0x157f,
+       0x0078, 0x250d, 0x0f7e, 0x017e, 0xa07d, 0x0040, 0x27a9, 0x2001,
+       0x0000, 0x8000, 0x2f0c, 0x81ff, 0x0040, 0x27a9, 0x2178, 0x0078,
+       0x27a1, 0x017f, 0x0f7f, 0x007c, 0x2069, 0x77ff, 0x6910, 0x629c,
+       0x0078, 0x250d, 0x81ff, 0x00c0, 0x2537, 0x614c, 0xa190, 0x2329,
+       0x2214, 0xa294, 0x00ff, 0x6068, 0xa084, 0xff00, 0xa215, 0x6364,
+       0x0078, 0x250d, 0x613c, 0x6240, 0x0078, 0x250d, 0x1078, 0x2d22,
+       0x0040, 0x253b, 0x0078, 0x250d, 0x1078, 0x2d22, 0x0040, 0x253b,
+       0x6244, 0x6338, 0x0078, 0x250d, 0x613c, 0x6240, 0x7824, 0x603e,
+       0x7b28, 0x6342, 0x2069, 0x7751, 0x831f, 0xa305, 0x6816, 0x0078,
+       0x250d, 0x1078, 0x2d22, 0x0040, 0x253b, 0x0078, 0x250d, 0x1078,
+       0x2d22, 0x0040, 0x253b, 0x7828, 0xa00d, 0x0040, 0x253b, 0x782c,
+       0xa005, 0x0040, 0x253b, 0x6244, 0x6146, 0x6338, 0x603a, 0x0078,
+       0x250d, 0x7d38, 0x7c3c, 0x0078, 0x25ba, 0x7824, 0xa09c, 0x00ff,
+       0xa39a, 0x0003, 0x00c8, 0x2537, 0x624c, 0xa084, 0xff00, 0x8007,
+       0xa206, 0x00c0, 0x2815, 0x2001, 0x7740, 0x2009, 0x000c, 0x7a2c,
+       0x7b28, 0x7c3c, 0x7d38, 0x0078, 0x2d46, 0x81ff, 0x00c0, 0x2537,
+       0x1078, 0x2d22, 0x0040, 0x253b, 0x6004, 0xa084, 0x00ff, 0xa086,
+       0x0006, 0x00c0, 0x2537, 0x0c7e, 0x1078, 0x2cf8, 0x0c7f, 0x0040,
+       0x2537, 0x6837, 0x0000, 0x6838, 0xc0fd, 0x683a, 0x1078, 0x6b56,
+       0x0040, 0x2537, 0x7007, 0x0003, 0x701b, 0x2837, 0x007c, 0x6830,
+       0xa086, 0x0100, 0x0040, 0x2537, 0xad80, 0x000e, 0x2009, 0x000c,
+       0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0078, 0x2d46, 0x1078, 0x2cf8,
+       0x0040, 0x2537, 0x2009, 0x001c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38,
+       0x1078, 0x2d42, 0x701b, 0x2855, 0x007c, 0xade8, 0x000d, 0x6800,
+       0xa005, 0x0040, 0x253b, 0x6804, 0xd0ac, 0x0040, 0x2862, 0xd0a4,
+       0x0040, 0x253b, 0xd094, 0x0040, 0x286d, 0x0c7e, 0x2061, 0x0100,
+       0x6104, 0xa18c, 0xffdf, 0x6106, 0x0c7f, 0xd08c, 0x0040, 0x2878,
+       0x0c7e, 0x2061, 0x0100, 0x6104, 0xa18d, 0x0010, 0x6106, 0x0c7f,
+       0x2009, 0x0100, 0x210c, 0xa18a, 0x0002, 0x0048, 0x288d, 0xd084,
+       0x0040, 0x288d, 0x6a28, 0xa28a, 0x007f, 0x00c8, 0x253b, 0xa288,
+       0x2329, 0x210c, 0xa18c, 0x00ff, 0x6152, 0xd0dc, 0x0040, 0x2896,
+       0x6828, 0xa08a, 0x007f, 0x00c8, 0x253b, 0x604e, 0x6808, 0xa08a,
+       0x0100, 0x0048, 0x253b, 0xa08a, 0x0841, 0x00c8, 0x253b, 0xa084,
+       0x0007, 0x00c0, 0x253b, 0x680c, 0xa005, 0x0040, 0x253b, 0x6810,
+       0xa005, 0x0040, 0x253b, 0x6848, 0x6940, 0xa10a, 0x00c8, 0x253b,
+       0x8001, 0x0040, 0x253b, 0x684c, 0x6944, 0xa10a, 0x00c8, 0x253b,
+       0x8001, 0x0040, 0x253b, 0x20a9, 0x001c, 0x2d98, 0x2069, 0x7751,
+       0x2da0, 0x53a3, 0x6814, 0xa08c, 0x00ff, 0x613e, 0x8007, 0xa084,
+       0x00ff, 0x6042, 0x1078, 0x3d89, 0x1078, 0x3b5f, 0x6000, 0xa086,
+       0x0000, 0x00c0, 0x2911, 0x6808, 0x602a, 0x1078, 0x1de4, 0x6818,
+       0x691c, 0x6a20, 0x6b24, 0x8007, 0x810f, 0x8217, 0x831f, 0x6016,
+       0x611a, 0x621e, 0x6322, 0x6c04, 0xd4f4, 0x0040, 0x28f1, 0x6830,
+       0x6934, 0x6a38, 0x6b3c, 0x8007, 0x810f, 0x8217, 0x831f, 0x0078,
+       0x28f3, 0xa084, 0xf0ff, 0x6006, 0x610a, 0x620e, 0x6312, 0x1078,
+       0x4722, 0x0c7e, 0x2061, 0x0100, 0x602f, 0x0040, 0x602f, 0x0000,
+       0x0c7f, 0x60b4, 0xa005, 0x0040, 0x290d, 0x6003, 0x0001, 0x2091,
+       0x301d, 0x1078, 0x3591, 0x0078, 0x2911, 0x6003, 0x0004, 0x2091,
+       0x301d, 0x0078, 0x250d, 0x6000, 0xa086, 0x0000, 0x0040, 0x2537,
+       0x2069, 0x7751, 0x7830, 0x6842, 0x7834, 0x6846, 0x2d00, 0x2009,
+       0x001c, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x0078, 0x2d46, 0x81ff,
+       0x00c0, 0x2537, 0x1078, 0x3591, 0x0078, 0x250d, 0x81ff, 0x00c0,
+       0x2537, 0x617c, 0x81ff, 0x0040, 0x2948, 0x703f, 0x0000, 0x2001,
+       0x7dc0, 0x2009, 0x0040, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x127e,
+       0x2091, 0x8000, 0x1078, 0x2d46, 0x701b, 0x250a, 0x127f, 0x007c,
+       0x703f, 0x0001, 0x0d7e, 0x2069, 0x7dc0, 0x20a9, 0x0040, 0x20a1,
+       0x7dc0, 0x2019, 0xffff, 0x43a4, 0x654c, 0xa588, 0x2329, 0x210c,
+       0xa18c, 0x00ff, 0x216a, 0xa00e, 0x2011, 0x0002, 0x2100, 0xa506,
+       0x0040, 0x297a, 0x1078, 0x384c, 0x00c0, 0x297a, 0x6014, 0x821c,
+       0x0048, 0x2972, 0xa398, 0x7dc0, 0xa085, 0xff00, 0x8007, 0x201a,
+       0x0078, 0x2979, 0xa398, 0x7dc0, 0x2324, 0xa4a4, 0xff00, 0xa405,
+       0x201a, 0x8210, 0x8108, 0xa182, 0x0080, 0x00c8, 0x2981, 0x0078,
+       0x295e, 0x8201, 0x8007, 0x2d0c, 0xa105, 0x206a, 0x0d7f, 0x20a9,
+       0x0040, 0x20a1, 0x7dc0, 0x2099, 0x7dc0, 0x1078, 0x35da, 0x0078,
+       0x2937, 0x1078, 0x2d22, 0x0040, 0x253b, 0x0c7e, 0x1078, 0x2cf8,
+       0x0c7f, 0x0040, 0x2537, 0x2001, 0x7752, 0x2004, 0xd0b4, 0x0040,
+       0x29be, 0x6000, 0xd08c, 0x00c0, 0x29be, 0x6004, 0xa084, 0x00ff,
+       0xa086, 0x0006, 0x00c0, 0x29be, 0x6837, 0x0000, 0x6838, 0xc0fd,
+       0x683a, 0x1078, 0x6b8e, 0x0040, 0x2537, 0x7007, 0x0003, 0x701b,
+       0x29ba, 0x007c, 0x1078, 0x2d22, 0x0040, 0x253b, 0x20a9, 0x002b,
+       0x2c98, 0xade8, 0x0002, 0x2da0, 0x53a3, 0x20a9, 0x0004, 0xac80,
+       0x0006, 0x2098, 0xad80, 0x0006, 0x20a0, 0x1078, 0x35da, 0x20a9,
+       0x0004, 0xac80, 0x000a, 0x2098, 0xad80, 0x000a, 0x20a0, 0x1078,
+       0x35da, 0x2d00, 0x2009, 0x002b, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38,
+       0x0078, 0x2d46, 0x81ff, 0x00c0, 0x2537, 0x1078, 0x2d10, 0x0040,
+       0x253b, 0x1078, 0x3a15, 0x0078, 0x250d, 0x81ff, 0x00c0, 0x2537,
+       0x7828, 0xa08a, 0x1000, 0x00c8, 0x253b, 0x1078, 0x2d22, 0x0040,
+       0x253b, 0x1078, 0x3a71, 0x0040, 0x2537, 0x2019, 0x0004, 0x1078,
+       0x3a2b, 0x7924, 0x810f, 0x7a28, 0x1078, 0x2a08, 0x0078, 0x250d,
+       0xa186, 0x00ff, 0x0040, 0x2a10, 0x1078, 0x2a20, 0x0078, 0x2a1f,
+       0x2029, 0x007e, 0x2061, 0x7700, 0x644c, 0x2400, 0xa506, 0x0040,
+       0x2a1c, 0x2508, 0x1078, 0x2a20, 0x8529, 0x00c8, 0x2a15, 0x007c,
+       0x1078, 0x384c, 0x00c0, 0x2a2b, 0x2200, 0x8003, 0x800b, 0x810b,
+       0xa108, 0x1078, 0x4696, 0x007c, 0x81ff, 0x00c0, 0x2537, 0x1078,
+       0x2d10, 0x0040, 0x253b, 0x1078, 0x38d5, 0x0040, 0x2537, 0x1078,
+       0x3a20, 0x0078, 0x250d, 0x81ff, 0x00c0, 0x2537, 0x1078, 0x2d10,
+       0x0040, 0x253b, 0x1078, 0x38d5, 0x0040, 0x2537, 0x1078, 0x3a0a,
+       0x0078, 0x250d, 0x6100, 0x0078, 0x250d, 0x1078, 0x2d22, 0x0040,
+       0x253b, 0x6004, 0xa086, 0x0707, 0x0040, 0x253b, 0x2001, 0x7700,
+       0x2004, 0xa086, 0x0003, 0x00c0, 0x2537, 0x0d7e, 0xace8, 0x000a,
+       0x7924, 0xd184, 0x0040, 0x2a66, 0xace8, 0x0006, 0x680c, 0x8007,
+       0x783e, 0x6808, 0x8007, 0x783a, 0x6b04, 0x831f, 0x6a00, 0x8217,
+       0x0d7f, 0x6100, 0xa18c, 0x0200, 0x0078, 0x250d, 0x7824, 0xa084,
+       0x00ff, 0xa086, 0x00ff, 0x0040, 0x2a80, 0x81ff, 0x00c0, 0x2537,
+       0x7828, 0xa08a, 0x1000, 0x00c8, 0x253b, 0x7924, 0xa18c, 0xff00,
+       0x810f, 0xa186, 0x00ff, 0x0040, 0x2a94, 0xa182, 0x007f, 0x00c8,
+       0x253b, 0x2100, 0x1078, 0x2094, 0x027e, 0x0c7e, 0x127e, 0x2091,
+       0x8000, 0x2061, 0x7949, 0x601b, 0x0000, 0x601f, 0x0000, 0x2061,
+       0x0100, 0x6030, 0xa084, 0x00ff, 0x810f, 0xa105, 0x604a, 0x6043,
+       0x0090, 0x6043, 0x0010, 0x2009, 0x001e, 0x2011, 0x35b6, 0x1078,
+       0x4719, 0x7924, 0xa18c, 0xff00, 0x810f, 0x7a28, 0x1078, 0x2a08,
+       0x127f, 0x0c7f, 0x027f, 0x0078, 0x250d, 0x7924, 0xa18c, 0xff00,
+       0x810f, 0x0c7e, 0x1078, 0x3811, 0x2c08, 0x0c7f, 0x00c0, 0x253b,
+       0x0078, 0x250d, 0x81ff, 0x00c0, 0x2537, 0x60bc, 0xd09c, 0x0040,
+       0x2537, 0x1078, 0x2cf8, 0x0040, 0x2537, 0x6823, 0x0000, 0x7924,
+       0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x1078, 0x2d42, 0x701b, 0x2ae1,
+       0x007c, 0x2009, 0x0080, 0x1078, 0x384c, 0x00c0, 0x2aee, 0x6004,
+       0xa084, 0x00ff, 0xa086, 0x0006, 0x0040, 0x2af2, 0x2021, 0x400a,
+       0x0078, 0x250f, 0x0d7e, 0xade8, 0x000d, 0x6900, 0x6a08, 0x6b0c,
+       0x6c10, 0x6d14, 0x6e18, 0x6820, 0xa0be, 0x0100, 0x0040, 0x2b65,
+       0xa0be, 0x0112, 0x0040, 0x2b65, 0xa0be, 0x0113, 0x0040, 0x2b65,
+       0xa0be, 0x0114, 0x0040, 0x2b65, 0xa0be, 0x0117, 0x0040, 0x2b65,
+       0xa0be, 0x011a, 0x0040, 0x2b65, 0xa0be, 0x0121, 0x0040, 0x2b5b,
+       0xa0be, 0x0131, 0x0040, 0x2b5b, 0xa0be, 0x0171, 0x0040, 0x2b65,
+       0xa0be, 0x0173, 0x0040, 0x2b65, 0xa0be, 0x01a1, 0x00c0, 0x2b2d,
+       0x6830, 0x8007, 0x6832, 0x0078, 0x2b6b, 0xa0be, 0x0212, 0x0040,
+       0x2b61, 0xa0be, 0x0213, 0x0040, 0x2b61, 0xa0be, 0x0214, 0x0040,
+       0x2b53, 0xa0be, 0x0217, 0x0040, 0x2b4d, 0xa0be, 0x021a, 0x00c0,
+       0x2b46, 0x6838, 0x8007, 0x683a, 0x0078, 0x2b65, 0xa0be, 0x0300,
+       0x0040, 0x2b65, 0x0d7f, 0x0078, 0x253b, 0xad80, 0x0010, 0x20a9,
+       0x0007, 0x1078, 0x2ba1, 0xad80, 0x000e, 0x20a9, 0x0001, 0x1078,
+       0x2ba1, 0x0078, 0x2b65, 0xad80, 0x000c, 0x1078, 0x2baf, 0x0078,
+       0x2b6b, 0xad80, 0x000e, 0x1078, 0x2baf, 0xad80, 0x000c, 0x20a9,
+       0x0001, 0x1078, 0x2ba1, 0x0c7e, 0x1078, 0x2cf8, 0x0040, 0x2b96,
+       0x6838, 0xc0fd, 0x683a, 0x6837, 0x0119, 0x684f, 0x0020, 0x685b,
+       0x0001, 0x810b, 0x697e, 0x6883, 0x0000, 0x6a86, 0x6b8a, 0x6c8e,
+       0x6d92, 0x6996, 0x689b, 0x0000, 0x0c7f, 0x0d7f, 0x6837, 0x0000,
+       0x6838, 0xc0fd, 0x683a, 0x6823, 0x0000, 0x1078, 0x6b72, 0x0040,
+       0x2537, 0x7007, 0x0003, 0x701b, 0x2b9a, 0x007c, 0x0c7f, 0x0d7f,
+       0x0078, 0x2537, 0x6820, 0xa086, 0x8001, 0x0040, 0x2537, 0x0078,
+       0x250d, 0x017e, 0x2008, 0x2044, 0x8000, 0x204c, 0x8000, 0x290a,
+       0x8108, 0x280a, 0x8108, 0x00f0, 0x2ba3, 0x017f, 0x007c, 0x017e,
+       0x0a7e, 0x0b7e, 0x2008, 0x2044, 0x8000, 0x204c, 0x8000, 0x2054,
+       0x8000, 0x205c, 0x2b0a, 0x8108, 0x2a0a, 0x8108, 0x290a, 0x8108,
+       0x280a, 0x0b7f, 0x0a7f, 0x017f, 0x007c, 0x81ff, 0x00c0, 0x2537,
+       0x7924, 0x2140, 0xa18c, 0xff00, 0x810f, 0xa182, 0x0080, 0x0048,
+       0x253b, 0xa182, 0x00ff, 0x00c8, 0x253b, 0x7a2c, 0x7b28, 0x6064,
+       0xa306, 0x00c0, 0x2be3, 0x6068, 0xa24e, 0x0040, 0x253b, 0xa9cc,
+       0xff00, 0x0040, 0x253b, 0x0c7e, 0x1078, 0x2c57, 0x2c68, 0x0c7f,
+       0x0040, 0x2c0a, 0xa0c6, 0x4000, 0x00c0, 0x2bf0, 0x0078, 0x2c07,
+       0xa0c6, 0x4007, 0x00c0, 0x2bf7, 0x2408, 0x0078, 0x2c07, 0xa0c6,
+       0x4008, 0x00c0, 0x2bff, 0x2708, 0x2610, 0x0078, 0x2c07, 0xa0c6,
+       0x4009, 0x00c0, 0x2c05, 0x0078, 0x2c07, 0x2001, 0x4006, 0x2020,
+       0x0078, 0x250f, 0x017e, 0x0b7e, 0x0c7e, 0x0e7e, 0x2c70, 0x1078,
+       0x5cb4, 0x0040, 0x2c45, 0x2d00, 0x601a, 0x2e58, 0x0e7f, 0x0e7e,
+       0x0c7e, 0x1078, 0x2cf8, 0x0c7f, 0x2b70, 0x0040, 0x2537, 0x6837,
+       0x0000, 0x2d00, 0x6012, 0x6833, 0x0000, 0x6838, 0xc0fd, 0x683a,
+       0x127e, 0x2091, 0x8000, 0x1078, 0x22b5, 0x127f, 0x601f, 0x0001,
+       0x2001, 0x0000, 0x1078, 0x37e0, 0x2001, 0x0002, 0x1078, 0x37f4,
+       0x127e, 0x2091, 0x8000, 0x7088, 0x8000, 0x708a, 0x127f, 0x2009,
+       0x0002, 0x1078, 0x5d41, 0xa085, 0x0001, 0x0e7f, 0x0c7f, 0x0b7f,
+       0x017f, 0x0040, 0x2537, 0x7007, 0x0003, 0x701b, 0x2c50, 0x007c,
+       0x6830, 0xa086, 0x0100, 0x00c0, 0x250d, 0x0078, 0x2537, 0x0e7e,
+       0x0d7e, 0x2029, 0x0000, 0x2021, 0x0080, 0x20a9, 0x007f, 0x2071,
+       0x78a0, 0x2e04, 0xa005, 0x00c0, 0x2c6b, 0x2100, 0xa406, 0x0040,
+       0x2ca8, 0x0078, 0x2c9c, 0x2068, 0x6f10, 0x2700, 0xa306, 0x00c0,
+       0x2c8d, 0x6e14, 0x2600, 0xa206, 0x00c0, 0x2c8d, 0x2400, 0xa106,
+       0x00c0, 0x2c89, 0x2d60, 0xd884, 0x0040, 0x2cae, 0x6004, 0xa084,
+       0x00ff, 0xa086, 0x0006, 0x00c0, 0x2cae, 0x2001, 0x4000, 0x0078,
+       0x2caf, 0x2001, 0x4007, 0x0078, 0x2caf, 0x2400, 0xa106, 0x00c0,
+       0x2c9c, 0x6e14, 0x87ff, 0x00c0, 0x2c98, 0x86ff, 0x0040, 0x2ca8,
+       0x2001, 0x4008, 0x0078, 0x2caf, 0x8420, 0x8e70, 0x00f0, 0x2c61,
+       0x2001, 0x4009, 0x0078, 0x2caf, 0x2001, 0x0001, 0x0078, 0x2caf,
+       0x1078, 0x3811, 0x00c0, 0x2ca4, 0x6312, 0x6216, 0xa006, 0xa005,
+       0x0d7f, 0x0e7f, 0x007c, 0x81ff, 0x00c0, 0x2537, 0x1078, 0x2cf8,
+       0x0040, 0x2537, 0x6837, 0x0000, 0x7824, 0xa005, 0x0040, 0x253b,
+       0xa096, 0x00ff, 0x0040, 0x2cc8, 0xa092, 0x0004, 0x00c8, 0x253b,
+       0x2010, 0x2d18, 0x1078, 0x2277, 0x0040, 0x2537, 0x7007, 0x0003,
+       0x701b, 0x2cd3, 0x007c, 0x6830, 0xa086, 0x0100, 0x0040, 0x2537,
+       0x0078, 0x250d, 0x81ff, 0x00c0, 0x2537, 0x7924, 0xa18c, 0xff00,
        0x810f, 0xa182, 0x0080, 0x0048, 0x253b, 0xa182, 0x00ff, 0x00c8,
-       0x253b, 0x7a2c, 0x7b28, 0x6064, 0xa306, 0x00c0, 0x2bd7, 0x6068,
-       0xa24e, 0x0040, 0x253b, 0xa9cc, 0xff00, 0x0040, 0x253b, 0x0c7e,
-       0x1078, 0x2c4b, 0x2c68, 0x0c7f, 0x0040, 0x2bfe, 0xa0c6, 0x4000,
-       0x00c0, 0x2be4, 0x0078, 0x2bfb, 0xa0c6, 0x4007, 0x00c0, 0x2beb,
-       0x2408, 0x0078, 0x2bfb, 0xa0c6, 0x4008, 0x00c0, 0x2bf3, 0x2708,
-       0x2610, 0x0078, 0x2bfb, 0xa0c6, 0x4009, 0x00c0, 0x2bf9, 0x0078,
-       0x2bfb, 0x2001, 0x4006, 0x2020, 0x0078, 0x250f, 0x017e, 0x0b7e,
-       0x0c7e, 0x0e7e, 0x2c70, 0x1078, 0x5b94, 0x0040, 0x2c39, 0x2d00,
-       0x601a, 0x2e58, 0x0e7f, 0x0e7e, 0x0c7e, 0x1078, 0x2cec, 0x0c7f,
-       0x2b70, 0x0040, 0x2537, 0x6837, 0x0000, 0x2d00, 0x6012, 0x6833,
-       0x0000, 0x6838, 0xc0fd, 0x683a, 0x127e, 0x2091, 0x8000, 0x1078,
-       0x22b5, 0x127f, 0x601f, 0x0001, 0x2001, 0x0000, 0x1078, 0x37b5,
-       0x2001, 0x0002, 0x1078, 0x37c9, 0x127e, 0x2091, 0x8000, 0x7088,
-       0x8000, 0x708a, 0x127f, 0x2009, 0x0002, 0x1078, 0x5c21, 0xa085,
-       0x0001, 0x0e7f, 0x0c7f, 0x0b7f, 0x017f, 0x0040, 0x2537, 0x7007,
-       0x0003, 0x701b, 0x2c44, 0x007c, 0x6830, 0xa086, 0x0100, 0x00c0,
-       0x250d, 0x0078, 0x2537, 0x0e7e, 0x0d7e, 0x2029, 0x0000, 0x2021,
-       0x0080, 0x20a9, 0x007f, 0x2071, 0x77a0, 0x2e04, 0xa005, 0x00c0,
-       0x2c5f, 0x2100, 0xa406, 0x0040, 0x2c9c, 0x0078, 0x2c90, 0x2068,
-       0x6f10, 0x2700, 0xa306, 0x00c0, 0x2c81, 0x6e14, 0x2600, 0xa206,
-       0x00c0, 0x2c81, 0x2400, 0xa106, 0x00c0, 0x2c7d, 0x2d60, 0xd884,
-       0x0040, 0x2ca2, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0,
-       0x2ca2, 0x2001, 0x4000, 0x0078, 0x2ca3, 0x2001, 0x4007, 0x0078,
-       0x2ca3, 0x2400, 0xa106, 0x00c0, 0x2c90, 0x6e14, 0x87ff, 0x00c0,
-       0x2c8c, 0x86ff, 0x0040, 0x2c9c, 0x2001, 0x4008, 0x0078, 0x2ca3,
-       0x8420, 0x8e70, 0x00f0, 0x2c55, 0x2001, 0x4009, 0x0078, 0x2ca3,
-       0x2001, 0x0001, 0x0078, 0x2ca3, 0x1078, 0x37e6, 0x00c0, 0x2c98,
-       0x6312, 0x6216, 0xa006, 0xa005, 0x0d7f, 0x0e7f, 0x007c, 0x81ff,
-       0x00c0, 0x2537, 0x1078, 0x2cec, 0x0040, 0x2537, 0x6837, 0x0000,
-       0x7824, 0xa005, 0x0040, 0x253b, 0xa096, 0x00ff, 0x0040, 0x2cbc,
-       0xa092, 0x0004, 0x00c8, 0x253b, 0x2010, 0x2d18, 0x1078, 0x2277,
-       0x0040, 0x2537, 0x7007, 0x0003, 0x701b, 0x2cc7, 0x007c, 0x6830,
-       0xa086, 0x0100, 0x0040, 0x2537, 0x0078, 0x250d, 0x81ff, 0x00c0,
-       0x2537, 0x7924, 0xa18c, 0xff00, 0x810f, 0xa182, 0x0080, 0x0048,
-       0x253b, 0xa182, 0x00ff, 0x00c8, 0x253b, 0x127e, 0x2091, 0x8000,
-       0x1078, 0x6979, 0x00c0, 0x2ce9, 0x1078, 0x3805, 0x127f, 0x0078,
-       0x250d, 0x127f, 0x0078, 0x2537, 0x1078, 0x1327, 0x0040, 0x2d03,
-       0xa006, 0x6802, 0x7010, 0xa005, 0x00c0, 0x2cfb, 0x2d00, 0x7012,
-       0x7016, 0x0078, 0x2d01, 0x7014, 0x6802, 0x2060, 0x2d00, 0x6006,
-       0x7016, 0xad80, 0x000d, 0x007c, 0x7e24, 0x860f, 0xa18c, 0x00ff,
-       0x1078, 0x381d, 0x00c0, 0x2d12, 0xa6b4, 0x00ff, 0xa682, 0x0010,
-       0x0048, 0x2d13, 0xa066, 0x8cff, 0x007c, 0x017e, 0x7110, 0x81ff,
-       0x0040, 0x2d20, 0x2168, 0x6904, 0x1078, 0x1340, 0x0078, 0x2d17,
-       0x7112, 0x7116, 0x017f, 0x007c, 0x2031, 0x0001, 0x0078, 0x2d2a,
-       0x2031, 0x0000, 0x2061, 0x76bd, 0x6606, 0x6112, 0x600e, 0x6226,
+       0x253b, 0x127e, 0x2091, 0x8000, 0x1078, 0x6a99, 0x00c0, 0x2cf5,
+       0x1078, 0x3834, 0x127f, 0x0078, 0x250d, 0x127f, 0x0078, 0x2537,
+       0x1078, 0x1327, 0x0040, 0x2d0f, 0xa006, 0x6802, 0x7010, 0xa005,
+       0x00c0, 0x2d07, 0x2d00, 0x7012, 0x7016, 0x0078, 0x2d0d, 0x7014,
+       0x6802, 0x2060, 0x2d00, 0x6006, 0x7016, 0xad80, 0x000d, 0x007c,
+       0x7924, 0x810f, 0xa18c, 0x00ff, 0x1078, 0x384c, 0x00c0, 0x2d1f,
+       0x7e28, 0xa684, 0x3fff, 0xa082, 0x4000, 0x0048, 0x2d20, 0xa066,
+       0x8cff, 0x007c, 0x7e24, 0x860f, 0xa18c, 0x00ff, 0x1078, 0x384c,
+       0x00c0, 0x2d30, 0xa6b4, 0x00ff, 0xa682, 0x4000, 0x0048, 0x2d31,
+       0xa066, 0x8cff, 0x007c, 0x017e, 0x7110, 0x81ff, 0x0040, 0x2d3e,
+       0x2168, 0x6904, 0x1078, 0x1340, 0x0078, 0x2d35, 0x7112, 0x7116,
+       0x017f, 0x007c, 0x2031, 0x0001, 0x0078, 0x2d48, 0x2031, 0x0000,
+       0x2061, 0x77bd, 0x6606, 0x6112, 0x600e, 0x6226, 0x632a, 0x642e,
+       0x6532, 0x2c10, 0x1078, 0x1377, 0x7007, 0x0002, 0x701b, 0x250d,
+       0x007c, 0x0f7e, 0x127e, 0x2091, 0x8000, 0x2079, 0x0000, 0x2001,
+       0x777b, 0x2004, 0xa005, 0x00c0, 0x2d74, 0x0068, 0x2d74, 0x7818,
+       0xd084, 0x00c0, 0x2d74, 0x781b, 0x0001, 0x7a22, 0x7b26, 0x7c2a,
+       0x2091, 0x4080, 0x0078, 0x2d99, 0x017e, 0x0c7e, 0x0e7e, 0x2071,
+       0x776d, 0x7138, 0xa182, 0x0008, 0x0048, 0x2d82, 0x7030, 0x2060,
+       0x0078, 0x2d93, 0x7030, 0xa0e0, 0x0008, 0xac82, 0x77bd, 0x0048,
+       0x2d8b, 0x2061, 0x777d, 0x2c00, 0x7032, 0x81ff, 0x00c0, 0x2d91,
+       0x7036, 0x8108, 0x713a, 0x2262, 0x6306, 0x640a, 0x0e7f, 0x0c7f,
+       0x017f, 0x127f, 0x0f7f, 0x007c, 0x0e7e, 0x2071, 0x776d, 0x7038,
+       0xa005, 0x0040, 0x2dd5, 0x127e, 0x2091, 0x8000, 0x0068, 0x2dd4,
+       0x0f7e, 0x2079, 0x0000, 0x7818, 0xd084, 0x00c0, 0x2dd3, 0x0c7e,
+       0x781b, 0x0001, 0x7034, 0x2060, 0x2c04, 0x7822, 0x6004, 0x7826,
+       0x6008, 0x782a, 0x2091, 0x4080, 0x7038, 0x8001, 0x703a, 0xa005,
+       0x00c0, 0x2dc9, 0x7033, 0x777d, 0x7037, 0x777d, 0x0c7f, 0x0078,
+       0x2dd3, 0xac80, 0x0008, 0xa0fa, 0x77bd, 0x0048, 0x2dd1, 0x2001,
+       0x777d, 0x7036, 0x0c7f, 0x0f7f, 0x127f, 0x0e7f, 0x007c, 0x027e,
+       0x2001, 0x7752, 0x2004, 0xd0c4, 0x0040, 0x2de2, 0x2011, 0x8014,
+       0x1078, 0x2d59, 0x027f, 0x007c, 0x81ff, 0x00c0, 0x2537, 0x127e,
+       0x2091, 0x8000, 0x6030, 0xc08d, 0x6032, 0x1078, 0x3591, 0x127f,
+       0x0078, 0x250d, 0x7824, 0x2008, 0xa18c, 0xfffd, 0x00c0, 0x2dfd,
+       0x61c8, 0xa10d, 0x61ca, 0x0078, 0x250d, 0x0078, 0x253b, 0x81ff,
+       0x00c0, 0x2537, 0x6000, 0xa086, 0x0003, 0x00c0, 0x2537, 0x2001,
+       0x7752, 0x2004, 0xd0a4, 0x00c0, 0x2537, 0x1078, 0x2d22, 0x0040,
+       0x253b, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006, 0x00c0, 0x2e1c,
+       0x7828, 0xa005, 0x0040, 0x250d, 0x0c7e, 0x1078, 0x2cf8, 0x0c7f,
+       0x0040, 0x2537, 0x6837, 0x0000, 0x6833, 0x0000, 0x6838, 0xc0fd,
+       0x683a, 0x1078, 0x6bfb, 0x0040, 0x2537, 0x7007, 0x0003, 0x701b,
+       0x2e32, 0x007c, 0x6830, 0xa086, 0x0100, 0x0040, 0x2537, 0x0078,
+       0x250d, 0x2001, 0x7700, 0x2004, 0xa086, 0x0003, 0x00c0, 0x2537,
+       0x7f24, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x1078, 0x2cf8, 0x0040,
+       0x2537, 0x2009, 0x0000, 0x2031, 0x0000, 0x7023, 0x0000, 0x702f,
+       0x0000, 0xad80, 0x0005, 0x7026, 0x20a0, 0x1078, 0x384c, 0x00c0,
+       0x2e7f, 0x6004, 0xa0c6, 0x0707, 0x0040, 0x2e7f, 0xa084, 0x00ff,
+       0xa0c6, 0x0006, 0x00c0, 0x2e7f, 0x87ff, 0x0040, 0x2e72, 0xac80,
+       0x0006, 0x2098, 0x3400, 0x20a9, 0x0004, 0x53a3, 0x1078, 0x2baf,
+       0x0078, 0x2e7b, 0xac80, 0x000a, 0x2098, 0x3400, 0x20a9, 0x0004,
+       0x53a3, 0x1078, 0x2baf, 0x21a2, 0x94a0, 0xa6b0, 0x0005, 0x8108,
+       0xa186, 0x007e, 0x0040, 0x2e8a, 0xa686, 0x0028, 0x0040, 0x2e93,
+       0x0078, 0x2e55, 0x86ff, 0x00c0, 0x2e91, 0x7120, 0x810b, 0x0078,
+       0x250d, 0x702f, 0x0001, 0x711e, 0x7020, 0xa600, 0x7022, 0x772a,
+       0x2061, 0x77bd, 0x6007, 0x0000, 0x6612, 0x7024, 0x600e, 0x6226,
        0x632a, 0x642e, 0x6532, 0x2c10, 0x1078, 0x1377, 0x7007, 0x0002,
-       0x701b, 0x250d, 0x007c, 0x0f7e, 0x127e, 0x2091, 0x8000, 0x2079,
-       0x0000, 0x2001, 0x767b, 0x2004, 0xa005, 0x00c0, 0x2d56, 0x0068,
-       0x2d56, 0x7818, 0xd084, 0x00c0, 0x2d56, 0x781b, 0x0001, 0x7a22,
-       0x7b26, 0x7c2a, 0x2091, 0x4080, 0x0078, 0x2d7b, 0x017e, 0x0c7e,
-       0x0e7e, 0x2071, 0x766d, 0x7138, 0xa182, 0x0008, 0x0048, 0x2d64,
-       0x7030, 0x2060, 0x0078, 0x2d75, 0x7030, 0xa0e0, 0x0008, 0xac82,
-       0x76bd, 0x0048, 0x2d6d, 0x2061, 0x767d, 0x2c00, 0x7032, 0x81ff,
-       0x00c0, 0x2d73, 0x7036, 0x8108, 0x713a, 0x2262, 0x6306, 0x640a,
-       0x0e7f, 0x0c7f, 0x017f, 0x127f, 0x0f7f, 0x007c, 0x0e7e, 0x2071,
-       0x766d, 0x7038, 0xa005, 0x0040, 0x2db7, 0x127e, 0x2091, 0x8000,
-       0x0068, 0x2db6, 0x0f7e, 0x2079, 0x0000, 0x7818, 0xd084, 0x00c0,
-       0x2db5, 0x0c7e, 0x781b, 0x0001, 0x7034, 0x2060, 0x2c04, 0x7822,
-       0x6004, 0x7826, 0x6008, 0x782a, 0x2091, 0x4080, 0x7038, 0x8001,
-       0x703a, 0xa005, 0x00c0, 0x2dab, 0x7033, 0x767d, 0x7037, 0x767d,
-       0x0c7f, 0x0078, 0x2db5, 0xac80, 0x0008, 0xa0fa, 0x76bd, 0x0048,
-       0x2db3, 0x2001, 0x767d, 0x7036, 0x0c7f, 0x0f7f, 0x127f, 0x0e7f,
-       0x007c, 0x027e, 0x2001, 0x7652, 0x2004, 0xd0c4, 0x0040, 0x2dc4,
-       0x2011, 0x8014, 0x1078, 0x2d3b, 0x027f, 0x007c, 0x81ff, 0x00c0,
-       0x2537, 0x127e, 0x2091, 0x8000, 0x6030, 0xc08d, 0x6032, 0x1078,
-       0x3573, 0x127f, 0x0078, 0x250d, 0x7824, 0x2008, 0xa18c, 0xfffd,
-       0x00c0, 0x2ddf, 0x61c8, 0xa10d, 0x61ca, 0x0078, 0x250d, 0x0078,
-       0x253b, 0x81ff, 0x00c0, 0x2537, 0x6000, 0xa086, 0x0003, 0x00c0,
-       0x2537, 0x2001, 0x7652, 0x2004, 0xd0a4, 0x00c0, 0x2537, 0x1078,
-       0x2d04, 0x0040, 0x253b, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0006,
-       0x00c0, 0x2dfe, 0x7828, 0xa005, 0x0040, 0x250d, 0x0c7e, 0x1078,
-       0x2cec, 0x0c7f, 0x0040, 0x2537, 0x6837, 0x0000, 0x6833, 0x0000,
-       0x6838, 0xc0fd, 0x683a, 0x1078, 0x6adb, 0x0040, 0x2537, 0x7007,
-       0x0003, 0x701b, 0x2e14, 0x007c, 0x6830, 0xa086, 0x0100, 0x0040,
-       0x2537, 0x0078, 0x250d, 0x2001, 0x7600, 0x2004, 0xa086, 0x0003,
-       0x00c0, 0x2537, 0x7f24, 0x7a2c, 0x7b28, 0x7c3c, 0x7d38, 0x1078,
-       0x2cec, 0x0040, 0x2537, 0x2009, 0x0000, 0x2031, 0x0000, 0x7023,
-       0x0000, 0x702f, 0x0000, 0xad80, 0x0005, 0x7026, 0x20a0, 0x1078,
-       0x381d, 0x00c0, 0x2e61, 0x6004, 0xa0c6, 0x0707, 0x0040, 0x2e61,
-       0xa084, 0x00ff, 0xa0c6, 0x0006, 0x00c0, 0x2e61, 0x87ff, 0x0040,
-       0x2e54, 0xac80, 0x0006, 0x2098, 0x3400, 0x20a9, 0x0004, 0x53a3,
-       0x1078, 0x2ba3, 0x0078, 0x2e5d, 0xac80, 0x000a, 0x2098, 0x3400,
-       0x20a9, 0x0004, 0x53a3, 0x1078, 0x2ba3, 0x21a2, 0x94a0, 0xa6b0,
-       0x0005, 0x8108, 0xa186, 0x007e, 0x0040, 0x2e6c, 0xa686, 0x0028,
-       0x0040, 0x2e75, 0x0078, 0x2e37, 0x86ff, 0x00c0, 0x2e73, 0x7120,
-       0x810b, 0x0078, 0x250d, 0x702f, 0x0001, 0x711e, 0x7020, 0xa600,
-       0x7022, 0x772a, 0x2061, 0x76bd, 0x6007, 0x0000, 0x6612, 0x7024,
-       0x600e, 0x6226, 0x632a, 0x642e, 0x6532, 0x2c10, 0x1078, 0x1377,
-       0x7007, 0x0002, 0x701b, 0x2e8d, 0x007c, 0x702c, 0xa005, 0x00c0,
-       0x2e9f, 0x711c, 0x7024, 0x20a0, 0x7728, 0x2031, 0x0000, 0x2061,
-       0x76bd, 0x6224, 0x6328, 0x642c, 0x6530, 0x0078, 0x2e37, 0x7120,
-       0x810b, 0x0078, 0x250d, 0x127e, 0x0c7e, 0x0e7e, 0x2061, 0x0100,
-       0x2071, 0x7600, 0x6044, 0xd0a4, 0x00c0, 0x2ecc, 0xd084, 0x0040,
-       0x2eb5, 0x1078, 0x2ff7, 0x0078, 0x2ec8, 0xd08c, 0x0040, 0x2ebc,
-       0x1078, 0x2f0e, 0x0078, 0x2ec8, 0xd094, 0x0040, 0x2ec3, 0x1078,
-       0x2ef1, 0x0078, 0x2ec8, 0xd09c, 0x0040, 0x2ec8, 0x1078, 0x2ed6,
-       0x0e7f, 0x0c7f, 0x127f, 0x007c, 0x017e, 0x6128, 0xd19c, 0x00c0,
-       0x2ed3, 0xc19d, 0x612a, 0x017f, 0x0078, 0x2ec8, 0x6043, 0x0040,
-       0x6043, 0x0000, 0x706f, 0x0000, 0x7087, 0x0001, 0x70a7, 0x0000,
-       0x70bf, 0x0000, 0x2009, 0x7cc0, 0x200b, 0x0000, 0x707f, 0x0000,
-       0x7073, 0x000f, 0x2009, 0x000f, 0x2011, 0x3533, 0x1078, 0x45f6,
-       0x007c, 0x7070, 0xa005, 0x00c0, 0x2f0d, 0x2011, 0x3533, 0x1078,
-       0x4566, 0x6043, 0x0020, 0x6043, 0x0000, 0x6044, 0xd08c, 0x00c0,
-       0x2f09, 0x7083, 0x0000, 0x6043, 0x0090, 0x6043, 0x0010, 0x0078,
-       0x2f0d, 0x7077, 0x0000, 0x0078, 0x2f0d, 0x007c, 0x7074, 0xa08a,
-       0x0003, 0x00c8, 0x2f17, 0x1079, 0x2f1a, 0x0078, 0x2f19, 0x1078,
-       0x12cd, 0x007c, 0x2f1d, 0x2f6c, 0x2ff6, 0x0f7e, 0x7077, 0x0001,
-       0x20e1, 0xa000, 0x20e1, 0x8700, 0x1078, 0x1de4, 0x20e1, 0x9080,
-       0x20e1, 0x4000, 0x2079, 0x7b00, 0x207b, 0x2200, 0x7807, 0x00ef,
-       0x780b, 0x0000, 0x780f, 0x00ef, 0x7813, 0x0138, 0x7817, 0x0000,
-       0x781b, 0x0000, 0x781f, 0x0000, 0x7823, 0xffff, 0x7827, 0xffff,
-       0x782b, 0x0000, 0x782f, 0x0000, 0x2079, 0x7b0c, 0x207b, 0x1101,
-       0x7807, 0x0000, 0x2099, 0x7605, 0x20a1, 0x7b0e, 0x20a9, 0x0004,
-       0x53a3, 0x2079, 0x7b12, 0x207b, 0x0000, 0x7807, 0x0000, 0x2099,
-       0x7b00, 0x20a1, 0x020b, 0x20a9, 0x0014, 0x53a6, 0x60c3, 0x000c,
-       0x600f, 0x0000, 0x1078, 0x355a, 0x0f7f, 0x707b, 0x0000, 0x6043,
-       0x0008, 0x6043, 0x0000, 0x007c, 0x0d7e, 0x7078, 0x707b, 0x0000,
-       0xa025, 0x0040, 0x2fe0, 0x6020, 0xd0b4, 0x00c0, 0x2fde, 0x7184,
-       0x81ff, 0x0040, 0x2fc7, 0xa486, 0x000c, 0x00c0, 0x2fd2, 0xa480,
-       0x0018, 0x8004, 0x20a8, 0x2011, 0x7b80, 0x2019, 0x7b00, 0x220c,
-       0x2304, 0xa106, 0x00c0, 0x2f9e, 0x8210, 0x8318, 0x00f0, 0x2f87,
-       0x6043, 0x0004, 0x608b, 0xbc94, 0x608f, 0xf0f0, 0x6043, 0x0006,
-       0x7077, 0x0002, 0x7083, 0x0002, 0x0078, 0x2fde, 0x2069, 0x7b80,
-       0x6930, 0xa18e, 0x1101, 0x00c0, 0x2fd2, 0x6834, 0xa005, 0x00c0,
-       0x2fd2, 0x6900, 0xa18c, 0x00ff, 0x00c0, 0x2fb2, 0x6804, 0xa005,
-       0x0040, 0x2fc7, 0x2011, 0x7b8e, 0x2019, 0x7605, 0x20a9, 0x0004,
-       0x220c, 0x2304, 0xa102, 0x0048, 0x2fc5, 0x00c0, 0x2fd2, 0x8210,
-       0x8318, 0x00f0, 0x2fb8, 0x0078, 0x2fd2, 0x7087, 0x0000, 0x20e1,
-       0x9080, 0x20e1, 0x4000, 0x2099, 0x7b80, 0x20a1, 0x020b, 0x20a9,
-       0x0014, 0x53a6, 0x6043, 0x0008, 0x6043, 0x0000, 0x6020, 0xd0b4,
-       0x00c0, 0x2fde, 0x60c3, 0x000c, 0x1078, 0x355a, 0x0d7f, 0x007c,
-       0x6020, 0xd0b4, 0x00c0, 0x2fde, 0x60c3, 0x000c, 0x2011, 0x7840,
-       0x2013, 0x0000, 0x707b, 0x0000, 0x20e1, 0x9080, 0x60a3, 0x0056,
-       0x60a7, 0x9575, 0x1078, 0x5571, 0x0078, 0x2fde, 0x007c, 0x7080,
-       0xa08a, 0x001d, 0x00c8, 0x3000, 0x1079, 0x3003, 0x0078, 0x3002,
-       0x1078, 0x12cd, 0x007c, 0x3027, 0x3036, 0x3067, 0x307c, 0x30ac,
-       0x30d4, 0x3104, 0x312e, 0x315e, 0x3184, 0x31cd, 0x31ef, 0x3213,
-       0x3229, 0x3251, 0x3264, 0x326d, 0x3286, 0x32b4, 0x32dc, 0x330a,
-       0x3334, 0x337c, 0x33ad, 0x33cf, 0x340d, 0x3433, 0x344c, 0x3459,
-       0x7003, 0x0007, 0x6004, 0xa084, 0xfff9, 0x6006, 0x007c, 0x608b,
-       0xbc94, 0x608f, 0xf0f0, 0x6043, 0x0002, 0x7083, 0x0001, 0x2009,
-       0x07d0, 0x2011, 0x353a, 0x1078, 0x4559, 0x007c, 0x0f7e, 0x7078,
-       0xa086, 0x0014, 0x00c0, 0x3065, 0x6043, 0x0000, 0x6020, 0xd0b4,
-       0x00c0, 0x3065, 0x2079, 0x7b80, 0x7a30, 0xa296, 0x1102, 0x00c0,
-       0x3063, 0x7834, 0xa005, 0x00c0, 0x3063, 0x7a38, 0xd2fc, 0x0040,
-       0x3059, 0x70a4, 0xa005, 0x00c0, 0x3059, 0x1078, 0x35f3, 0x70a7,
-       0x0001, 0x2011, 0x353a, 0x1078, 0x4566, 0x7083, 0x0010, 0x1078,
-       0x326d, 0x0078, 0x3065, 0x707b, 0x0000, 0x0f7f, 0x007c, 0x7083,
-       0x0003, 0x6043, 0x0004, 0x1078, 0x35c4, 0x20a3, 0x1102, 0x20a3,
-       0x0000, 0x20a9, 0x000a, 0x20a3, 0x0000, 0x00f0, 0x3073, 0x60c3,
-       0x0014, 0x1078, 0x355a, 0x007c, 0x0f7e, 0x7078, 0xa005, 0x0040,
-       0x30aa, 0x2011, 0x353a, 0x1078, 0x4566, 0xa086, 0x0014, 0x00c0,
-       0x30a6, 0x2079, 0x7b80, 0x7a30, 0xa296, 0x1102, 0x00c0, 0x30a6,
-       0x7834, 0xa005, 0x00c0, 0x30a6, 0x7a38, 0xd2fc, 0x0040, 0x30a0,
-       0x70a4, 0xa005, 0x00c0, 0x30a0, 0x1078, 0x35f3, 0x70a7, 0x0001,
-       0x7083, 0x0004, 0x1078, 0x30ac, 0x0078, 0x30aa, 0x7083, 0x0002,
-       0x707b, 0x0000, 0x0f7f, 0x007c, 0x7083, 0x0005, 0x1078, 0x35c4,
-       0x20a3, 0x1103, 0x20a3, 0x0000, 0x3430, 0x2011, 0x7b8e, 0x706c,
-       0xa005, 0x00c0, 0x30c6, 0x714c, 0xa186, 0xffff, 0x0040, 0x30c6,
-       0x1078, 0x34fe, 0x0040, 0x30c6, 0x1078, 0x35f3, 0x20a9, 0x0008,
-       0x2298, 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3,
-       0x0014, 0x1078, 0x355a, 0x007c, 0x0f7e, 0x7078, 0xa005, 0x0040,
-       0x3102, 0x2011, 0x353a, 0x1078, 0x4566, 0xa086, 0x0014, 0x00c0,
-       0x30fe, 0x2079, 0x7b80, 0x7a30, 0xa296, 0x1103, 0x00c0, 0x30fe,
-       0x7834, 0xa005, 0x00c0, 0x30fe, 0x7a38, 0xd2fc, 0x0040, 0x30f8,
-       0x70a4, 0xa005, 0x00c0, 0x30f8, 0x1078, 0x35f3, 0x70a7, 0x0001,
-       0x7083, 0x0006, 0x1078, 0x3104, 0x0078, 0x3102, 0x7083, 0x0002,
-       0x707b, 0x0000, 0x0f7f, 0x007c, 0x7083, 0x0007, 0x1078, 0x35c4,
-       0x20a3, 0x1104, 0x20a3, 0x0000, 0x3430, 0x2011, 0x7b8e, 0x706c,
-       0xa005, 0x00c0, 0x3120, 0x7150, 0xa186, 0xffff, 0x0040, 0x3120,
-       0xa180, 0x2329, 0x200c, 0xa18c, 0xff00, 0x810f, 0x1078, 0x34fe,
-       0x20a9, 0x0008, 0x2298, 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3,
-       0x0000, 0x60c3, 0x0014, 0x1078, 0x355a, 0x007c, 0x0f7e, 0x7078,
-       0xa005, 0x0040, 0x315c, 0x2011, 0x353a, 0x1078, 0x4566, 0xa086,
-       0x0014, 0x00c0, 0x3158, 0x2079, 0x7b80, 0x7a30, 0xa296, 0x1104,
-       0x00c0, 0x3158, 0x7834, 0xa005, 0x00c0, 0x3158, 0x7a38, 0xd2fc,
-       0x0040, 0x3152, 0x70a4, 0xa005, 0x00c0, 0x3152, 0x1078, 0x35f3,
-       0x70a7, 0x0001, 0x7083, 0x0008, 0x1078, 0x315e, 0x0078, 0x315c,
-       0x7083, 0x0002, 0x707b, 0x0000, 0x0f7f, 0x007c, 0x7083, 0x0009,
-       0x1078, 0x35c4, 0x20a3, 0x1105, 0x20a3, 0x0100, 0x3430, 0x706c,
-       0xa005, 0x00c0, 0x3171, 0x1078, 0x3468, 0x0040, 0x3181, 0x0078,
-       0x317b, 0x20a9, 0x0008, 0x2099, 0x7b8e, 0x26a0, 0x53a6, 0x20a3,
-       0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078, 0x355a, 0x0078,
-       0x3183, 0x1078, 0x3020, 0x007c, 0x0f7e, 0x7078, 0xa005, 0x0040,
-       0x31cb, 0x2011, 0x353a, 0x1078, 0x4566, 0xa086, 0x0014, 0x00c0,
-       0x31c7, 0x2079, 0x7b80, 0x7a30, 0xa296, 0x1105, 0x00c0, 0x31c7,
-       0x7834, 0x2011, 0x0100, 0xa21e, 0x00c0, 0x31b0, 0x7a38, 0xd2fc,
-       0x0040, 0x31aa, 0x70a4, 0xa005, 0x00c0, 0x31aa, 0x1078, 0x35f3,
-       0x70a7, 0x0001, 0x7083, 0x000a, 0x1078, 0x31cd, 0x0078, 0x31cb,
-       0xa005, 0x00c0, 0x31c7, 0x7a38, 0xd2fc, 0x0040, 0x31bf, 0x70a4,
-       0xa005, 0x00c0, 0x31bf, 0x1078, 0x35f3, 0x70a7, 0x0001, 0x707f,
-       0x0000, 0x7083, 0x000e, 0x1078, 0x3251, 0x0078, 0x31cb, 0x7083,
-       0x0002, 0x707b, 0x0000, 0x0f7f, 0x007c, 0x7083, 0x000b, 0x2011,
-       0x7b0e, 0x22a0, 0x20a9, 0x0040, 0x2019, 0xffff, 0x43a4, 0x20a9,
-       0x0002, 0x2009, 0x0000, 0x41a4, 0x1078, 0x35c4, 0x20a3, 0x1106,
-       0x20a3, 0x0000, 0x6030, 0xa085, 0x0100, 0x2012, 0x2298, 0x20a9,
-       0x0042, 0x53a6, 0x60c3, 0x0084, 0x1078, 0x355a, 0x007c, 0x0f7e,
-       0x7078, 0xa005, 0x0040, 0x3211, 0x2011, 0x353a, 0x1078, 0x4566,
-       0xa086, 0x0084, 0x00c0, 0x320d, 0x2079, 0x7b80, 0x7a30, 0xa296,
-       0x1106, 0x00c0, 0x320d, 0x7834, 0xa005, 0x00c0, 0x320d, 0x7083,
-       0x000c, 0x1078, 0x3213, 0x0078, 0x3211, 0x7083, 0x0002, 0x707b,
-       0x0000, 0x0f7f, 0x007c, 0x7083, 0x000d, 0x1078, 0x35c4, 0x20a3,
-       0x1107, 0x20a3, 0x0000, 0x2099, 0x7b8e, 0x20a9, 0x0040, 0x53a6,
-       0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0084, 0x1078, 0x355a,
-       0x007c, 0x0f7e, 0x7078, 0xa005, 0x0040, 0x324f, 0x2011, 0x353a,
-       0x1078, 0x4566, 0xa086, 0x0084, 0x00c0, 0x324b, 0x2079, 0x7b80,
-       0x7a30, 0xa296, 0x1107, 0x00c0, 0x324b, 0x7834, 0xa005, 0x00c0,
-       0x324b, 0x707f, 0x0001, 0x1078, 0x35b6, 0x7083, 0x000e, 0x1078,
-       0x3251, 0x0078, 0x324f, 0x7083, 0x0002, 0x707b, 0x0000, 0x0f7f,
-       0x007c, 0x7083, 0x000f, 0x707b, 0x0000, 0x608b, 0xbc85, 0x608f,
-       0xb5b5, 0x6043, 0x0005, 0x6043, 0x0004, 0x2009, 0x07d0, 0x2011,
-       0x353a, 0x1078, 0x4559, 0x007c, 0x7078, 0xa005, 0x0040, 0x326c,
-       0x2011, 0x353a, 0x1078, 0x4566, 0x007c, 0x7083, 0x0011, 0x20e1,
-       0x9080, 0x20e1, 0x4000, 0x2099, 0x7b80, 0x20a1, 0x020b, 0x7478,
-       0xa480, 0x0018, 0xa080, 0x0007, 0xa084, 0x03f8, 0x8004, 0x20a8,
-       0x53a6, 0x60c3, 0x0014, 0x1078, 0x355a, 0x007c, 0x0f7e, 0x7078,
-       0xa005, 0x0040, 0x32b2, 0x2011, 0x353a, 0x1078, 0x4566, 0xa086,
-       0x0014, 0x00c0, 0x32b0, 0x2079, 0x7b80, 0x7a30, 0xa296, 0x1103,
-       0x00c0, 0x32b0, 0x7834, 0xa005, 0x00c0, 0x32b0, 0x7a38, 0xd2fc,
-       0x0040, 0x32aa, 0x70a4, 0xa005, 0x00c0, 0x32aa, 0x1078, 0x35f3,
-       0x70a7, 0x0001, 0x7083, 0x0012, 0x1078, 0x32b4, 0x0078, 0x32b2,
-       0x707b, 0x0000, 0x0f7f, 0x007c, 0x7083, 0x0013, 0x1078, 0x35d0,
-       0x20a3, 0x1103, 0x20a3, 0x0000, 0x3430, 0x2011, 0x7b8e, 0x706c,
-       0xa005, 0x00c0, 0x32ce, 0x714c, 0xa186, 0xffff, 0x0040, 0x32ce,
-       0x1078, 0x34fe, 0x0040, 0x32ce, 0x1078, 0x35f3, 0x20a9, 0x0008,
+       0x701b, 0x2eab, 0x007c, 0x702c, 0xa005, 0x00c0, 0x2ebd, 0x711c,
+       0x7024, 0x20a0, 0x7728, 0x2031, 0x0000, 0x2061, 0x77bd, 0x6224,
+       0x6328, 0x642c, 0x6530, 0x0078, 0x2e55, 0x7120, 0x810b, 0x0078,
+       0x250d, 0x127e, 0x0c7e, 0x0e7e, 0x2061, 0x0100, 0x2071, 0x7700,
+       0x6044, 0xd0a4, 0x00c0, 0x2eea, 0xd084, 0x0040, 0x2ed3, 0x1078,
+       0x3015, 0x0078, 0x2ee6, 0xd08c, 0x0040, 0x2eda, 0x1078, 0x2f2c,
+       0x0078, 0x2ee6, 0xd094, 0x0040, 0x2ee1, 0x1078, 0x2f0f, 0x0078,
+       0x2ee6, 0xd09c, 0x0040, 0x2ee6, 0x1078, 0x2ef4, 0x0e7f, 0x0c7f,
+       0x127f, 0x007c, 0x017e, 0x6128, 0xd19c, 0x00c0, 0x2ef1, 0xc19d,
+       0x612a, 0x017f, 0x0078, 0x2ee6, 0x6043, 0x0040, 0x6043, 0x0000,
+       0x706f, 0x0000, 0x7087, 0x0001, 0x70a7, 0x0000, 0x70bf, 0x0000,
+       0x2009, 0x7dc0, 0x200b, 0x0000, 0x707f, 0x0000, 0x7073, 0x000f,
+       0x2009, 0x000f, 0x2011, 0x3551, 0x1078, 0x4719, 0x007c, 0x7070,
+       0xa005, 0x00c0, 0x2f2b, 0x2011, 0x3551, 0x1078, 0x4689, 0x6043,
+       0x0020, 0x6043, 0x0000, 0x6044, 0xd08c, 0x00c0, 0x2f27, 0x7083,
+       0x0000, 0x6043, 0x0090, 0x6043, 0x0010, 0x0078, 0x2f2b, 0x7077,
+       0x0000, 0x0078, 0x2f2b, 0x007c, 0x7074, 0xa08a, 0x0003, 0x00c8,
+       0x2f35, 0x1079, 0x2f38, 0x0078, 0x2f37, 0x1078, 0x12cd, 0x007c,
+       0x2f3b, 0x2f8a, 0x3014, 0x0f7e, 0x7077, 0x0001, 0x20e1, 0xa000,
+       0x20e1, 0x8700, 0x1078, 0x1de4, 0x20e1, 0x9080, 0x20e1, 0x4000,
+       0x2079, 0x7c00, 0x207b, 0x2200, 0x7807, 0x00ef, 0x780b, 0x0000,
+       0x780f, 0x00ef, 0x7813, 0x0138, 0x7817, 0x0000, 0x781b, 0x0000,
+       0x781f, 0x0000, 0x7823, 0xffff, 0x7827, 0xffff, 0x782b, 0x0000,
+       0x782f, 0x0000, 0x2079, 0x7c0c, 0x207b, 0x1101, 0x7807, 0x0000,
+       0x2099, 0x7705, 0x20a1, 0x7c0e, 0x20a9, 0x0004, 0x53a3, 0x2079,
+       0x7c12, 0x207b, 0x0000, 0x7807, 0x0000, 0x2099, 0x7c00, 0x20a1,
+       0x020b, 0x20a9, 0x0014, 0x53a6, 0x60c3, 0x000c, 0x600f, 0x0000,
+       0x1078, 0x3578, 0x0f7f, 0x707b, 0x0000, 0x6043, 0x0008, 0x6043,
+       0x0000, 0x007c, 0x0d7e, 0x7078, 0x707b, 0x0000, 0xa025, 0x0040,
+       0x2ffe, 0x6020, 0xd0b4, 0x00c0, 0x2ffc, 0x7184, 0x81ff, 0x0040,
+       0x2fe5, 0xa486, 0x000c, 0x00c0, 0x2ff0, 0xa480, 0x0018, 0x8004,
+       0x20a8, 0x2011, 0x7c80, 0x2019, 0x7c00, 0x220c, 0x2304, 0xa106,
+       0x00c0, 0x2fbc, 0x8210, 0x8318, 0x00f0, 0x2fa5, 0x6043, 0x0004,
+       0x608b, 0xbc94, 0x608f, 0xf0f0, 0x6043, 0x0006, 0x7077, 0x0002,
+       0x7083, 0x0002, 0x0078, 0x2ffc, 0x2069, 0x7c80, 0x6930, 0xa18e,
+       0x1101, 0x00c0, 0x2ff0, 0x6834, 0xa005, 0x00c0, 0x2ff0, 0x6900,
+       0xa18c, 0x00ff, 0x00c0, 0x2fd0, 0x6804, 0xa005, 0x0040, 0x2fe5,
+       0x2011, 0x7c8e, 0x2019, 0x7705, 0x20a9, 0x0004, 0x220c, 0x2304,
+       0xa102, 0x0048, 0x2fe3, 0x00c0, 0x2ff0, 0x8210, 0x8318, 0x00f0,
+       0x2fd6, 0x0078, 0x2ff0, 0x7087, 0x0000, 0x20e1, 0x9080, 0x20e1,
+       0x4000, 0x2099, 0x7c80, 0x20a1, 0x020b, 0x20a9, 0x0014, 0x53a6,
+       0x6043, 0x0008, 0x6043, 0x0000, 0x6020, 0xd0b4, 0x00c0, 0x2ffc,
+       0x60c3, 0x000c, 0x1078, 0x3578, 0x0d7f, 0x007c, 0x6020, 0xd0b4,
+       0x00c0, 0x2ffc, 0x60c3, 0x000c, 0x2011, 0x7940, 0x2013, 0x0000,
+       0x707b, 0x0000, 0x20e1, 0x9080, 0x60a3, 0x0056, 0x60a7, 0x9575,
+       0x1078, 0x5693, 0x0078, 0x2ffc, 0x007c, 0x7080, 0xa08a, 0x001d,
+       0x00c8, 0x301e, 0x1079, 0x3021, 0x0078, 0x3020, 0x1078, 0x12cd,
+       0x007c, 0x3045, 0x3054, 0x3085, 0x309a, 0x30ca, 0x30f2, 0x3122,
+       0x314c, 0x317c, 0x31a2, 0x31eb, 0x320d, 0x3231, 0x3247, 0x326f,
+       0x3282, 0x328b, 0x32a4, 0x32d2, 0x32fa, 0x3328, 0x3352, 0x339a,
+       0x33cb, 0x33ed, 0x342b, 0x3451, 0x346a, 0x3477, 0x7003, 0x0007,
+       0x6004, 0xa084, 0xfff9, 0x6006, 0x007c, 0x608b, 0xbc94, 0x608f,
+       0xf0f0, 0x6043, 0x0002, 0x7083, 0x0001, 0x2009, 0x07d0, 0x2011,
+       0x3558, 0x1078, 0x467c, 0x007c, 0x0f7e, 0x7078, 0xa086, 0x0014,
+       0x00c0, 0x3083, 0x6043, 0x0000, 0x6020, 0xd0b4, 0x00c0, 0x3083,
+       0x2079, 0x7c80, 0x7a30, 0xa296, 0x1102, 0x00c0, 0x3081, 0x7834,
+       0xa005, 0x00c0, 0x3081, 0x7a38, 0xd2fc, 0x0040, 0x3077, 0x70a4,
+       0xa005, 0x00c0, 0x3077, 0x1078, 0x3611, 0x70a7, 0x0001, 0x2011,
+       0x3558, 0x1078, 0x4689, 0x7083, 0x0010, 0x1078, 0x328b, 0x0078,
+       0x3083, 0x707b, 0x0000, 0x0f7f, 0x007c, 0x7083, 0x0003, 0x6043,
+       0x0004, 0x1078, 0x35e2, 0x20a3, 0x1102, 0x20a3, 0x0000, 0x20a9,
+       0x000a, 0x20a3, 0x0000, 0x00f0, 0x3091, 0x60c3, 0x0014, 0x1078,
+       0x3578, 0x007c, 0x0f7e, 0x7078, 0xa005, 0x0040, 0x30c8, 0x2011,
+       0x3558, 0x1078, 0x4689, 0xa086, 0x0014, 0x00c0, 0x30c4, 0x2079,
+       0x7c80, 0x7a30, 0xa296, 0x1102, 0x00c0, 0x30c4, 0x7834, 0xa005,
+       0x00c0, 0x30c4, 0x7a38, 0xd2fc, 0x0040, 0x30be, 0x70a4, 0xa005,
+       0x00c0, 0x30be, 0x1078, 0x3611, 0x70a7, 0x0001, 0x7083, 0x0004,
+       0x1078, 0x30ca, 0x0078, 0x30c8, 0x7083, 0x0002, 0x707b, 0x0000,
+       0x0f7f, 0x007c, 0x7083, 0x0005, 0x1078, 0x35e2, 0x20a3, 0x1103,
+       0x20a3, 0x0000, 0x3430, 0x2011, 0x7c8e, 0x706c, 0xa005, 0x00c0,
+       0x30e4, 0x714c, 0xa186, 0xffff, 0x0040, 0x30e4, 0x1078, 0x351c,
+       0x0040, 0x30e4, 0x1078, 0x3611, 0x20a9, 0x0008, 0x2298, 0x26a0,
+       0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078,
+       0x3578, 0x007c, 0x0f7e, 0x7078, 0xa005, 0x0040, 0x3120, 0x2011,
+       0x3558, 0x1078, 0x4689, 0xa086, 0x0014, 0x00c0, 0x311c, 0x2079,
+       0x7c80, 0x7a30, 0xa296, 0x1103, 0x00c0, 0x311c, 0x7834, 0xa005,
+       0x00c0, 0x311c, 0x7a38, 0xd2fc, 0x0040, 0x3116, 0x70a4, 0xa005,
+       0x00c0, 0x3116, 0x1078, 0x3611, 0x70a7, 0x0001, 0x7083, 0x0006,
+       0x1078, 0x3122, 0x0078, 0x3120, 0x7083, 0x0002, 0x707b, 0x0000,
+       0x0f7f, 0x007c, 0x7083, 0x0007, 0x1078, 0x35e2, 0x20a3, 0x1104,
+       0x20a3, 0x0000, 0x3430, 0x2011, 0x7c8e, 0x706c, 0xa005, 0x00c0,
+       0x313e, 0x7150, 0xa186, 0xffff, 0x0040, 0x313e, 0xa180, 0x2329,
+       0x200c, 0xa18c, 0xff00, 0x810f, 0x1078, 0x351c, 0x20a9, 0x0008,
        0x2298, 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3,
-       0x0014, 0x1078, 0x355a, 0x007c, 0x0f7e, 0x7078, 0xa005, 0x0040,
-       0x3308, 0x2011, 0x353a, 0x1078, 0x4566, 0xa086, 0x0014, 0x00c0,
-       0x3306, 0x2079, 0x7b80, 0x7a30, 0xa296, 0x1104, 0x00c0, 0x3306,
-       0x7834, 0xa005, 0x00c0, 0x3306, 0x7a38, 0xd2fc, 0x0040, 0x3300,
-       0x70a4, 0xa005, 0x00c0, 0x3300, 0x1078, 0x35f3, 0x70a7, 0x0001,
-       0x7083, 0x0014, 0x1078, 0x330a, 0x0078, 0x3308, 0x707b, 0x0000,
-       0x0f7f, 0x007c, 0x7083, 0x0015, 0x1078, 0x35d0, 0x20a3, 0x1104,
-       0x20a3, 0x0000, 0x3430, 0x2011, 0x7b8e, 0x706c, 0xa006, 0x00c0,
-       0x3326, 0x7150, 0xa186, 0xffff, 0x0040, 0x3326, 0xa180, 0x2329,
-       0x200c, 0xa18c, 0xff00, 0x810f, 0x1078, 0x34fe, 0x20a9, 0x0008,
-       0x2298, 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3,
-       0x0014, 0x1078, 0x355a, 0x007c, 0x0f7e, 0x7078, 0xa005, 0x0040,
-       0x337a, 0x2011, 0x353a, 0x1078, 0x4566, 0xa086, 0x0014, 0x00c0,
-       0x3378, 0x2079, 0x7b80, 0x7a30, 0xa296, 0x1105, 0x00c0, 0x3378,
-       0x7834, 0x2011, 0x0100, 0xa21e, 0x00c0, 0x3361, 0x7a38, 0xd2f4,
-       0x0040, 0x3354, 0x70bf, 0x0008, 0xd2fc, 0x0040, 0x335f, 0x70a4,
-       0xa005, 0x00c0, 0x335f, 0x1078, 0x35f3, 0x70a7, 0x0001, 0x0078,
-       0x3372, 0xa005, 0x00c0, 0x3378, 0x7a38, 0xd2fc, 0x0040, 0x3370,
-       0x70a4, 0xa005, 0x00c0, 0x3370, 0x1078, 0x35f3, 0x70a7, 0x0001,
-       0x707f, 0x0000, 0x7083, 0x0016, 0x1078, 0x337c, 0x0078, 0x337a,
-       0x707b, 0x0000, 0x0f7f, 0x007c, 0x20e1, 0x9080, 0x20e1, 0x4000,
-       0x2099, 0x7b80, 0x20a1, 0x020b, 0x20a9, 0x000e, 0x53a6, 0x3430,
-       0x2011, 0x7b8e, 0x7083, 0x0017, 0x0078, 0x3390, 0x7083, 0x001b,
-       0x706c, 0xa005, 0x00c0, 0x339a, 0x1078, 0x3468, 0x0040, 0x33aa,
-       0x0078, 0x33a4, 0x20a9, 0x0008, 0x2099, 0x7b8e, 0x26a0, 0x53a6,
-       0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078, 0x355a,
-       0x0078, 0x33ac, 0x1078, 0x3020, 0x007c, 0x0f7e, 0x7078, 0xa005,
-       0x0040, 0x33cd, 0x2011, 0x353a, 0x1078, 0x4566, 0xa086, 0x0084,
-       0x00c0, 0x33cb, 0x2079, 0x7b80, 0x7a30, 0xa296, 0x1106, 0x00c0,
-       0x33cb, 0x7834, 0xa005, 0x00c0, 0x33cb, 0x7083, 0x0018, 0x1078,
-       0x33cf, 0x0078, 0x33cd, 0x707b, 0x0000, 0x0f7f, 0x007c, 0x7083,
-       0x0019, 0x1078, 0x35d0, 0x20a3, 0x1106, 0x20a3, 0x0000, 0x3430,
-       0x2099, 0x7b8e, 0x2039, 0x7b0e, 0x27a0, 0x20a9, 0x0040, 0x53a3,
-       0x2728, 0x2514, 0x8207, 0xa084, 0x00ff, 0x8000, 0x2018, 0xa294,
-       0x00ff, 0x8007, 0xa205, 0x202a, 0x6030, 0x2310, 0x8214, 0xa2a0,
-       0x7b0e, 0x2414, 0xa38c, 0x0001, 0x0040, 0x33fa, 0xa294, 0xff00,
-       0x0078, 0x33fd, 0xa294, 0x00ff, 0x8007, 0xa215, 0x2222, 0x2798,
-       0x26a0, 0x20a9, 0x0040, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000,
-       0x60c3, 0x0084, 0x1078, 0x355a, 0x007c, 0x0f7e, 0x7078, 0xa005,
-       0x0040, 0x3431, 0x2011, 0x353a, 0x1078, 0x4566, 0xa086, 0x0084,
-       0x00c0, 0x342f, 0x2079, 0x7b80, 0x7a30, 0xa296, 0x1107, 0x00c0,
-       0x342f, 0x7834, 0xa005, 0x00c0, 0x342f, 0x707f, 0x0001, 0x1078,
-       0x35b6, 0x7083, 0x001a, 0x1078, 0x3433, 0x0078, 0x3431, 0x707b,
-       0x0000, 0x0f7f, 0x007c, 0x7083, 0x001b, 0x20e1, 0x9080, 0x20e1,
-       0x4000, 0x2099, 0x7b80, 0x20a1, 0x020b, 0x7478, 0xa480, 0x0018,
+       0x0014, 0x1078, 0x3578, 0x007c, 0x0f7e, 0x7078, 0xa005, 0x0040,
+       0x317a, 0x2011, 0x3558, 0x1078, 0x4689, 0xa086, 0x0014, 0x00c0,
+       0x3176, 0x2079, 0x7c80, 0x7a30, 0xa296, 0x1104, 0x00c0, 0x3176,
+       0x7834, 0xa005, 0x00c0, 0x3176, 0x7a38, 0xd2fc, 0x0040, 0x3170,
+       0x70a4, 0xa005, 0x00c0, 0x3170, 0x1078, 0x3611, 0x70a7, 0x0001,
+       0x7083, 0x0008, 0x1078, 0x317c, 0x0078, 0x317a, 0x7083, 0x0002,
+       0x707b, 0x0000, 0x0f7f, 0x007c, 0x7083, 0x0009, 0x1078, 0x35e2,
+       0x20a3, 0x1105, 0x20a3, 0x0100, 0x3430, 0x706c, 0xa005, 0x00c0,
+       0x318f, 0x1078, 0x3486, 0x0040, 0x319f, 0x0078, 0x3199, 0x20a9,
+       0x0008, 0x2099, 0x7c8e, 0x26a0, 0x53a6, 0x20a3, 0x0000, 0x20a3,
+       0x0000, 0x60c3, 0x0014, 0x1078, 0x3578, 0x0078, 0x31a1, 0x1078,
+       0x303e, 0x007c, 0x0f7e, 0x7078, 0xa005, 0x0040, 0x31e9, 0x2011,
+       0x3558, 0x1078, 0x4689, 0xa086, 0x0014, 0x00c0, 0x31e5, 0x2079,
+       0x7c80, 0x7a30, 0xa296, 0x1105, 0x00c0, 0x31e5, 0x7834, 0x2011,
+       0x0100, 0xa21e, 0x00c0, 0x31ce, 0x7a38, 0xd2fc, 0x0040, 0x31c8,
+       0x70a4, 0xa005, 0x00c0, 0x31c8, 0x1078, 0x3611, 0x70a7, 0x0001,
+       0x7083, 0x000a, 0x1078, 0x31eb, 0x0078, 0x31e9, 0xa005, 0x00c0,
+       0x31e5, 0x7a38, 0xd2fc, 0x0040, 0x31dd, 0x70a4, 0xa005, 0x00c0,
+       0x31dd, 0x1078, 0x3611, 0x70a7, 0x0001, 0x707f, 0x0000, 0x7083,
+       0x000e, 0x1078, 0x326f, 0x0078, 0x31e9, 0x7083, 0x0002, 0x707b,
+       0x0000, 0x0f7f, 0x007c, 0x7083, 0x000b, 0x2011, 0x7c0e, 0x22a0,
+       0x20a9, 0x0040, 0x2019, 0xffff, 0x43a4, 0x20a9, 0x0002, 0x2009,
+       0x0000, 0x41a4, 0x1078, 0x35e2, 0x20a3, 0x1106, 0x20a3, 0x0000,
+       0x6030, 0xa085, 0x0100, 0x2012, 0x2298, 0x20a9, 0x0042, 0x53a6,
+       0x60c3, 0x0084, 0x1078, 0x3578, 0x007c, 0x0f7e, 0x7078, 0xa005,
+       0x0040, 0x322f, 0x2011, 0x3558, 0x1078, 0x4689, 0xa086, 0x0084,
+       0x00c0, 0x322b, 0x2079, 0x7c80, 0x7a30, 0xa296, 0x1106, 0x00c0,
+       0x322b, 0x7834, 0xa005, 0x00c0, 0x322b, 0x7083, 0x000c, 0x1078,
+       0x3231, 0x0078, 0x322f, 0x7083, 0x0002, 0x707b, 0x0000, 0x0f7f,
+       0x007c, 0x7083, 0x000d, 0x1078, 0x35e2, 0x20a3, 0x1107, 0x20a3,
+       0x0000, 0x2099, 0x7c8e, 0x20a9, 0x0040, 0x53a6, 0x20a3, 0x0000,
+       0x20a3, 0x0000, 0x60c3, 0x0084, 0x1078, 0x3578, 0x007c, 0x0f7e,
+       0x7078, 0xa005, 0x0040, 0x326d, 0x2011, 0x3558, 0x1078, 0x4689,
+       0xa086, 0x0084, 0x00c0, 0x3269, 0x2079, 0x7c80, 0x7a30, 0xa296,
+       0x1107, 0x00c0, 0x3269, 0x7834, 0xa005, 0x00c0, 0x3269, 0x707f,
+       0x0001, 0x1078, 0x35d4, 0x7083, 0x000e, 0x1078, 0x326f, 0x0078,
+       0x326d, 0x7083, 0x0002, 0x707b, 0x0000, 0x0f7f, 0x007c, 0x7083,
+       0x000f, 0x707b, 0x0000, 0x608b, 0xbc85, 0x608f, 0xb5b5, 0x6043,
+       0x0005, 0x6043, 0x0004, 0x2009, 0x07d0, 0x2011, 0x3558, 0x1078,
+       0x467c, 0x007c, 0x7078, 0xa005, 0x0040, 0x328a, 0x2011, 0x3558,
+       0x1078, 0x4689, 0x007c, 0x7083, 0x0011, 0x20e1, 0x9080, 0x20e1,
+       0x4000, 0x2099, 0x7c80, 0x20a1, 0x020b, 0x7478, 0xa480, 0x0018,
        0xa080, 0x0007, 0xa084, 0x03f8, 0x8004, 0x20a8, 0x53a6, 0x60c3,
-       0x0084, 0x1078, 0x355a, 0x007c, 0x7078, 0xa005, 0x0040, 0x3458,
-       0x2011, 0x353a, 0x1078, 0x4566, 0x7083, 0x001c, 0x1078, 0x3459,
-       0x007c, 0x707b, 0x0000, 0x608b, 0xbc85, 0x608f, 0xb5b5, 0x6043,
-       0x0001, 0x2009, 0x07d0, 0x2011, 0x353a, 0x1078, 0x4559, 0x007c,
-       0x087e, 0x097e, 0x2029, 0x7652, 0x252c, 0x20a9, 0x0008, 0x2041,
-       0x7b0e, 0x28a0, 0x2099, 0x7b8e, 0x53a3, 0x20a9, 0x0008, 0x2011,
-       0x0007, 0xd5d4, 0x0040, 0x347e, 0x2011, 0x0000, 0x2800, 0xa200,
-       0x200c, 0xa1a6, 0xffff, 0x00c0, 0x3490, 0xd5d4, 0x0040, 0x348b,
-       0x8210, 0x0078, 0x348c, 0x8211, 0x00f0, 0x347e, 0x0078, 0x34f5,
-       0x82ff, 0x00c0, 0x34a2, 0xd5d4, 0x0040, 0x349c, 0xa1a6, 0x3fff,
-       0x0040, 0x3488, 0x0078, 0x34a0, 0xa1a6, 0x3fff, 0x0040, 0x34f5,
-       0xa18d, 0xc000, 0x20a9, 0x0010, 0x2019, 0x0001, 0xd5d4, 0x0040,
-       0x34ab, 0x2019, 0x0010, 0x2120, 0xd5d4, 0x0040, 0x34b2, 0x8423,
-       0x0078, 0x34b3, 0x8424, 0x00c8, 0x34c0, 0xd5d4, 0x0040, 0x34bb,
-       0x8319, 0x0078, 0x34bc, 0x8318, 0x00f0, 0x34ac, 0x0078, 0x34f5,
-       0x23a8, 0x2021, 0x0001, 0x8426, 0x8425, 0x00f0, 0x34c4, 0x2328,
-       0x8529, 0xa2be, 0x0007, 0x0040, 0x34d8, 0x007e, 0x2039, 0x0007,
-       0x2200, 0xa73a, 0x007f, 0x27a8, 0xa5a8, 0x0010, 0x00f0, 0x34d4,
-       0x754e, 0xa5c8, 0x2329, 0x292c, 0xa5ac, 0x00ff, 0x6532, 0x60e7,
-       0x0000, 0x65ea, 0x2018, 0x2304, 0xa405, 0x201a, 0x706f, 0x0001,
-       0x26a0, 0x2898, 0x20a9, 0x0008, 0x53a6, 0x20a3, 0x0000, 0x20a3,
-       0x0000, 0xa085, 0x0001, 0x0078, 0x34fb, 0xa006, 0x0078, 0x34fb,
-       0xa006, 0x1078, 0x12cd, 0x097f, 0x087f, 0x007c, 0x2118, 0x2021,
-       0x0000, 0x2001, 0x0007, 0xa39a, 0x0010, 0x0048, 0x350b, 0x8420,
-       0x8001, 0x0078, 0x3503, 0x2118, 0x84ff, 0x0040, 0x3514, 0xa39a,
-       0x0010, 0x8421, 0x00c0, 0x350f, 0x2021, 0x0001, 0x83ff, 0x0040,
-       0x351d, 0x8423, 0x8319, 0x00c0, 0x3519, 0xa238, 0x2704, 0xa42c,
-       0x00c0, 0x3532, 0xa405, 0x203a, 0x714e, 0xa1a0, 0x2329, 0x242c,
-       0xa5ac, 0x00ff, 0x6532, 0x60e7, 0x0000, 0x65ea, 0x706f, 0x0001,
-       0xa084, 0x0000, 0x007c, 0x0e7e, 0x2071, 0x7600, 0x7073, 0x0000,
-       0x0e7f, 0x007c, 0x0e7e, 0x0f7e, 0x2079, 0x0100, 0x2071, 0x0140,
-       0x1078, 0x557a, 0x7004, 0xa084, 0x4000, 0x0040, 0x354b, 0x7003,
-       0x1000, 0x7003, 0x0000, 0x127e, 0x2091, 0x8000, 0x2071, 0x7620,
-       0x2073, 0x0000, 0x7843, 0x0090, 0x7843, 0x0010, 0x127f, 0x0f7f,
-       0x0e7f, 0x007c, 0x127e, 0x2091, 0x8000, 0x2011, 0x7840, 0x2013,
-       0x0000, 0x707b, 0x0000, 0x127f, 0x20e1, 0x9080, 0x60a3, 0x0056,
-       0x60a7, 0x9575, 0x1078, 0x5571, 0x2009, 0x07d0, 0x2011, 0x353a,
-       0x1078, 0x45f6, 0x007c, 0x017e, 0x027e, 0x0c7e, 0x127e, 0x2091,
-       0x8000, 0x2009, 0x00f7, 0x1078, 0x35dc, 0x2061, 0x7849, 0x601b,
-       0x0000, 0x601f, 0x0000, 0x2061, 0x7600, 0x6003, 0x0001, 0x2061,
-       0x0100, 0x6043, 0x0090, 0x6043, 0x0010, 0x2009, 0x001e, 0x2011,
-       0x3598, 0x1078, 0x4559, 0x127f, 0x0c7f, 0x027f, 0x017f, 0x007c,
-       0x0e7e, 0x007e, 0x127e, 0x2091, 0x8000, 0x2071, 0x0100, 0x1078,
-       0x557a, 0x2071, 0x0140, 0x7004, 0xa084, 0x4000, 0x0040, 0x35ac,
-       0x7003, 0x1000, 0x7003, 0x0000, 0x2001, 0x0001, 0x1078, 0x2025,
-       0x1078, 0x3573, 0x127f, 0x007f, 0x0e7f, 0x007c, 0x20a9, 0x0040,
-       0x20a1, 0x7cc0, 0x2099, 0x7b8e, 0x3304, 0x8007, 0x20a2, 0x9398,
-       0x94a0, 0x00f0, 0x35bc, 0x007c, 0x20e1, 0x9080, 0x20e1, 0x4000,
-       0x2099, 0x7b00, 0x20a1, 0x020b, 0x20a9, 0x000c, 0x53a6, 0x007c,
-       0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, 0x7b80, 0x20a1, 0x020b,
-       0x20a9, 0x000c, 0x53a6, 0x007c, 0x0c7e, 0x007e, 0x2061, 0x0100,
-       0x810f, 0x2001, 0x762c, 0x2004, 0xa005, 0x00c0, 0x35ed, 0x6030,
-       0xa084, 0x00ff, 0xa105, 0x0078, 0x35ef, 0xa185, 0x00f7, 0x604a,
-       0x007f, 0x0c7f, 0x007c, 0x017e, 0x047e, 0x2001, 0x7652, 0x2004,
-       0xd0a4, 0x0040, 0x3606, 0xa006, 0x2020, 0x2009, 0x002a, 0x1078,
-       0x7536, 0x2001, 0x760c, 0x200c, 0xc195, 0x2102, 0x2019, 0x002a,
-       0x1078, 0x2293, 0x047f, 0x017f, 0x007c, 0x157e, 0x20a9, 0x00ff,
-       0x2009, 0x7720, 0xa006, 0x200a, 0x8108, 0x00f0, 0x3613, 0x157f,
-       0x007c, 0x0d7e, 0x037e, 0x157e, 0x137e, 0x147e, 0x2069, 0x7651,
-       0xa006, 0x6002, 0x6007, 0x0707, 0x600a, 0x600e, 0x6012, 0xa198,
-       0x2329, 0x231c, 0xa39c, 0x00ff, 0x6316, 0x20a9, 0x0004, 0xac98,
-       0x0006, 0x23a0, 0x40a4, 0x20a9, 0x0004, 0xac98, 0x000a, 0x23a0,
-       0x40a4, 0x603e, 0x6042, 0x604e, 0x6052, 0x6056, 0x605a, 0x605e,
-       0x6062, 0x6066, 0x606a, 0x606e, 0x6072, 0x6076, 0x607a, 0x607e,
-       0x6082, 0x6086, 0x608a, 0x608e, 0x6092, 0x6096, 0x609a, 0x609e,
-       0x61a2, 0x604a, 0x6810, 0x603a, 0x680c, 0x6046, 0x6814, 0xa084,
-       0x00ff, 0x6042, 0x147f, 0x137f, 0x157f, 0x037f, 0x0d7f, 0x007c,
-       0x127e, 0x2091, 0x8000, 0x6944, 0xa1b4, 0x00ff, 0xa682, 0x0010,
-       0x00c8, 0x370d, 0xa18c, 0xff00, 0x810f, 0xa182, 0x00ff, 0x00c8,
-       0x3713, 0x2001, 0x760c, 0x2004, 0xa084, 0x0003, 0x00c0, 0x36f6,
-       0xa188, 0x7720, 0x2104, 0xa065, 0x0040, 0x36e4, 0x6004, 0xa084,
-       0x00ff, 0xa08e, 0x0006, 0x00c0, 0x36ea, 0x6078, 0xa00d, 0x0040,
-       0x368f, 0xa680, 0x75ca, 0x2004, 0xa10c, 0x00c0, 0x36de, 0x607c,
-       0xa00d, 0x0040, 0x36ab, 0xa680, 0x75ca, 0x2004, 0xa10c, 0x0040,
-       0x36ab, 0x694c, 0xd1fc, 0x00c0, 0x36a1, 0x1078, 0x37a6, 0x0078,
-       0x36d9, 0x1078, 0x3777, 0x694c, 0xd1ec, 0x00c0, 0x36d9, 0x1078,
-       0x38bf, 0x0078, 0x36d9, 0x694c, 0xa184, 0xa000, 0x0040, 0x36c9,
-       0xd1ec, 0x0040, 0x36c2, 0xd1fc, 0x0040, 0x36ba, 0x1078, 0x38d6,
-       0x0078, 0x36c5, 0xa680, 0x75ca, 0x200c, 0x607c, 0xa105, 0x607e,
-       0x0078, 0x36c9, 0xd1fc, 0x0040, 0x36c9, 0x1078, 0x3777, 0x0078,
-       0x36d9, 0x6050, 0xa00d, 0x0040, 0x36d4, 0x2d00, 0x200a, 0x6803,
-       0x0000, 0x6052, 0x0078, 0x36d9, 0x2d00, 0x6052, 0x604e, 0x6803,
-       0x0000, 0x1078, 0x483c, 0xa006, 0x127f, 0x007c, 0x2001, 0x0005,
-       0x2009, 0x0000, 0x0078, 0x3717, 0x2001, 0x0028, 0x2009, 0x0000,
-       0x0078, 0x3717, 0xa082, 0x0006, 0x00c8, 0x36f6, 0x60a0, 0xd0bc,
-       0x0040, 0x3685, 0x2001, 0x0028, 0x0078, 0x3709, 0x2009, 0x760c,
-       0x210c, 0xd18c, 0x0040, 0x3700, 0x2001, 0x0004, 0x0078, 0x3709,
-       0xd184, 0x0040, 0x3707, 0x2001, 0x0004, 0x0078, 0x3709, 0x2001,
-       0x0029, 0x2009, 0x0000, 0x0078, 0x3717, 0x2001, 0x0029, 0x2009,
-       0x0000, 0x0078, 0x3717, 0x2001, 0x0029, 0x2009, 0x0000, 0xa005,
-       0x127f, 0x007c, 0x6944, 0xa1b4, 0x00ff, 0xa682, 0x0010, 0x00c8,
-       0x375c, 0xa18c, 0xff00, 0x810f, 0xa182, 0x00ff, 0x00c8, 0x374c,
-       0xa188, 0x7720, 0x2104, 0xa065, 0x0040, 0x374c, 0x6004, 0xa084,
-       0x00ff, 0xa08e, 0x0006, 0x00c0, 0x3752, 0x684c, 0xd0ec, 0x0040,
-       0x373f, 0x1078, 0x38d6, 0x1078, 0x3777, 0x0078, 0x3747, 0x1078,
-       0x3777, 0x684c, 0xd0fc, 0x0040, 0x3747, 0x1078, 0x38bf, 0x1078,
-       0x38ea, 0xa006, 0x0078, 0x3760, 0x2001, 0x0028, 0x2009, 0x0000,
-       0x0078, 0x3760, 0xa082, 0x0006, 0x0048, 0x3735, 0x2001, 0x0029,
-       0x2009, 0x0000, 0x0078, 0x3760, 0x2001, 0x0029, 0x2009, 0x0000,
-       0xa005, 0x007c, 0x127e, 0x2091, 0x8000, 0x6050, 0xa00d, 0x0040,
-       0x3770, 0x2d00, 0x200a, 0x6803, 0x0000, 0x6052, 0x127f, 0x007c,
-       0x2d00, 0x6052, 0x604e, 0x6803, 0x0000, 0x0078, 0x376e, 0x127e,
-       0x2091, 0x8000, 0x604c, 0xa005, 0x0040, 0x3783, 0x6802, 0x2d00,
-       0x604e, 0x127f, 0x007c, 0x2d00, 0x6052, 0x604e, 0x6803, 0x0000,
-       0x0078, 0x3781, 0x127e, 0x2091, 0x8000, 0x604c, 0xa06d, 0x0040,
-       0x3798, 0x6800, 0xa005, 0x00c0, 0x3796, 0x6052, 0x604e, 0xad05,
-       0x127f, 0x007c, 0x604c, 0xa06d, 0x0040, 0x37a5, 0x6800, 0xa005,
-       0x00c0, 0x37a3, 0x6052, 0x604e, 0xad05, 0x007c, 0x6803, 0x0000,
-       0x6084, 0xa00d, 0x0040, 0x37b0, 0x2d00, 0x200a, 0x6086, 0x007c,
-       0x2d00, 0x6086, 0x6082, 0x0078, 0x37af, 0x127e, 0x0c7e, 0x027e,
-       0x2091, 0x8000, 0x6218, 0x2260, 0x6200, 0xa005, 0x0040, 0x37c3,
-       0xc285, 0x0078, 0x37c4, 0xc284, 0x6202, 0x027f, 0x0c7f, 0x127f,
-       0x007c, 0x127e, 0x0c7e, 0x2091, 0x8000, 0x6218, 0x2260, 0x6204,
-       0xa294, 0xff00, 0xa215, 0x6206, 0x0c7f, 0x127f, 0x007c, 0x127e,
-       0x0c7e, 0x2091, 0x8000, 0x6218, 0x2260, 0x6204, 0xa294, 0x00ff,
-       0x8007, 0xa215, 0x6206, 0x0c7f, 0x127f, 0x007c, 0x027e, 0xa182,
-       0x00ff, 0x0048, 0x37ef, 0xa085, 0x0001, 0x0078, 0x3803, 0xa190,
-       0x7720, 0x2204, 0xa065, 0x00c0, 0x3802, 0x017e, 0x0d7e, 0x1078,
-       0x130c, 0x2d60, 0x0d7f, 0x017f, 0x0040, 0x37eb, 0x2c00, 0x2012,
-       0x1078, 0x3619, 0xa006, 0x027f, 0x007c, 0x027e, 0xa182, 0x00ff,
-       0x0048, 0x380e, 0xa085, 0x0001, 0x0078, 0x381b, 0x0d7e, 0xa190,
-       0x7720, 0x2204, 0xa06d, 0x0040, 0x3819, 0x2013, 0x0000, 0x1078,
-       0x1340, 0x0d7f, 0xa006, 0x027f, 0x007c, 0x017e, 0xa182, 0x00ff,
-       0x0048, 0x3826, 0xa085, 0x0001, 0x0078, 0x382d, 0xa188, 0x7720,
-       0x2104, 0xa065, 0x0040, 0x3822, 0xa006, 0x017f, 0x007c, 0x0d7e,
-       0x157e, 0x137e, 0x147e, 0x600b, 0x0000, 0x600f, 0x0000, 0x6000,
-       0xc08c, 0x6002, 0x2069, 0x7b8e, 0x6808, 0x605e, 0x6810, 0x6062,
-       0x6138, 0xa10a, 0x0048, 0x3845, 0x603a, 0x6814, 0x6066, 0x2099,
-       0x7b96, 0xac88, 0x000a, 0x21a0, 0x20a9, 0x0004, 0x53a3, 0x2099,
-       0x7b9a, 0xac88, 0x0006, 0x21a0, 0x20a9, 0x0004, 0x53a3, 0x2069,
-       0x7bae, 0x6808, 0x606a, 0x690c, 0x616e, 0x6810, 0x6072, 0x6818,
-       0x6076, 0xa182, 0x0211, 0x00c8, 0x3869, 0x2009, 0x0008, 0x0078,
-       0x3893, 0xa182, 0x0259, 0x00c8, 0x3871, 0x2009, 0x0007, 0x0078,
-       0x3893, 0xa182, 0x02c1, 0x00c8, 0x3879, 0x2009, 0x0006, 0x0078,
-       0x3893, 0xa182, 0x0349, 0x00c8, 0x3881, 0x2009, 0x0005, 0x0078,
-       0x3893, 0xa182, 0x0421, 0x00c8, 0x3889, 0x2009, 0x0004, 0x0078,
-       0x3893, 0xa182, 0x0581, 0x00c8, 0x3891, 0x2009, 0x0003, 0x0078,
-       0x3893, 0x2009, 0x0002, 0x6192, 0x147f, 0x137f, 0x157f, 0x0d7f,
-       0x007c, 0x0e7e, 0x2071, 0x7b8d, 0x2e04, 0x6896, 0x2071, 0x7b8e,
-       0x7004, 0x689a, 0x701c, 0x689e, 0x0e7f, 0x007c, 0x2001, 0x75ca,
-       0xa600, 0x2004, 0x127e, 0x2091, 0x8000, 0x6178, 0xa10d, 0x617a,
-       0x127f, 0x007c, 0x2001, 0x75ca, 0xa600, 0x2004, 0x8002, 0x127e,
-       0x2091, 0x8000, 0x6178, 0xa10c, 0x617a, 0x127f, 0x007c, 0x2001,
-       0x75ca, 0xa600, 0x2004, 0x8002, 0x127e, 0x2091, 0x8000, 0x617c,
-       0xa10c, 0x617e, 0x127f, 0x0078, 0x38cf, 0x1078, 0x3762, 0x1078,
-       0x3930, 0x00c0, 0x38cd, 0x1078, 0x38ea, 0x007c, 0x2001, 0x75ca,
-       0xa600, 0x2004, 0x127e, 0x2091, 0x8000, 0x617c, 0xa10d, 0x617e,
-       0x127f, 0x0078, 0x38e5, 0x1078, 0x37a6, 0x1078, 0x38f4, 0x00c0,
-       0x38e3, 0x007c, 0x127e, 0x2091, 0x8000, 0x1078, 0x483c, 0x127f,
-       0x007c, 0xa01e, 0x0078, 0x38f6, 0x2019, 0x0001, 0xa00e, 0x127e,
-       0x2091, 0x8000, 0x604c, 0x2068, 0x6000, 0xd0dc, 0x00c0, 0x3916,
-       0x8dff, 0x0040, 0x392b, 0x83ff, 0x0040, 0x390e, 0x6844, 0xa084,
-       0x00ff, 0xa606, 0x0040, 0x391b, 0x0078, 0x3916, 0x683c, 0xa406,
-       0x00c0, 0x3916, 0x6840, 0xa506, 0x0040, 0x391b, 0x2d08, 0x6800,
-       0x2068, 0x0078, 0x3900, 0x6a00, 0x604c, 0xad06, 0x00c0, 0x3923,
-       0x624e, 0x0078, 0x3926, 0xa180, 0x0000, 0x2202, 0x82ff, 0x00c0,
-       0x392b, 0x6152, 0x8dff, 0x127f, 0x007c, 0xa01e, 0x0078, 0x3932,
-       0x2019, 0x0001, 0xa00e, 0x6080, 0x2068, 0x8dff, 0x0040, 0x3960,
-       0x83ff, 0x0040, 0x3943, 0x6844, 0xa084, 0x00ff, 0xa606, 0x0040,
-       0x3950, 0x0078, 0x394b, 0x683c, 0xa406, 0x00c0, 0x394b, 0x6840,
-       0xa506, 0x0040, 0x3950, 0x2d08, 0x6800, 0x2068, 0x0078, 0x3935,
-       0x6a00, 0x6080, 0xad06, 0x00c0, 0x3958, 0x6282, 0x0078, 0x395b,
-       0xa180, 0x0000, 0x2202, 0x82ff, 0x00c0, 0x3960, 0x6186, 0x8dff,
-       0x007c, 0x2001, 0x75ca, 0xa600, 0x2004, 0x6178, 0xa10c, 0x0040,
-       0x396b, 0x2011, 0x0001, 0x617c, 0xa10c, 0x0040, 0x3971, 0xa295,
-       0x0002, 0x007c, 0x1078, 0x39bd, 0x0040, 0x397a, 0x1078, 0x6a0b,
-       0x0078, 0x397c, 0xa085, 0x0001, 0x007c, 0x1078, 0x39bd, 0x0040,
-       0x3985, 0x1078, 0x699a, 0x0078, 0x3987, 0xa085, 0x0001, 0x007c,
-       0x1078, 0x39bd, 0x0040, 0x3990, 0x1078, 0x69e0, 0x0078, 0x3992,
-       0xa085, 0x0001, 0x007c, 0x1078, 0x39bd, 0x0040, 0x399b, 0x1078,
-       0x69b6, 0x0078, 0x399d, 0xa085, 0x0001, 0x007c, 0x127e, 0x007e,
-       0x0d7e, 0x2091, 0x8000, 0x6080, 0xa06d, 0x0040, 0x39b5, 0x6800,
-       0x007e, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x6b34,
-       0x1078, 0x3a72, 0x007f, 0x0078, 0x39a4, 0x6083, 0x0000, 0x6087,
-       0x0000, 0x0d7f, 0x007f, 0x127f, 0x007c, 0x609c, 0xd0a4, 0x007c,
-       0x0f7e, 0x2079, 0x7651, 0x7804, 0xd0a4, 0x0040, 0x39e9, 0x157e,
-       0x0c7e, 0x20a9, 0x007f, 0x2009, 0x0000, 0x017e, 0x1078, 0x381d,
-       0x00c0, 0x39dd, 0x6004, 0xa084, 0xff00, 0x8007, 0xa086, 0x0006,
-       0x00c0, 0x39dd, 0x6000, 0xc0ed, 0x6002, 0x017f, 0x8108, 0x00f0,
-       0x39cd, 0x0c7f, 0x157f, 0x2009, 0x07d0, 0x2011, 0x39eb, 0x1078,
-       0x45f6, 0x0f7f, 0x007c, 0x2011, 0x39eb, 0x1078, 0x4566, 0x157e,
-       0x0c7e, 0x20a9, 0x007f, 0x2009, 0x0000, 0x017e, 0x1078, 0x381d,
-       0x00c0, 0x3a17, 0x6000, 0xd0ec, 0x0040, 0x3a17, 0x047e, 0x62a0,
-       0xa294, 0x00ff, 0x8227, 0xa006, 0x2009, 0x0029, 0x1078, 0x7536,
-       0x6000, 0xc0e5, 0xc0ec, 0x6002, 0x2019, 0x0029, 0x1078, 0x495a,
-       0x1078, 0x489d, 0x2009, 0x0000, 0x1078, 0x7370, 0x047f, 0x017f,
-       0x8108, 0x00f0, 0x39f5, 0x0c7f, 0x157f, 0x007c, 0x0c7e, 0x6018,
-       0x2060, 0x6000, 0xc0ec, 0x6002, 0x0c7f, 0x007c, 0x2071, 0x76ff,
+       0x0014, 0x1078, 0x3578, 0x007c, 0x0f7e, 0x7078, 0xa005, 0x0040,
+       0x32d0, 0x2011, 0x3558, 0x1078, 0x4689, 0xa086, 0x0014, 0x00c0,
+       0x32ce, 0x2079, 0x7c80, 0x7a30, 0xa296, 0x1103, 0x00c0, 0x32ce,
+       0x7834, 0xa005, 0x00c0, 0x32ce, 0x7a38, 0xd2fc, 0x0040, 0x32c8,
+       0x70a4, 0xa005, 0x00c0, 0x32c8, 0x1078, 0x3611, 0x70a7, 0x0001,
+       0x7083, 0x0012, 0x1078, 0x32d2, 0x0078, 0x32d0, 0x707b, 0x0000,
+       0x0f7f, 0x007c, 0x7083, 0x0013, 0x1078, 0x35ee, 0x20a3, 0x1103,
+       0x20a3, 0x0000, 0x3430, 0x2011, 0x7c8e, 0x706c, 0xa005, 0x00c0,
+       0x32ec, 0x714c, 0xa186, 0xffff, 0x0040, 0x32ec, 0x1078, 0x351c,
+       0x0040, 0x32ec, 0x1078, 0x3611, 0x20a9, 0x0008, 0x2298, 0x26a0,
+       0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078,
+       0x3578, 0x007c, 0x0f7e, 0x7078, 0xa005, 0x0040, 0x3326, 0x2011,
+       0x3558, 0x1078, 0x4689, 0xa086, 0x0014, 0x00c0, 0x3324, 0x2079,
+       0x7c80, 0x7a30, 0xa296, 0x1104, 0x00c0, 0x3324, 0x7834, 0xa005,
+       0x00c0, 0x3324, 0x7a38, 0xd2fc, 0x0040, 0x331e, 0x70a4, 0xa005,
+       0x00c0, 0x331e, 0x1078, 0x3611, 0x70a7, 0x0001, 0x7083, 0x0014,
+       0x1078, 0x3328, 0x0078, 0x3326, 0x707b, 0x0000, 0x0f7f, 0x007c,
+       0x7083, 0x0015, 0x1078, 0x35ee, 0x20a3, 0x1104, 0x20a3, 0x0000,
+       0x3430, 0x2011, 0x7c8e, 0x706c, 0xa006, 0x00c0, 0x3344, 0x7150,
+       0xa186, 0xffff, 0x0040, 0x3344, 0xa180, 0x2329, 0x200c, 0xa18c,
+       0xff00, 0x810f, 0x1078, 0x351c, 0x20a9, 0x0008, 0x2298, 0x26a0,
+       0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078,
+       0x3578, 0x007c, 0x0f7e, 0x7078, 0xa005, 0x0040, 0x3398, 0x2011,
+       0x3558, 0x1078, 0x4689, 0xa086, 0x0014, 0x00c0, 0x3396, 0x2079,
+       0x7c80, 0x7a30, 0xa296, 0x1105, 0x00c0, 0x3396, 0x7834, 0x2011,
+       0x0100, 0xa21e, 0x00c0, 0x337f, 0x7a38, 0xd2f4, 0x0040, 0x3372,
+       0x70bf, 0x0008, 0xd2fc, 0x0040, 0x337d, 0x70a4, 0xa005, 0x00c0,
+       0x337d, 0x1078, 0x3611, 0x70a7, 0x0001, 0x0078, 0x3390, 0xa005,
+       0x00c0, 0x3396, 0x7a38, 0xd2fc, 0x0040, 0x338e, 0x70a4, 0xa005,
+       0x00c0, 0x338e, 0x1078, 0x3611, 0x70a7, 0x0001, 0x707f, 0x0000,
+       0x7083, 0x0016, 0x1078, 0x339a, 0x0078, 0x3398, 0x707b, 0x0000,
+       0x0f7f, 0x007c, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, 0x7c80,
+       0x20a1, 0x020b, 0x20a9, 0x000e, 0x53a6, 0x3430, 0x2011, 0x7c8e,
+       0x7083, 0x0017, 0x0078, 0x33ae, 0x7083, 0x001b, 0x706c, 0xa005,
+       0x00c0, 0x33b8, 0x1078, 0x3486, 0x0040, 0x33c8, 0x0078, 0x33c2,
+       0x20a9, 0x0008, 0x2099, 0x7c8e, 0x26a0, 0x53a6, 0x20a3, 0x0000,
+       0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078, 0x3578, 0x0078, 0x33ca,
+       0x1078, 0x303e, 0x007c, 0x0f7e, 0x7078, 0xa005, 0x0040, 0x33eb,
+       0x2011, 0x3558, 0x1078, 0x4689, 0xa086, 0x0084, 0x00c0, 0x33e9,
+       0x2079, 0x7c80, 0x7a30, 0xa296, 0x1106, 0x00c0, 0x33e9, 0x7834,
+       0xa005, 0x00c0, 0x33e9, 0x7083, 0x0018, 0x1078, 0x33ed, 0x0078,
+       0x33eb, 0x707b, 0x0000, 0x0f7f, 0x007c, 0x7083, 0x0019, 0x1078,
+       0x35ee, 0x20a3, 0x1106, 0x20a3, 0x0000, 0x3430, 0x2099, 0x7c8e,
+       0x2039, 0x7c0e, 0x27a0, 0x20a9, 0x0040, 0x53a3, 0x2728, 0x2514,
+       0x8207, 0xa084, 0x00ff, 0x8000, 0x2018, 0xa294, 0x00ff, 0x8007,
+       0xa205, 0x202a, 0x6030, 0x2310, 0x8214, 0xa2a0, 0x7c0e, 0x2414,
+       0xa38c, 0x0001, 0x0040, 0x3418, 0xa294, 0xff00, 0x0078, 0x341b,
+       0xa294, 0x00ff, 0x8007, 0xa215, 0x2222, 0x2798, 0x26a0, 0x20a9,
+       0x0040, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0084,
+       0x1078, 0x3578, 0x007c, 0x0f7e, 0x7078, 0xa005, 0x0040, 0x344f,
+       0x2011, 0x3558, 0x1078, 0x4689, 0xa086, 0x0084, 0x00c0, 0x344d,
+       0x2079, 0x7c80, 0x7a30, 0xa296, 0x1107, 0x00c0, 0x344d, 0x7834,
+       0xa005, 0x00c0, 0x344d, 0x707f, 0x0001, 0x1078, 0x35d4, 0x7083,
+       0x001a, 0x1078, 0x3451, 0x0078, 0x344f, 0x707b, 0x0000, 0x0f7f,
+       0x007c, 0x7083, 0x001b, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099,
+       0x7c80, 0x20a1, 0x020b, 0x7478, 0xa480, 0x0018, 0xa080, 0x0007,
+       0xa084, 0x03f8, 0x8004, 0x20a8, 0x53a6, 0x60c3, 0x0084, 0x1078,
+       0x3578, 0x007c, 0x7078, 0xa005, 0x0040, 0x3476, 0x2011, 0x3558,
+       0x1078, 0x4689, 0x7083, 0x001c, 0x1078, 0x3477, 0x007c, 0x707b,
+       0x0000, 0x608b, 0xbc85, 0x608f, 0xb5b5, 0x6043, 0x0001, 0x2009,
+       0x07d0, 0x2011, 0x3558, 0x1078, 0x467c, 0x007c, 0x087e, 0x097e,
+       0x2029, 0x7752, 0x252c, 0x20a9, 0x0008, 0x2041, 0x7c0e, 0x28a0,
+       0x2099, 0x7c8e, 0x53a3, 0x20a9, 0x0008, 0x2011, 0x0007, 0xd5d4,
+       0x0040, 0x349c, 0x2011, 0x0000, 0x2800, 0xa200, 0x200c, 0xa1a6,
+       0xffff, 0x00c0, 0x34ae, 0xd5d4, 0x0040, 0x34a9, 0x8210, 0x0078,
+       0x34aa, 0x8211, 0x00f0, 0x349c, 0x0078, 0x3513, 0x82ff, 0x00c0,
+       0x34c0, 0xd5d4, 0x0040, 0x34ba, 0xa1a6, 0x3fff, 0x0040, 0x34a6,
+       0x0078, 0x34be, 0xa1a6, 0x3fff, 0x0040, 0x3513, 0xa18d, 0xc000,
+       0x20a9, 0x0010, 0x2019, 0x0001, 0xd5d4, 0x0040, 0x34c9, 0x2019,
+       0x0010, 0x2120, 0xd5d4, 0x0040, 0x34d0, 0x8423, 0x0078, 0x34d1,
+       0x8424, 0x00c8, 0x34de, 0xd5d4, 0x0040, 0x34d9, 0x8319, 0x0078,
+       0x34da, 0x8318, 0x00f0, 0x34ca, 0x0078, 0x3513, 0x23a8, 0x2021,
+       0x0001, 0x8426, 0x8425, 0x00f0, 0x34e2, 0x2328, 0x8529, 0xa2be,
+       0x0007, 0x0040, 0x34f6, 0x007e, 0x2039, 0x0007, 0x2200, 0xa73a,
+       0x007f, 0x27a8, 0xa5a8, 0x0010, 0x00f0, 0x34f2, 0x754e, 0xa5c8,
+       0x2329, 0x292c, 0xa5ac, 0x00ff, 0x6532, 0x60e7, 0x0000, 0x65ea,
+       0x2018, 0x2304, 0xa405, 0x201a, 0x706f, 0x0001, 0x26a0, 0x2898,
+       0x20a9, 0x0008, 0x53a6, 0x20a3, 0x0000, 0x20a3, 0x0000, 0xa085,
+       0x0001, 0x0078, 0x3519, 0xa006, 0x0078, 0x3519, 0xa006, 0x1078,
+       0x12cd, 0x097f, 0x087f, 0x007c, 0x2118, 0x2021, 0x0000, 0x2001,
+       0x0007, 0xa39a, 0x0010, 0x0048, 0x3529, 0x8420, 0x8001, 0x0078,
+       0x3521, 0x2118, 0x84ff, 0x0040, 0x3532, 0xa39a, 0x0010, 0x8421,
+       0x00c0, 0x352d, 0x2021, 0x0001, 0x83ff, 0x0040, 0x353b, 0x8423,
+       0x8319, 0x00c0, 0x3537, 0xa238, 0x2704, 0xa42c, 0x00c0, 0x3550,
+       0xa405, 0x203a, 0x714e, 0xa1a0, 0x2329, 0x242c, 0xa5ac, 0x00ff,
+       0x6532, 0x60e7, 0x0000, 0x65ea, 0x706f, 0x0001, 0xa084, 0x0000,
+       0x007c, 0x0e7e, 0x2071, 0x7700, 0x7073, 0x0000, 0x0e7f, 0x007c,
+       0x0e7e, 0x0f7e, 0x2079, 0x0100, 0x2071, 0x0140, 0x1078, 0x569c,
+       0x7004, 0xa084, 0x4000, 0x0040, 0x3569, 0x7003, 0x1000, 0x7003,
+       0x0000, 0x127e, 0x2091, 0x8000, 0x2071, 0x7720, 0x2073, 0x0000,
+       0x7843, 0x0090, 0x7843, 0x0010, 0x127f, 0x0f7f, 0x0e7f, 0x007c,
+       0x127e, 0x2091, 0x8000, 0x2011, 0x7940, 0x2013, 0x0000, 0x707b,
+       0x0000, 0x127f, 0x20e1, 0x9080, 0x60a3, 0x0056, 0x60a7, 0x9575,
+       0x1078, 0x5693, 0x2009, 0x07d0, 0x2011, 0x3558, 0x1078, 0x4719,
+       0x007c, 0x017e, 0x027e, 0x0c7e, 0x127e, 0x2091, 0x8000, 0x2009,
+       0x00f7, 0x1078, 0x35fa, 0x2061, 0x7949, 0x601b, 0x0000, 0x601f,
+       0x0000, 0x2061, 0x7700, 0x6003, 0x0001, 0x2061, 0x0100, 0x6043,
+       0x0090, 0x6043, 0x0010, 0x2009, 0x001e, 0x2011, 0x35b6, 0x1078,
+       0x467c, 0x127f, 0x0c7f, 0x027f, 0x017f, 0x007c, 0x0e7e, 0x007e,
+       0x127e, 0x2091, 0x8000, 0x2071, 0x0100, 0x1078, 0x569c, 0x2071,
+       0x0140, 0x7004, 0xa084, 0x4000, 0x0040, 0x35ca, 0x7003, 0x1000,
+       0x7003, 0x0000, 0x2001, 0x0001, 0x1078, 0x2025, 0x1078, 0x3591,
+       0x127f, 0x007f, 0x0e7f, 0x007c, 0x20a9, 0x0040, 0x20a1, 0x7dc0,
+       0x2099, 0x7c8e, 0x3304, 0x8007, 0x20a2, 0x9398, 0x94a0, 0x00f0,
+       0x35da, 0x007c, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x2099, 0x7c00,
+       0x20a1, 0x020b, 0x20a9, 0x000c, 0x53a6, 0x007c, 0x20e1, 0x9080,
+       0x20e1, 0x4000, 0x2099, 0x7c80, 0x20a1, 0x020b, 0x20a9, 0x000c,
+       0x53a6, 0x007c, 0x0c7e, 0x007e, 0x2061, 0x0100, 0x810f, 0x2001,
+       0x772c, 0x2004, 0xa005, 0x00c0, 0x360b, 0x6030, 0xa084, 0x00ff,
+       0xa105, 0x0078, 0x360d, 0xa185, 0x00f7, 0x604a, 0x007f, 0x0c7f,
+       0x007c, 0x017e, 0x047e, 0x2001, 0x7752, 0x2004, 0xd0a4, 0x0040,
+       0x3624, 0xa006, 0x2020, 0x2009, 0x002a, 0x1078, 0x7641, 0x2001,
+       0x770c, 0x200c, 0xc195, 0x2102, 0x2019, 0x002a, 0x1078, 0x2293,
+       0x047f, 0x017f, 0x007c, 0x157e, 0x20a9, 0x00ff, 0x2009, 0x7820,
+       0xa006, 0x200a, 0x8108, 0x00f0, 0x3631, 0x157f, 0x007c, 0x0d7e,
+       0x037e, 0x157e, 0x137e, 0x147e, 0x2069, 0x7751, 0xa006, 0x6002,
+       0x6007, 0x0707, 0x600a, 0x600e, 0x6012, 0xa198, 0x2329, 0x231c,
+       0xa39c, 0x00ff, 0x6316, 0x20a9, 0x0004, 0xac98, 0x0006, 0x23a0,
+       0x40a4, 0x20a9, 0x0004, 0xac98, 0x000a, 0x23a0, 0x40a4, 0x603e,
+       0x6042, 0x604e, 0x6052, 0x6056, 0x605a, 0x605e, 0x6062, 0x6066,
+       0x606a, 0x606e, 0x6072, 0x6076, 0x607a, 0x607e, 0x6082, 0x6086,
+       0x608a, 0x608e, 0x6092, 0x6096, 0x609a, 0x609e, 0x61a2, 0x0d7e,
+       0x60a4, 0xa06d, 0x0040, 0x3676, 0x1078, 0x1340, 0x60a7, 0x0000,
+       0x60a8, 0xa06d, 0x0040, 0x367e, 0x1078, 0x1340, 0x60ab, 0x0000,
+       0x0d7f, 0xa006, 0x604a, 0x6810, 0x603a, 0x680c, 0x6046, 0x6814,
+       0xa084, 0x00ff, 0x6042, 0x147f, 0x137f, 0x157f, 0x037f, 0x0d7f,
+       0x007c, 0x127e, 0x2091, 0x8000, 0x6944, 0x6e48, 0xa684, 0x3fff,
+       0xa082, 0x4000, 0x00c8, 0x3737, 0xa18c, 0xff00, 0x810f, 0xa182,
+       0x00ff, 0x00c8, 0x373d, 0x2001, 0x770c, 0x2004, 0xa084, 0x0003,
+       0x00c0, 0x3720, 0xa188, 0x7820, 0x2104, 0xa065, 0x0040, 0x370e,
+       0x6004, 0xa084, 0x00ff, 0xa08e, 0x0006, 0x00c0, 0x3714, 0x60a4,
+       0xa00d, 0x0040, 0x36bf, 0x1078, 0x3a5c, 0x0040, 0x3708, 0x60a8,
+       0xa00d, 0x0040, 0x36d9, 0x1078, 0x3aac, 0x00c0, 0x36d9, 0x694c,
+       0xd1fc, 0x00c0, 0x36cf, 0x1078, 0x37d1, 0x0078, 0x3703, 0x1078,
+       0x37a2, 0x694c, 0xd1ec, 0x00c0, 0x3703, 0x1078, 0x3931, 0x0078,
+       0x3703, 0x694c, 0xa184, 0xa000, 0x0040, 0x36f3, 0xd1ec, 0x0040,
+       0x36ec, 0xd1fc, 0x0040, 0x36e8, 0x1078, 0x3942, 0x0078, 0x36ef,
+       0x1078, 0x3942, 0x0078, 0x36f3, 0xd1fc, 0x0040, 0x36f3, 0x1078,
+       0x37a2, 0x0078, 0x3703, 0x6050, 0xa00d, 0x0040, 0x36fe, 0x2d00,
+       0x200a, 0x6803, 0x0000, 0x6052, 0x0078, 0x3703, 0x2d00, 0x6052,
+       0x604e, 0x6803, 0x0000, 0x1078, 0x4960, 0xa006, 0x127f, 0x007c,
+       0x2001, 0x0005, 0x2009, 0x0000, 0x0078, 0x3741, 0x2001, 0x0028,
+       0x2009, 0x0000, 0x0078, 0x3741, 0xa082, 0x0006, 0x00c8, 0x3720,
+       0x60a0, 0xd0bc, 0x0040, 0x36b7, 0x2001, 0x0028, 0x0078, 0x3733,
+       0x2009, 0x770c, 0x210c, 0xd18c, 0x0040, 0x372a, 0x2001, 0x0004,
+       0x0078, 0x3733, 0xd184, 0x0040, 0x3731, 0x2001, 0x0004, 0x0078,
+       0x3733, 0x2001, 0x0029, 0x2009, 0x0000, 0x0078, 0x3741, 0x2001,
+       0x0029, 0x2009, 0x0000, 0x0078, 0x3741, 0x2001, 0x0029, 0x2009,
+       0x0000, 0xa005, 0x127f, 0x007c, 0x6944, 0x6e48, 0xa684, 0x3fff,
+       0xa082, 0x4000, 0x00c8, 0x3787, 0xa18c, 0xff00, 0x810f, 0xa182,
+       0x00ff, 0x00c8, 0x3777, 0xa188, 0x7820, 0x2104, 0xa065, 0x0040,
+       0x3777, 0x6004, 0xa084, 0x00ff, 0xa08e, 0x0006, 0x00c0, 0x377d,
+       0x684c, 0xd0ec, 0x0040, 0x376a, 0x1078, 0x3942, 0x1078, 0x37a2,
+       0x0078, 0x3772, 0x1078, 0x37a2, 0x684c, 0xd0fc, 0x0040, 0x3772,
+       0x1078, 0x3931, 0x1078, 0x398a, 0xa006, 0x0078, 0x378b, 0x2001,
+       0x0028, 0x2009, 0x0000, 0x0078, 0x378b, 0xa082, 0x0006, 0x0048,
+       0x3760, 0x2001, 0x0029, 0x2009, 0x0000, 0x0078, 0x378b, 0x2001,
+       0x0029, 0x2009, 0x0000, 0xa005, 0x007c, 0x127e, 0x2091, 0x8000,
+       0x6050, 0xa00d, 0x0040, 0x379b, 0x2d00, 0x200a, 0x6803, 0x0000,
+       0x6052, 0x127f, 0x007c, 0x2d00, 0x6052, 0x604e, 0x6803, 0x0000,
+       0x0078, 0x3799, 0x127e, 0x2091, 0x8000, 0x604c, 0xa005, 0x0040,
+       0x37ae, 0x6802, 0x2d00, 0x604e, 0x127f, 0x007c, 0x2d00, 0x6052,
+       0x604e, 0x6803, 0x0000, 0x0078, 0x37ac, 0x127e, 0x2091, 0x8000,
+       0x604c, 0xa06d, 0x0040, 0x37c3, 0x6800, 0xa005, 0x00c0, 0x37c1,
+       0x6052, 0x604e, 0xad05, 0x127f, 0x007c, 0x604c, 0xa06d, 0x0040,
+       0x37d0, 0x6800, 0xa005, 0x00c0, 0x37ce, 0x6052, 0x604e, 0xad05,
+       0x007c, 0x6803, 0x0000, 0x6084, 0xa00d, 0x0040, 0x37db, 0x2d00,
+       0x200a, 0x6086, 0x007c, 0x2d00, 0x6086, 0x6082, 0x0078, 0x37da,
+       0x127e, 0x0c7e, 0x027e, 0x2091, 0x8000, 0x6218, 0x2260, 0x6200,
+       0xa005, 0x0040, 0x37ee, 0xc285, 0x0078, 0x37ef, 0xc284, 0x6202,
+       0x027f, 0x0c7f, 0x127f, 0x007c, 0x127e, 0x0c7e, 0x2091, 0x8000,
+       0x6218, 0x2260, 0x6204, 0xa294, 0xff00, 0xa215, 0x6206, 0x0c7f,
+       0x127f, 0x007c, 0x127e, 0x0c7e, 0x2091, 0x8000, 0x6218, 0x2260,
+       0x6204, 0xa294, 0x00ff, 0x8007, 0xa215, 0x6206, 0x0c7f, 0x127f,
+       0x007c, 0x027e, 0xa182, 0x00ff, 0x0048, 0x381a, 0xa085, 0x0001,
+       0x0078, 0x3832, 0xa190, 0x7820, 0x2204, 0xa065, 0x00c0, 0x3831,
+       0x017e, 0x0d7e, 0x1078, 0x130c, 0x2d60, 0x0d7f, 0x017f, 0x0040,
+       0x3816, 0x2c00, 0x2012, 0x60a7, 0x0000, 0x60ab, 0x0000, 0x1078,
+       0x3637, 0xa006, 0x027f, 0x007c, 0x027e, 0xa182, 0x00ff, 0x0048,
+       0x383d, 0xa085, 0x0001, 0x0078, 0x384a, 0x0d7e, 0xa190, 0x7820,
+       0x2204, 0xa06d, 0x0040, 0x3848, 0x2013, 0x0000, 0x1078, 0x1340,
+       0x0d7f, 0xa006, 0x027f, 0x007c, 0x017e, 0xa182, 0x00ff, 0x0048,
+       0x3855, 0xa085, 0x0001, 0x0078, 0x385c, 0xa188, 0x7820, 0x2104,
+       0xa065, 0x0040, 0x3851, 0xa006, 0x017f, 0x007c, 0x0d7e, 0x157e,
+       0x137e, 0x147e, 0x600b, 0x0000, 0x600f, 0x0000, 0x6000, 0xc08c,
+       0x6002, 0x2069, 0x7c8e, 0x6808, 0x605e, 0x6810, 0x6062, 0x6138,
+       0xa10a, 0x0048, 0x3874, 0x603a, 0x6814, 0x6066, 0x2099, 0x7c96,
+       0xac88, 0x000a, 0x21a0, 0x20a9, 0x0004, 0x53a3, 0x2099, 0x7c9a,
+       0xac88, 0x0006, 0x21a0, 0x20a9, 0x0004, 0x53a3, 0x2069, 0x7cae,
+       0x6808, 0x606a, 0x690c, 0x616e, 0x6810, 0x6072, 0x6818, 0x6076,
+       0xa182, 0x0211, 0x00c8, 0x3898, 0x2009, 0x0008, 0x0078, 0x38c2,
+       0xa182, 0x0259, 0x00c8, 0x38a0, 0x2009, 0x0007, 0x0078, 0x38c2,
+       0xa182, 0x02c1, 0x00c8, 0x38a8, 0x2009, 0x0006, 0x0078, 0x38c2,
+       0xa182, 0x0349, 0x00c8, 0x38b0, 0x2009, 0x0005, 0x0078, 0x38c2,
+       0xa182, 0x0421, 0x00c8, 0x38b8, 0x2009, 0x0004, 0x0078, 0x38c2,
+       0xa182, 0x0581, 0x00c8, 0x38c0, 0x2009, 0x0003, 0x0078, 0x38c2,
+       0x2009, 0x0002, 0x6192, 0x147f, 0x137f, 0x157f, 0x0d7f, 0x007c,
+       0x0e7e, 0x2071, 0x7c8d, 0x2e04, 0x6896, 0x2071, 0x7c8e, 0x7004,
+       0x689a, 0x701c, 0x689e, 0x0e7f, 0x007c, 0x0d7e, 0x127e, 0x2091,
+       0x8000, 0x60a4, 0xa06d, 0x0040, 0x38f9, 0x6900, 0x81ff, 0x00c0,
+       0x390d, 0x6a04, 0xa282, 0x0010, 0x00c8, 0x3912, 0xad88, 0x0004,
+       0x20a9, 0x0010, 0x2104, 0xa086, 0xffff, 0x0040, 0x38f4, 0x8108,
+       0x00f0, 0x38ea, 0x1078, 0x12cd, 0x260a, 0x8210, 0x6a06, 0x0078,
+       0x390d, 0x1078, 0x130c, 0x0040, 0x3912, 0x2d00, 0x60a6, 0x6803,
+       0x0000, 0xad88, 0x0004, 0x20a9, 0x0010, 0x200b, 0xffff, 0x8108,
+       0x00f0, 0x3905, 0x6807, 0x0001, 0x6e12, 0xa085, 0x0001, 0x127f,
+       0x0d7f, 0x007c, 0xa006, 0x0078, 0x390f, 0x127e, 0x2091, 0x8000,
+       0x1078, 0x3a55, 0x00c0, 0x392f, 0x200b, 0xffff, 0x0d7e, 0x60a4,
+       0x2068, 0x6804, 0xa08a, 0x0002, 0x0048, 0x392a, 0x8001, 0x6806,
+       0x0078, 0x392e, 0x1078, 0x1340, 0x60a7, 0x0000, 0x0d7f, 0x127f,
+       0x007c, 0x127e, 0x2091, 0x8000, 0x1078, 0x3ac1, 0x0078, 0x393a,
+       0x1078, 0x378d, 0x1078, 0x39ce, 0x00c0, 0x3938, 0x1078, 0x398a,
+       0x127f, 0x007c, 0x0d7e, 0x127e, 0x2091, 0x8000, 0x60a8, 0xa06d,
+       0x0040, 0x3966, 0x6950, 0x81ff, 0x00c0, 0x397a, 0x6a54, 0xa282,
+       0x0010, 0x00c8, 0x3987, 0xad88, 0x0018, 0x20a9, 0x0010, 0x2104,
+       0xa086, 0xffff, 0x0040, 0x3961, 0x8108, 0x00f0, 0x3957, 0x1078,
+       0x12cd, 0x260a, 0x8210, 0x6a56, 0x0078, 0x397a, 0x1078, 0x130c,
+       0x0040, 0x3987, 0x2d00, 0x60aa, 0x6853, 0x0000, 0xad88, 0x0018,
+       0x20a9, 0x0010, 0x200b, 0xffff, 0x8108, 0x00f0, 0x3972, 0x6857,
+       0x0001, 0x6e62, 0x0078, 0x397e, 0x1078, 0x37d1, 0x1078, 0x3994,
+       0x00c0, 0x397c, 0xa085, 0x0001, 0x127f, 0x0d7f, 0x007c, 0xa006,
+       0x0078, 0x3984, 0x127e, 0x2091, 0x8000, 0x1078, 0x4960, 0x127f,
+       0x007c, 0xa01e, 0x0078, 0x3996, 0x2019, 0x0001, 0xa00e, 0x127e,
+       0x2091, 0x8000, 0x604c, 0x2068, 0x6000, 0xd0dc, 0x00c0, 0x39b4,
+       0x8dff, 0x0040, 0x39c9, 0x83ff, 0x0040, 0x39ac, 0x6848, 0xa606,
+       0x0040, 0x39b9, 0x0078, 0x39b4, 0x683c, 0xa406, 0x00c0, 0x39b4,
+       0x6840, 0xa506, 0x0040, 0x39b9, 0x2d08, 0x6800, 0x2068, 0x0078,
+       0x39a0, 0x6a00, 0x604c, 0xad06, 0x00c0, 0x39c1, 0x624e, 0x0078,
+       0x39c4, 0xa180, 0x0000, 0x2202, 0x82ff, 0x00c0, 0x39c9, 0x6152,
+       0x8dff, 0x127f, 0x007c, 0xa01e, 0x0078, 0x39d0, 0x2019, 0x0001,
+       0xa00e, 0x6080, 0x2068, 0x8dff, 0x0040, 0x39fc, 0x83ff, 0x0040,
+       0x39df, 0x6848, 0xa606, 0x0040, 0x39ec, 0x0078, 0x39e7, 0x683c,
+       0xa406, 0x00c0, 0x39e7, 0x6840, 0xa506, 0x0040, 0x39ec, 0x2d08,
+       0x6800, 0x2068, 0x0078, 0x39d3, 0x6a00, 0x6080, 0xad06, 0x00c0,
+       0x39f4, 0x6282, 0x0078, 0x39f7, 0xa180, 0x0000, 0x2202, 0x82ff,
+       0x00c0, 0x39fc, 0x6186, 0x8dff, 0x007c, 0x1078, 0x3a55, 0x00c0,
+       0x3a03, 0x2011, 0x0001, 0x1078, 0x3aa5, 0x00c0, 0x3a09, 0xa295,
+       0x0002, 0x007c, 0x1078, 0x3add, 0x0040, 0x3a12, 0x1078, 0x6b2b,
+       0x0078, 0x3a14, 0xa085, 0x0001, 0x007c, 0x1078, 0x3add, 0x0040,
+       0x3a1d, 0x1078, 0x6aba, 0x0078, 0x3a1f, 0xa085, 0x0001, 0x007c,
+       0x1078, 0x3add, 0x0040, 0x3a28, 0x1078, 0x6b00, 0x0078, 0x3a2a,
+       0xa085, 0x0001, 0x007c, 0x1078, 0x3add, 0x0040, 0x3a33, 0x1078,
+       0x6ad6, 0x0078, 0x3a35, 0xa085, 0x0001, 0x007c, 0x127e, 0x007e,
+       0x0d7e, 0x2091, 0x8000, 0x6080, 0xa06d, 0x0040, 0x3a4d, 0x6800,
+       0x007e, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x6c54,
+       0x1078, 0x3b92, 0x007f, 0x0078, 0x3a3c, 0x6083, 0x0000, 0x6087,
+       0x0000, 0x0d7f, 0x007f, 0x127f, 0x007c, 0x60a4, 0xa00d, 0x00c0,
+       0x3a5c, 0xa085, 0x0001, 0x007c, 0x0e7e, 0x2170, 0x7000, 0xa005,
+       0x00c0, 0x3a6f, 0x20a9, 0x0010, 0xae88, 0x0004, 0x2104, 0xa606,
+       0x0040, 0x3a6f, 0x8108, 0x00f0, 0x3a66, 0xa085, 0x0001, 0x0e7f,
+       0x007c, 0x0d7e, 0x127e, 0x2091, 0x8000, 0x60a4, 0xa06d, 0x00c0,
+       0x3a7f, 0x1078, 0x130c, 0x0040, 0x3a91, 0x2d00, 0x60a6, 0x6803,
+       0x0001, 0x6807, 0x0000, 0xad88, 0x0004, 0x20a9, 0x0010, 0x200b,
+       0xffff, 0x8108, 0x00f0, 0x3a87, 0xa085, 0x0001, 0x127f, 0x0d7f,
+       0x007c, 0xa006, 0x0078, 0x3a8e, 0x0d7e, 0x127e, 0x2091, 0x8000,
+       0x60a4, 0xa06d, 0x0040, 0x3aa2, 0x60a7, 0x0000, 0x1078, 0x1340,
+       0xa085, 0x0001, 0x127f, 0x0d7f, 0x007c, 0x60a8, 0xa00d, 0x00c0,
+       0x3aac, 0xa085, 0x0001, 0x007c, 0x0e7e, 0x2170, 0x7050, 0xa005,
+       0x00c0, 0x3abf, 0x20a9, 0x0010, 0xae88, 0x0018, 0x2104, 0xa606,
+       0x0040, 0x3abf, 0x8108, 0x00f0, 0x3ab6, 0xa085, 0x0001, 0x0e7f,
+       0x007c, 0x127e, 0x2091, 0x8000, 0x1078, 0x3aa5, 0x00c0, 0x3adb,
+       0x200b, 0xffff, 0x0d7e, 0x60a8, 0x2068, 0x6854, 0xa08a, 0x0002,
+       0x0048, 0x3ad6, 0x8001, 0x6856, 0x0078, 0x3ada, 0x1078, 0x1340,
+       0x60ab, 0x0000, 0x0d7f, 0x127f, 0x007c, 0x609c, 0xd0a4, 0x007c,
+       0x0f7e, 0x2079, 0x7751, 0x7804, 0xd0a4, 0x0040, 0x3b09, 0x157e,
+       0x0c7e, 0x20a9, 0x007f, 0x2009, 0x0000, 0x017e, 0x1078, 0x384c,
+       0x00c0, 0x3afd, 0x6004, 0xa084, 0xff00, 0x8007, 0xa086, 0x0006,
+       0x00c0, 0x3afd, 0x6000, 0xc0ed, 0x6002, 0x017f, 0x8108, 0x00f0,
+       0x3aed, 0x0c7f, 0x157f, 0x2009, 0x07d0, 0x2011, 0x3b0b, 0x1078,
+       0x4719, 0x0f7f, 0x007c, 0x2011, 0x3b0b, 0x1078, 0x4689, 0x157e,
+       0x0c7e, 0x20a9, 0x007f, 0x2009, 0x0000, 0x017e, 0x1078, 0x384c,
+       0x00c0, 0x3b37, 0x6000, 0xd0ec, 0x0040, 0x3b37, 0x047e, 0x62a0,
+       0xa294, 0x00ff, 0x8227, 0xa006, 0x2009, 0x0029, 0x1078, 0x7641,
+       0x6000, 0xc0e5, 0xc0ec, 0x6002, 0x2019, 0x0029, 0x1078, 0x4a7e,
+       0x1078, 0x49c1, 0x2009, 0x0000, 0x1078, 0x747b, 0x047f, 0x017f,
+       0x8108, 0x00f0, 0x3b15, 0x0c7f, 0x157f, 0x007c, 0x0c7e, 0x6018,
+       0x2060, 0x6000, 0xc0ec, 0x6002, 0x0c7f, 0x007c, 0x2071, 0x77ff,
        0x7003, 0x0001, 0x7007, 0x0000, 0x7013, 0x0000, 0x7017, 0x0000,
        0x701b, 0x0000, 0x701f, 0x0000, 0x704b, 0x0001, 0x704f, 0x0000,
        0x705b, 0x0020, 0x705f, 0x0040, 0x707f, 0x0000, 0x007c, 0x0e7e,
-       0x2071, 0x76ff, 0x684c, 0xa005, 0x00c0, 0x3a4d, 0x7028, 0xc085,
-       0x702a, 0xa085, 0x0001, 0x0078, 0x3a70, 0x6a60, 0x7236, 0x6b64,
+       0x2071, 0x77ff, 0x684c, 0xa005, 0x00c0, 0x3b6d, 0x7028, 0xc085,
+       0x702a, 0xa085, 0x0001, 0x0078, 0x3b90, 0x6a60, 0x7236, 0x6b64,
        0x733a, 0x6868, 0x703e, 0x7076, 0x686c, 0x7042, 0x707a, 0x684c,
        0x702e, 0x6844, 0x7032, 0x2009, 0x000d, 0x200a, 0x8007, 0x8006,
        0x8006, 0xa08c, 0x003f, 0xa084, 0xffc0, 0xa210, 0x2100, 0xa319,
        0x726e, 0x7372, 0x7028, 0xc084, 0x702a, 0x7007, 0x0001, 0xa006,
-       0x0e7f, 0x007c, 0x0e7e, 0x6838, 0xd0fc, 0x00c0, 0x3ac3, 0x6804,
-       0xa00d, 0x0040, 0x3a91, 0x0d7e, 0x0e7e, 0x2071, 0x7600, 0x027e,
+       0x0e7f, 0x007c, 0x0e7e, 0x6838, 0xd0fc, 0x00c0, 0x3be3, 0x6804,
+       0xa00d, 0x0040, 0x3bb1, 0x0d7e, 0x0e7e, 0x2071, 0x7700, 0x027e,
        0xa016, 0x702c, 0x2168, 0x6904, 0x206a, 0x8210, 0x2d00, 0x81ff,
-       0x00c0, 0x3a82, 0x702e, 0x70a0, 0xa200, 0x70a2, 0x027f, 0x0e7f,
-       0x0d7f, 0x2071, 0x76ff, 0x701c, 0xa005, 0x00c0, 0x3ad4, 0x0068,
-       0x3ad2, 0x2071, 0x7651, 0x7004, 0xd09c, 0x0040, 0x3ad2, 0x6934,
-       0xa186, 0x0103, 0x00c0, 0x3ae5, 0x6948, 0x6844, 0xa105, 0x00c0,
-       0x3ac5, 0x2009, 0x8020, 0x2071, 0x0000, 0x7018, 0xd084, 0x00c0,
-       0x3ad2, 0x7122, 0x683c, 0x7026, 0x6840, 0x702a, 0x701b, 0x0001,
-       0x2091, 0x4080, 0x2071, 0x7600, 0x702c, 0x206a, 0x2d00, 0x702e,
+       0x00c0, 0x3ba2, 0x702e, 0x70a0, 0xa200, 0x70a2, 0x027f, 0x0e7f,
+       0x0d7f, 0x2071, 0x77ff, 0x701c, 0xa005, 0x00c0, 0x3bf4, 0x0068,
+       0x3bf2, 0x2071, 0x7751, 0x7004, 0xd09c, 0x0040, 0x3bf2, 0x6934,
+       0xa186, 0x0103, 0x00c0, 0x3c05, 0x6948, 0x6844, 0xa105, 0x00c0,
+       0x3be5, 0x2009, 0x8020, 0x2071, 0x0000, 0x7018, 0xd084, 0x00c0,
+       0x3bf2, 0x7122, 0x683c, 0x7026, 0x6840, 0x702a, 0x701b, 0x0001,
+       0x2091, 0x4080, 0x2071, 0x7700, 0x702c, 0x206a, 0x2d00, 0x702e,
        0x70a0, 0x8000, 0x70a2, 0x0e7f, 0x007c, 0x6844, 0xa086, 0x0100,
-       0x00c0, 0x3ad2, 0x6868, 0xa005, 0x00c0, 0x3ad2, 0x2009, 0x8020,
-       0x0078, 0x3aab, 0x2071, 0x76ff, 0x2d08, 0x206b, 0x0000, 0x7010,
-       0x8000, 0x7012, 0x7018, 0xa06d, 0x711a, 0x0040, 0x3ae2, 0x6902,
-       0x0078, 0x3ae3, 0x711e, 0x0078, 0x3ac3, 0xa18c, 0x00ff, 0xa186,
-       0x0017, 0x0040, 0x3af3, 0xa186, 0x001e, 0x0040, 0x3af3, 0xa18e,
-       0x001f, 0x00c0, 0x3ad2, 0x684c, 0xd0cc, 0x0040, 0x3ad2, 0x6850,
-       0xa084, 0x00ff, 0xa086, 0x0001, 0x00c0, 0x3ad2, 0x2009, 0x8021,
-       0x0078, 0x3aab, 0x007e, 0x6837, 0x0103, 0x20a9, 0x001c, 0xad80,
+       0x00c0, 0x3bf2, 0x6868, 0xa005, 0x00c0, 0x3bf2, 0x2009, 0x8020,
+       0x0078, 0x3bcb, 0x2071, 0x77ff, 0x2d08, 0x206b, 0x0000, 0x7010,
+       0x8000, 0x7012, 0x7018, 0xa06d, 0x711a, 0x0040, 0x3c02, 0x6902,
+       0x0078, 0x3c03, 0x711e, 0x0078, 0x3be3, 0xa18c, 0x00ff, 0xa186,
+       0x0017, 0x0040, 0x3c13, 0xa186, 0x001e, 0x0040, 0x3c13, 0xa18e,
+       0x001f, 0x00c0, 0x3bf2, 0x684c, 0xd0cc, 0x0040, 0x3bf2, 0x6850,
+       0xa084, 0x00ff, 0xa086, 0x0001, 0x00c0, 0x3bf2, 0x2009, 0x8021,
+       0x0078, 0x3bcb, 0x007e, 0x6837, 0x0103, 0x20a9, 0x001c, 0xad80,
        0x0011, 0x20a0, 0x2001, 0x0000, 0x40a4, 0x007f, 0x684a, 0x6952,
-       0x007c, 0x2071, 0x76ff, 0x7004, 0x0079, 0x3b16, 0x3b1e, 0x3b2d,
-       0x3bbd, 0x3bbe, 0x3bce, 0x3bd4, 0x3b1f, 0x3bab, 0x007c, 0x127e,
-       0x2091, 0x8000, 0x0068, 0x3b2c, 0x2009, 0x000d, 0x7030, 0x200a,
+       0x007c, 0x2071, 0x77ff, 0x7004, 0x0079, 0x3c36, 0x3c3e, 0x3c4d,
+       0x3cdd, 0x3cde, 0x3cee, 0x3cf4, 0x3c3f, 0x3ccb, 0x007c, 0x127e,
+       0x2091, 0x8000, 0x0068, 0x3c4c, 0x2009, 0x000d, 0x7030, 0x200a,
        0x2091, 0x4080, 0x7007, 0x0001, 0x127f, 0x701c, 0xa06d, 0x0040,
-       0x3baa, 0x0e7e, 0x2071, 0x7651, 0x7004, 0xd09c, 0x0040, 0x3b8c,
-       0x6934, 0xa186, 0x0103, 0x00c0, 0x3b62, 0x6948, 0x6844, 0xa105,
-       0x00c0, 0x3b7f, 0x2009, 0x8020, 0x127e, 0x2091, 0x8000, 0x0068,
-       0x3b5e, 0x2071, 0x0000, 0x7018, 0xd084, 0x00c0, 0x3b5e, 0x7122,
+       0x3cca, 0x0e7e, 0x2071, 0x7751, 0x7004, 0xd09c, 0x0040, 0x3cac,
+       0x6934, 0xa186, 0x0103, 0x00c0, 0x3c82, 0x6948, 0x6844, 0xa105,
+       0x00c0, 0x3c9f, 0x2009, 0x8020, 0x127e, 0x2091, 0x8000, 0x0068,
+       0x3c7e, 0x2071, 0x0000, 0x7018, 0xd084, 0x00c0, 0x3c7e, 0x7122,
        0x683c, 0x7026, 0x6840, 0x702a, 0x701b, 0x0001, 0x2091, 0x4080,
-       0x127f, 0x0e7f, 0x1078, 0x3c07, 0x0078, 0x3baa, 0x127f, 0x0e7f,
-       0x0078, 0x3baa, 0xa18c, 0x00ff, 0xa186, 0x0017, 0x0040, 0x3b70,
-       0xa186, 0x001e, 0x0040, 0x3b70, 0xa18e, 0x001f, 0x00c0, 0x3b8c,
-       0x684c, 0xd0cc, 0x0040, 0x3b8c, 0x6850, 0xa084, 0x00ff, 0xa086,
-       0x0001, 0x00c0, 0x3b8c, 0x2009, 0x8021, 0x0078, 0x3b44, 0x6844,
-       0xa086, 0x0100, 0x00c0, 0x3b8c, 0x6868, 0xa005, 0x00c0, 0x3b8c,
-       0x2009, 0x8020, 0x0078, 0x3b44, 0x0e7f, 0x1078, 0x3c1b, 0x0040,
-       0x3baa, 0x700f, 0x0001, 0x6934, 0xa184, 0x00ff, 0xa086, 0x0003,
-       0x00c0, 0x3ba1, 0x810f, 0xa18c, 0x00ff, 0x8101, 0x0040, 0x3ba1,
-       0x710e, 0x7007, 0x0003, 0x1078, 0x3c3b, 0x7050, 0xa086, 0x0100,
-       0x0040, 0x3bbe, 0x007c, 0x701c, 0xa06d, 0x0040, 0x3bbc, 0x1078,
-       0x3c1b, 0x0040, 0x3bbc, 0x7007, 0x0003, 0x1078, 0x3c3b, 0x7050,
-       0xa086, 0x0100, 0x0040, 0x3bbe, 0x007c, 0x007c, 0x7050, 0xa09e,
-       0x0100, 0x00c0, 0x3bc7, 0x7007, 0x0004, 0x0078, 0x3bce, 0xa086,
-       0x0200, 0x00c0, 0x3bcd, 0x7007, 0x0005, 0x007c, 0x1078, 0x3bd5,
-       0x7006, 0x1078, 0x3c07, 0x007c, 0x007c, 0x702c, 0x7130, 0x8108,
-       0xa102, 0x0048, 0x3be2, 0xa00e, 0x7034, 0x706e, 0x7038, 0x7072,
-       0x0078, 0x3bec, 0x706c, 0xa080, 0x0040, 0x706e, 0x00c8, 0x3bec,
+       0x127f, 0x0e7f, 0x1078, 0x3d27, 0x0078, 0x3cca, 0x127f, 0x0e7f,
+       0x0078, 0x3cca, 0xa18c, 0x00ff, 0xa186, 0x0017, 0x0040, 0x3c90,
+       0xa186, 0x001e, 0x0040, 0x3c90, 0xa18e, 0x001f, 0x00c0, 0x3cac,
+       0x684c, 0xd0cc, 0x0040, 0x3cac, 0x6850, 0xa084, 0x00ff, 0xa086,
+       0x0001, 0x00c0, 0x3cac, 0x2009, 0x8021, 0x0078, 0x3c64, 0x6844,
+       0xa086, 0x0100, 0x00c0, 0x3cac, 0x6868, 0xa005, 0x00c0, 0x3cac,
+       0x2009, 0x8020, 0x0078, 0x3c64, 0x0e7f, 0x1078, 0x3d3b, 0x0040,
+       0x3cca, 0x700f, 0x0001, 0x6934, 0xa184, 0x00ff, 0xa086, 0x0003,
+       0x00c0, 0x3cc1, 0x810f, 0xa18c, 0x00ff, 0x8101, 0x0040, 0x3cc1,
+       0x710e, 0x7007, 0x0003, 0x1078, 0x3d5b, 0x7050, 0xa086, 0x0100,
+       0x0040, 0x3cde, 0x007c, 0x701c, 0xa06d, 0x0040, 0x3cdc, 0x1078,
+       0x3d3b, 0x0040, 0x3cdc, 0x7007, 0x0003, 0x1078, 0x3d5b, 0x7050,
+       0xa086, 0x0100, 0x0040, 0x3cde, 0x007c, 0x007c, 0x7050, 0xa09e,
+       0x0100, 0x00c0, 0x3ce7, 0x7007, 0x0004, 0x0078, 0x3cee, 0xa086,
+       0x0200, 0x00c0, 0x3ced, 0x7007, 0x0005, 0x007c, 0x1078, 0x3cf5,
+       0x7006, 0x1078, 0x3d27, 0x007c, 0x007c, 0x702c, 0x7130, 0x8108,
+       0xa102, 0x0048, 0x3d02, 0xa00e, 0x7034, 0x706e, 0x7038, 0x7072,
+       0x0078, 0x3d0c, 0x706c, 0xa080, 0x0040, 0x706e, 0x00c8, 0x3d0c,
        0x7070, 0xa081, 0x0000, 0x7072, 0x7132, 0x700c, 0x8001, 0x700e,
-       0x00c0, 0x3c00, 0x127e, 0x2091, 0x8000, 0x0068, 0x3c03, 0x2001,
+       0x00c0, 0x3d20, 0x127e, 0x2091, 0x8000, 0x0068, 0x3d23, 0x2001,
        0x000d, 0x2102, 0x2091, 0x4080, 0x2001, 0x0001, 0x127f, 0x007c,
        0x2001, 0x0007, 0x007c, 0x2001, 0x0006, 0x127f, 0x007c, 0x701c,
-       0xa06d, 0x0040, 0x3c1a, 0x127e, 0x2091, 0x8000, 0x7010, 0x8001,
-       0x7012, 0x2d04, 0x701e, 0xa005, 0x00c0, 0x3c17, 0x701a, 0x127f,
+       0xa06d, 0x0040, 0x3d3a, 0x127e, 0x2091, 0x8000, 0x7010, 0x8001,
+       0x7012, 0x2d04, 0x701e, 0xa005, 0x00c0, 0x3d37, 0x701a, 0x127f,
        0x1078, 0x1340, 0x007c, 0x2019, 0x000d, 0x2304, 0x230c, 0xa10e,
-       0x0040, 0x3c2a, 0x2304, 0x230c, 0xa10e, 0x0040, 0x3c2a, 0xa006,
-       0x0078, 0x3c3a, 0x732c, 0x8319, 0x7130, 0xa102, 0x00c0, 0x3c34,
-       0x2300, 0xa005, 0x0078, 0x3c3a, 0x0048, 0x3c39, 0xa302, 0x0078,
-       0x3c3a, 0x8002, 0x007c, 0x2d00, 0x7026, 0xa080, 0x000d, 0x7056,
-       0x7053, 0x0000, 0x127e, 0x2091, 0x8000, 0x2009, 0x7859, 0x2104,
-       0xc08d, 0x200a, 0x127f, 0x1078, 0x1391, 0x007c, 0x2071, 0x76cd,
+       0x0040, 0x3d4a, 0x2304, 0x230c, 0xa10e, 0x0040, 0x3d4a, 0xa006,
+       0x0078, 0x3d5a, 0x732c, 0x8319, 0x7130, 0xa102, 0x00c0, 0x3d54,
+       0x2300, 0xa005, 0x0078, 0x3d5a, 0x0048, 0x3d59, 0xa302, 0x0078,
+       0x3d5a, 0x8002, 0x007c, 0x2d00, 0x7026, 0xa080, 0x000d, 0x7056,
+       0x7053, 0x0000, 0x127e, 0x2091, 0x8000, 0x2009, 0x7959, 0x2104,
+       0xc08d, 0x200a, 0x127f, 0x1078, 0x1391, 0x007c, 0x2071, 0x77cd,
        0x7003, 0x0000, 0x7007, 0x0000, 0x700f, 0x0000, 0x702b, 0x0001,
        0x704f, 0x0000, 0x7053, 0x0001, 0x705f, 0x0020, 0x7063, 0x0040,
        0x7083, 0x0000, 0x708b, 0x0000, 0x708f, 0x0001, 0x70bf, 0x0000,
-       0x007c, 0x0e7e, 0x2071, 0x76cd, 0x6848, 0xa005, 0x00c0, 0x3c77,
-       0x7028, 0xc085, 0x702a, 0xa085, 0x0001, 0x0078, 0x3c9c, 0x6a50,
+       0x007c, 0x0e7e, 0x2071, 0x77cd, 0x6848, 0xa005, 0x00c0, 0x3d97,
+       0x7028, 0xc085, 0x702a, 0xa085, 0x0001, 0x0078, 0x3dbc, 0x6a50,
        0x7236, 0x6b54, 0x733a, 0x6858, 0x703e, 0x707a, 0x685c, 0x7042,
        0x707e, 0x6848, 0x702e, 0x6840, 0x7032, 0x2009, 0x000c, 0x200a,
        0x8007, 0x8006, 0x8006, 0xa08c, 0x003f, 0xa084, 0xffc0, 0xa210,
        0x2100, 0xa319, 0x7272, 0x7376, 0x7028, 0xc084, 0x702a, 0x7007,
        0x0001, 0x700f, 0x0000, 0xa006, 0x0e7f, 0x007c, 0x2b78, 0x2071,
-       0x76cd, 0x7004, 0x1079, 0x3cfc, 0x700c, 0x0079, 0x3ca7, 0x3cac,
-       0x3ca1, 0x3ca1, 0x3ca1, 0x3ca1, 0x007c, 0x700c, 0x0079, 0x3cb0,
-       0x3cb5, 0x3cfa, 0x3cfa, 0x3cfb, 0x3cfb, 0x7830, 0x7930, 0xa106,
-       0x0040, 0x3cbf, 0x7830, 0x7930, 0xa106, 0x00c0, 0x3ce5, 0x7030,
-       0xa10a, 0x0040, 0x3ce5, 0x00c8, 0x3cc7, 0x712c, 0xa10a, 0xa18a,
-       0x0002, 0x00c8, 0x3ce6, 0x1078, 0x130c, 0x0040, 0x3ce5, 0x2d00,
+       0x77cd, 0x7004, 0x1079, 0x3e1c, 0x700c, 0x0079, 0x3dc7, 0x3dcc,
+       0x3dc1, 0x3dc1, 0x3dc1, 0x3dc1, 0x007c, 0x700c, 0x0079, 0x3dd0,
+       0x3dd5, 0x3e1a, 0x3e1a, 0x3e1b, 0x3e1b, 0x7830, 0x7930, 0xa106,
+       0x0040, 0x3ddf, 0x7830, 0x7930, 0xa106, 0x00c0, 0x3e05, 0x7030,
+       0xa10a, 0x0040, 0x3e05, 0x00c8, 0x3de7, 0x712c, 0xa10a, 0xa18a,
+       0x0002, 0x00c8, 0x3e06, 0x1078, 0x130c, 0x0040, 0x3e05, 0x2d00,
        0x705a, 0x7063, 0x0040, 0x2001, 0x0003, 0x7057, 0x0000, 0x127e,
-       0x007e, 0x2091, 0x8000, 0x2009, 0x7859, 0x2104, 0xc085, 0x200a,
+       0x007e, 0x2091, 0x8000, 0x2009, 0x7959, 0x2104, 0xc085, 0x200a,
        0x007f, 0x700e, 0x127f, 0x1078, 0x1391, 0x007c, 0x1078, 0x130c,
-       0x0040, 0x3ce5, 0x2d00, 0x705a, 0x1078, 0x130c, 0x00c0, 0x3cf2,
-       0x0078, 0x3cd1, 0x2d00, 0x7086, 0x7063, 0x0080, 0x2001, 0x0004,
-       0x0078, 0x3cd5, 0x007c, 0x007c, 0x3d0d, 0x3d0e, 0x3d45, 0x3d46,
-       0x3cfa, 0x3d7c, 0x3d81, 0x3db8, 0x3db9, 0x3dd4, 0x3dd5, 0x3dd6,
-       0x3dd7, 0x3dd8, 0x3dd9, 0x3e42, 0x3e6c, 0x007c, 0x700c, 0x0079,
-       0x3d11, 0x3d16, 0x3d19, 0x3d29, 0x3d44, 0x3d44, 0x1078, 0x3cad,
-       0x007c, 0x127e, 0x8001, 0x700e, 0x7058, 0x007e, 0x1078, 0x414b,
-       0x0040, 0x3d26, 0x2091, 0x8000, 0x1078, 0x3cad, 0x0d7f, 0x0078,
-       0x3d32, 0x127e, 0x8001, 0x700e, 0x1078, 0x414b, 0x7058, 0x2068,
+       0x0040, 0x3e05, 0x2d00, 0x705a, 0x1078, 0x130c, 0x00c0, 0x3e12,
+       0x0078, 0x3df1, 0x2d00, 0x7086, 0x7063, 0x0080, 0x2001, 0x0004,
+       0x0078, 0x3df5, 0x007c, 0x007c, 0x3e2d, 0x3e2e, 0x3e65, 0x3e66,
+       0x3e1a, 0x3e9c, 0x3ea1, 0x3ed8, 0x3ed9, 0x3ef4, 0x3ef5, 0x3ef6,
+       0x3ef7, 0x3ef8, 0x3ef9, 0x3f62, 0x3f8c, 0x007c, 0x700c, 0x0079,
+       0x3e31, 0x3e36, 0x3e39, 0x3e49, 0x3e64, 0x3e64, 0x1078, 0x3dcd,
+       0x007c, 0x127e, 0x8001, 0x700e, 0x7058, 0x007e, 0x1078, 0x426e,
+       0x0040, 0x3e46, 0x2091, 0x8000, 0x1078, 0x3dcd, 0x0d7f, 0x0078,
+       0x3e52, 0x127e, 0x8001, 0x700e, 0x1078, 0x426e, 0x7058, 0x2068,
        0x7084, 0x705a, 0x6803, 0x0000, 0x6807, 0x0000, 0x6834, 0xa084,
-       0x00ff, 0xa08a, 0x0020, 0x00c8, 0x3d41, 0x1079, 0x3d5c, 0x127f,
-       0x007c, 0x127f, 0x1078, 0x3dda, 0x007c, 0x007c, 0x007c, 0x0e7e,
-       0x2071, 0x76cd, 0x700c, 0x0079, 0x3d4d, 0x3d52, 0x3d52, 0x3d52,
-       0x3d54, 0x3d58, 0x0e7f, 0x007c, 0x700f, 0x0001, 0x0078, 0x3d5a,
-       0x700f, 0x0002, 0x0e7f, 0x007c, 0x3dda, 0x3dda, 0x3df6, 0x3dda,
-       0x3ee1, 0x3dda, 0x3dda, 0x3dda, 0x3dda, 0x3dda, 0x3df6, 0x3f26,
-       0x3f6f, 0x3fc7, 0x3fda, 0x3dda, 0x3dda, 0x3e12, 0x3df6, 0x3dda,
-       0x3dda, 0x3e28, 0x4061, 0x407e, 0x3dda, 0x3e12, 0x3dda, 0x3dda,
-       0x3dda, 0x3dda, 0x3e28, 0x407e, 0x7020, 0x2068, 0x1078, 0x1340,
-       0x007c, 0x700c, 0x0079, 0x3d84, 0x3d89, 0x3d8c, 0x3d9c, 0x3db7,
-       0x3db7, 0x1078, 0x3cad, 0x007c, 0x127e, 0x8001, 0x700e, 0x7058,
-       0x007e, 0x1078, 0x414b, 0x0040, 0x3d99, 0x2091, 0x8000, 0x1078,
-       0x3cad, 0x0d7f, 0x0078, 0x3da5, 0x127e, 0x8001, 0x700e, 0x1078,
-       0x414b, 0x7058, 0x2068, 0x7084, 0x705a, 0x6803, 0x0000, 0x6807,
-       0x0000, 0x6834, 0xa084, 0x00ff, 0xa08a, 0x001a, 0x00c8, 0x3db4,
-       0x1079, 0x3dba, 0x127f, 0x007c, 0x127f, 0x1078, 0x3dda, 0x007c,
-       0x007c, 0x007c, 0x3dda, 0x3df6, 0x3ecb, 0x3dda, 0x3df6, 0x3dda,
-       0x3df6, 0x3df6, 0x3dda, 0x3df6, 0x3ecb, 0x3df6, 0x3df6, 0x3df6,
-       0x3df6, 0x3df6, 0x3dda, 0x3df6, 0x3ecb, 0x3dda, 0x3dda, 0x3df6,
-       0x3dda, 0x3dda, 0x3dda, 0x3df6, 0x007c, 0x007c, 0x007c, 0x007c,
+       0x00ff, 0xa08a, 0x0020, 0x00c8, 0x3e61, 0x1079, 0x3e7c, 0x127f,
+       0x007c, 0x127f, 0x1078, 0x3efa, 0x007c, 0x007c, 0x007c, 0x0e7e,
+       0x2071, 0x77cd, 0x700c, 0x0079, 0x3e6d, 0x3e72, 0x3e72, 0x3e72,
+       0x3e74, 0x3e78, 0x0e7f, 0x007c, 0x700f, 0x0001, 0x0078, 0x3e7a,
+       0x700f, 0x0002, 0x0e7f, 0x007c, 0x3efa, 0x3efa, 0x3f16, 0x3efa,
+       0x4001, 0x3efa, 0x3efa, 0x3efa, 0x3efa, 0x3efa, 0x3f16, 0x4040,
+       0x408a, 0x40e3, 0x40f7, 0x3efa, 0x3efa, 0x3f32, 0x3f16, 0x3efa,
+       0x3efa, 0x3f48, 0x4182, 0x41a0, 0x3efa, 0x3f32, 0x3efa, 0x3efa,
+       0x3efa, 0x3efa, 0x3f48, 0x41a0, 0x7020, 0x2068, 0x1078, 0x1340,
+       0x007c, 0x700c, 0x0079, 0x3ea4, 0x3ea9, 0x3eac, 0x3ebc, 0x3ed7,
+       0x3ed7, 0x1078, 0x3dcd, 0x007c, 0x127e, 0x8001, 0x700e, 0x7058,
+       0x007e, 0x1078, 0x426e, 0x0040, 0x3eb9, 0x2091, 0x8000, 0x1078,
+       0x3dcd, 0x0d7f, 0x0078, 0x3ec5, 0x127e, 0x8001, 0x700e, 0x1078,
+       0x426e, 0x7058, 0x2068, 0x7084, 0x705a, 0x6803, 0x0000, 0x6807,
+       0x0000, 0x6834, 0xa084, 0x00ff, 0xa08a, 0x001a, 0x00c8, 0x3ed4,
+       0x1079, 0x3eda, 0x127f, 0x007c, 0x127f, 0x1078, 0x3efa, 0x007c,
+       0x007c, 0x007c, 0x3efa, 0x3f16, 0x3feb, 0x3efa, 0x3f16, 0x3efa,
+       0x3f16, 0x3f16, 0x3efa, 0x3f16, 0x3feb, 0x3f16, 0x3f16, 0x3f16,
+       0x3f16, 0x3f16, 0x3efa, 0x3f16, 0x3feb, 0x3efa, 0x3efa, 0x3f16,
+       0x3efa, 0x3efa, 0x3efa, 0x3f16, 0x007c, 0x007c, 0x007c, 0x007c,
        0x007c, 0x007c, 0x7007, 0x0001, 0x6838, 0xa084, 0x00ff, 0xc0d5,
-       0x683a, 0x127e, 0x2091, 0x8000, 0x1078, 0x3a72, 0x127f, 0x007c,
+       0x683a, 0x127e, 0x2091, 0x8000, 0x1078, 0x3b92, 0x127f, 0x007c,
        0x7007, 0x0001, 0x6838, 0xa084, 0x00ff, 0xc0e5, 0x683a, 0x127e,
-       0x2091, 0x8000, 0x1078, 0x3a72, 0x127f, 0x007c, 0x7007, 0x0001,
+       0x2091, 0x8000, 0x1078, 0x3b92, 0x127f, 0x007c, 0x7007, 0x0001,
        0x6838, 0xa084, 0x00ff, 0xc0ed, 0x683a, 0x127e, 0x2091, 0x8000,
-       0x1078, 0x3a72, 0x127f, 0x007c, 0x7007, 0x0001, 0x6838, 0xa084,
-       0x00ff, 0xc0dd, 0x683a, 0x127e, 0x2091, 0x8000, 0x1078, 0x3a72,
-       0x127f, 0x007c, 0x6834, 0x8007, 0xa084, 0x00ff, 0x0040, 0x3de8,
-       0x8001, 0x00c0, 0x3e1f, 0x7007, 0x0001, 0x0078, 0x3ea8, 0x7007,
-       0x0006, 0x7012, 0x2d00, 0x7016, 0x701a, 0x704b, 0x3ea8, 0x007c,
+       0x1078, 0x3b92, 0x127f, 0x007c, 0x7007, 0x0001, 0x6838, 0xa084,
+       0x00ff, 0xc0dd, 0x683a, 0x127e, 0x2091, 0x8000, 0x1078, 0x3b92,
+       0x127f, 0x007c, 0x6834, 0x8007, 0xa084, 0x00ff, 0x0040, 0x3f08,
+       0x8001, 0x00c0, 0x3f3f, 0x7007, 0x0001, 0x0078, 0x3fc8, 0x7007,
+       0x0006, 0x7012, 0x2d00, 0x7016, 0x701a, 0x704b, 0x3fc8, 0x007c,
        0x2d00, 0x7016, 0x701a, 0x20a9, 0x0004, 0xa080, 0x0024, 0x2098,
-       0x20a1, 0x76f8, 0x53a3, 0x6858, 0x7012, 0xa082, 0x0401, 0x00c8,
-       0x3e04, 0x6884, 0xa08a, 0x0003, 0x00c8, 0x3e04, 0xa080, 0x3e99,
-       0x2004, 0x70c6, 0x7010, 0xa015, 0x0040, 0x3e8c, 0x1078, 0x130c,
-       0x00c0, 0x3e4d, 0x7007, 0x000f, 0x007c, 0x2d00, 0x7022, 0x70c4,
+       0x20a1, 0x77f8, 0x53a3, 0x6858, 0x7012, 0xa082, 0x0401, 0x00c8,
+       0x3f24, 0x6884, 0xa08a, 0x0003, 0x00c8, 0x3f24, 0xa080, 0x3fb9,
+       0x2004, 0x70c6, 0x7010, 0xa015, 0x0040, 0x3fac, 0x1078, 0x130c,
+       0x00c0, 0x3f6d, 0x7007, 0x000f, 0x007c, 0x2d00, 0x7022, 0x70c4,
        0x2060, 0x6000, 0x6836, 0x6004, 0xad00, 0x7096, 0x6008, 0xa20a,
-       0x00c8, 0x3e5c, 0xa00e, 0x2200, 0x7112, 0x620c, 0x8003, 0x800b,
-       0xa296, 0x0004, 0x0040, 0x3e65, 0xa108, 0x719a, 0x810b, 0x719e,
+       0x00c8, 0x3f7c, 0xa00e, 0x2200, 0x7112, 0x620c, 0x8003, 0x800b,
+       0xa296, 0x0004, 0x0040, 0x3f85, 0xa108, 0x719a, 0x810b, 0x719e,
        0xae90, 0x0022, 0x1078, 0x1377, 0x7090, 0xa08e, 0x0100, 0x0040,
-       0x3e80, 0xa086, 0x0200, 0x0040, 0x3e78, 0x7007, 0x0010, 0x007c,
-       0x7020, 0x2068, 0x1078, 0x1340, 0x7014, 0x2068, 0x0078, 0x3e04,
+       0x3fa0, 0xa086, 0x0200, 0x0040, 0x3f98, 0x7007, 0x0010, 0x007c,
+       0x7020, 0x2068, 0x1078, 0x1340, 0x7014, 0x2068, 0x0078, 0x3f24,
        0x7020, 0x2068, 0x7018, 0x6802, 0x6807, 0x0000, 0x2d08, 0x2068,
-       0x6906, 0x711a, 0x0078, 0x3e42, 0x7014, 0x2068, 0x7007, 0x0001,
-       0x6834, 0xa084, 0x00ff, 0xa086, 0x001e, 0x0040, 0x409b, 0x0078,
-       0x3ea8, 0x3e9c, 0x3ea0, 0x3ea4, 0x0002, 0x0011, 0x0007, 0x0004,
+       0x6906, 0x711a, 0x0078, 0x3f62, 0x7014, 0x2068, 0x7007, 0x0001,
+       0x6834, 0xa084, 0x00ff, 0xa086, 0x001e, 0x0040, 0x41bd, 0x0078,
+       0x3fc8, 0x3fbc, 0x3fc0, 0x3fc4, 0x0002, 0x0011, 0x0007, 0x0004,
        0x000a, 0x000f, 0x0005, 0x0006, 0x0012, 0x000f, 0x0005, 0x0006,
-       0x2009, 0x762c, 0x210c, 0x81ff, 0x00c0, 0x3ec5, 0x6838, 0xa084,
-       0x00ff, 0x683a, 0x6853, 0x0000, 0x1078, 0x3660, 0x00c0, 0x3eb9,
-       0x007c, 0x1078, 0x3b02, 0x127e, 0x2091, 0x8000, 0x1078, 0x6b34,
-       0x1078, 0x3a72, 0x127f, 0x0078, 0x3eb8, 0x2001, 0x0028, 0x2009,
-       0x0000, 0x0078, 0x3eb9, 0x7018, 0x6802, 0x2d08, 0x2068, 0x6906,
-       0x711a, 0x7010, 0x8001, 0x7012, 0x0040, 0x3eda, 0x7007, 0x0006,
-       0x0078, 0x3ee0, 0x7014, 0x2068, 0x7007, 0x0001, 0x7048, 0x107a,
+       0x2009, 0x772c, 0x210c, 0x81ff, 0x00c0, 0x3fe5, 0x6838, 0xa084,
+       0x00ff, 0x683a, 0x6853, 0x0000, 0x1078, 0x3691, 0x00c0, 0x3fd9,
+       0x007c, 0x1078, 0x3c22, 0x127e, 0x2091, 0x8000, 0x1078, 0x6c54,
+       0x1078, 0x3b92, 0x127f, 0x0078, 0x3fd8, 0x2001, 0x0028, 0x2009,
+       0x0000, 0x0078, 0x3fd9, 0x7018, 0x6802, 0x2d08, 0x2068, 0x6906,
+       0x711a, 0x7010, 0x8001, 0x7012, 0x0040, 0x3ffa, 0x7007, 0x0006,
+       0x0078, 0x4000, 0x7014, 0x2068, 0x7007, 0x0001, 0x7048, 0x107a,
        0x007c, 0x7007, 0x0001, 0x6944, 0x810f, 0xa18c, 0x00ff, 0x6848,
-       0xa084, 0x00ff, 0x20a9, 0x0001, 0xa096, 0x0001, 0x0040, 0x3f0c,
-       0x2009, 0x0000, 0x20a9, 0x007e, 0xa096, 0x0002, 0x0040, 0x3f0c,
-       0xa005, 0x00c0, 0x3f23, 0x6944, 0x810f, 0xa18c, 0x00ff, 0x1078,
-       0x381d, 0x00c0, 0x3f23, 0x067e, 0x6e44, 0xa6b4, 0x000f, 0x1078,
-       0x38b2, 0x067f, 0x0078, 0x3f23, 0x047e, 0x2011, 0x760c, 0x2224,
-       0xc484, 0xc48c, 0x2412, 0x047f, 0x0c7e, 0x1078, 0x381d, 0x00c0,
-       0x3f1f, 0x2091, 0x8000, 0x607b, 0x0000, 0x2091, 0x8001, 0x8108,
-       0x00f0, 0x3f15, 0x0c7f, 0x1078, 0x1340, 0x007c, 0x127e, 0x2091,
-       0x8000, 0x7007, 0x0001, 0x2001, 0x7652, 0x2004, 0xd0a4, 0x0040,
-       0x3f66, 0x6944, 0x1078, 0x4167, 0x6100, 0xd184, 0x0040, 0x3f4b,
-       0x6858, 0xa084, 0x00ff, 0x00c0, 0x3f69, 0x6000, 0xd084, 0x0040,
-       0x3f66, 0x6004, 0xa005, 0x00c0, 0x3f6c, 0x6003, 0x0000, 0x600b,
-       0x0000, 0x0078, 0x3f63, 0x2011, 0x0001, 0x6860, 0xa005, 0x00c0,
-       0x3f53, 0x2001, 0x001e, 0x8000, 0x6016, 0x6858, 0xa084, 0x00ff,
-       0x0040, 0x3f66, 0x6006, 0x6858, 0x8007, 0xa084, 0x00ff, 0x0040,
-       0x3f66, 0x600a, 0x6202, 0x127f, 0x0078, 0x413a, 0x127f, 0x0078,
-       0x4132, 0x127f, 0x0078, 0x412a, 0x127f, 0x0078, 0x412e, 0x127e,
-       0x2091, 0x8000, 0x7007, 0x0001, 0x2001, 0x7652, 0x2004, 0xd0a4,
-       0x0040, 0x3fc4, 0x6944, 0x1078, 0x4167, 0x6000, 0xa084, 0x0001,
-       0x0040, 0x3fc4, 0x6204, 0x6308, 0x6c48, 0xa484, 0x0003, 0x0040,
-       0x3f9c, 0x6958, 0xa18c, 0x00ff, 0x8001, 0x00c0, 0x3f95, 0x2100,
-       0xa210, 0x0048, 0x3fc1, 0x0078, 0x3f9c, 0x8001, 0x00c0, 0x3fc1,
-       0x2100, 0xa212, 0x0048, 0x3fc1, 0xa484, 0x000c, 0x0040, 0x3fb6,
-       0x6958, 0x810f, 0xa18c, 0x00ff, 0xa082, 0x0004, 0x00c0, 0x3fae,
-       0x2100, 0xa318, 0x0048, 0x3fc1, 0x0078, 0x3fb6, 0xa082, 0x0004,
-       0x00c0, 0x3fc1, 0x2100, 0xa31a, 0x0048, 0x3fc1, 0x6860, 0xa005,
-       0x0040, 0x3fbc, 0x8000, 0x6016, 0x6206, 0x630a, 0x127f, 0x0078,
-       0x413a, 0x127f, 0x0078, 0x4136, 0x127f, 0x0078, 0x4132, 0x127e,
-       0x2091, 0x8000, 0x7007, 0x0001, 0x6944, 0x1078, 0x4167, 0x6308,
-       0x8318, 0x0048, 0x3fd7, 0x630a, 0x127f, 0x0078, 0x4148, 0x127f,
-       0x0078, 0x4136, 0x127e, 0x0c7e, 0x2091, 0x8000, 0x7007, 0x0001,
-       0x684c, 0xd0ac, 0x0040, 0x3fee, 0x027e, 0x2009, 0x0000, 0x2011,
-       0xfcff, 0x1078, 0x46ac, 0x027f, 0x0078, 0x4024, 0x6858, 0xa005,
-       0x0040, 0x4038, 0x685c, 0xa065, 0x0040, 0x4034, 0x2001, 0x762c,
-       0x2004, 0xa005, 0x0040, 0x4000, 0x1078, 0x6a96, 0x0078, 0x4006,
-       0x6013, 0x0400, 0x2009, 0x0041, 0x1078, 0x5c21, 0x6958, 0xa18c,
-       0xe600, 0xa186, 0x2000, 0x0040, 0x401c, 0xa186, 0x0400, 0x0040,
-       0x401c, 0x6944, 0x0c7e, 0x1078, 0x4604, 0x6000, 0xa084, 0xfdff,
-       0x6002, 0x0c7f, 0x0078, 0x4024, 0x027e, 0x2009, 0x0000, 0x2011,
-       0xfdff, 0x1078, 0x46ac, 0x027f, 0x684c, 0xd0c4, 0x0040, 0x4030,
-       0x6944, 0x1078, 0x4604, 0x6008, 0x8000, 0x0048, 0x4030, 0x600a,
-       0x0c7f, 0x127f, 0x0078, 0x413a, 0x0c7f, 0x127f, 0x0078, 0x4132,
-       0x6954, 0xa186, 0x002a, 0x00c0, 0x4044, 0x2001, 0x760c, 0x200c,
-       0xc194, 0x2102, 0x0078, 0x4024, 0xa186, 0x0020, 0x0040, 0x4059,
-       0xa186, 0x0029, 0x00c0, 0x4034, 0x6944, 0xa18c, 0xff00, 0x810f,
-       0x1078, 0x381d, 0x00c0, 0x4024, 0x6000, 0xc0e4, 0x6002, 0x0078,
-       0x4024, 0x685c, 0xa065, 0x0040, 0x4034, 0x6017, 0x0014, 0x0078,
-       0x4024, 0x6944, 0x1078, 0x4167, 0x6000, 0xa084, 0x0001, 0x0040,
-       0x407a, 0x2091, 0x8000, 0x6204, 0x8210, 0x0048, 0x4074, 0x6206,
-       0x2091, 0x8001, 0x0078, 0x4148, 0x2091, 0x8001, 0x6853, 0x0016,
-       0x0078, 0x4141, 0x6853, 0x0007, 0x0078, 0x4141, 0x6834, 0x8007,
-       0xa084, 0x00ff, 0x00c0, 0x4088, 0x1078, 0x3de8, 0x0078, 0x409a,
-       0x2030, 0x8001, 0x00c0, 0x4092, 0x7007, 0x0001, 0x1078, 0x409b,
-       0x0078, 0x409a, 0x7007, 0x0006, 0x7012, 0x2d00, 0x7016, 0x701a,
-       0x704b, 0x409b, 0x007c, 0x0e7e, 0x2009, 0x762c, 0x210c, 0x81ff,
-       0x00c0, 0x411c, 0x2009, 0x760c, 0x210c, 0xd194, 0x00c0, 0x4126,
-       0x6848, 0x2070, 0xae82, 0x7d00, 0x0048, 0x410b, 0x2001, 0x7615,
-       0x2004, 0xae02, 0x00c8, 0x410b, 0x6944, 0x1078, 0x4167, 0x6100,
-       0xa184, 0x0001, 0x0040, 0x40f1, 0xa184, 0x0100, 0x00c0, 0x410f,
-       0xa184, 0x0200, 0x00c0, 0x4113, 0x601c, 0xa005, 0x00c0, 0x4117,
-       0x711c, 0xa186, 0x0006, 0x00c0, 0x40f6, 0x6853, 0x0000, 0x6803,
-       0x0000, 0x2d08, 0x127e, 0x2091, 0x8000, 0x7010, 0xa005, 0x00c0,
-       0x40e8, 0x7112, 0x7018, 0xa065, 0x0040, 0x411b, 0x6000, 0xd0e4,
-       0x00c0, 0x4120, 0x2e60, 0x1078, 0x460d, 0x127f, 0x0e7f, 0x007c,
-       0x2068, 0x6800, 0xa005, 0x00c0, 0x40e8, 0x6902, 0x127f, 0x0e7f,
-       0x007c, 0x0e7f, 0x6853, 0x0006, 0x0078, 0x4141, 0x6944, 0xa18c,
-       0xff00, 0x810f, 0x1078, 0x381d, 0x00c0, 0x4121, 0x6000, 0xd0e4,
-       0x00c0, 0x4121, 0x711c, 0xa186, 0x0007, 0x00c0, 0x410b, 0x6853,
-       0x0002, 0x0078, 0x4123, 0x6853, 0x0008, 0x0078, 0x4123, 0x6853,
-       0x000e, 0x0078, 0x4123, 0x6853, 0x0017, 0x0078, 0x4123, 0x6853,
-       0x0035, 0x0078, 0x4123, 0x127f, 0x6853, 0x0028, 0x0078, 0x4123,
-       0x127f, 0x6853, 0x0029, 0x0e7f, 0x0078, 0x4141, 0x6853, 0x002a,
-       0x0078, 0x4123, 0x2009, 0x003e, 0x0078, 0x413c, 0x2009, 0x0004,
-       0x0078, 0x413c, 0x2009, 0x0006, 0x0078, 0x413c, 0x2009, 0x0016,
-       0x0078, 0x413c, 0x2009, 0x0001, 0x6854, 0xa084, 0xff00, 0xa105,
-       0x6856, 0x2091, 0x8000, 0x1078, 0x3a72, 0x2091, 0x8001, 0x007c,
-       0x1078, 0x1340, 0x007c, 0x702c, 0x7130, 0x8108, 0xa102, 0x0048,
-       0x4158, 0xa00e, 0x7034, 0x7072, 0x7038, 0x7076, 0x0078, 0x4164,
-       0x7070, 0xa080, 0x0040, 0x7072, 0x00c8, 0x4164, 0x7074, 0xa081,
-       0x0000, 0x7076, 0xa085, 0x0001, 0x7932, 0x7132, 0x007c, 0x0d7e,
-       0x1078, 0x4604, 0x0d7f, 0x007c, 0x0d7e, 0x2011, 0x0004, 0x2204,
-       0xa085, 0x8002, 0x2012, 0x0d7f, 0x007c, 0x20e1, 0x0002, 0x3d08,
-       0x20e1, 0x2000, 0x3d00, 0xa084, 0x7000, 0x0040, 0x4183, 0xa086,
-       0x1000, 0x00c0, 0x419f, 0x20e1, 0x0004, 0x3d60, 0xd1bc, 0x00c0,
-       0x418a, 0x3e60, 0xac84, 0x0007, 0x00c0, 0x419f, 0xac82, 0x7d00,
-       0x0048, 0x419f, 0x6854, 0xac02, 0x00c8, 0x419f, 0x2009, 0x0047,
-       0x1078, 0x5c21, 0x7a1c, 0xd284, 0x00c0, 0x4175, 0x007c, 0xa016,
-       0x1078, 0x156a, 0x0078, 0x419a, 0x157e, 0x137e, 0x147e, 0x20e1,
-       0x3000, 0x3d20, 0x3e28, 0xa584, 0x0070, 0x00c0, 0x41cd, 0xa484,
-       0x7000, 0xa086, 0x1000, 0x00c0, 0x41cd, 0x1078, 0x41da, 0x0040,
-       0x41cd, 0x20e1, 0x3000, 0x7828, 0x7828, 0x1078, 0x41f8, 0x147f,
-       0x137f, 0x157f, 0x2009, 0x783e, 0x2104, 0xa005, 0x00c0, 0x41c9,
-       0x007c, 0x1078, 0x4c72, 0x0078, 0x41c8, 0x1078, 0x7569, 0x1078,
-       0x41da, 0x20e1, 0x3000, 0x7828, 0x7828, 0x147f, 0x137f, 0x157f,
-       0x0078, 0x41c8, 0xa484, 0x01ff, 0x687a, 0xa005, 0x0040, 0x41ec,
-       0xa080, 0x001f, 0xa084, 0x03f8, 0x80ac, 0x20e1, 0x1000, 0x2ea0,
-       0x2099, 0x020a, 0x53a5, 0x007c, 0x20a9, 0x000c, 0x20e1, 0x1000,
-       0x2ea0, 0x2099, 0x020a, 0x53a5, 0xa085, 0x0001, 0x0078, 0x41eb,
-       0x7000, 0xa084, 0xff00, 0xa08c, 0xf000, 0x8007, 0xa196, 0x0000,
-       0x00c0, 0x4205, 0x0078, 0x4379, 0x007c, 0xa196, 0x2000, 0x00c0,
-       0x4216, 0x6900, 0xa18e, 0x0001, 0x00c0, 0x4212, 0x1078, 0x2ea3,
-       0x0078, 0x4204, 0x1078, 0x421e, 0x0078, 0x4204, 0xa196, 0x8000,
-       0x00c0, 0x4204, 0x1078, 0x43ff, 0x0078, 0x4204, 0x0c7e, 0x7110,
-       0xa18c, 0xff00, 0x810f, 0xa196, 0x0001, 0x0040, 0x422b, 0xa196,
-       0x0023, 0x00c0, 0x4320, 0xa08e, 0x0023, 0x00c0, 0x425c, 0x1078,
-       0x4476, 0x0040, 0x4320, 0x7124, 0x610a, 0x7030, 0xa08e, 0x0200,
-       0x00c0, 0x4244, 0x7034, 0xa005, 0x00c0, 0x4320, 0x2009, 0x0015,
-       0x1078, 0x5c21, 0x0078, 0x4320, 0xa08e, 0x0210, 0x00c0, 0x424e,
-       0x2009, 0x0015, 0x1078, 0x5c21, 0x0078, 0x4320, 0xa08e, 0x0100,
-       0x00c0, 0x4320, 0x7034, 0xa005, 0x00c0, 0x4320, 0x2009, 0x0016,
-       0x1078, 0x5c21, 0x0078, 0x4320, 0xa08e, 0x0022, 0x00c0, 0x4320,
-       0x7030, 0xa08e, 0x0300, 0x00c0, 0x426d, 0x7034, 0xa005, 0x00c0,
-       0x4320, 0x2009, 0x0017, 0x0078, 0x42ec, 0xa08e, 0x0500, 0x00c0,
-       0x4279, 0x7034, 0xa005, 0x00c0, 0x4320, 0x2009, 0x0018, 0x0078,
-       0x42ec, 0xa08e, 0x2010, 0x00c0, 0x4281, 0x2009, 0x0019, 0x0078,
-       0x42ec, 0xa08e, 0x2110, 0x00c0, 0x4289, 0x2009, 0x001a, 0x0078,
-       0x42ec, 0xa08e, 0x5200, 0x00c0, 0x4295, 0x7034, 0xa005, 0x00c0,
-       0x4320, 0x2009, 0x001b, 0x0078, 0x42ec, 0xa08e, 0x5000, 0x00c0,
-       0x42a1, 0x7034, 0xa005, 0x00c0, 0x4320, 0x2009, 0x001c, 0x0078,
-       0x42ec, 0xa08e, 0x1200, 0x00c0, 0x42ad, 0x7034, 0xa005, 0x00c0,
-       0x4320, 0x2009, 0x0024, 0x0078, 0x42ec, 0xa08c, 0xff00, 0xa18e,
-       0x2400, 0x00c0, 0x42b7, 0x2009, 0x002d, 0x0078, 0x42ec, 0xa08c,
-       0xff00, 0xa18e, 0x5300, 0x00c0, 0x42c1, 0x2009, 0x002a, 0x0078,
-       0x42ec, 0xa08e, 0x0f00, 0x00c0, 0x42c9, 0x2009, 0x0020, 0x0078,
-       0x42ec, 0xa08e, 0x5300, 0x00c0, 0x42cf, 0x0078, 0x42ea, 0xa08e,
-       0x6104, 0x00c0, 0x42ea, 0x2011, 0x7b8d, 0x8208, 0x2204, 0xa082,
-       0x0004, 0x20a8, 0x95ac, 0x95ac, 0x2011, 0x8015, 0x211c, 0x8108,
-       0x2124, 0x1078, 0x2d3b, 0x8108, 0x00f0, 0x42dc, 0x2009, 0x0023,
-       0x0078, 0x42ec, 0x2009, 0x001d, 0x017e, 0x2011, 0x7b83, 0x2204,
-       0x8211, 0x220c, 0x1078, 0x207f, 0x00c0, 0x4322, 0x1078, 0x37e6,
-       0x00c0, 0x4322, 0x6612, 0x6516, 0x86ff, 0x0040, 0x4312, 0x017f,
-       0x017e, 0xa186, 0x0017, 0x00c0, 0x4312, 0x6864, 0xa606, 0x00c0,
-       0x4312, 0x6868, 0xa506, 0xa084, 0xff00, 0x00c0, 0x4312, 0x6000,
-       0xc0f5, 0x6002, 0x0c7e, 0x1078, 0x5b94, 0x0040, 0x4325, 0x017f,
-       0x611a, 0x601f, 0x0004, 0x7120, 0x610a, 0x017f, 0x1078, 0x5c21,
-       0x0c7f, 0x007c, 0x017f, 0x0078, 0x4320, 0x0c7f, 0x0078, 0x4322,
-       0x0e7e, 0x0d7e, 0x2028, 0x2130, 0xa696, 0x00ff, 0x00c0, 0x4348,
-       0xa596, 0xfffd, 0x00c0, 0x4338, 0x2009, 0x007f, 0x0078, 0x4375,
-       0xa596, 0xfffe, 0x00c0, 0x4340, 0x2009, 0x007e, 0x0078, 0x4375,
-       0xa596, 0xfffc, 0x00c0, 0x4348, 0x2009, 0x0080, 0x0078, 0x4375,
-       0x2011, 0x0000, 0x2021, 0x007e, 0x20a9, 0x0082, 0x2071, 0x779e,
-       0x2e1c, 0x83ff, 0x00c0, 0x435a, 0x82ff, 0x00c0, 0x4369, 0x2410,
-       0x0078, 0x4369, 0x2368, 0x6b10, 0x007e, 0x2100, 0xa31e, 0x007f,
-       0x00c0, 0x4369, 0x6b14, 0xa31e, 0x00c0, 0x4369, 0x2408, 0x0078,
-       0x4375, 0x8420, 0x8e70, 0x00f0, 0x4350, 0x82ff, 0x00c0, 0x4374,
-       0xa085, 0x0001, 0x0078, 0x4376, 0x2208, 0xa006, 0x0d7f, 0x0e7f,
-       0x007c, 0xa084, 0x0007, 0x0079, 0x437e, 0x007c, 0x4386, 0x4386,
-       0x4386, 0x4386, 0x4386, 0x4387, 0x43a0, 0x43e8, 0x007c, 0x7110,
-       0xd1bc, 0x0040, 0x439f, 0x7120, 0x2160, 0xac8c, 0x0007, 0x00c0,
-       0x439f, 0xac8a, 0x7d00, 0x0048, 0x439f, 0x6854, 0xac02, 0x00c8,
-       0x439f, 0x7124, 0x610a, 0x2009, 0x0046, 0x1078, 0x5c21, 0x007c,
-       0x0c7e, 0x7110, 0xd1bc, 0x00c0, 0x43e6, 0x2011, 0x7b83, 0x2204,
-       0x8211, 0x220c, 0x1078, 0x207f, 0x00c0, 0x43e6, 0x1078, 0x381d,
-       0x00c0, 0x43e6, 0x6204, 0xa294, 0xff00, 0x8217, 0xa286, 0x0006,
-       0x00c0, 0x43cb, 0x0c7e, 0x1078, 0x5b94, 0x017f, 0x0040, 0x43e6,
-       0x611a, 0x601f, 0x0006, 0x7120, 0x610a, 0x2009, 0x0044, 0x1078,
-       0x5c21, 0x0078, 0x43e6, 0x0c7e, 0x1078, 0x5b94, 0x017f, 0x0040,
-       0x43e6, 0x611a, 0x601f, 0x0004, 0x7120, 0x610a, 0xa286, 0x0004,
-       0x00c0, 0x43de, 0x6007, 0x0005, 0x0078, 0x43e0, 0x6007, 0x0001,
-       0x6003, 0x0001, 0x1078, 0x486a, 0x1078, 0x4c72, 0x0c7f, 0x007c,
-       0x7110, 0xd1bc, 0x0040, 0x43fe, 0x7020, 0x2060, 0xac84, 0x0007,
-       0x00c0, 0x43fe, 0xac82, 0x7d00, 0x0048, 0x43fe, 0x6854, 0xac02,
-       0x00c8, 0x43fe, 0x2009, 0x0045, 0x1078, 0x5c21, 0x007c, 0x7110,
-       0xa18c, 0xff00, 0x810f, 0xa18e, 0x0000, 0x00c0, 0x440f, 0xa084,
-       0x000f, 0xa08a, 0x0006, 0x10c8, 0x12cd, 0x1079, 0x4410, 0x007c,
-       0x4416, 0x4417, 0x4416, 0x4416, 0x4458, 0x4467, 0x007c, 0x7110,
-       0xd1bc, 0x00c0, 0x4457, 0x700c, 0x7108, 0x1078, 0x207f, 0x00c0,
-       0x4457, 0x1078, 0x37e6, 0x00c0, 0x4457, 0x6612, 0x6516, 0x6204,
-       0xa294, 0xff00, 0x8217, 0xa286, 0x0006, 0x00c0, 0x4440, 0x0c7e,
-       0x1078, 0x5b94, 0x017f, 0x0040, 0x4457, 0x611a, 0x601f, 0x0005,
-       0x7120, 0x610a, 0x2009, 0x0088, 0x1078, 0x5c21, 0x0078, 0x4457,
-       0x0c7e, 0x1078, 0x5b94, 0x017f, 0x0040, 0x4457, 0x611a, 0x601f,
-       0x0004, 0x7120, 0x610a, 0xa286, 0x0004, 0x00c0, 0x4453, 0x2009,
-       0x0005, 0x0078, 0x4455, 0x2009, 0x0001, 0x1078, 0x5c21, 0x007c,
-       0x7110, 0xd1bc, 0x0040, 0x4466, 0x1078, 0x4476, 0x0040, 0x4466,
-       0x7124, 0x610a, 0x2009, 0x0089, 0x1078, 0x5c21, 0x007c, 0x7110,
-       0xd1bc, 0x0040, 0x4475, 0x1078, 0x4476, 0x0040, 0x4475, 0x7124,
-       0x610a, 0x2009, 0x008a, 0x1078, 0x5c21, 0x007c, 0x7020, 0x2060,
-       0xac84, 0x0007, 0x00c0, 0x4489, 0xac82, 0x7d00, 0x0048, 0x4489,
-       0x2001, 0x7615, 0x2004, 0xac02, 0x00c8, 0x4489, 0xa085, 0x0001,
-       0x007c, 0xa006, 0x0078, 0x4488, 0x2071, 0x7849, 0x7003, 0x0003,
-       0x700f, 0x0361, 0xa006, 0x701a, 0x7012, 0x7017, 0x7d00, 0x7007,
-       0x0000, 0x7026, 0x702b, 0x5587, 0x7032, 0x7037, 0x55c8, 0x703b,
-       0x0002, 0x703f, 0x0000, 0x007c, 0x2071, 0x7849, 0x00e0, 0x4553,
-       0x2091, 0x6000, 0x700c, 0x8001, 0x700e, 0x00c0, 0x451c, 0x700f,
-       0x0361, 0x7007, 0x0001, 0x127e, 0x2091, 0x8000, 0x7138, 0x8109,
-       0x713a, 0x00c0, 0x451a, 0x703b, 0x0002, 0x2009, 0x0100, 0x2104,
-       0xa082, 0x0003, 0x00c8, 0x451a, 0x703c, 0xa086, 0x0001, 0x00c0,
-       0x44f7, 0x0d7e, 0x2069, 0x0140, 0x6804, 0xa084, 0x4000, 0x0040,
-       0x44d5, 0x6803, 0x1000, 0x0078, 0x44dc, 0x6804, 0xa084, 0x1000,
-       0x0040, 0x44dc, 0x6803, 0x0100, 0x6803, 0x0000, 0x703f, 0x0000,
-       0x2069, 0x7836, 0x6804, 0xa082, 0x0006, 0x00c0, 0x44e9, 0x6807,
-       0x0000, 0x6830, 0xa082, 0x0003, 0x00c0, 0x44f0, 0x6833, 0x0000,
-       0x1078, 0x4c72, 0x1078, 0x4d32, 0x0d7f, 0x0078, 0x451a, 0x0d7e,
-       0x2069, 0x7600, 0x6944, 0x6860, 0xa102, 0x00c8, 0x4519, 0x2069,
-       0x7836, 0x6804, 0xa086, 0x0000, 0x00c0, 0x4519, 0x6830, 0xa086,
-       0x0000, 0x00c0, 0x4519, 0x703f, 0x0001, 0x6807, 0x0006, 0x6833,
-       0x0003, 0x2069, 0x0100, 0x6830, 0x689e, 0x2069, 0x0140, 0x6803,
-       0x0600, 0x0d7f, 0x0078, 0x451f, 0x127e, 0x2091, 0x8000, 0x7024,
-       0xa00d, 0x0040, 0x4530, 0x7020, 0x8001, 0x7022, 0x00c0, 0x4530,
-       0x7023, 0x0009, 0x8109, 0x7126, 0x00c0, 0x4530, 0x7028, 0x107a,
-       0x7030, 0xa00d, 0x0040, 0x4541, 0x702c, 0x8001, 0x702e, 0x00c0,
-       0x4541, 0x702f, 0x0009, 0x8109, 0x7132, 0x00c0, 0x4541, 0x7034,
-       0x107a, 0x7018, 0xa00d, 0x0040, 0x4552, 0x7008, 0x8001, 0x700a,
-       0x00c0, 0x4552, 0x700b, 0x0009, 0x8109, 0x711a, 0x00c0, 0x4552,
-       0x701c, 0x107a, 0x127f, 0x7004, 0x0079, 0x4556, 0x457d, 0x457e,
-       0x459a, 0x0e7e, 0x2071, 0x7849, 0x7018, 0xa005, 0x00c0, 0x4564,
-       0x711a, 0x721e, 0x700b, 0x0009, 0x0e7f, 0x007c, 0x0e7e, 0x007e,
-       0x2071, 0x7849, 0x701c, 0xa206, 0x00c0, 0x4570, 0x701a, 0x701e,
-       0x007f, 0x0e7f, 0x007c, 0x0e7e, 0x2071, 0x7849, 0x6088, 0xa102,
-       0x0048, 0x457b, 0x618a, 0x0e7f, 0x007c, 0x007c, 0x7110, 0x1078,
-       0x381d, 0x00c0, 0x4590, 0x6088, 0x8001, 0x0048, 0x4590, 0x608a,
-       0x00c0, 0x4590, 0x127e, 0x2091, 0x8000, 0x1078, 0x4c72, 0x127f,
-       0x8108, 0xa182, 0x00ff, 0x0048, 0x4598, 0xa00e, 0x7007, 0x0002,
-       0x7112, 0x007c, 0x7014, 0x2060, 0x127e, 0x2091, 0x8000, 0x6014,
-       0xa005, 0x0040, 0x45c9, 0x8001, 0x6016, 0x00c0, 0x45c9, 0x611c,
-       0xa186, 0x0003, 0x0040, 0x45b0, 0xa186, 0x0006, 0x00c0, 0x45c7,
-       0x6010, 0x2068, 0x6854, 0xa08a, 0x199a, 0x0048, 0x45c7, 0xa082,
-       0x1999, 0x6856, 0xa08a, 0x199a, 0x0048, 0x45c0, 0x2001, 0x1999,
-       0x8003, 0x800b, 0x810b, 0xa108, 0x6116, 0x0078, 0x45c9, 0x1078,
-       0x67c3, 0x127f, 0xac88, 0x0008, 0x7116, 0x2001, 0x7616, 0x2004,
-       0xa102, 0x0048, 0x45d7, 0x7017, 0x7d00, 0x7007, 0x0000, 0x007c,
-       0x0e7e, 0x2071, 0x7849, 0x7027, 0x07d0, 0x7023, 0x0009, 0x703b,
-       0x0002, 0x0e7f, 0x007c, 0x2001, 0x7852, 0x2003, 0x0000, 0x007c,
-       0x0e7e, 0x2071, 0x7849, 0x7033, 0x07d0, 0x702f, 0x0009, 0x0e7f,
-       0x007c, 0x2011, 0x7855, 0x2013, 0x0000, 0x007c, 0x0e7e, 0x2071,
-       0x7849, 0x711a, 0x721e, 0x700b, 0x0009, 0x0e7f, 0x007c, 0x0c7e,
-       0x2061, 0x78da, 0x0c7f, 0x007c, 0xa184, 0x000f, 0x8003, 0x8003,
-       0x8003, 0xa080, 0x78da, 0x2060, 0x007c, 0x6854, 0xa08a, 0x199a,
-       0x0048, 0x4614, 0x2001, 0x1999, 0xa005, 0x00c0, 0x4624, 0x6944,
-       0x0c7e, 0x1078, 0x4604, 0x6014, 0x0c7f, 0xa005, 0x00c0, 0x4629,
-       0x2001, 0x001e, 0x0078, 0x4629, 0xa08e, 0xffff, 0x00c0, 0x4629,
-       0xa006, 0x8003, 0x800b, 0x810b, 0xa108, 0x6116, 0x684c, 0xa08c,
-       0x00c0, 0xa18e, 0x00c0, 0x0040, 0x4664, 0xd0b4, 0x00c0, 0x4640,
-       0xd0bc, 0x00c0, 0x4652, 0x2009, 0x0006, 0x1078, 0x4687, 0x007c,
-       0xd0fc, 0x0040, 0x464d, 0xa084, 0x0003, 0xa08e, 0x0003, 0x0040,
-       0x4680, 0xa08e, 0x0000, 0x00c0, 0x4680, 0x2009, 0x0043, 0x1078,
-       0x5c21, 0x007c, 0xd0fc, 0x0040, 0x465f, 0xa084, 0x0003, 0xa08e,
-       0x0003, 0x0040, 0x4680, 0xa08e, 0x0000, 0x00c0, 0x4680, 0x2009,
-       0x0042, 0x1078, 0x5c21, 0x007c, 0xd0fc, 0x0040, 0x4676, 0xa084,
-       0x0003, 0xa08e, 0x0003, 0x0040, 0x4680, 0xa08e, 0x0002, 0x0040,
-       0x467a, 0x2009, 0x0041, 0x1078, 0x5c21, 0x007c, 0x1078, 0x4685,
-       0x0078, 0x4675, 0x2009, 0x0043, 0x1078, 0x5c21, 0x0078, 0x4675,
-       0x2009, 0x0004, 0x1078, 0x4687, 0x007c, 0x2009, 0x0001, 0x6010,
-       0xa0ec, 0xf000, 0x0040, 0x46ab, 0x2068, 0x6952, 0x6800, 0x6012,
-       0xa186, 0x0001, 0x00c0, 0x46a5, 0x694c, 0xa18c, 0x8100, 0xa18e,
-       0x8100, 0x00c0, 0x46a5, 0x0c7e, 0x6944, 0x1078, 0x4604, 0x6204,
-       0x8210, 0x0048, 0x46a4, 0x6206, 0x0c7f, 0x1078, 0x3a72, 0x6010,
-       0xa06d, 0x10c0, 0x460d, 0x007c, 0x157e, 0x0c7e, 0x20a9, 0x0010,
-       0x2061, 0x78da, 0x6000, 0x81ff, 0x0040, 0x46b9, 0xa205, 0x0078,
-       0x46ba, 0xa204, 0x6002, 0xace0, 0x0008, 0x00f0, 0x46b2, 0x0c7f,
-       0x157f, 0x007c, 0x6808, 0xa005, 0x0040, 0x46ca, 0x8001, 0x680a,
-       0xa085, 0x0001, 0x007c, 0x127e, 0x2091, 0x2200, 0x2079, 0x7836,
-       0x127f, 0x0d7e, 0x2069, 0x7836, 0x6803, 0x0005, 0x2069, 0x0004,
-       0x2d04, 0xa085, 0x8001, 0x206a, 0x0d7f, 0x007c, 0x0c7e, 0x6027,
-       0x0001, 0x7804, 0xa084, 0x0007, 0x0079, 0x46e6, 0x46f0, 0x4715,
-       0x4770, 0x46f6, 0x4715, 0x46ee, 0x46ee, 0x46ee, 0x1078, 0x12cd,
-       0x1078, 0x45e3, 0x1078, 0x4c72, 0x0c7f, 0x007c, 0x62c0, 0x82ff,
-       0x00c0, 0x46fc, 0x0c7f, 0x007c, 0x2011, 0x353a, 0x1078, 0x4566,
-       0x7828, 0xa092, 0x0002, 0x00c8, 0x470b, 0x8000, 0x782a, 0x1078,
-       0x356a, 0x0078, 0x46fa, 0x1078, 0x353a, 0x7807, 0x0003, 0x7827,
-       0x0000, 0x782b, 0x0000, 0x0078, 0x46fa, 0x1078, 0x45e3, 0x3c00,
-       0x007e, 0x2011, 0x0209, 0x20e1, 0x4000, 0x2214, 0x007f, 0x20e0,
-       0x82ff, 0x0040, 0x4733, 0x62c0, 0x82ff, 0x00c0, 0x4733, 0x782b,
-       0x0000, 0x7824, 0xa065, 0x1040, 0x12cd, 0x2009, 0x0013, 0x1078,
-       0x5c21, 0x0c7f, 0x007c, 0x3900, 0xa082, 0x797a, 0x00c8, 0x473a,
-       0x1078, 0x5b24, 0x0c7e, 0x7824, 0xa065, 0x1040, 0x12cd, 0x7804,
-       0xa086, 0x0004, 0x0040, 0x47b5, 0x7828, 0xa092, 0x2710, 0x00c8,
-       0x4750, 0x8000, 0x782a, 0x0c7f, 0x1078, 0x556c, 0x0078, 0x4731,
-       0x6104, 0xa186, 0x0003, 0x00c0, 0x4767, 0x0e7e, 0x2071, 0x7600,
-       0x70c8, 0x0e7f, 0xd08c, 0x0040, 0x4767, 0x0c7e, 0x0e7e, 0x2061,
-       0x0100, 0x2071, 0x7600, 0x1078, 0x3573, 0x0e7f, 0x0c7f, 0x1078,
-       0x75bc, 0x2009, 0x0014, 0x1078, 0x5c21, 0x0c7f, 0x0078, 0x4731,
-       0x2001, 0x7852, 0x2003, 0x0000, 0x62c0, 0x82ff, 0x00c0, 0x4784,
-       0x782b, 0x0000, 0x7824, 0xa065, 0x1040, 0x12cd, 0x2009, 0x0013,
-       0x1078, 0x5c6f, 0x0c7f, 0x007c, 0x0c7e, 0x0d7e, 0x3900, 0xa082,
-       0x797a, 0x00c8, 0x478d, 0x1078, 0x5b24, 0x7824, 0xa005, 0x1040,
-       0x12cd, 0x781c, 0xa06d, 0x1040, 0x12cd, 0x6800, 0xc0dc, 0x6802,
-       0x7924, 0x2160, 0x1078, 0x5bfa, 0x693c, 0x81ff, 0x1040, 0x12cd,
-       0x8109, 0x693e, 0x6854, 0xa015, 0x0040, 0x47a9, 0x7a1e, 0x0078,
-       0x47ab, 0x7918, 0x791e, 0x7807, 0x0000, 0x7827, 0x0000, 0x0d7f,
-       0x0c7f, 0x1078, 0x4c72, 0x0078, 0x4782, 0x6104, 0xa186, 0x0002,
-       0x0040, 0x47c0, 0xa186, 0x0004, 0x0040, 0x47c0, 0x0078, 0x4744,
-       0x7808, 0xac06, 0x0040, 0x4744, 0x1078, 0x4b79, 0x1078, 0x486a,
-       0x0c7f, 0x1078, 0x4c72, 0x0078, 0x4731, 0x0c7e, 0x6027, 0x0002,
-       0x2011, 0x7855, 0x2013, 0x0000, 0x62c8, 0x82ff, 0x00c0, 0x47e7,
-       0x62c4, 0x82ff, 0x00c0, 0x47e7, 0x793c, 0xa1e5, 0x0000, 0x0040,
-       0x47e5, 0x2009, 0x0049, 0x1078, 0x5c21, 0x0c7f, 0x007c, 0x3908,
-       0xa192, 0x797a, 0x00c8, 0x47ee, 0x1078, 0x5b24, 0x6017, 0x0010,
-       0x793c, 0x81ff, 0x0040, 0x47e5, 0x7944, 0xa192, 0x7530, 0x00c8,
-       0x480d, 0x8108, 0x7946, 0x1078, 0x45e8, 0x793c, 0xa188, 0x0007,
-       0x210c, 0xa18e, 0x0006, 0x00c0, 0x4809, 0x6017, 0x0012, 0x0078,
-       0x47e5, 0x6017, 0x0016, 0x0078, 0x47e5, 0x037e, 0x2019, 0x0001,
-       0x1078, 0x5760, 0x037f, 0x1078, 0x75bc, 0x793c, 0x2160, 0x2009,
-       0x004a, 0x1078, 0x5c21, 0x0078, 0x47e5, 0x007e, 0x017e, 0x0c7e,
-       0x127e, 0x2091, 0x8000, 0x600f, 0x0000, 0x2c08, 0x2061, 0x7836,
-       0x6020, 0x8000, 0x6022, 0x6010, 0xa005, 0x0040, 0x4838, 0xa080,
-       0x0003, 0x2102, 0x6112, 0x127f, 0x0c7f, 0x017f, 0x007f, 0x007c,
-       0x6116, 0x6112, 0x0078, 0x4833, 0x0d7e, 0x2069, 0x7836, 0x6000,
-       0xd0d4, 0x0040, 0x4851, 0x6820, 0x8000, 0x6822, 0xa086, 0x0001,
-       0x00c0, 0x484c, 0x2c00, 0x681e, 0x6804, 0xa084, 0x0007, 0x0079,
-       0x4c7a, 0xc0d5, 0x6002, 0x6818, 0xa005, 0x0040, 0x4863, 0x6056,
-       0x605b, 0x0000, 0x007e, 0x2c00, 0x681a, 0x0d7f, 0x685a, 0x2069,
-       0x7836, 0x0078, 0x4843, 0x6056, 0x605a, 0x2c00, 0x681a, 0x681e,
-       0x0078, 0x4843, 0x007e, 0x017e, 0x0c7e, 0x127e, 0x2091, 0x8000,
-       0x600f, 0x0000, 0x2c08, 0x2061, 0x7836, 0x6020, 0x8000, 0x6022,
-       0x6008, 0xa005, 0x0040, 0x4885, 0xa080, 0x0003, 0x2102, 0x610a,
-       0x127f, 0x0c7f, 0x017f, 0x007f, 0x007c, 0x610e, 0x610a, 0x0078,
-       0x4880, 0x0c7e, 0x600f, 0x0000, 0x2c08, 0x2061, 0x7836, 0x6034,
-       0xa005, 0x0040, 0x4899, 0xa080, 0x0003, 0x2102, 0x6136, 0x0c7f,
-       0x007c, 0x613a, 0x6136, 0x0078, 0x4897, 0x0f7e, 0x0e7e, 0x0d7e,
-       0x0c7e, 0x067e, 0x027e, 0x007e, 0x127e, 0x2071, 0x7836, 0x7638,
-       0x2660, 0x2678, 0x2091, 0x8000, 0x8cff, 0x0040, 0x48ff, 0x6018,
-       0xa080, 0x0028, 0x2004, 0xa206, 0x00c0, 0x48fa, 0x703c, 0xac06,
-       0x00c0, 0x48bf, 0x6003, 0x000a, 0x630a, 0x0078, 0x48fa, 0x7038,
-       0xac36, 0x00c0, 0x48c5, 0x660c, 0x763a, 0x7034, 0xac36, 0x00c0,
-       0x48d3, 0x2c00, 0xaf36, 0x0040, 0x48d1, 0x2f00, 0x7036, 0x0078,
-       0x48d3, 0x7037, 0x0000, 0x660c, 0x067e, 0x2c00, 0xaf06, 0x0040,
-       0x48dc, 0x7e0e, 0x0078, 0x48dd, 0x2678, 0x600f, 0x0000, 0x1078,
-       0x6938, 0x0040, 0x48f5, 0x6010, 0x2068, 0x601c, 0xa086, 0x0003,
-       0x00c0, 0x4908, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078,
-       0x6b34, 0x1078, 0x3a72, 0x1078, 0x6a89, 0x1078, 0x6a96, 0x0c7f,
-       0x0078, 0x48ac, 0x2c78, 0x600c, 0x2060, 0x0078, 0x48ac, 0x127f,
-       0x007f, 0x027f, 0x067f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x007c,
-       0x601c, 0xa086, 0x0006, 0x00c0, 0x48ea, 0x1078, 0x74f2, 0x0078,
-       0x48f5, 0x007e, 0x067e, 0x0c7e, 0x0d7e, 0x0f7e, 0x2031, 0x0000,
-       0x127e, 0x2091, 0x8000, 0x2079, 0x7836, 0x7838, 0xa065, 0x0040,
-       0x4948, 0x600c, 0x007e, 0x600f, 0x0000, 0x783c, 0xac06, 0x00c0,
-       0x492f, 0x6003, 0x000a, 0x630a, 0x2c30, 0x0078, 0x4945, 0x1078,
-       0x6938, 0x0040, 0x4943, 0x6010, 0x2068, 0x601c, 0xa086, 0x0003,
-       0x00c0, 0x4951, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078,
-       0x3a72, 0x1078, 0x6a89, 0x1078, 0x6a96, 0x007f, 0x0078, 0x491e,
-       0x7e3a, 0x7e36, 0x127f, 0x0f7f, 0x0d7f, 0x0c7f, 0x067f, 0x007f,
-       0x007c, 0x601c, 0xa086, 0x0006, 0x00c0, 0x493a, 0x1078, 0x74f2,
-       0x0078, 0x4943, 0x027e, 0x1078, 0x496e, 0x1078, 0x4a07, 0x027f,
-       0x007c, 0x0f7e, 0x127e, 0x2079, 0x7836, 0x2091, 0x8000, 0x1078,
-       0x4a9e, 0x1078, 0x4b06, 0x127f, 0x0f7f, 0x007c, 0x0f7e, 0x0e7e,
-       0x0d7e, 0x0c7e, 0x067e, 0x007e, 0x127e, 0x2091, 0x8000, 0x2071,
-       0x7836, 0x7614, 0x2660, 0x2678, 0x8cff, 0x0040, 0x49f6, 0x6018,
-       0xa080, 0x0028, 0x2004, 0xa206, 0x00c0, 0x49f1, 0x7024, 0xac06,
-       0x00c0, 0x49b4, 0x2069, 0x0100, 0x68c0, 0xa005, 0x0040, 0x49af,
-       0x1078, 0x557a, 0x68c3, 0x0000, 0x1078, 0x5a2a, 0x7027, 0x0000,
-       0x037e, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0040, 0x49a4,
-       0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084,
-       0x0040, 0x49ac, 0x6827, 0x0001, 0x037f, 0x0078, 0x49b4, 0x6003,
-       0x0009, 0x630a, 0x0078, 0x49f1, 0x7014, 0xac36, 0x00c0, 0x49ba,
-       0x660c, 0x7616, 0x7010, 0xac36, 0x00c0, 0x49c8, 0x2c00, 0xaf36,
-       0x0040, 0x49c6, 0x2f00, 0x7012, 0x0078, 0x49c8, 0x7013, 0x0000,
-       0x660c, 0x067e, 0x2c00, 0xaf06, 0x0040, 0x49d1, 0x7e0e, 0x0078,
-       0x49d2, 0x2678, 0x600f, 0x0000, 0x6010, 0x2068, 0x1078, 0x6938,
-       0x0040, 0x49ea, 0x601c, 0xa086, 0x0003, 0x00c0, 0x49fe, 0x6837,
-       0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x6b34, 0x1078, 0x3a72,
-       0x1078, 0x6a89, 0x1078, 0x6a96, 0x1078, 0x58fa, 0x0c7f, 0x0078,
-       0x497c, 0x2c78, 0x600c, 0x2060, 0x0078, 0x497c, 0x127f, 0x007f,
-       0x067f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x007c, 0x601c, 0xa086,
-       0x0006, 0x00c0, 0x49df, 0x1078, 0x74f2, 0x0078, 0x49ea, 0x0c7e,
-       0x007e, 0x127e, 0x2091, 0x8000, 0xa280, 0x7720, 0x2004, 0xa065,
-       0x0040, 0x4a9a, 0x0f7e, 0x0e7e, 0x0d7e, 0x067e, 0x2071, 0x7836,
-       0x6654, 0x7018, 0xac06, 0x00c0, 0x4a1e, 0x761a, 0x701c, 0xac06,
-       0x00c0, 0x4a2a, 0x86ff, 0x00c0, 0x4a29, 0x7018, 0x701e, 0x0078,
-       0x4a2a, 0x761e, 0x6058, 0xa07d, 0x0040, 0x4a2f, 0x7e56, 0xa6ed,
-       0x0000, 0x0040, 0x4a35, 0x2f00, 0x685a, 0x6057, 0x0000, 0x605b,
-       0x0000, 0x6000, 0xc0d4, 0xc0dc, 0x6002, 0x1078, 0x379a, 0x0040,
-       0x4a96, 0x7624, 0x86ff, 0x0040, 0x4a86, 0xa680, 0x0004, 0x2004,
-       0xad06, 0x00c0, 0x4a86, 0x0d7e, 0x2069, 0x0100, 0x68c0, 0xa005,
-       0x0040, 0x4a7d, 0x1078, 0x557a, 0x68c3, 0x0000, 0x1078, 0x5a2a,
-       0x7027, 0x0000, 0x037e, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000,
-       0x0040, 0x4a66, 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100,
-       0x6824, 0xd084, 0x0040, 0x4a6e, 0x6827, 0x0001, 0x037f, 0x0d7f,
-       0x0c7e, 0x603c, 0xa005, 0x0040, 0x4a77, 0x8001, 0x603e, 0x2660,
-       0x1078, 0x6a96, 0x0c7f, 0x0078, 0x4a86, 0x0d7f, 0x0c7e, 0x2660,
-       0x6003, 0x0009, 0x630a, 0x0c7f, 0x0078, 0x4a3d, 0x8dff, 0x0040,
-       0x4a92, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x6b34,
-       0x1078, 0x3a72, 0x1078, 0x58fa, 0x0078, 0x4a3d, 0x067f, 0x0d7f,
-       0x0e7f, 0x0f7f, 0x127f, 0x007f, 0x0c7f, 0x007c, 0x007e, 0x067e,
-       0x0c7e, 0x0d7e, 0x2031, 0x0000, 0x7814, 0xa065, 0x0040, 0x4af6,
-       0x600c, 0x007e, 0x600f, 0x0000, 0x7824, 0xac06, 0x00c0, 0x4adb,
-       0x2069, 0x0100, 0x68c0, 0xa005, 0x0040, 0x4ad5, 0x1078, 0x557a,
-       0x68c3, 0x0000, 0x1078, 0x5a2a, 0x7827, 0x0000, 0x037e, 0x2069,
-       0x0140, 0x6b04, 0xa384, 0x1000, 0x0040, 0x4aca, 0x6803, 0x0100,
-       0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084, 0x0040, 0x4ad2,
-       0x6827, 0x0001, 0x037f, 0x0078, 0x4adb, 0x6003, 0x0009, 0x630a,
-       0x2c30, 0x0078, 0x4af3, 0x6010, 0x2068, 0x1078, 0x6938, 0x0040,
-       0x4aef, 0x601c, 0xa086, 0x0003, 0x00c0, 0x4afd, 0x6837, 0x0103,
-       0x6b4a, 0x6847, 0x0000, 0x1078, 0x3a72, 0x1078, 0x6a89, 0x1078,
-       0x6a96, 0x1078, 0x58fa, 0x007f, 0x0078, 0x4aa5, 0x7e16, 0x7e12,
+       0xa084, 0x00ff, 0x20a9, 0x0001, 0xa096, 0x0001, 0x0040, 0x402a,
+       0x2009, 0x0000, 0x20a9, 0x007e, 0xa096, 0x0002, 0x0040, 0x402a,
+       0xa005, 0x00c0, 0x403d, 0x6944, 0x810f, 0xa18c, 0x00ff, 0x1078,
+       0x384c, 0x00c0, 0x403d, 0x067e, 0x6e50, 0x1078, 0x3915, 0x067f,
+       0x0078, 0x403d, 0x047e, 0x2011, 0x770c, 0x2224, 0xc484, 0xc48c,
+       0x2412, 0x047f, 0x0c7e, 0x1078, 0x384c, 0x00c0, 0x4039, 0x1078,
+       0x3a94, 0x8108, 0x00f0, 0x4033, 0x0c7f, 0x1078, 0x1340, 0x007c,
+       0x127e, 0x2091, 0x8000, 0x7007, 0x0001, 0x2001, 0x7752, 0x2004,
+       0xd0a4, 0x0040, 0x4081, 0x2009, 0x0000, 0x1078, 0x428a, 0x6100,
+       0xd184, 0x0040, 0x4066, 0x6858, 0xa084, 0x00ff, 0x00c0, 0x4084,
+       0x6000, 0xd084, 0x0040, 0x4081, 0x6004, 0xa005, 0x00c0, 0x4087,
+       0x6003, 0x0000, 0x600b, 0x0000, 0x0078, 0x407e, 0x2011, 0x0001,
+       0x6860, 0xa005, 0x00c0, 0x406e, 0x2001, 0x001e, 0x8000, 0x6016,
+       0x6858, 0xa084, 0x00ff, 0x0040, 0x4081, 0x6006, 0x6858, 0x8007,
+       0xa084, 0x00ff, 0x0040, 0x4081, 0x600a, 0x6202, 0x127f, 0x0078,
+       0x425d, 0x127f, 0x0078, 0x4255, 0x127f, 0x0078, 0x424d, 0x127f,
+       0x0078, 0x4251, 0x127e, 0x2091, 0x8000, 0x7007, 0x0001, 0x2001,
+       0x7752, 0x2004, 0xd0a4, 0x0040, 0x40e0, 0x2009, 0x0000, 0x1078,
+       0x428a, 0x6000, 0xa084, 0x0001, 0x0040, 0x40e0, 0x6204, 0x6308,
+       0x6c48, 0xa484, 0x0003, 0x0040, 0x40b8, 0x6958, 0xa18c, 0x00ff,
+       0x8001, 0x00c0, 0x40b1, 0x2100, 0xa210, 0x0048, 0x40dd, 0x0078,
+       0x40b8, 0x8001, 0x00c0, 0x40dd, 0x2100, 0xa212, 0x0048, 0x40dd,
+       0xa484, 0x000c, 0x0040, 0x40d2, 0x6958, 0x810f, 0xa18c, 0x00ff,
+       0xa082, 0x0004, 0x00c0, 0x40ca, 0x2100, 0xa318, 0x0048, 0x40dd,
+       0x0078, 0x40d2, 0xa082, 0x0004, 0x00c0, 0x40dd, 0x2100, 0xa31a,
+       0x0048, 0x40dd, 0x6860, 0xa005, 0x0040, 0x40d8, 0x8000, 0x6016,
+       0x6206, 0x630a, 0x127f, 0x0078, 0x425d, 0x127f, 0x0078, 0x4259,
+       0x127f, 0x0078, 0x4255, 0x127e, 0x2091, 0x8000, 0x7007, 0x0001,
+       0x2009, 0x0000, 0x1078, 0x428a, 0x6308, 0x8318, 0x0048, 0x40f4,
+       0x630a, 0x127f, 0x0078, 0x426b, 0x127f, 0x0078, 0x4259, 0x127e,
+       0x0c7e, 0x2091, 0x8000, 0x7007, 0x0001, 0x684c, 0xd0ac, 0x0040,
+       0x410d, 0x2009, 0x0000, 0x0c7e, 0x1078, 0x4727, 0x6000, 0x2001,
+       0xfcff, 0x6002, 0x0c7f, 0x0078, 0x4144, 0x6858, 0xa005, 0x0040,
+       0x4159, 0x685c, 0xa065, 0x0040, 0x4155, 0x2001, 0x772c, 0x2004,
+       0xa005, 0x0040, 0x411f, 0x1078, 0x6bb6, 0x0078, 0x4125, 0x6013,
+       0x0400, 0x2009, 0x0041, 0x1078, 0x5d41, 0x6958, 0xa18c, 0xe600,
+       0xa186, 0x2000, 0x0040, 0x413c, 0xa186, 0x0400, 0x0040, 0x413c,
+       0x2009, 0x0000, 0x0c7e, 0x1078, 0x4727, 0x6000, 0xa084, 0xfdff,
+       0x6002, 0x0c7f, 0x0078, 0x4144, 0x027e, 0x2009, 0x0000, 0x2011,
+       0xfdff, 0x1078, 0x47d0, 0x027f, 0x684c, 0xd0c4, 0x0040, 0x4151,
+       0x2009, 0x0000, 0x1078, 0x4727, 0x6008, 0x8000, 0x0048, 0x4151,
+       0x600a, 0x0c7f, 0x127f, 0x0078, 0x425d, 0x0c7f, 0x127f, 0x0078,
+       0x4255, 0x6954, 0xa186, 0x002a, 0x00c0, 0x4165, 0x2001, 0x770c,
+       0x200c, 0xc194, 0x2102, 0x0078, 0x4144, 0xa186, 0x0020, 0x0040,
+       0x417a, 0xa186, 0x0029, 0x00c0, 0x4155, 0x6944, 0xa18c, 0xff00,
+       0x810f, 0x1078, 0x384c, 0x00c0, 0x4144, 0x6000, 0xc0e4, 0x6002,
+       0x0078, 0x4144, 0x685c, 0xa065, 0x0040, 0x4155, 0x6017, 0x0014,
+       0x0078, 0x4144, 0x2009, 0x0000, 0x1078, 0x428a, 0x6000, 0xa084,
+       0x0001, 0x0040, 0x419c, 0x2091, 0x8000, 0x6204, 0x8210, 0x0048,
+       0x4196, 0x6206, 0x2091, 0x8001, 0x0078, 0x426b, 0x2091, 0x8001,
+       0x6853, 0x0016, 0x0078, 0x4264, 0x6853, 0x0007, 0x0078, 0x4264,
+       0x6834, 0x8007, 0xa084, 0x00ff, 0x00c0, 0x41aa, 0x1078, 0x3f08,
+       0x0078, 0x41bc, 0x2030, 0x8001, 0x00c0, 0x41b4, 0x7007, 0x0001,
+       0x1078, 0x41bd, 0x0078, 0x41bc, 0x7007, 0x0006, 0x7012, 0x2d00,
+       0x7016, 0x701a, 0x704b, 0x41bd, 0x007c, 0x0e7e, 0x2009, 0x772c,
+       0x210c, 0x81ff, 0x00c0, 0x423f, 0x2009, 0x770c, 0x210c, 0xd194,
+       0x00c0, 0x4249, 0x6848, 0x2070, 0xae82, 0x7e00, 0x0048, 0x422e,
+       0x2001, 0x7715, 0x2004, 0xae02, 0x00c8, 0x422e, 0x2009, 0x0000,
+       0x1078, 0x428a, 0x6100, 0xa184, 0x0001, 0x0040, 0x4214, 0xa184,
+       0x0100, 0x00c0, 0x4232, 0xa184, 0x0200, 0x00c0, 0x4236, 0x601c,
+       0xa005, 0x00c0, 0x423a, 0x711c, 0xa186, 0x0006, 0x00c0, 0x4219,
+       0x6853, 0x0000, 0x6803, 0x0000, 0x2d08, 0x127e, 0x2091, 0x8000,
+       0x7010, 0xa005, 0x00c0, 0x420b, 0x7112, 0x7018, 0xa065, 0x0040,
+       0x423e, 0x6000, 0xd0e4, 0x00c0, 0x4243, 0x2e60, 0x1078, 0x4730,
+       0x127f, 0x0e7f, 0x007c, 0x2068, 0x6800, 0xa005, 0x00c0, 0x420b,
+       0x6902, 0x127f, 0x0e7f, 0x007c, 0x0e7f, 0x6853, 0x0006, 0x0078,
+       0x4264, 0x6944, 0xa18c, 0xff00, 0x810f, 0x1078, 0x384c, 0x00c0,
+       0x4244, 0x6000, 0xd0e4, 0x00c0, 0x4244, 0x711c, 0xa186, 0x0007,
+       0x00c0, 0x422e, 0x6853, 0x0002, 0x0078, 0x4246, 0x6853, 0x0008,
+       0x0078, 0x4246, 0x6853, 0x000e, 0x0078, 0x4246, 0x6853, 0x0017,
+       0x0078, 0x4246, 0x6853, 0x0035, 0x0078, 0x4246, 0x127f, 0x6853,
+       0x0028, 0x0078, 0x4246, 0x127f, 0x6853, 0x0029, 0x0e7f, 0x0078,
+       0x4264, 0x6853, 0x002a, 0x0078, 0x4246, 0x2009, 0x003e, 0x0078,
+       0x425f, 0x2009, 0x0004, 0x0078, 0x425f, 0x2009, 0x0006, 0x0078,
+       0x425f, 0x2009, 0x0016, 0x0078, 0x425f, 0x2009, 0x0001, 0x6854,
+       0xa084, 0xff00, 0xa105, 0x6856, 0x2091, 0x8000, 0x1078, 0x3b92,
+       0x2091, 0x8001, 0x007c, 0x1078, 0x1340, 0x007c, 0x702c, 0x7130,
+       0x8108, 0xa102, 0x0048, 0x427b, 0xa00e, 0x7034, 0x7072, 0x7038,
+       0x7076, 0x0078, 0x4287, 0x7070, 0xa080, 0x0040, 0x7072, 0x00c8,
+       0x4287, 0x7074, 0xa081, 0x0000, 0x7076, 0xa085, 0x0001, 0x7932,
+       0x7132, 0x007c, 0x0d7e, 0x1078, 0x4727, 0x0d7f, 0x007c, 0x0d7e,
+       0x2011, 0x0004, 0x2204, 0xa085, 0x8002, 0x2012, 0x0d7f, 0x007c,
+       0x20e1, 0x0002, 0x3d08, 0x20e1, 0x2000, 0x3d00, 0xa084, 0x7000,
+       0x0040, 0x42a6, 0xa086, 0x1000, 0x00c0, 0x42c2, 0x20e1, 0x0004,
+       0x3d60, 0xd1bc, 0x00c0, 0x42ad, 0x3e60, 0xac84, 0x0007, 0x00c0,
+       0x42c2, 0xac82, 0x7e00, 0x0048, 0x42c2, 0x6854, 0xac02, 0x00c8,
+       0x42c2, 0x2009, 0x0047, 0x1078, 0x5d41, 0x7a1c, 0xd284, 0x00c0,
+       0x4298, 0x007c, 0xa016, 0x1078, 0x156a, 0x0078, 0x42bd, 0x157e,
+       0x137e, 0x147e, 0x20e1, 0x3000, 0x3d20, 0x3e28, 0xa584, 0x0070,
+       0x00c0, 0x42f0, 0xa484, 0x7000, 0xa086, 0x1000, 0x00c0, 0x42f0,
+       0x1078, 0x42fd, 0x0040, 0x42f0, 0x20e1, 0x3000, 0x7828, 0x7828,
+       0x1078, 0x431b, 0x147f, 0x137f, 0x157f, 0x2009, 0x793e, 0x2104,
+       0xa005, 0x00c0, 0x42ec, 0x007c, 0x1078, 0x4d96, 0x0078, 0x42eb,
+       0x1078, 0x7674, 0x1078, 0x42fd, 0x20e1, 0x3000, 0x7828, 0x7828,
+       0x147f, 0x137f, 0x157f, 0x0078, 0x42eb, 0xa484, 0x01ff, 0x687a,
+       0xa005, 0x0040, 0x430f, 0xa080, 0x001f, 0xa084, 0x03f8, 0x80ac,
+       0x20e1, 0x1000, 0x2ea0, 0x2099, 0x020a, 0x53a5, 0x007c, 0x20a9,
+       0x000c, 0x20e1, 0x1000, 0x2ea0, 0x2099, 0x020a, 0x53a5, 0xa085,
+       0x0001, 0x0078, 0x430e, 0x7000, 0xa084, 0xff00, 0xa08c, 0xf000,
+       0x8007, 0xa196, 0x0000, 0x00c0, 0x4328, 0x0078, 0x449c, 0x007c,
+       0xa196, 0x2000, 0x00c0, 0x4339, 0x6900, 0xa18e, 0x0001, 0x00c0,
+       0x4335, 0x1078, 0x2ec1, 0x0078, 0x4327, 0x1078, 0x4341, 0x0078,
+       0x4327, 0xa196, 0x8000, 0x00c0, 0x4327, 0x1078, 0x4522, 0x0078,
+       0x4327, 0x0c7e, 0x7110, 0xa18c, 0xff00, 0x810f, 0xa196, 0x0001,
+       0x0040, 0x434e, 0xa196, 0x0023, 0x00c0, 0x4443, 0xa08e, 0x0023,
+       0x00c0, 0x437f, 0x1078, 0x4599, 0x0040, 0x4443, 0x7124, 0x610a,
+       0x7030, 0xa08e, 0x0200, 0x00c0, 0x4367, 0x7034, 0xa005, 0x00c0,
+       0x4443, 0x2009, 0x0015, 0x1078, 0x5d41, 0x0078, 0x4443, 0xa08e,
+       0x0210, 0x00c0, 0x4371, 0x2009, 0x0015, 0x1078, 0x5d41, 0x0078,
+       0x4443, 0xa08e, 0x0100, 0x00c0, 0x4443, 0x7034, 0xa005, 0x00c0,
+       0x4443, 0x2009, 0x0016, 0x1078, 0x5d41, 0x0078, 0x4443, 0xa08e,
+       0x0022, 0x00c0, 0x4443, 0x7030, 0xa08e, 0x0300, 0x00c0, 0x4390,
+       0x7034, 0xa005, 0x00c0, 0x4443, 0x2009, 0x0017, 0x0078, 0x440f,
+       0xa08e, 0x0500, 0x00c0, 0x439c, 0x7034, 0xa005, 0x00c0, 0x4443,
+       0x2009, 0x0018, 0x0078, 0x440f, 0xa08e, 0x2010, 0x00c0, 0x43a4,
+       0x2009, 0x0019, 0x0078, 0x440f, 0xa08e, 0x2110, 0x00c0, 0x43ac,
+       0x2009, 0x001a, 0x0078, 0x440f, 0xa08e, 0x5200, 0x00c0, 0x43b8,
+       0x7034, 0xa005, 0x00c0, 0x4443, 0x2009, 0x001b, 0x0078, 0x440f,
+       0xa08e, 0x5000, 0x00c0, 0x43c4, 0x7034, 0xa005, 0x00c0, 0x4443,
+       0x2009, 0x001c, 0x0078, 0x440f, 0xa08e, 0x1200, 0x00c0, 0x43d0,
+       0x7034, 0xa005, 0x00c0, 0x4443, 0x2009, 0x0024, 0x0078, 0x440f,
+       0xa08c, 0xff00, 0xa18e, 0x2400, 0x00c0, 0x43da, 0x2009, 0x002d,
+       0x0078, 0x440f, 0xa08c, 0xff00, 0xa18e, 0x5300, 0x00c0, 0x43e4,
+       0x2009, 0x002a, 0x0078, 0x440f, 0xa08e, 0x0f00, 0x00c0, 0x43ec,
+       0x2009, 0x0020, 0x0078, 0x440f, 0xa08e, 0x5300, 0x00c0, 0x43f2,
+       0x0078, 0x440d, 0xa08e, 0x6104, 0x00c0, 0x440d, 0x2011, 0x7c8d,
+       0x8208, 0x2204, 0xa082, 0x0004, 0x20a8, 0x95ac, 0x95ac, 0x2011,
+       0x8015, 0x211c, 0x8108, 0x2124, 0x1078, 0x2d59, 0x8108, 0x00f0,
+       0x43ff, 0x2009, 0x0023, 0x0078, 0x440f, 0x2009, 0x001d, 0x017e,
+       0x2011, 0x7c83, 0x2204, 0x8211, 0x220c, 0x1078, 0x207f, 0x00c0,
+       0x4445, 0x1078, 0x3811, 0x00c0, 0x4445, 0x6612, 0x6516, 0x86ff,
+       0x0040, 0x4435, 0x017f, 0x017e, 0xa186, 0x0017, 0x00c0, 0x4435,
+       0x6864, 0xa606, 0x00c0, 0x4435, 0x6868, 0xa506, 0xa084, 0xff00,
+       0x00c0, 0x4435, 0x6000, 0xc0f5, 0x6002, 0x0c7e, 0x1078, 0x5cb4,
+       0x0040, 0x4448, 0x017f, 0x611a, 0x601f, 0x0004, 0x7120, 0x610a,
+       0x017f, 0x1078, 0x5d41, 0x0c7f, 0x007c, 0x017f, 0x0078, 0x4443,
+       0x0c7f, 0x0078, 0x4445, 0x0e7e, 0x0d7e, 0x2028, 0x2130, 0xa696,
+       0x00ff, 0x00c0, 0x446b, 0xa596, 0xfffd, 0x00c0, 0x445b, 0x2009,
+       0x007f, 0x0078, 0x4498, 0xa596, 0xfffe, 0x00c0, 0x4463, 0x2009,
+       0x007e, 0x0078, 0x4498, 0xa596, 0xfffc, 0x00c0, 0x446b, 0x2009,
+       0x0080, 0x0078, 0x4498, 0x2011, 0x0000, 0x2021, 0x007e, 0x20a9,
+       0x0082, 0x2071, 0x789e, 0x2e1c, 0x83ff, 0x00c0, 0x447d, 0x82ff,
+       0x00c0, 0x448c, 0x2410, 0x0078, 0x448c, 0x2368, 0x6b10, 0x007e,
+       0x2100, 0xa31e, 0x007f, 0x00c0, 0x448c, 0x6b14, 0xa31e, 0x00c0,
+       0x448c, 0x2408, 0x0078, 0x4498, 0x8420, 0x8e70, 0x00f0, 0x4473,
+       0x82ff, 0x00c0, 0x4497, 0xa085, 0x0001, 0x0078, 0x4499, 0x2208,
+       0xa006, 0x0d7f, 0x0e7f, 0x007c, 0xa084, 0x0007, 0x0079, 0x44a1,
+       0x007c, 0x44a9, 0x44a9, 0x44a9, 0x44a9, 0x44a9, 0x44aa, 0x44c3,
+       0x450b, 0x007c, 0x7110, 0xd1bc, 0x0040, 0x44c2, 0x7120, 0x2160,
+       0xac8c, 0x0007, 0x00c0, 0x44c2, 0xac8a, 0x7e00, 0x0048, 0x44c2,
+       0x6854, 0xac02, 0x00c8, 0x44c2, 0x7124, 0x610a, 0x2009, 0x0046,
+       0x1078, 0x5d41, 0x007c, 0x0c7e, 0x7110, 0xd1bc, 0x00c0, 0x4509,
+       0x2011, 0x7c83, 0x2204, 0x8211, 0x220c, 0x1078, 0x207f, 0x00c0,
+       0x4509, 0x1078, 0x384c, 0x00c0, 0x4509, 0x6204, 0xa294, 0xff00,
+       0x8217, 0xa286, 0x0006, 0x00c0, 0x44ee, 0x0c7e, 0x1078, 0x5cb4,
+       0x017f, 0x0040, 0x4509, 0x611a, 0x601f, 0x0006, 0x7120, 0x610a,
+       0x2009, 0x0044, 0x1078, 0x5d41, 0x0078, 0x4509, 0x0c7e, 0x1078,
+       0x5cb4, 0x017f, 0x0040, 0x4509, 0x611a, 0x601f, 0x0004, 0x7120,
+       0x610a, 0xa286, 0x0004, 0x00c0, 0x4501, 0x6007, 0x0005, 0x0078,
+       0x4503, 0x6007, 0x0001, 0x6003, 0x0001, 0x1078, 0x498e, 0x1078,
+       0x4d96, 0x0c7f, 0x007c, 0x7110, 0xd1bc, 0x0040, 0x4521, 0x7020,
+       0x2060, 0xac84, 0x0007, 0x00c0, 0x4521, 0xac82, 0x7e00, 0x0048,
+       0x4521, 0x6854, 0xac02, 0x00c8, 0x4521, 0x2009, 0x0045, 0x1078,
+       0x5d41, 0x007c, 0x7110, 0xa18c, 0xff00, 0x810f, 0xa18e, 0x0000,
+       0x00c0, 0x4532, 0xa084, 0x000f, 0xa08a, 0x0006, 0x10c8, 0x12cd,
+       0x1079, 0x4533, 0x007c, 0x4539, 0x453a, 0x4539, 0x4539, 0x457b,
+       0x458a, 0x007c, 0x7110, 0xd1bc, 0x00c0, 0x457a, 0x700c, 0x7108,
+       0x1078, 0x207f, 0x00c0, 0x457a, 0x1078, 0x3811, 0x00c0, 0x457a,
+       0x6612, 0x6516, 0x6204, 0xa294, 0xff00, 0x8217, 0xa286, 0x0006,
+       0x00c0, 0x4563, 0x0c7e, 0x1078, 0x5cb4, 0x017f, 0x0040, 0x457a,
+       0x611a, 0x601f, 0x0005, 0x7120, 0x610a, 0x2009, 0x0088, 0x1078,
+       0x5d41, 0x0078, 0x457a, 0x0c7e, 0x1078, 0x5cb4, 0x017f, 0x0040,
+       0x457a, 0x611a, 0x601f, 0x0004, 0x7120, 0x610a, 0xa286, 0x0004,
+       0x00c0, 0x4576, 0x2009, 0x0005, 0x0078, 0x4578, 0x2009, 0x0001,
+       0x1078, 0x5d41, 0x007c, 0x7110, 0xd1bc, 0x0040, 0x4589, 0x1078,
+       0x4599, 0x0040, 0x4589, 0x7124, 0x610a, 0x2009, 0x0089, 0x1078,
+       0x5d41, 0x007c, 0x7110, 0xd1bc, 0x0040, 0x4598, 0x1078, 0x4599,
+       0x0040, 0x4598, 0x7124, 0x610a, 0x2009, 0x008a, 0x1078, 0x5d41,
+       0x007c, 0x7020, 0x2060, 0xac84, 0x0007, 0x00c0, 0x45ac, 0xac82,
+       0x7e00, 0x0048, 0x45ac, 0x2001, 0x7715, 0x2004, 0xac02, 0x00c8,
+       0x45ac, 0xa085, 0x0001, 0x007c, 0xa006, 0x0078, 0x45ab, 0x2071,
+       0x7949, 0x7003, 0x0003, 0x700f, 0x0361, 0xa006, 0x701a, 0x7012,
+       0x7017, 0x7e00, 0x7007, 0x0000, 0x7026, 0x702b, 0x56a9, 0x7032,
+       0x7037, 0x56ea, 0x703b, 0x0002, 0x703f, 0x0000, 0x007c, 0x2071,
+       0x7949, 0x00e0, 0x4676, 0x2091, 0x6000, 0x700c, 0x8001, 0x700e,
+       0x00c0, 0x463f, 0x700f, 0x0361, 0x7007, 0x0001, 0x127e, 0x2091,
+       0x8000, 0x7138, 0x8109, 0x713a, 0x00c0, 0x463d, 0x703b, 0x0002,
+       0x2009, 0x0100, 0x2104, 0xa082, 0x0003, 0x00c8, 0x463d, 0x703c,
+       0xa086, 0x0001, 0x00c0, 0x461a, 0x0d7e, 0x2069, 0x0140, 0x6804,
+       0xa084, 0x4000, 0x0040, 0x45f8, 0x6803, 0x1000, 0x0078, 0x45ff,
+       0x6804, 0xa084, 0x1000, 0x0040, 0x45ff, 0x6803, 0x0100, 0x6803,
+       0x0000, 0x703f, 0x0000, 0x2069, 0x7936, 0x6804, 0xa082, 0x0006,
+       0x00c0, 0x460c, 0x6807, 0x0000, 0x6830, 0xa082, 0x0003, 0x00c0,
+       0x4613, 0x6833, 0x0000, 0x1078, 0x4d96, 0x1078, 0x4e56, 0x0d7f,
+       0x0078, 0x463d, 0x0d7e, 0x2069, 0x7700, 0x6944, 0x6860, 0xa102,
+       0x00c8, 0x463c, 0x2069, 0x7936, 0x6804, 0xa086, 0x0000, 0x00c0,
+       0x463c, 0x6830, 0xa086, 0x0000, 0x00c0, 0x463c, 0x703f, 0x0001,
+       0x6807, 0x0006, 0x6833, 0x0003, 0x2069, 0x0100, 0x6830, 0x689e,
+       0x2069, 0x0140, 0x6803, 0x0600, 0x0d7f, 0x0078, 0x4642, 0x127e,
+       0x2091, 0x8000, 0x7024, 0xa00d, 0x0040, 0x4653, 0x7020, 0x8001,
+       0x7022, 0x00c0, 0x4653, 0x7023, 0x0009, 0x8109, 0x7126, 0x00c0,
+       0x4653, 0x7028, 0x107a, 0x7030, 0xa00d, 0x0040, 0x4664, 0x702c,
+       0x8001, 0x702e, 0x00c0, 0x4664, 0x702f, 0x0009, 0x8109, 0x7132,
+       0x00c0, 0x4664, 0x7034, 0x107a, 0x7018, 0xa00d, 0x0040, 0x4675,
+       0x7008, 0x8001, 0x700a, 0x00c0, 0x4675, 0x700b, 0x0009, 0x8109,
+       0x711a, 0x00c0, 0x4675, 0x701c, 0x107a, 0x127f, 0x7004, 0x0079,
+       0x4679, 0x46a0, 0x46a1, 0x46bd, 0x0e7e, 0x2071, 0x7949, 0x7018,
+       0xa005, 0x00c0, 0x4687, 0x711a, 0x721e, 0x700b, 0x0009, 0x0e7f,
+       0x007c, 0x0e7e, 0x007e, 0x2071, 0x7949, 0x701c, 0xa206, 0x00c0,
+       0x4693, 0x701a, 0x701e, 0x007f, 0x0e7f, 0x007c, 0x0e7e, 0x2071,
+       0x7949, 0x6088, 0xa102, 0x0048, 0x469e, 0x618a, 0x0e7f, 0x007c,
+       0x007c, 0x7110, 0x1078, 0x384c, 0x00c0, 0x46b3, 0x6088, 0x8001,
+       0x0048, 0x46b3, 0x608a, 0x00c0, 0x46b3, 0x127e, 0x2091, 0x8000,
+       0x1078, 0x4d96, 0x127f, 0x8108, 0xa182, 0x00ff, 0x0048, 0x46bb,
+       0xa00e, 0x7007, 0x0002, 0x7112, 0x007c, 0x7014, 0x2060, 0x127e,
+       0x2091, 0x8000, 0x6014, 0xa005, 0x0040, 0x46ec, 0x8001, 0x6016,
+       0x00c0, 0x46ec, 0x611c, 0xa186, 0x0003, 0x0040, 0x46d3, 0xa186,
+       0x0006, 0x00c0, 0x46ea, 0x6010, 0x2068, 0x6854, 0xa08a, 0x199a,
+       0x0048, 0x46ea, 0xa082, 0x1999, 0x6856, 0xa08a, 0x199a, 0x0048,
+       0x46e3, 0x2001, 0x1999, 0x8003, 0x800b, 0x810b, 0xa108, 0x6116,
+       0x0078, 0x46ec, 0x1078, 0x68e3, 0x127f, 0xac88, 0x0008, 0x7116,
+       0x2001, 0x7716, 0x2004, 0xa102, 0x0048, 0x46fa, 0x7017, 0x7e00,
+       0x7007, 0x0000, 0x007c, 0x0e7e, 0x2071, 0x7949, 0x7027, 0x07d0,
+       0x7023, 0x0009, 0x703b, 0x0002, 0x0e7f, 0x007c, 0x2001, 0x7952,
+       0x2003, 0x0000, 0x007c, 0x0e7e, 0x2071, 0x7949, 0x7033, 0x07d0,
+       0x702f, 0x0009, 0x0e7f, 0x007c, 0x2011, 0x7955, 0x2013, 0x0000,
+       0x007c, 0x0e7e, 0x2071, 0x7949, 0x711a, 0x721e, 0x700b, 0x0009,
+       0x0e7f, 0x007c, 0x0c7e, 0x2061, 0x79da, 0x0c7f, 0x007c, 0xa184,
+       0x000f, 0x8003, 0x8003, 0x8003, 0xa080, 0x79da, 0x2060, 0x007c,
+       0x6854, 0xa08a, 0x199a, 0x0048, 0x4737, 0x2001, 0x1999, 0xa005,
+       0x00c0, 0x4747, 0x6944, 0x0c7e, 0x1078, 0x4727, 0x6014, 0x0c7f,
+       0xa005, 0x00c0, 0x474c, 0x2001, 0x001e, 0x0078, 0x474c, 0xa08e,
+       0xffff, 0x00c0, 0x474c, 0xa006, 0x8003, 0x800b, 0x810b, 0xa108,
+       0x6116, 0x684c, 0xa08c, 0x00c0, 0xa18e, 0x00c0, 0x0040, 0x4787,
+       0xd0b4, 0x00c0, 0x4763, 0xd0bc, 0x00c0, 0x4775, 0x2009, 0x0006,
+       0x1078, 0x47aa, 0x007c, 0xd0fc, 0x0040, 0x4770, 0xa084, 0x0003,
+       0xa08e, 0x0003, 0x0040, 0x47a3, 0xa08e, 0x0000, 0x00c0, 0x47a3,
+       0x2009, 0x0043, 0x1078, 0x5d41, 0x007c, 0xd0fc, 0x0040, 0x4782,
+       0xa084, 0x0003, 0xa08e, 0x0003, 0x0040, 0x47a3, 0xa08e, 0x0000,
+       0x00c0, 0x47a3, 0x2009, 0x0042, 0x1078, 0x5d41, 0x007c, 0xd0fc,
+       0x0040, 0x4799, 0xa084, 0x0003, 0xa08e, 0x0003, 0x0040, 0x47a3,
+       0xa08e, 0x0002, 0x0040, 0x479d, 0x2009, 0x0041, 0x1078, 0x5d41,
+       0x007c, 0x1078, 0x47a8, 0x0078, 0x4798, 0x2009, 0x0043, 0x1078,
+       0x5d41, 0x0078, 0x4798, 0x2009, 0x0004, 0x1078, 0x47aa, 0x007c,
+       0x2009, 0x0001, 0x6010, 0xa0ec, 0xf000, 0x0040, 0x47cf, 0x2068,
+       0x6952, 0x6800, 0x6012, 0xa186, 0x0001, 0x00c0, 0x47c9, 0x694c,
+       0xa18c, 0x8100, 0xa18e, 0x8100, 0x00c0, 0x47c9, 0x0c7e, 0x2009,
+       0x0000, 0x1078, 0x4727, 0x6204, 0x8210, 0x0048, 0x47c8, 0x6206,
+       0x0c7f, 0x1078, 0x3b92, 0x6010, 0xa06d, 0x10c0, 0x4730, 0x007c,
+       0x157e, 0x0c7e, 0x20a9, 0x0010, 0x2061, 0x79da, 0x6000, 0x81ff,
+       0x0040, 0x47dd, 0xa205, 0x0078, 0x47de, 0xa204, 0x6002, 0xace0,
+       0x0008, 0x00f0, 0x47d6, 0x0c7f, 0x157f, 0x007c, 0x6808, 0xa005,
+       0x0040, 0x47ee, 0x8001, 0x680a, 0xa085, 0x0001, 0x007c, 0x127e,
+       0x2091, 0x2200, 0x2079, 0x7936, 0x127f, 0x0d7e, 0x2069, 0x7936,
+       0x6803, 0x0005, 0x2069, 0x0004, 0x2d04, 0xa085, 0x8001, 0x206a,
+       0x0d7f, 0x007c, 0x0c7e, 0x6027, 0x0001, 0x7804, 0xa084, 0x0007,
+       0x0079, 0x480a, 0x4814, 0x4839, 0x4894, 0x481a, 0x4839, 0x4812,
+       0x4812, 0x4812, 0x1078, 0x12cd, 0x1078, 0x4706, 0x1078, 0x4d96,
+       0x0c7f, 0x007c, 0x62c0, 0x82ff, 0x00c0, 0x4820, 0x0c7f, 0x007c,
+       0x2011, 0x3558, 0x1078, 0x4689, 0x7828, 0xa092, 0x0002, 0x00c8,
+       0x482f, 0x8000, 0x782a, 0x1078, 0x3588, 0x0078, 0x481e, 0x1078,
+       0x3558, 0x7807, 0x0003, 0x7827, 0x0000, 0x782b, 0x0000, 0x0078,
+       0x481e, 0x1078, 0x4706, 0x3c00, 0x007e, 0x2011, 0x0209, 0x20e1,
+       0x4000, 0x2214, 0x007f, 0x20e0, 0x82ff, 0x0040, 0x4857, 0x62c0,
+       0x82ff, 0x00c0, 0x4857, 0x782b, 0x0000, 0x7824, 0xa065, 0x1040,
+       0x12cd, 0x2009, 0x0013, 0x1078, 0x5d41, 0x0c7f, 0x007c, 0x3900,
+       0xa082, 0x7a7a, 0x00c8, 0x485e, 0x1078, 0x5c44, 0x0c7e, 0x7824,
+       0xa065, 0x1040, 0x12cd, 0x7804, 0xa086, 0x0004, 0x0040, 0x48d9,
+       0x7828, 0xa092, 0x2710, 0x00c8, 0x4874, 0x8000, 0x782a, 0x0c7f,
+       0x1078, 0x568e, 0x0078, 0x4855, 0x6104, 0xa186, 0x0003, 0x00c0,
+       0x488b, 0x0e7e, 0x2071, 0x7700, 0x70c8, 0x0e7f, 0xd08c, 0x0040,
+       0x488b, 0x0c7e, 0x0e7e, 0x2061, 0x0100, 0x2071, 0x7700, 0x1078,
+       0x3591, 0x0e7f, 0x0c7f, 0x1078, 0x76c7, 0x2009, 0x0014, 0x1078,
+       0x5d41, 0x0c7f, 0x0078, 0x4855, 0x2001, 0x7952, 0x2003, 0x0000,
+       0x62c0, 0x82ff, 0x00c0, 0x48a8, 0x782b, 0x0000, 0x7824, 0xa065,
+       0x1040, 0x12cd, 0x2009, 0x0013, 0x1078, 0x5d8f, 0x0c7f, 0x007c,
+       0x0c7e, 0x0d7e, 0x3900, 0xa082, 0x7a7a, 0x00c8, 0x48b1, 0x1078,
+       0x5c44, 0x7824, 0xa005, 0x1040, 0x12cd, 0x781c, 0xa06d, 0x1040,
+       0x12cd, 0x6800, 0xc0dc, 0x6802, 0x7924, 0x2160, 0x1078, 0x5d1a,
+       0x693c, 0x81ff, 0x1040, 0x12cd, 0x8109, 0x693e, 0x6854, 0xa015,
+       0x0040, 0x48cd, 0x7a1e, 0x0078, 0x48cf, 0x7918, 0x791e, 0x7807,
+       0x0000, 0x7827, 0x0000, 0x0d7f, 0x0c7f, 0x1078, 0x4d96, 0x0078,
+       0x48a6, 0x6104, 0xa186, 0x0002, 0x0040, 0x48e4, 0xa186, 0x0004,
+       0x0040, 0x48e4, 0x0078, 0x4868, 0x7808, 0xac06, 0x0040, 0x4868,
+       0x1078, 0x4c9d, 0x1078, 0x498e, 0x0c7f, 0x1078, 0x4d96, 0x0078,
+       0x4855, 0x0c7e, 0x6027, 0x0002, 0x2011, 0x7955, 0x2013, 0x0000,
+       0x62c8, 0x82ff, 0x00c0, 0x490b, 0x62c4, 0x82ff, 0x00c0, 0x490b,
+       0x793c, 0xa1e5, 0x0000, 0x0040, 0x4909, 0x2009, 0x0049, 0x1078,
+       0x5d41, 0x0c7f, 0x007c, 0x3908, 0xa192, 0x7a7a, 0x00c8, 0x4912,
+       0x1078, 0x5c44, 0x6017, 0x0010, 0x793c, 0x81ff, 0x0040, 0x4909,
+       0x7944, 0xa192, 0x7530, 0x00c8, 0x4931, 0x8108, 0x7946, 0x1078,
+       0x470b, 0x793c, 0xa188, 0x0007, 0x210c, 0xa18e, 0x0006, 0x00c0,
+       0x492d, 0x6017, 0x0012, 0x0078, 0x4909, 0x6017, 0x0016, 0x0078,
+       0x4909, 0x037e, 0x2019, 0x0001, 0x1078, 0x5880, 0x037f, 0x1078,
+       0x76c7, 0x793c, 0x2160, 0x2009, 0x004a, 0x1078, 0x5d41, 0x0078,
+       0x4909, 0x007e, 0x017e, 0x0c7e, 0x127e, 0x2091, 0x8000, 0x600f,
+       0x0000, 0x2c08, 0x2061, 0x7936, 0x6020, 0x8000, 0x6022, 0x6010,
+       0xa005, 0x0040, 0x495c, 0xa080, 0x0003, 0x2102, 0x6112, 0x127f,
+       0x0c7f, 0x017f, 0x007f, 0x007c, 0x6116, 0x6112, 0x0078, 0x4957,
+       0x0d7e, 0x2069, 0x7936, 0x6000, 0xd0d4, 0x0040, 0x4975, 0x6820,
+       0x8000, 0x6822, 0xa086, 0x0001, 0x00c0, 0x4970, 0x2c00, 0x681e,
+       0x6804, 0xa084, 0x0007, 0x0079, 0x4d9e, 0xc0d5, 0x6002, 0x6818,
+       0xa005, 0x0040, 0x4987, 0x6056, 0x605b, 0x0000, 0x007e, 0x2c00,
+       0x681a, 0x0d7f, 0x685a, 0x2069, 0x7936, 0x0078, 0x4967, 0x6056,
+       0x605a, 0x2c00, 0x681a, 0x681e, 0x0078, 0x4967, 0x007e, 0x017e,
+       0x0c7e, 0x127e, 0x2091, 0x8000, 0x600f, 0x0000, 0x2c08, 0x2061,
+       0x7936, 0x6020, 0x8000, 0x6022, 0x6008, 0xa005, 0x0040, 0x49a9,
+       0xa080, 0x0003, 0x2102, 0x610a, 0x127f, 0x0c7f, 0x017f, 0x007f,
+       0x007c, 0x610e, 0x610a, 0x0078, 0x49a4, 0x0c7e, 0x600f, 0x0000,
+       0x2c08, 0x2061, 0x7936, 0x6034, 0xa005, 0x0040, 0x49bd, 0xa080,
+       0x0003, 0x2102, 0x6136, 0x0c7f, 0x007c, 0x613a, 0x6136, 0x0078,
+       0x49bb, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x067e, 0x027e, 0x007e,
+       0x127e, 0x2071, 0x7936, 0x7638, 0x2660, 0x2678, 0x2091, 0x8000,
+       0x8cff, 0x0040, 0x4a23, 0x6018, 0xa080, 0x0028, 0x2004, 0xa206,
+       0x00c0, 0x4a1e, 0x703c, 0xac06, 0x00c0, 0x49e3, 0x6003, 0x000a,
+       0x630a, 0x0078, 0x4a1e, 0x7038, 0xac36, 0x00c0, 0x49e9, 0x660c,
+       0x763a, 0x7034, 0xac36, 0x00c0, 0x49f7, 0x2c00, 0xaf36, 0x0040,
+       0x49f5, 0x2f00, 0x7036, 0x0078, 0x49f7, 0x7037, 0x0000, 0x660c,
+       0x067e, 0x2c00, 0xaf06, 0x0040, 0x4a00, 0x7e0e, 0x0078, 0x4a01,
+       0x2678, 0x600f, 0x0000, 0x1078, 0x6a58, 0x0040, 0x4a19, 0x6010,
+       0x2068, 0x601c, 0xa086, 0x0003, 0x00c0, 0x4a2c, 0x6837, 0x0103,
+       0x6b4a, 0x6847, 0x0000, 0x1078, 0x6c54, 0x1078, 0x3b92, 0x1078,
+       0x6ba9, 0x1078, 0x6bb6, 0x0c7f, 0x0078, 0x49d0, 0x2c78, 0x600c,
+       0x2060, 0x0078, 0x49d0, 0x127f, 0x007f, 0x027f, 0x067f, 0x0c7f,
+       0x0d7f, 0x0e7f, 0x0f7f, 0x007c, 0x601c, 0xa086, 0x0006, 0x00c0,
+       0x4a0e, 0x1078, 0x75fd, 0x0078, 0x4a19, 0x007e, 0x067e, 0x0c7e,
+       0x0d7e, 0x0f7e, 0x2031, 0x0000, 0x127e, 0x2091, 0x8000, 0x2079,
+       0x7936, 0x7838, 0xa065, 0x0040, 0x4a6c, 0x600c, 0x007e, 0x600f,
+       0x0000, 0x783c, 0xac06, 0x00c0, 0x4a53, 0x6003, 0x000a, 0x630a,
+       0x2c30, 0x0078, 0x4a69, 0x1078, 0x6a58, 0x0040, 0x4a67, 0x6010,
+       0x2068, 0x601c, 0xa086, 0x0003, 0x00c0, 0x4a75, 0x6837, 0x0103,
+       0x6b4a, 0x6847, 0x0000, 0x1078, 0x3b92, 0x1078, 0x6ba9, 0x1078,
+       0x6bb6, 0x007f, 0x0078, 0x4a42, 0x7e3a, 0x7e36, 0x127f, 0x0f7f,
        0x0d7f, 0x0c7f, 0x067f, 0x007f, 0x007c, 0x601c, 0xa086, 0x0006,
-       0x00c0, 0x4ae6, 0x1078, 0x74f2, 0x0078, 0x4aef, 0x007e, 0x067e,
-       0x0c7e, 0x0d7e, 0x7818, 0xa065, 0x0040, 0x4b72, 0x6054, 0x007e,
-       0x6057, 0x0000, 0x605b, 0x0000, 0x6000, 0xc0d4, 0xc0dc, 0x6002,
-       0x1078, 0x379a, 0x0040, 0x4b6f, 0x7e24, 0x86ff, 0x0040, 0x4b61,
-       0xa680, 0x0004, 0x2004, 0xad06, 0x00c0, 0x4b61, 0x0d7e, 0x2069,
-       0x0100, 0x68c0, 0xa005, 0x0040, 0x4b58, 0x1078, 0x557a, 0x68c3,
-       0x0000, 0x1078, 0x5a2a, 0x7827, 0x0000, 0x037e, 0x2069, 0x0140,
-       0x6b04, 0xa384, 0x1000, 0x0040, 0x4b41, 0x6803, 0x0100, 0x6803,
-       0x0000, 0x2069, 0x0100, 0x6824, 0xd084, 0x0040, 0x4b49, 0x6827,
-       0x0001, 0x037f, 0x0d7f, 0x0c7e, 0x603c, 0xa005, 0x0040, 0x4b52,
-       0x8001, 0x603e, 0x2660, 0x1078, 0x6a96, 0x0c7f, 0x0078, 0x4b61,
-       0x0d7f, 0x0c7e, 0x2660, 0x6003, 0x0009, 0x630a, 0x0c7f, 0x0078,
-       0x4b18, 0x8dff, 0x0040, 0x4b6b, 0x6837, 0x0103, 0x6b4a, 0x6847,
-       0x0000, 0x1078, 0x3a72, 0x1078, 0x58fa, 0x0078, 0x4b18, 0x007f,
-       0x0078, 0x4b0b, 0x781e, 0x781a, 0x0d7f, 0x0c7f, 0x067f, 0x007f,
-       0x007c, 0x0e7e, 0x0c7e, 0x2071, 0x7836, 0x7004, 0xa084, 0x0007,
-       0x0079, 0x4b82, 0x4b8c, 0x4b8f, 0x4ba8, 0x4bc4, 0x4c09, 0x4b8c,
-       0x4b8c, 0x4b8a, 0x1078, 0x12cd, 0x0c7f, 0x0e7f, 0x007c, 0x7024,
-       0xa065, 0x0040, 0x4b9d, 0x7020, 0x8001, 0x7022, 0x600c, 0xa015,
-       0x0040, 0x4ba4, 0x7216, 0x600f, 0x0000, 0x7007, 0x0000, 0x7027,
-       0x0000, 0x0c7f, 0x0e7f, 0x007c, 0x7216, 0x7212, 0x0078, 0x4b9d,
-       0x6018, 0x2060, 0x1078, 0x379a, 0x6000, 0xc0dc, 0x6002, 0x7020,
-       0x8001, 0x7022, 0x0040, 0x4bb9, 0x6054, 0xa015, 0x0040, 0x4bc0,
-       0x721e, 0x7007, 0x0000, 0x7027, 0x0000, 0x0c7f, 0x0e7f, 0x007c,
-       0x7218, 0x721e, 0x0078, 0x4bb9, 0x7024, 0xa065, 0x0040, 0x4c06,
-       0x700c, 0xac06, 0x00c0, 0x4bdb, 0x1078, 0x58fa, 0x600c, 0xa015,
-       0x0040, 0x4bd7, 0x720e, 0x600f, 0x0000, 0x0078, 0x4c04, 0x720e,
-       0x720a, 0x0078, 0x4c04, 0x7014, 0xac06, 0x00c0, 0x4bee, 0x1078,
-       0x58fa, 0x600c, 0xa015, 0x0040, 0x4bea, 0x7216, 0x600f, 0x0000,
-       0x0078, 0x4c04, 0x7216, 0x7212, 0x0078, 0x4c04, 0x6018, 0x2060,
-       0x1078, 0x379a, 0x6000, 0xc0dc, 0x6002, 0x1078, 0x58fa, 0x701c,
-       0xa065, 0x0040, 0x4c04, 0x6054, 0xa015, 0x0040, 0x4c02, 0x721e,
-       0x0078, 0x4c04, 0x7218, 0x721e, 0x7027, 0x0000, 0x0c7f, 0x0e7f,
-       0x007c, 0x7024, 0xa065, 0x0040, 0x4c16, 0x1078, 0x58fa, 0x600c,
-       0xa015, 0x0040, 0x4c1d, 0x720e, 0x600f, 0x0000, 0x1078, 0x5a2a,
-       0x7027, 0x0000, 0x0c7f, 0x0e7f, 0x007c, 0x720e, 0x720a, 0x0078,
-       0x4c16, 0x0d7e, 0x2069, 0x7836, 0x6830, 0xa084, 0x0003, 0x0079,
-       0x4c29, 0x4c2f, 0x4c31, 0x4c57, 0x4c2f, 0x1078, 0x12cd, 0x0d7f,
-       0x007c, 0x0c7e, 0x6840, 0xa086, 0x0001, 0x0040, 0x4c4d, 0x683c,
-       0xa065, 0x0040, 0x4c42, 0x600c, 0xa015, 0x0040, 0x4c49, 0x6a3a,
-       0x600f, 0x0000, 0x6833, 0x0000, 0x683f, 0x0000, 0x0c7f, 0x0d7f,
-       0x007c, 0x683a, 0x6836, 0x0078, 0x4c42, 0x6843, 0x0000, 0x6838,
-       0xa065, 0x0040, 0x4c42, 0x6003, 0x0003, 0x0078, 0x4c42, 0x0c7e,
-       0x6843, 0x0000, 0x6847, 0x0000, 0x683c, 0xa065, 0x0040, 0x4c6f,
-       0x600c, 0xa015, 0x0040, 0x4c6b, 0x6a3a, 0x600f, 0x0000, 0x683f,
-       0x0000, 0x0078, 0x4c6f, 0x683f, 0x0000, 0x683a, 0x6836, 0x0c7f,
-       0x0d7f, 0x007c, 0x0d7e, 0x2069, 0x7836, 0x6804, 0xa084, 0x0007,
-       0x0079, 0x4c7a, 0x4c84, 0x4d21, 0x4d21, 0x4d21, 0x4d21, 0x4d23,
-       0x4d21, 0x4c82, 0x1078, 0x12cd, 0x6820, 0xa005, 0x00c0, 0x4c8a,
-       0x0d7f, 0x007c, 0x0c7e, 0x680c, 0xa065, 0x0040, 0x4c99, 0x6807,
-       0x0004, 0x6826, 0x682b, 0x0000, 0x1078, 0x4d69, 0x0c7f, 0x0d7f,
-       0x007c, 0x6814, 0xa065, 0x0040, 0x4ca7, 0x6807, 0x0001, 0x6826,
-       0x682b, 0x0000, 0x1078, 0x4d69, 0x0c7f, 0x0d7f, 0x007c, 0x0e7e,
-       0x037e, 0x6a1c, 0xa2f5, 0x0000, 0x0040, 0x4d1c, 0x704c, 0xa00d,
-       0x0040, 0x4cb6, 0x7088, 0xa005, 0x0040, 0x4cce, 0x7054, 0xa075,
-       0x0040, 0x4cbf, 0xa20e, 0x0040, 0x4d1c, 0x0078, 0x4cc4, 0x6818,
-       0xa20e, 0x0040, 0x4d1c, 0x2070, 0x704c, 0xa00d, 0x0040, 0x4cb6,
-       0x7088, 0xa005, 0x00c0, 0x4cb6, 0x2e00, 0x681e, 0x733c, 0x7038,
-       0xa302, 0x00c8, 0x4cb6, 0x1078, 0x5bc9, 0x0040, 0x4d1c, 0x8318,
-       0x733e, 0x6112, 0x2e10, 0x621a, 0xa180, 0x0015, 0x2004, 0xa08a,
-       0x199a, 0x0048, 0x4ce5, 0x2001, 0x1999, 0x8003, 0x801b, 0x831b,
-       0xa318, 0x6316, 0x037f, 0x0f7e, 0x2c78, 0x71a0, 0xd1bc, 0x0040,
-       0x4cfe, 0x7100, 0xd1f4, 0x0040, 0x4cfa, 0x7114, 0xa18c, 0x00ff,
-       0x0078, 0x4d03, 0x2009, 0x0000, 0x0078, 0x4d03, 0xa1e0, 0x2329,
-       0x2c0c, 0xa18c, 0x00ff, 0x2061, 0x0100, 0x619a, 0x1078, 0x51ba,
-       0x7300, 0xc3dd, 0x7302, 0x6807, 0x0002, 0x2f18, 0x6b26, 0x682b,
-       0x0000, 0x781f, 0x0003, 0x7803, 0x0001, 0x7807, 0x0040, 0x0f7f,
-       0x0e7f, 0x0c7f, 0x0d7f, 0x007c, 0x037f, 0x0e7f, 0x0c7f, 0x0078,
-       0x4d1a, 0x0d7f, 0x007c, 0x0c7e, 0x680c, 0xa065, 0x0040, 0x4d2f,
-       0x6807, 0x0004, 0x6826, 0x682b, 0x0000, 0x1078, 0x4d69, 0x0c7f,
-       0x0d7f, 0x007c, 0x0f7e, 0x0d7e, 0x2069, 0x7836, 0x6830, 0xa086,
-       0x0000, 0x00c0, 0x4d50, 0x6838, 0xa07d, 0x0040, 0x4d50, 0x6833,
-       0x0001, 0x683e, 0x6847, 0x0000, 0x127e, 0x0f7e, 0x2091, 0x2200,
-       0x027f, 0x1078, 0x1a44, 0x00c0, 0x4d53, 0x127f, 0x1078, 0x544f,
-       0x0d7f, 0x0f7f, 0x007c, 0x127f, 0x6843, 0x0000, 0x7803, 0x0002,
-       0x780c, 0xa015, 0x0040, 0x4d65, 0x6a3a, 0x780f, 0x0000, 0x6833,
-       0x0000, 0x683f, 0x0000, 0x0078, 0x4d50, 0x683a, 0x6836, 0x0078,
-       0x4d5f, 0x601c, 0xa084, 0x000f, 0x1079, 0x4d6f, 0x007c, 0x4d78,
-       0x4d7d, 0x5084, 0x517a, 0x4d7d, 0x5084, 0x517a, 0x4d78, 0x4d7d,
-       0x1078, 0x4b79, 0x1078, 0x4c72, 0x007c, 0x157e, 0x137e, 0x147e,
-       0x0c7e, 0x0f7e, 0x6004, 0xa08a, 0x0030, 0x10c8, 0x12cd, 0x6118,
-       0x2178, 0x79a0, 0xd1bc, 0x0040, 0x4d9a, 0x7900, 0xd1f4, 0x0040,
-       0x4d96, 0x7914, 0xa18c, 0x00ff, 0x0078, 0x4d9f, 0x2009, 0x0000,
-       0x0078, 0x4d9f, 0xa1f8, 0x2329, 0x2f0c, 0xa18c, 0x00ff, 0x2c78,
-       0x2061, 0x0100, 0x619a, 0x1079, 0x4dab, 0x0f7f, 0x0c7f, 0x147f,
-       0x137f, 0x157f, 0x007c, 0x4ddd, 0x4e15, 0x4e2d, 0x4eac, 0x4ed9,
-       0x4ee1, 0x4f02, 0x4f13, 0x4f24, 0x4f2c, 0x4f3d, 0x4f2c, 0x4f85,
-       0x4f13, 0x4fa6, 0x4fae, 0x4f24, 0x4fae, 0x4fbf, 0x4ddb, 0x4ddb,
-       0x4ddb, 0x4ddb, 0x4ddb, 0x4ddb, 0x4ddb, 0x4ddb, 0x4ddb, 0x4ddb,
-       0x4ddb, 0x4ddb, 0x5638, 0x564d, 0x5670, 0x5694, 0x4f02, 0x4ddb,
-       0x4f02, 0x4f2c, 0x4ddb, 0x4e2d, 0x4eac, 0x4ddb, 0x5b44, 0x4f2c,
-       0x4ddb, 0x5b67, 0x4f2c, 0x1078, 0x12cd, 0x20a1, 0x020b, 0x1078,
-       0x4fd4, 0x20a3, 0x5200, 0x20a3, 0x0000, 0x0d7e, 0x2069, 0x7651,
-       0x6804, 0xd084, 0x0040, 0x4df7, 0x6828, 0x20a3, 0x0000, 0x017e,
-       0x1078, 0x2094, 0x21a2, 0x017f, 0x0d7f, 0x0078, 0x4dfc, 0x0d7f,
-       0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a9, 0x0004, 0x2099, 0x7605,
-       0x53a6, 0x20a9, 0x0004, 0x2099, 0x7601, 0x53a6, 0x20a3, 0x0000,
-       0x6030, 0xa084, 0x00ff, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000,
-       0x60c3, 0x001c, 0x1078, 0x5566, 0x007c, 0x20a1, 0x020b, 0x1078,
-       0x4fd4, 0x20a3, 0x0500, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x6030,
-       0xa084, 0x00ff, 0x20a2, 0x20a9, 0x0004, 0x2099, 0x7605, 0x53a6,
-       0x60c3, 0x0010, 0x1078, 0x5566, 0x007c, 0x20a1, 0x020b, 0x1078,
-       0x4fd4, 0x7818, 0xa080, 0x0028, 0x2004, 0xa086, 0x007e, 0x00c0,
-       0x4e40, 0x20a3, 0x0400, 0x620c, 0xc2b4, 0x620e, 0x0078, 0x4e42,
-       0x20a3, 0x0300, 0x20a3, 0x0000, 0x7818, 0xa080, 0x0028, 0x2004,
-       0xa086, 0x007e, 0x00c0, 0x4e7b, 0x2099, 0x7820, 0x33a6, 0x9398,
-       0x33a6, 0x9398, 0x3304, 0xa084, 0x3fff, 0x20a2, 0x9398, 0x33a6,
-       0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000,
-       0x20a9, 0x0004, 0x2099, 0x7605, 0x53a6, 0x20a9, 0x0004, 0x2099,
-       0x7601, 0x53a6, 0x20a9, 0x0010, 0x20a3, 0x0000, 0x00f0, 0x4e6c,
-       0x2099, 0x7828, 0x33a6, 0x20a9, 0x0007, 0x20a3, 0x0000, 0x00f0,
-       0x4e75, 0x0078, 0x4e9b, 0x2099, 0x7820, 0x20a9, 0x0008, 0x53a6,
-       0x20a9, 0x0004, 0x2099, 0x7605, 0x53a6, 0x20a9, 0x0004, 0x2099,
-       0x7601, 0x53a6, 0x20a9, 0x0008, 0x20a3, 0x0000, 0x00f0, 0x4e8c,
-       0x20a9, 0x0008, 0x20a3, 0x0000, 0x00f0, 0x4e92, 0x2099, 0x7828,
-       0x20a9, 0x0008, 0x53a6, 0x20a9, 0x0008, 0x20a3, 0x0000, 0x00f0,
-       0x4e9d, 0x20a9, 0x000a, 0x20a3, 0x0000, 0x00f0, 0x4ea3, 0x60c3,
-       0x0074, 0x1078, 0x5566, 0x007c, 0x20a1, 0x020b, 0x1078, 0x4fd4,
-       0x20a3, 0x2010, 0x20a3, 0x0014, 0x20a3, 0x0800, 0x20a3, 0x2000,
-       0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x0f7e, 0x2079,
-       0x7651, 0x7904, 0x0f7f, 0xd1ac, 0x00c0, 0x4ec8, 0xa085, 0x0020,
-       0xd1a4, 0x0040, 0x4ecd, 0xa085, 0x0010, 0xa085, 0x0002, 0x20a2,
-       0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078, 0x5566,
-       0x007c, 0x20a1, 0x020b, 0x1078, 0x4fd4, 0x20a3, 0x5000, 0x0078,
-       0x4e42, 0x20a1, 0x020b, 0x1078, 0x4fd4, 0x20a3, 0x2110, 0x20a3,
-       0x0014, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3,
+       0x00c0, 0x4a5e, 0x1078, 0x75fd, 0x0078, 0x4a67, 0x027e, 0x1078,
+       0x4a92, 0x1078, 0x4b2b, 0x027f, 0x007c, 0x0f7e, 0x127e, 0x2079,
+       0x7936, 0x2091, 0x8000, 0x1078, 0x4bc2, 0x1078, 0x4c2a, 0x127f,
+       0x0f7f, 0x007c, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x067e, 0x007e,
+       0x127e, 0x2091, 0x8000, 0x2071, 0x7936, 0x7614, 0x2660, 0x2678,
+       0x8cff, 0x0040, 0x4b1a, 0x6018, 0xa080, 0x0028, 0x2004, 0xa206,
+       0x00c0, 0x4b15, 0x7024, 0xac06, 0x00c0, 0x4ad8, 0x2069, 0x0100,
+       0x68c0, 0xa005, 0x0040, 0x4ad3, 0x1078, 0x569c, 0x68c3, 0x0000,
+       0x1078, 0x5b4a, 0x7027, 0x0000, 0x037e, 0x2069, 0x0140, 0x6b04,
+       0xa384, 0x1000, 0x0040, 0x4ac8, 0x6803, 0x0100, 0x6803, 0x0000,
+       0x2069, 0x0100, 0x6824, 0xd084, 0x0040, 0x4ad0, 0x6827, 0x0001,
+       0x037f, 0x0078, 0x4ad8, 0x6003, 0x0009, 0x630a, 0x0078, 0x4b15,
+       0x7014, 0xac36, 0x00c0, 0x4ade, 0x660c, 0x7616, 0x7010, 0xac36,
+       0x00c0, 0x4aec, 0x2c00, 0xaf36, 0x0040, 0x4aea, 0x2f00, 0x7012,
+       0x0078, 0x4aec, 0x7013, 0x0000, 0x660c, 0x067e, 0x2c00, 0xaf06,
+       0x0040, 0x4af5, 0x7e0e, 0x0078, 0x4af6, 0x2678, 0x600f, 0x0000,
+       0x6010, 0x2068, 0x1078, 0x6a58, 0x0040, 0x4b0e, 0x601c, 0xa086,
+       0x0003, 0x00c0, 0x4b22, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000,
+       0x1078, 0x6c54, 0x1078, 0x3b92, 0x1078, 0x6ba9, 0x1078, 0x6bb6,
+       0x1078, 0x5a1a, 0x0c7f, 0x0078, 0x4aa0, 0x2c78, 0x600c, 0x2060,
+       0x0078, 0x4aa0, 0x127f, 0x007f, 0x067f, 0x0c7f, 0x0d7f, 0x0e7f,
+       0x0f7f, 0x007c, 0x601c, 0xa086, 0x0006, 0x00c0, 0x4b03, 0x1078,
+       0x75fd, 0x0078, 0x4b0e, 0x0c7e, 0x007e, 0x127e, 0x2091, 0x8000,
+       0xa280, 0x7820, 0x2004, 0xa065, 0x0040, 0x4bbe, 0x0f7e, 0x0e7e,
+       0x0d7e, 0x067e, 0x2071, 0x7936, 0x6654, 0x7018, 0xac06, 0x00c0,
+       0x4b42, 0x761a, 0x701c, 0xac06, 0x00c0, 0x4b4e, 0x86ff, 0x00c0,
+       0x4b4d, 0x7018, 0x701e, 0x0078, 0x4b4e, 0x761e, 0x6058, 0xa07d,
+       0x0040, 0x4b53, 0x7e56, 0xa6ed, 0x0000, 0x0040, 0x4b59, 0x2f00,
+       0x685a, 0x6057, 0x0000, 0x605b, 0x0000, 0x6000, 0xc0d4, 0xc0dc,
+       0x6002, 0x1078, 0x37c5, 0x0040, 0x4bba, 0x7624, 0x86ff, 0x0040,
+       0x4baa, 0xa680, 0x0004, 0x2004, 0xad06, 0x00c0, 0x4baa, 0x0d7e,
+       0x2069, 0x0100, 0x68c0, 0xa005, 0x0040, 0x4ba1, 0x1078, 0x569c,
+       0x68c3, 0x0000, 0x1078, 0x5b4a, 0x7027, 0x0000, 0x037e, 0x2069,
+       0x0140, 0x6b04, 0xa384, 0x1000, 0x0040, 0x4b8a, 0x6803, 0x0100,
+       0x6803, 0x0000, 0x2069, 0x0100, 0x6824, 0xd084, 0x0040, 0x4b92,
+       0x6827, 0x0001, 0x037f, 0x0d7f, 0x0c7e, 0x603c, 0xa005, 0x0040,
+       0x4b9b, 0x8001, 0x603e, 0x2660, 0x1078, 0x6bb6, 0x0c7f, 0x0078,
+       0x4baa, 0x0d7f, 0x0c7e, 0x2660, 0x6003, 0x0009, 0x630a, 0x0c7f,
+       0x0078, 0x4b61, 0x8dff, 0x0040, 0x4bb6, 0x6837, 0x0103, 0x6b4a,
+       0x6847, 0x0000, 0x1078, 0x6c54, 0x1078, 0x3b92, 0x1078, 0x5a1a,
+       0x0078, 0x4b61, 0x067f, 0x0d7f, 0x0e7f, 0x0f7f, 0x127f, 0x007f,
+       0x0c7f, 0x007c, 0x007e, 0x067e, 0x0c7e, 0x0d7e, 0x2031, 0x0000,
+       0x7814, 0xa065, 0x0040, 0x4c1a, 0x600c, 0x007e, 0x600f, 0x0000,
+       0x7824, 0xac06, 0x00c0, 0x4bff, 0x2069, 0x0100, 0x68c0, 0xa005,
+       0x0040, 0x4bf9, 0x1078, 0x569c, 0x68c3, 0x0000, 0x1078, 0x5b4a,
+       0x7827, 0x0000, 0x037e, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000,
+       0x0040, 0x4bee, 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100,
+       0x6824, 0xd084, 0x0040, 0x4bf6, 0x6827, 0x0001, 0x037f, 0x0078,
+       0x4bff, 0x6003, 0x0009, 0x630a, 0x2c30, 0x0078, 0x4c17, 0x6010,
+       0x2068, 0x1078, 0x6a58, 0x0040, 0x4c13, 0x601c, 0xa086, 0x0003,
+       0x00c0, 0x4c21, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078,
+       0x3b92, 0x1078, 0x6ba9, 0x1078, 0x6bb6, 0x1078, 0x5a1a, 0x007f,
+       0x0078, 0x4bc9, 0x7e16, 0x7e12, 0x0d7f, 0x0c7f, 0x067f, 0x007f,
+       0x007c, 0x601c, 0xa086, 0x0006, 0x00c0, 0x4c0a, 0x1078, 0x75fd,
+       0x0078, 0x4c13, 0x007e, 0x067e, 0x0c7e, 0x0d7e, 0x7818, 0xa065,
+       0x0040, 0x4c96, 0x6054, 0x007e, 0x6057, 0x0000, 0x605b, 0x0000,
+       0x6000, 0xc0d4, 0xc0dc, 0x6002, 0x1078, 0x37c5, 0x0040, 0x4c93,
+       0x7e24, 0x86ff, 0x0040, 0x4c85, 0xa680, 0x0004, 0x2004, 0xad06,
+       0x00c0, 0x4c85, 0x0d7e, 0x2069, 0x0100, 0x68c0, 0xa005, 0x0040,
+       0x4c7c, 0x1078, 0x569c, 0x68c3, 0x0000, 0x1078, 0x5b4a, 0x7827,
+       0x0000, 0x037e, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000, 0x0040,
+       0x4c65, 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100, 0x6824,
+       0xd084, 0x0040, 0x4c6d, 0x6827, 0x0001, 0x037f, 0x0d7f, 0x0c7e,
+       0x603c, 0xa005, 0x0040, 0x4c76, 0x8001, 0x603e, 0x2660, 0x1078,
+       0x6bb6, 0x0c7f, 0x0078, 0x4c85, 0x0d7f, 0x0c7e, 0x2660, 0x6003,
+       0x0009, 0x630a, 0x0c7f, 0x0078, 0x4c3c, 0x8dff, 0x0040, 0x4c8f,
+       0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078, 0x3b92, 0x1078,
+       0x5a1a, 0x0078, 0x4c3c, 0x007f, 0x0078, 0x4c2f, 0x781e, 0x781a,
+       0x0d7f, 0x0c7f, 0x067f, 0x007f, 0x007c, 0x0e7e, 0x0c7e, 0x2071,
+       0x7936, 0x7004, 0xa084, 0x0007, 0x0079, 0x4ca6, 0x4cb0, 0x4cb3,
+       0x4ccc, 0x4ce8, 0x4d2d, 0x4cb0, 0x4cb0, 0x4cae, 0x1078, 0x12cd,
+       0x0c7f, 0x0e7f, 0x007c, 0x7024, 0xa065, 0x0040, 0x4cc1, 0x7020,
+       0x8001, 0x7022, 0x600c, 0xa015, 0x0040, 0x4cc8, 0x7216, 0x600f,
+       0x0000, 0x7007, 0x0000, 0x7027, 0x0000, 0x0c7f, 0x0e7f, 0x007c,
+       0x7216, 0x7212, 0x0078, 0x4cc1, 0x6018, 0x2060, 0x1078, 0x37c5,
+       0x6000, 0xc0dc, 0x6002, 0x7020, 0x8001, 0x7022, 0x0040, 0x4cdd,
+       0x6054, 0xa015, 0x0040, 0x4ce4, 0x721e, 0x7007, 0x0000, 0x7027,
+       0x0000, 0x0c7f, 0x0e7f, 0x007c, 0x7218, 0x721e, 0x0078, 0x4cdd,
+       0x7024, 0xa065, 0x0040, 0x4d2a, 0x700c, 0xac06, 0x00c0, 0x4cff,
+       0x1078, 0x5a1a, 0x600c, 0xa015, 0x0040, 0x4cfb, 0x720e, 0x600f,
+       0x0000, 0x0078, 0x4d28, 0x720e, 0x720a, 0x0078, 0x4d28, 0x7014,
+       0xac06, 0x00c0, 0x4d12, 0x1078, 0x5a1a, 0x600c, 0xa015, 0x0040,
+       0x4d0e, 0x7216, 0x600f, 0x0000, 0x0078, 0x4d28, 0x7216, 0x7212,
+       0x0078, 0x4d28, 0x6018, 0x2060, 0x1078, 0x37c5, 0x6000, 0xc0dc,
+       0x6002, 0x1078, 0x5a1a, 0x701c, 0xa065, 0x0040, 0x4d28, 0x6054,
+       0xa015, 0x0040, 0x4d26, 0x721e, 0x0078, 0x4d28, 0x7218, 0x721e,
+       0x7027, 0x0000, 0x0c7f, 0x0e7f, 0x007c, 0x7024, 0xa065, 0x0040,
+       0x4d3a, 0x1078, 0x5a1a, 0x600c, 0xa015, 0x0040, 0x4d41, 0x720e,
+       0x600f, 0x0000, 0x1078, 0x5b4a, 0x7027, 0x0000, 0x0c7f, 0x0e7f,
+       0x007c, 0x720e, 0x720a, 0x0078, 0x4d3a, 0x0d7e, 0x2069, 0x7936,
+       0x6830, 0xa084, 0x0003, 0x0079, 0x4d4d, 0x4d53, 0x4d55, 0x4d7b,
+       0x4d53, 0x1078, 0x12cd, 0x0d7f, 0x007c, 0x0c7e, 0x6840, 0xa086,
+       0x0001, 0x0040, 0x4d71, 0x683c, 0xa065, 0x0040, 0x4d66, 0x600c,
+       0xa015, 0x0040, 0x4d6d, 0x6a3a, 0x600f, 0x0000, 0x6833, 0x0000,
+       0x683f, 0x0000, 0x0c7f, 0x0d7f, 0x007c, 0x683a, 0x6836, 0x0078,
+       0x4d66, 0x6843, 0x0000, 0x6838, 0xa065, 0x0040, 0x4d66, 0x6003,
+       0x0003, 0x0078, 0x4d66, 0x0c7e, 0x6843, 0x0000, 0x6847, 0x0000,
+       0x683c, 0xa065, 0x0040, 0x4d93, 0x600c, 0xa015, 0x0040, 0x4d8f,
+       0x6a3a, 0x600f, 0x0000, 0x683f, 0x0000, 0x0078, 0x4d93, 0x683f,
+       0x0000, 0x683a, 0x6836, 0x0c7f, 0x0d7f, 0x007c, 0x0d7e, 0x2069,
+       0x7936, 0x6804, 0xa084, 0x0007, 0x0079, 0x4d9e, 0x4da8, 0x4e45,
+       0x4e45, 0x4e45, 0x4e45, 0x4e47, 0x4e45, 0x4da6, 0x1078, 0x12cd,
+       0x6820, 0xa005, 0x00c0, 0x4dae, 0x0d7f, 0x007c, 0x0c7e, 0x680c,
+       0xa065, 0x0040, 0x4dbd, 0x6807, 0x0004, 0x6826, 0x682b, 0x0000,
+       0x1078, 0x4e8d, 0x0c7f, 0x0d7f, 0x007c, 0x6814, 0xa065, 0x0040,
+       0x4dcb, 0x6807, 0x0001, 0x6826, 0x682b, 0x0000, 0x1078, 0x4e8d,
+       0x0c7f, 0x0d7f, 0x007c, 0x0e7e, 0x037e, 0x6a1c, 0xa2f5, 0x0000,
+       0x0040, 0x4e40, 0x704c, 0xa00d, 0x0040, 0x4dda, 0x7088, 0xa005,
+       0x0040, 0x4df2, 0x7054, 0xa075, 0x0040, 0x4de3, 0xa20e, 0x0040,
+       0x4e40, 0x0078, 0x4de8, 0x6818, 0xa20e, 0x0040, 0x4e40, 0x2070,
+       0x704c, 0xa00d, 0x0040, 0x4dda, 0x7088, 0xa005, 0x00c0, 0x4dda,
+       0x2e00, 0x681e, 0x733c, 0x7038, 0xa302, 0x00c8, 0x4dda, 0x1078,
+       0x5ce9, 0x0040, 0x4e40, 0x8318, 0x733e, 0x6112, 0x2e10, 0x621a,
+       0xa180, 0x0015, 0x2004, 0xa08a, 0x199a, 0x0048, 0x4e09, 0x2001,
+       0x1999, 0x8003, 0x801b, 0x831b, 0xa318, 0x6316, 0x037f, 0x0f7e,
+       0x2c78, 0x71a0, 0xd1bc, 0x0040, 0x4e22, 0x7100, 0xd1f4, 0x0040,
+       0x4e1e, 0x7114, 0xa18c, 0x00ff, 0x0078, 0x4e27, 0x2009, 0x0000,
+       0x0078, 0x4e27, 0xa1e0, 0x2329, 0x2c0c, 0xa18c, 0x00ff, 0x2061,
+       0x0100, 0x619a, 0x1078, 0x52de, 0x7300, 0xc3dd, 0x7302, 0x6807,
+       0x0002, 0x2f18, 0x6b26, 0x682b, 0x0000, 0x781f, 0x0003, 0x7803,
+       0x0001, 0x7807, 0x0040, 0x0f7f, 0x0e7f, 0x0c7f, 0x0d7f, 0x007c,
+       0x037f, 0x0e7f, 0x0c7f, 0x0078, 0x4e3e, 0x0d7f, 0x007c, 0x0c7e,
+       0x680c, 0xa065, 0x0040, 0x4e53, 0x6807, 0x0004, 0x6826, 0x682b,
+       0x0000, 0x1078, 0x4e8d, 0x0c7f, 0x0d7f, 0x007c, 0x0f7e, 0x0d7e,
+       0x2069, 0x7936, 0x6830, 0xa086, 0x0000, 0x00c0, 0x4e74, 0x6838,
+       0xa07d, 0x0040, 0x4e74, 0x6833, 0x0001, 0x683e, 0x6847, 0x0000,
+       0x127e, 0x0f7e, 0x2091, 0x2200, 0x027f, 0x1078, 0x1a44, 0x00c0,
+       0x4e77, 0x127f, 0x1078, 0x5571, 0x0d7f, 0x0f7f, 0x007c, 0x127f,
+       0x6843, 0x0000, 0x7803, 0x0002, 0x780c, 0xa015, 0x0040, 0x4e89,
+       0x6a3a, 0x780f, 0x0000, 0x6833, 0x0000, 0x683f, 0x0000, 0x0078,
+       0x4e74, 0x683a, 0x6836, 0x0078, 0x4e83, 0x601c, 0xa084, 0x000f,
+       0x1079, 0x4e93, 0x007c, 0x4e9c, 0x4ea1, 0x51a8, 0x529e, 0x4ea1,
+       0x51a8, 0x529e, 0x4e9c, 0x4ea1, 0x1078, 0x4c9d, 0x1078, 0x4d96,
+       0x007c, 0x157e, 0x137e, 0x147e, 0x0c7e, 0x0f7e, 0x6004, 0xa08a,
+       0x0030, 0x10c8, 0x12cd, 0x6118, 0x2178, 0x79a0, 0xd1bc, 0x0040,
+       0x4ebe, 0x7900, 0xd1f4, 0x0040, 0x4eba, 0x7914, 0xa18c, 0x00ff,
+       0x0078, 0x4ec3, 0x2009, 0x0000, 0x0078, 0x4ec3, 0xa1f8, 0x2329,
+       0x2f0c, 0xa18c, 0x00ff, 0x2c78, 0x2061, 0x0100, 0x619a, 0x1079,
+       0x4ecf, 0x0f7f, 0x0c7f, 0x147f, 0x137f, 0x157f, 0x007c, 0x4f01,
+       0x4f39, 0x4f51, 0x4fd0, 0x4ffd, 0x5005, 0x5026, 0x5037, 0x5048,
+       0x5050, 0x5061, 0x5050, 0x50a9, 0x5037, 0x50ca, 0x50d2, 0x5048,
+       0x50d2, 0x50e3, 0x4eff, 0x4eff, 0x4eff, 0x4eff, 0x4eff, 0x4eff,
+       0x4eff, 0x4eff, 0x4eff, 0x4eff, 0x4eff, 0x4eff, 0x5758, 0x576d,
+       0x5790, 0x57b4, 0x5026, 0x4eff, 0x5026, 0x5050, 0x4eff, 0x4f51,
+       0x4fd0, 0x4eff, 0x5c64, 0x5050, 0x4eff, 0x5c87, 0x5050, 0x1078,
+       0x12cd, 0x20a1, 0x020b, 0x1078, 0x50f8, 0x20a3, 0x5200, 0x20a3,
+       0x0000, 0x0d7e, 0x2069, 0x7751, 0x6804, 0xd084, 0x0040, 0x4f1b,
+       0x6828, 0x20a3, 0x0000, 0x017e, 0x1078, 0x2094, 0x21a2, 0x017f,
+       0x0d7f, 0x0078, 0x4f20, 0x0d7f, 0x20a3, 0x0000, 0x20a3, 0x0000,
+       0x20a9, 0x0004, 0x2099, 0x7705, 0x53a6, 0x20a9, 0x0004, 0x2099,
+       0x7701, 0x53a6, 0x20a3, 0x0000, 0x6030, 0xa084, 0x00ff, 0x20a2,
+       0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x001c, 0x1078, 0x5688,
+       0x007c, 0x20a1, 0x020b, 0x1078, 0x50f8, 0x20a3, 0x0500, 0x20a3,
+       0x0000, 0x20a3, 0x0000, 0x6030, 0xa084, 0x00ff, 0x20a2, 0x20a9,
+       0x0004, 0x2099, 0x7705, 0x53a6, 0x60c3, 0x0010, 0x1078, 0x5688,
+       0x007c, 0x20a1, 0x020b, 0x1078, 0x50f8, 0x7818, 0xa080, 0x0028,
+       0x2004, 0xa086, 0x007e, 0x00c0, 0x4f64, 0x20a3, 0x0400, 0x620c,
+       0xc2b4, 0x620e, 0x0078, 0x4f66, 0x20a3, 0x0300, 0x20a3, 0x0000,
+       0x7818, 0xa080, 0x0028, 0x2004, 0xa086, 0x007e, 0x00c0, 0x4f9f,
+       0x2099, 0x7920, 0x33a6, 0x9398, 0x33a6, 0x9398, 0x3304, 0xa084,
+       0x3fff, 0x20a2, 0x9398, 0x33a6, 0x20a3, 0x0000, 0x20a3, 0x0000,
+       0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a9, 0x0004, 0x2099, 0x7705,
+       0x53a6, 0x20a9, 0x0004, 0x2099, 0x7701, 0x53a6, 0x20a9, 0x0010,
+       0x20a3, 0x0000, 0x00f0, 0x4f90, 0x2099, 0x7928, 0x33a6, 0x20a9,
+       0x0007, 0x20a3, 0x0000, 0x00f0, 0x4f99, 0x0078, 0x4fbf, 0x2099,
+       0x7920, 0x20a9, 0x0008, 0x53a6, 0x20a9, 0x0004, 0x2099, 0x7705,
+       0x53a6, 0x20a9, 0x0004, 0x2099, 0x7701, 0x53a6, 0x20a9, 0x0008,
+       0x20a3, 0x0000, 0x00f0, 0x4fb0, 0x20a9, 0x0008, 0x20a3, 0x0000,
+       0x00f0, 0x4fb6, 0x2099, 0x7928, 0x20a9, 0x0008, 0x53a6, 0x20a9,
+       0x0008, 0x20a3, 0x0000, 0x00f0, 0x4fc1, 0x20a9, 0x000a, 0x20a3,
+       0x0000, 0x00f0, 0x4fc7, 0x60c3, 0x0074, 0x1078, 0x5688, 0x007c,
+       0x20a1, 0x020b, 0x1078, 0x50f8, 0x20a3, 0x2010, 0x20a3, 0x0014,
+       0x20a3, 0x0800, 0x20a3, 0x2000, 0xa006, 0x20a2, 0x20a2, 0x20a2,
+       0x20a2, 0x20a2, 0x0f7e, 0x2079, 0x7751, 0x7904, 0x0f7f, 0xd1ac,
+       0x00c0, 0x4fec, 0xa085, 0x0020, 0xd1a4, 0x0040, 0x4ff1, 0xa085,
+       0x0010, 0xa085, 0x0002, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000,
+       0x60c3, 0x0014, 0x1078, 0x5688, 0x007c, 0x20a1, 0x020b, 0x1078,
+       0x50f8, 0x20a3, 0x5000, 0x0078, 0x4f66, 0x20a1, 0x020b, 0x1078,
+       0x50f8, 0x20a3, 0x2110, 0x20a3, 0x0014, 0x20a3, 0x0000, 0x20a3,
        0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3,
-       0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078,
-       0x5566, 0x007c, 0x20a1, 0x020b, 0x1078, 0x504b, 0x20a3, 0x0200,
-       0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0004,
-       0x1078, 0x5566, 0x007c, 0x20a1, 0x020b, 0x1078, 0x504b, 0x20a3,
-       0x0100, 0x20a3, 0x0000, 0x20a3, 0x0003, 0x20a3, 0x2a00, 0x60c3,
-       0x0008, 0x1078, 0x5566, 0x007c, 0x20a1, 0x020b, 0x1078, 0x504b,
-       0x20a3, 0x0200, 0x0078, 0x4e42, 0x20a1, 0x020b, 0x1078, 0x504b,
-       0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3, 0x0003, 0x7810, 0x20a2,
-       0x60c3, 0x0008, 0x1078, 0x5566, 0x007c, 0x0d7e, 0x20a1, 0x020b,
-       0x1078, 0x504b, 0x20a3, 0x0210, 0x20a3, 0x0014, 0x20a3, 0x0800,
-       0x7818, 0x2068, 0x6894, 0xa086, 0x0014, 0x00c0, 0x4f63, 0x6998,
-       0xa184, 0xc000, 0x00c0, 0x4f5f, 0xd1ec, 0x0040, 0x4f5b, 0x20a3,
-       0x2100, 0x0078, 0x4f65, 0x20a3, 0x0100, 0x0078, 0x4f65, 0x20a3,
-       0x0400, 0x0078, 0x4f65, 0x20a3, 0x0700, 0xa006, 0x20a2, 0x20a2,
-       0x20a2, 0x20a2, 0x20a2, 0x0f7e, 0x2079, 0x7651, 0x7904, 0x0f7f,
-       0xd1ac, 0x00c0, 0x4f75, 0xa085, 0x0020, 0xd1a4, 0x0040, 0x4f7a,
-       0xa085, 0x0010, 0xa085, 0x0002, 0x20a2, 0x20a2, 0x20a2, 0x60c3,
-       0x0014, 0x1078, 0x5566, 0x0d7f, 0x007c, 0x20a1, 0x020b, 0x1078,
-       0x504b, 0x20a3, 0x0210, 0x20a3, 0x0014, 0x20a3, 0x0000, 0x20a3,
-       0x0100, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3,
        0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3,
-       0x0000, 0x60c3, 0x0014, 0x1078, 0x5566, 0x007c, 0x20a1, 0x020b,
-       0x1078, 0x504b, 0x20a3, 0x0200, 0x0078, 0x4de3, 0x20a1, 0x020b,
-       0x1078, 0x504b, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3, 0x0003,
-       0x20a3, 0x2a00, 0x60c3, 0x0008, 0x1078, 0x5566, 0x007c, 0x20e1,
-       0x9080, 0x20e1, 0x4000, 0x20a1, 0x020b, 0x1078, 0x504b, 0x20a3,
-       0x0100, 0x20a3, 0x0000, 0x20a3, 0x000b, 0x20a3, 0x0000, 0x60c3,
-       0x0008, 0x1078, 0x5566, 0x007c, 0x027e, 0x20e1, 0x9080, 0x20e1,
-       0x4000, 0x7818, 0xa080, 0x0028, 0x2014, 0xa286, 0x007e, 0x00c0,
-       0x4fe7, 0x20a3, 0x22ff, 0x20a3, 0xfffe, 0x0078, 0x5015, 0xa286,
-       0x007f, 0x00c0, 0x4ff2, 0x0d7e, 0x20a3, 0x22ff, 0x20a3, 0xfffd,
-       0x0078, 0x5009, 0xd2bc, 0x0040, 0x5011, 0xa286, 0x0080, 0x0d7e,
-       0x00c0, 0x5000, 0x20a3, 0x22ff, 0x20a3, 0xfffc, 0x0078, 0x5009,
-       0xa2e8, 0x7720, 0x2d6c, 0x6810, 0xa085, 0x2200, 0x20a2, 0x6814,
-       0x20a2, 0x2069, 0x7619, 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078,
-       0x5019, 0x20a3, 0x2200, 0x6298, 0x22a2, 0x20a3, 0x0000, 0x6230,
-       0x22a2, 0x20a3, 0x0129, 0x20a3, 0x0000, 0x1078, 0x5555, 0x22a2,
-       0x20a3, 0x0000, 0x2fa2, 0x20a3, 0xffff, 0x20a3, 0x0000, 0x20a3,
-       0x0000, 0x027f, 0x007c, 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000,
-       0x20a3, 0x02ff, 0x2011, 0xfffc, 0x22a2, 0x0d7e, 0x2069, 0x7619,
-       0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x20a3, 0x2029, 0x20a3, 0x0000,
-       0x0078, 0x501d, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3, 0xfc02,
-       0x20a3, 0x0000, 0x007c, 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000,
-       0x7818, 0xa080, 0x0028, 0x2004, 0xa092, 0x007e, 0x0048, 0x506a,
-       0x0d7e, 0xa0e8, 0x7720, 0x2d6c, 0x6810, 0xa085, 0x2300, 0x20a2,
-       0x6814, 0x20a2, 0x2069, 0x7619, 0x2da6, 0x8d68, 0x2da6, 0x0d7f,
-       0x0078, 0x5072, 0x20a3, 0x2300, 0x6298, 0x22a2, 0x20a3, 0x0000,
-       0x6230, 0x22a2, 0x20a3, 0x0198, 0x20a3, 0x0000, 0x1078, 0x5555,
+       0x0000, 0x60c3, 0x0014, 0x1078, 0x5688, 0x007c, 0x20a1, 0x020b,
+       0x1078, 0x516f, 0x20a3, 0x0200, 0x20a3, 0x0000, 0x20a3, 0x0000,
+       0x20a3, 0x0000, 0x60c3, 0x0004, 0x1078, 0x5688, 0x007c, 0x20a1,
+       0x020b, 0x1078, 0x516f, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3,
+       0x0003, 0x20a3, 0x2a00, 0x60c3, 0x0008, 0x1078, 0x5688, 0x007c,
+       0x20a1, 0x020b, 0x1078, 0x516f, 0x20a3, 0x0200, 0x0078, 0x4f66,
+       0x20a1, 0x020b, 0x1078, 0x516f, 0x20a3, 0x0100, 0x20a3, 0x0000,
+       0x20a3, 0x0003, 0x7810, 0x20a2, 0x60c3, 0x0008, 0x1078, 0x5688,
+       0x007c, 0x0d7e, 0x20a1, 0x020b, 0x1078, 0x516f, 0x20a3, 0x0210,
+       0x20a3, 0x0014, 0x20a3, 0x0800, 0x7818, 0x2068, 0x6894, 0xa086,
+       0x0014, 0x00c0, 0x5087, 0x6998, 0xa184, 0xc000, 0x00c0, 0x5083,
+       0xd1ec, 0x0040, 0x507f, 0x20a3, 0x2100, 0x0078, 0x5089, 0x20a3,
+       0x0100, 0x0078, 0x5089, 0x20a3, 0x0400, 0x0078, 0x5089, 0x20a3,
+       0x0700, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x20a2, 0x0f7e,
+       0x2079, 0x7751, 0x7904, 0x0f7f, 0xd1ac, 0x00c0, 0x5099, 0xa085,
+       0x0020, 0xd1a4, 0x0040, 0x509e, 0xa085, 0x0010, 0xa085, 0x0002,
+       0x20a2, 0x20a2, 0x20a2, 0x60c3, 0x0014, 0x1078, 0x5688, 0x0d7f,
+       0x007c, 0x20a1, 0x020b, 0x1078, 0x516f, 0x20a3, 0x0210, 0x20a3,
+       0x0014, 0x20a3, 0x0000, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3,
+       0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3,
+       0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0014, 0x1078,
+       0x5688, 0x007c, 0x20a1, 0x020b, 0x1078, 0x516f, 0x20a3, 0x0200,
+       0x0078, 0x4f07, 0x20a1, 0x020b, 0x1078, 0x516f, 0x20a3, 0x0100,
+       0x20a3, 0x0000, 0x20a3, 0x0003, 0x20a3, 0x2a00, 0x60c3, 0x0008,
+       0x1078, 0x5688, 0x007c, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a1,
+       0x020b, 0x1078, 0x516f, 0x20a3, 0x0100, 0x20a3, 0x0000, 0x20a3,
+       0x000b, 0x20a3, 0x0000, 0x60c3, 0x0008, 0x1078, 0x5688, 0x007c,
+       0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028,
+       0x2014, 0xa286, 0x007e, 0x00c0, 0x510b, 0x20a3, 0x22ff, 0x20a3,
+       0xfffe, 0x0078, 0x5139, 0xa286, 0x007f, 0x00c0, 0x5116, 0x0d7e,
+       0x20a3, 0x22ff, 0x20a3, 0xfffd, 0x0078, 0x512d, 0xd2bc, 0x0040,
+       0x5135, 0xa286, 0x0080, 0x0d7e, 0x00c0, 0x5124, 0x20a3, 0x22ff,
+       0x20a3, 0xfffc, 0x0078, 0x512d, 0xa2e8, 0x7820, 0x2d6c, 0x6810,
+       0xa085, 0x2200, 0x20a2, 0x6814, 0x20a2, 0x2069, 0x7719, 0x2da6,
+       0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x513d, 0x20a3, 0x2200, 0x6298,
+       0x22a2, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, 0x0129, 0x20a3,
+       0x0000, 0x1078, 0x5677, 0x22a2, 0x20a3, 0x0000, 0x2fa2, 0x20a3,
+       0xffff, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x027f, 0x007c, 0x027e,
+       0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a3, 0x02ff, 0x2011, 0xfffc,
+       0x22a2, 0x0d7e, 0x2069, 0x7719, 0x2da6, 0x8d68, 0x2da6, 0x0d7f,
+       0x20a3, 0x2029, 0x20a3, 0x0000, 0x0078, 0x5141, 0x20a3, 0x0100,
+       0x20a3, 0x0000, 0x20a3, 0xfc02, 0x20a3, 0x0000, 0x007c, 0x027e,
+       0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2004,
+       0xa092, 0x007e, 0x0048, 0x518e, 0x0d7e, 0xa0e8, 0x7820, 0x2d6c,
+       0x6810, 0xa085, 0x2300, 0x20a2, 0x6814, 0x20a2, 0x2069, 0x7719,
+       0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x5196, 0x20a3, 0x2300,
+       0x6298, 0x22a2, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, 0x0198,
+       0x20a3, 0x0000, 0x1078, 0x5677, 0x22a2, 0x20a3, 0x0000, 0x7a08,
+       0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x027f, 0x007c,
+       0x0c7e, 0x0f7e, 0x6004, 0xa08a, 0x0085, 0x1048, 0x12cd, 0xa08a,
+       0x008c, 0x10c8, 0x12cd, 0x6118, 0x2178, 0x79a0, 0xd1bc, 0x0040,
+       0x51c6, 0x7900, 0xd1f4, 0x0040, 0x51c2, 0x7914, 0xa18c, 0x00ff,
+       0x0078, 0x51cb, 0x2009, 0x0000, 0x0078, 0x51cb, 0xa1f8, 0x2329,
+       0x2f0c, 0xa18c, 0x00ff, 0x2c78, 0x2061, 0x0100, 0x619a, 0xa082,
+       0x0085, 0x1079, 0x51d6, 0x0f7f, 0x0c7f, 0x007c, 0x51df, 0x51ea,
+       0x5204, 0x51dd, 0x51dd, 0x51dd, 0x51df, 0x1078, 0x12cd, 0x147e,
+       0x20a1, 0x020b, 0x1078, 0x5217, 0x60c3, 0x0000, 0x1078, 0x5688,
+       0x147f, 0x007c, 0x147e, 0x20a1, 0x020b, 0x1078, 0x5244, 0x20a3,
+       0x0000, 0x20a3, 0x0000, 0x7808, 0x20a2, 0x2fa2, 0x20a3, 0x0000,
+       0x20a3, 0xffff, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x000c,
+       0x1078, 0x5688, 0x147f, 0x007c, 0x147e, 0x20a1, 0x020b, 0x1078,
+       0x5271, 0x20a3, 0x0003, 0x20a3, 0x0300, 0x20a3, 0x0000, 0x20a3,
+       0x0000, 0x60c3, 0x0004, 0x1078, 0x5688, 0x147f, 0x007c, 0x027e,
+       0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2004,
+       0xa092, 0x007e, 0x0048, 0x5236, 0x0d7e, 0xa0e8, 0x7820, 0x2d6c,
+       0x6810, 0xa085, 0x8100, 0x20a2, 0x6814, 0x20a2, 0x2069, 0x7719,
+       0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x523e, 0x20a3, 0x8100,
+       0x6298, 0x22a2, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, 0x0009,
+       0x20a3, 0x0000, 0x0078, 0x5141, 0x027e, 0x20e1, 0x9080, 0x20e1,
+       0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0xa092, 0x007e, 0x0048,
+       0x5263, 0x0d7e, 0xa0e8, 0x7820, 0x2d6c, 0x6810, 0xa085, 0x8400,
+       0x20a2, 0x6814, 0x20a2, 0x2069, 0x7719, 0x2da6, 0x8d68, 0x2da6,
+       0x0d7f, 0x0078, 0x526b, 0x20a3, 0x8400, 0x6298, 0x22a2, 0x20a3,
+       0x0000, 0x6230, 0x22a2, 0x20a3, 0x00d1, 0x20a3, 0x0000, 0x0078,
+       0x519a, 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080,
+       0x0028, 0x2004, 0xa092, 0x007e, 0x0048, 0x5290, 0x0d7e, 0xa0e8,
+       0x7820, 0x2d6c, 0x6810, 0xa085, 0x8500, 0x20a2, 0x6814, 0x20a2,
+       0x2069, 0x7719, 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x5298,
+       0x20a3, 0x8500, 0x6298, 0x22a2, 0x20a3, 0x0000, 0x6230, 0x22a2,
+       0x20a3, 0x00d1, 0x20a3, 0x0000, 0x0078, 0x519a, 0x0c7e, 0x0f7e,
+       0x2c78, 0x7804, 0xa08a, 0x0040, 0x1048, 0x12cd, 0xa08a, 0x0050,
+       0x10c8, 0x12cd, 0x7918, 0x2160, 0x61a0, 0xd1bc, 0x0040, 0x52bd,
+       0x6100, 0xd1f4, 0x0040, 0x52b9, 0x6114, 0xa18c, 0x00ff, 0x0078,
+       0x52c2, 0x2009, 0x0000, 0x0078, 0x52c2, 0xa1e0, 0x2329, 0x2c0c,
+       0xa18c, 0x00ff, 0x2061, 0x0100, 0x619a, 0xa082, 0x0040, 0x1079,
+       0x52cc, 0x0f7f, 0x0c7f, 0x007c, 0x52de, 0x53c4, 0x536c, 0x54ec,
+       0x52dc, 0x52dc, 0x52dc, 0x52dc, 0x52dc, 0x52dc, 0x52dc, 0x5933,
+       0x5944, 0x5955, 0x5966, 0x52dc, 0x1078, 0x12cd, 0x0d7e, 0x157e,
+       0x147e, 0x20a1, 0x020b, 0x1078, 0x532f, 0x7910, 0x2168, 0x6948,
+       0x21a2, 0xa016, 0x22a2, 0x22a2, 0x22a2, 0x694c, 0xa184, 0x0006,
+       0x8004, 0x20a2, 0xd1ac, 0x0040, 0x52f9, 0x20a3, 0x0002, 0x0078,
+       0x5305, 0xd1b4, 0x0040, 0x5300, 0x20a3, 0x0001, 0x0078, 0x5305,
+       0x20a3, 0x0000, 0x2230, 0x0078, 0x5307, 0x6a80, 0x6e7c, 0x20a9,
+       0x0008, 0xad80, 0x0017, 0x200c, 0x810f, 0x21a2, 0x8000, 0x00f0,
+       0x530b, 0x22a2, 0x26a2, 0x60c3, 0x0020, 0x20e1, 0x9080, 0x6014,
+       0xa084, 0x0004, 0xa085, 0x0009, 0x6016, 0x2001, 0x7952, 0x2003,
+       0x07d0, 0x2001, 0x7951, 0x2003, 0x0009, 0x2001, 0x7957, 0x2003,
+       0x0002, 0x1078, 0x14fc, 0x147f, 0x157f, 0x0d7f, 0x007c, 0x20e1,
+       0x9080, 0x20e1, 0x4000, 0x7a18, 0xa280, 0x0023, 0x2014, 0x8210,
+       0xa294, 0x00ff, 0x2202, 0x8217, 0x7818, 0xa080, 0x0028, 0x2004,
+       0xd0bc, 0x0040, 0x5355, 0x0d7e, 0xa0e8, 0x7820, 0x2d6c, 0x6810,
+       0xa085, 0x0600, 0x20a2, 0x6814, 0x20a2, 0x2069, 0x7719, 0x2da6,
+       0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x535d, 0x20a3, 0x0600, 0x6198,
+       0x21a2, 0x20a3, 0x0000, 0x6130, 0x21a2, 0x20a3, 0x0829, 0x20a3,
+       0x0000, 0x22a2, 0x20a3, 0x0000, 0x2fa2, 0x20a3, 0xffff, 0x20a3,
+       0x0000, 0x20a3, 0x0000, 0x007c, 0x0d7e, 0x157e, 0x137e, 0x147e,
+       0x20a1, 0x020b, 0x1078, 0x538c, 0x7810, 0x2068, 0x6860, 0x20a2,
+       0x685c, 0x20a2, 0x6880, 0x20a2, 0x687c, 0x20a2, 0xa006, 0x20a2,
+       0x20a2, 0x20a2, 0x20a2, 0x60c3, 0x000c, 0x1078, 0x5688, 0x147f,
+       0x137f, 0x157f, 0x0d7f, 0x007c, 0x027e, 0x20e1, 0x9080, 0x20e1,
+       0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0xd0bc, 0x0040, 0x53aa,
+       0x0d7e, 0xa0e8, 0x7820, 0x2d6c, 0x6810, 0xa085, 0x0500, 0x20a2,
+       0x6814, 0x20a2, 0x2069, 0x7719, 0x2da6, 0x8d68, 0x2da6, 0x0d7f,
+       0x0078, 0x53b2, 0x20a3, 0x0500, 0x6298, 0x22a2, 0x20a3, 0x0000,
+       0x6230, 0x22a2, 0x20a3, 0x0889, 0x20a3, 0x0000, 0x1078, 0x5677,
        0x22a2, 0x20a3, 0x0000, 0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000,
-       0x20a3, 0x0000, 0x027f, 0x007c, 0x0c7e, 0x0f7e, 0x6004, 0xa08a,
-       0x0085, 0x1048, 0x12cd, 0xa08a, 0x008c, 0x10c8, 0x12cd, 0x6118,
-       0x2178, 0x79a0, 0xd1bc, 0x0040, 0x50a2, 0x7900, 0xd1f4, 0x0040,
-       0x509e, 0x7914, 0xa18c, 0x00ff, 0x0078, 0x50a7, 0x2009, 0x0000,
-       0x0078, 0x50a7, 0xa1f8, 0x2329, 0x2f0c, 0xa18c, 0x00ff, 0x2c78,
-       0x2061, 0x0100, 0x619a, 0xa082, 0x0085, 0x1079, 0x50b2, 0x0f7f,
-       0x0c7f, 0x007c, 0x50bb, 0x50c6, 0x50e0, 0x50b9, 0x50b9, 0x50b9,
-       0x50bb, 0x1078, 0x12cd, 0x147e, 0x20a1, 0x020b, 0x1078, 0x50f3,
-       0x60c3, 0x0000, 0x1078, 0x5566, 0x147f, 0x007c, 0x147e, 0x20a1,
-       0x020b, 0x1078, 0x5120, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x7808,
-       0x20a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3, 0xffff, 0x20a3, 0x0000,
-       0x20a3, 0x0000, 0x60c3, 0x000c, 0x1078, 0x5566, 0x147f, 0x007c,
-       0x147e, 0x20a1, 0x020b, 0x1078, 0x514d, 0x20a3, 0x0003, 0x20a3,
-       0x0300, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3, 0x0004, 0x1078,
-       0x5566, 0x147f, 0x007c, 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000,
-       0x7818, 0xa080, 0x0028, 0x2004, 0xa092, 0x007e, 0x0048, 0x5112,
-       0x0d7e, 0xa0e8, 0x7720, 0x2d6c, 0x6810, 0xa085, 0x8100, 0x20a2,
-       0x6814, 0x20a2, 0x2069, 0x7619, 0x2da6, 0x8d68, 0x2da6, 0x0d7f,
-       0x0078, 0x511a, 0x20a3, 0x8100, 0x6298, 0x22a2, 0x20a3, 0x0000,
-       0x6230, 0x22a2, 0x20a3, 0x0009, 0x20a3, 0x0000, 0x0078, 0x501d,
+       0x20a3, 0x0000, 0x027f, 0x007c, 0x0d7e, 0x157e, 0x137e, 0x147e,
+       0x20a1, 0x020b, 0x1078, 0x54b4, 0x7810, 0x2068, 0xa016, 0x22a2,
+       0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x7810, 0xa084, 0xf000, 0x00c0,
+       0x53e1, 0x7810, 0xa084, 0x0700, 0x8007, 0x1079, 0x53e9, 0x0078,
+       0x53e4, 0xa006, 0x1079, 0x53e9, 0x147f, 0x137f, 0x157f, 0x0d7f,
+       0x007c, 0x53f3, 0x5455, 0x5459, 0x547c, 0x5489, 0x549b, 0x549f,
+       0x53f1, 0x1078, 0x12cd, 0x017e, 0x037e, 0x694c, 0xa18c, 0x0003,
+       0xa186, 0x0000, 0x00c0, 0x5406, 0x6b78, 0x23a2, 0x6868, 0x20a2,
+       0x6864, 0x20a2, 0x037f, 0x017f, 0x0078, 0x5480, 0xa186, 0x0001,
+       0x00c0, 0x5450, 0x6b78, 0x23a2, 0x6868, 0x20a2, 0x6864, 0x20a2,
+       0x22a2, 0x6874, 0x20a2, 0x22a2, 0x687c, 0x20a2, 0x2009, 0x0018,
+       0xa384, 0x0300, 0x0040, 0x544f, 0xd3c4, 0x0040, 0x5421, 0x687c,
+       0xa108, 0xd3cc, 0x0040, 0x5426, 0x6874, 0xa108, 0x157e, 0x20a9,
+       0x000d, 0xad80, 0x0020, 0x201c, 0x831f, 0x23a2, 0x8000, 0x00f0,
+       0x542b, 0x157f, 0x22a2, 0x22a2, 0x22a2, 0xa184, 0x0003, 0x0040,
+       0x544f, 0x20a1, 0x020b, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a3,
+       0x0700, 0x6298, 0x22a2, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3,
+       0x0898, 0x20a2, 0x1078, 0x5677, 0x22a2, 0x20a3, 0x0000, 0x61c2,
+       0x037f, 0x017f, 0x1078, 0x5688, 0x007c, 0x20a3, 0x0008, 0x0078,
+       0x547e, 0x20a3, 0x0302, 0x22a2, 0x22a2, 0x22a2, 0x20a3, 0x0012,
+       0x22a2, 0x20a3, 0x0008, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x20a3,
+       0x7000, 0x20a3, 0x0500, 0x22a2, 0x20a3, 0x000a, 0x22a2, 0x22a2,
+       0x20a3, 0x2500, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x60c3,
+       0x0032, 0x1078, 0x5688, 0x007c, 0x20a3, 0x0028, 0x22a2, 0x22a2,
+       0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x60c3, 0x0018, 0x1078, 0x5688,
+       0x007c, 0x20a3, 0x0100, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2,
+       0x20a3, 0x0008, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x60c3, 0x0020,
+       0x1078, 0x5688, 0x007c, 0x20a3, 0x0008, 0x0078, 0x547e, 0x037e,
+       0x7b10, 0xa384, 0xff00, 0x7812, 0xa384, 0x00ff, 0x8001, 0x00c0,
+       0x54ad, 0x22a2, 0x037f, 0x0078, 0x547e, 0x20a3, 0x0800, 0x22a2,
+       0x20a2, 0x037f, 0x0078, 0x5480, 0x027e, 0x20e1, 0x9080, 0x20e1,
+       0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0xd0bc, 0x0040, 0x54d2,
+       0x0d7e, 0xa0e8, 0x7820, 0x2d6c, 0x6810, 0xa085, 0x0700, 0x20a2,
+       0x6814, 0x20a2, 0x2069, 0x7719, 0x2da6, 0x8d68, 0x2da6, 0x0d7f,
+       0x0078, 0x54da, 0x20a3, 0x0700, 0x6298, 0x22a2, 0x20a3, 0x0000,
+       0x6230, 0x22a2, 0x20a3, 0x0898, 0x20a3, 0x0000, 0x1078, 0x5677,
+       0x22a2, 0x20a3, 0x0000, 0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000,
+       0x20a3, 0x0000, 0x027f, 0x007c, 0x0d7e, 0x157e, 0x137e, 0x147e,
+       0x017e, 0x037e, 0x7810, 0xa084, 0x0700, 0x8007, 0x1079, 0x54ff,
+       0x037f, 0x017f, 0x147f, 0x137f, 0x157f, 0x0d7f, 0x007c, 0x5507,
+       0x5507, 0x5509, 0x5507, 0x5507, 0x5507, 0x552e, 0x5507, 0x1078,
+       0x12cd, 0x7910, 0xa18c, 0xf8ff, 0xa18d, 0x0600, 0x7912, 0x20a1,
+       0x020b, 0x2009, 0x0003, 0x1078, 0x5538, 0x0d7e, 0x2069, 0x7751,
+       0x6804, 0xd0bc, 0x0040, 0x5523, 0x682c, 0xa084, 0x00ff, 0x8007,
+       0x20a2, 0x0078, 0x5525, 0x20a3, 0x3f00, 0x0d7f, 0x22a2, 0x22a2,
+       0x22a2, 0x60c3, 0x0001, 0x1078, 0x5688, 0x007c, 0x20a1, 0x020b,
+       0x2009, 0x0003, 0x1078, 0x5538, 0x20a3, 0x7f00, 0x0078, 0x5526,
        0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028,
-       0x2004, 0xa092, 0x007e, 0x0048, 0x513f, 0x0d7e, 0xa0e8, 0x7720,
-       0x2d6c, 0x6810, 0xa085, 0x8400, 0x20a2, 0x6814, 0x20a2, 0x2069,
-       0x7619, 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x5147, 0x20a3,
-       0x8400, 0x6298, 0x22a2, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3,
-       0x00d1, 0x20a3, 0x0000, 0x0078, 0x5076, 0x027e, 0x20e1, 0x9080,
-       0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0xa092, 0x007e,
-       0x0048, 0x516c, 0x0d7e, 0xa0e8, 0x7720, 0x2d6c, 0x6810, 0xa085,
-       0x8500, 0x20a2, 0x6814, 0x20a2, 0x2069, 0x7619, 0x2da6, 0x8d68,
-       0x2da6, 0x0d7f, 0x0078, 0x5174, 0x20a3, 0x8500, 0x6298, 0x22a2,
-       0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, 0x00d1, 0x20a3, 0x0000,
-       0x0078, 0x5076, 0x0c7e, 0x0f7e, 0x2c78, 0x7804, 0xa08a, 0x0040,
-       0x1048, 0x12cd, 0xa08a, 0x0050, 0x10c8, 0x12cd, 0x7918, 0x2160,
-       0x61a0, 0xd1bc, 0x0040, 0x5199, 0x6100, 0xd1f4, 0x0040, 0x5195,
-       0x6114, 0xa18c, 0x00ff, 0x0078, 0x519e, 0x2009, 0x0000, 0x0078,
-       0x519e, 0xa1e0, 0x2329, 0x2c0c, 0xa18c, 0x00ff, 0x2061, 0x0100,
-       0x619a, 0xa082, 0x0040, 0x1079, 0x51a8, 0x0f7f, 0x0c7f, 0x007c,
-       0x51ba, 0x52a2, 0x524a, 0x53ca, 0x51b8, 0x51b8, 0x51b8, 0x51b8,
-       0x51b8, 0x51b8, 0x51b8, 0x5813, 0x5824, 0x5835, 0x5846, 0x51b8,
-       0x1078, 0x12cd, 0x0d7e, 0x157e, 0x147e, 0x20a1, 0x020b, 0x1078,
-       0x520d, 0x7910, 0x2168, 0x6944, 0xa18c, 0x00ff, 0x21a2, 0xa016,
-       0x22a2, 0x22a2, 0x22a2, 0x694c, 0xa184, 0x0006, 0x8004, 0x20a2,
-       0xd1ac, 0x0040, 0x51d7, 0x20a3, 0x0002, 0x0078, 0x51e3, 0xd1b4,
-       0x0040, 0x51de, 0x20a3, 0x0001, 0x0078, 0x51e3, 0x20a3, 0x0000,
-       0x2230, 0x0078, 0x51e5, 0x6a80, 0x6e7c, 0x20a9, 0x0008, 0xad80,
-       0x0017, 0x200c, 0x810f, 0x21a2, 0x8000, 0x00f0, 0x51e9, 0x22a2,
-       0x26a2, 0x60c3, 0x0020, 0x20e1, 0x9080, 0x6014, 0xa084, 0x0004,
-       0xa085, 0x0009, 0x6016, 0x2001, 0x7852, 0x2003, 0x07d0, 0x2001,
-       0x7851, 0x2003, 0x0009, 0x2001, 0x7857, 0x2003, 0x0002, 0x1078,
-       0x14fc, 0x147f, 0x157f, 0x0d7f, 0x007c, 0x20e1, 0x9080, 0x20e1,
-       0x4000, 0x7a18, 0xa280, 0x0023, 0x2014, 0x8210, 0xa294, 0x00ff,
-       0x2202, 0x8217, 0x7818, 0xa080, 0x0028, 0x2004, 0xd0bc, 0x0040,
-       0x5233, 0x0d7e, 0xa0e8, 0x7720, 0x2d6c, 0x6810, 0xa085, 0x0600,
-       0x20a2, 0x6814, 0x20a2, 0x2069, 0x7619, 0x2da6, 0x8d68, 0x2da6,
-       0x0d7f, 0x0078, 0x523b, 0x20a3, 0x0600, 0x6198, 0x21a2, 0x20a3,
-       0x0000, 0x6130, 0x21a2, 0x20a3, 0x0829, 0x20a3, 0x0000, 0x22a2,
-       0x20a3, 0x0000, 0x2fa2, 0x20a3, 0xffff, 0x20a3, 0x0000, 0x20a3,
-       0x0000, 0x007c, 0x0d7e, 0x157e, 0x137e, 0x147e, 0x20a1, 0x020b,
-       0x1078, 0x526a, 0x7810, 0x2068, 0x6860, 0x20a2, 0x685c, 0x20a2,
-       0x6880, 0x20a2, 0x687c, 0x20a2, 0xa006, 0x20a2, 0x20a2, 0x20a2,
-       0x20a2, 0x60c3, 0x000c, 0x1078, 0x5566, 0x147f, 0x137f, 0x157f,
-       0x0d7f, 0x007c, 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818,
-       0xa080, 0x0028, 0x2004, 0xd0bc, 0x0040, 0x5288, 0x0d7e, 0xa0e8,
-       0x7720, 0x2d6c, 0x6810, 0xa085, 0x0500, 0x20a2, 0x6814, 0x20a2,
-       0x2069, 0x7619, 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x5290,
-       0x20a3, 0x0500, 0x6298, 0x22a2, 0x20a3, 0x0000, 0x6230, 0x22a2,
-       0x20a3, 0x0889, 0x20a3, 0x0000, 0x1078, 0x5555, 0x22a2, 0x20a3,
-       0x0000, 0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3, 0x0000,
-       0x027f, 0x007c, 0x0d7e, 0x157e, 0x137e, 0x147e, 0x20a1, 0x020b,
-       0x1078, 0x5392, 0x7810, 0x2068, 0xa016, 0x22a2, 0x22a2, 0x22a2,
-       0x22a2, 0x22a2, 0x7810, 0xa084, 0xf000, 0x00c0, 0x52bf, 0x7810,
-       0xa084, 0x0700, 0x8007, 0x1079, 0x52c7, 0x0078, 0x52c2, 0xa006,
-       0x1079, 0x52c7, 0x147f, 0x137f, 0x157f, 0x0d7f, 0x007c, 0x52d1,
-       0x5333, 0x5337, 0x535a, 0x5367, 0x5379, 0x537d, 0x52cf, 0x1078,
-       0x12cd, 0x017e, 0x037e, 0x694c, 0xa18c, 0x0003, 0xa186, 0x0000,
-       0x00c0, 0x52e4, 0x6b78, 0x23a2, 0x6868, 0x20a2, 0x6864, 0x20a2,
-       0x037f, 0x017f, 0x0078, 0x535e, 0xa186, 0x0001, 0x00c0, 0x532e,
-       0x6b78, 0x23a2, 0x6868, 0x20a2, 0x6864, 0x20a2, 0x22a2, 0x6874,
-       0x20a2, 0x22a2, 0x687c, 0x20a2, 0x2009, 0x0018, 0xa384, 0x0300,
-       0x0040, 0x532d, 0xd3c4, 0x0040, 0x52ff, 0x687c, 0xa108, 0xd3cc,
-       0x0040, 0x5304, 0x6874, 0xa108, 0x157e, 0x20a9, 0x000d, 0xad80,
-       0x0020, 0x201c, 0x831f, 0x23a2, 0x8000, 0x00f0, 0x5309, 0x157f,
-       0x22a2, 0x22a2, 0x22a2, 0xa184, 0x0003, 0x0040, 0x532d, 0x20a1,
-       0x020b, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x20a3, 0x0700, 0x6298,
-       0x22a2, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, 0x0898, 0x20a2,
-       0x1078, 0x5555, 0x22a2, 0x20a3, 0x0000, 0x61c2, 0x037f, 0x017f,
-       0x1078, 0x5566, 0x007c, 0x20a3, 0x0008, 0x0078, 0x535c, 0x20a3,
-       0x0302, 0x22a2, 0x22a2, 0x22a2, 0x20a3, 0x0012, 0x22a2, 0x20a3,
-       0x0008, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x20a3, 0x7000, 0x20a3,
-       0x0500, 0x22a2, 0x20a3, 0x000a, 0x22a2, 0x22a2, 0x20a3, 0x2500,
-       0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x60c3, 0x0032, 0x1078,
-       0x5566, 0x007c, 0x20a3, 0x0028, 0x22a2, 0x22a2, 0x22a2, 0x22a2,
-       0x22a2, 0x22a2, 0x60c3, 0x0018, 0x1078, 0x5566, 0x007c, 0x20a3,
-       0x0100, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x20a3, 0x0008,
-       0x22a2, 0x22a2, 0x22a2, 0x22a2, 0x60c3, 0x0020, 0x1078, 0x5566,
-       0x007c, 0x20a3, 0x0008, 0x0078, 0x535c, 0x037e, 0x7b10, 0xa384,
-       0xff00, 0x7812, 0xa384, 0x00ff, 0x8001, 0x00c0, 0x538b, 0x22a2,
-       0x037f, 0x0078, 0x535c, 0x20a3, 0x0800, 0x22a2, 0x20a2, 0x037f,
-       0x0078, 0x535e, 0x027e, 0x20e1, 0x9080, 0x20e1, 0x4000, 0x7818,
-       0xa080, 0x0028, 0x2004, 0xd0bc, 0x0040, 0x53b0, 0x0d7e, 0xa0e8,
-       0x7720, 0x2d6c, 0x6810, 0xa085, 0x0700, 0x20a2, 0x6814, 0x20a2,
-       0x2069, 0x7619, 0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x53b8,
-       0x20a3, 0x0700, 0x6298, 0x22a2, 0x20a3, 0x0000, 0x6230, 0x22a2,
-       0x20a3, 0x0898, 0x20a3, 0x0000, 0x1078, 0x5555, 0x22a2, 0x20a3,
-       0x0000, 0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3, 0x0000,
-       0x027f, 0x007c, 0x0d7e, 0x157e, 0x137e, 0x147e, 0x017e, 0x037e,
-       0x7810, 0xa084, 0x0700, 0x8007, 0x1079, 0x53dd, 0x037f, 0x017f,
-       0x147f, 0x137f, 0x157f, 0x0d7f, 0x007c, 0x53e5, 0x53e5, 0x53e7,
-       0x53e5, 0x53e5, 0x53e5, 0x540c, 0x53e5, 0x1078, 0x12cd, 0x7910,
-       0xa18c, 0xf8ff, 0xa18d, 0x0600, 0x7912, 0x20a1, 0x020b, 0x2009,
-       0x0003, 0x1078, 0x5416, 0x0d7e, 0x2069, 0x7651, 0x6804, 0xd0bc,
-       0x0040, 0x5401, 0x682c, 0xa084, 0x00ff, 0x8007, 0x20a2, 0x0078,
-       0x5403, 0x20a3, 0x3f00, 0x0d7f, 0x22a2, 0x22a2, 0x22a2, 0x60c3,
-       0x0001, 0x1078, 0x5566, 0x007c, 0x20a1, 0x020b, 0x2009, 0x0003,
-       0x1078, 0x5416, 0x20a3, 0x7f00, 0x0078, 0x5404, 0x027e, 0x20e1,
-       0x9080, 0x20e1, 0x4000, 0x7818, 0xa080, 0x0028, 0x2004, 0xd0bc,
-       0x0040, 0x5434, 0x0d7e, 0xa0e8, 0x7720, 0x2d6c, 0x6810, 0xa085,
-       0x0100, 0x20a2, 0x6814, 0x20a2, 0x2069, 0x7619, 0x2da6, 0x8d68,
-       0x2da6, 0x0d7f, 0x0078, 0x543c, 0x20a3, 0x0100, 0x6298, 0x22a2,
-       0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, 0x0888, 0xa18d, 0x0008,
-       0x21a2, 0x1078, 0x5555, 0x22a2, 0x20a3, 0x0000, 0x7a08, 0x22a2,
-       0x2fa2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x027f, 0x007c, 0x0e7e,
-       0x0d7e, 0x0c7e, 0x057e, 0x047e, 0x037e, 0x2061, 0x0100, 0x2071,
-       0x7600, 0x6130, 0x7818, 0x2068, 0x68a0, 0x2028, 0xd0bc, 0x00c0,
-       0x5468, 0xa080, 0x2329, 0x2014, 0xa294, 0x00ff, 0x0078, 0x546c,
-       0x6910, 0x6a14, 0x7364, 0x7468, 0x781c, 0xa086, 0x0006, 0x0040,
-       0x54c0, 0xd5bc, 0x0040, 0x547c, 0xa185, 0x0100, 0x6062, 0x6266,
-       0x636a, 0x646e, 0x0078, 0x5482, 0x6063, 0x0100, 0x6266, 0x606b,
-       0x0000, 0x616e, 0x6073, 0x0809, 0x6077, 0x0008, 0x688c, 0x8000,
-       0xa084, 0x00ff, 0x688e, 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00,
-       0x6082, 0x7808, 0x6086, 0x7810, 0x2070, 0x7014, 0x608a, 0x7010,
-       0x608e, 0x700c, 0x60c6, 0x7008, 0x60ca, 0x686c, 0x60ce, 0x60ab,
+       0x2004, 0xd0bc, 0x0040, 0x5556, 0x0d7e, 0xa0e8, 0x7820, 0x2d6c,
+       0x6810, 0xa085, 0x0100, 0x20a2, 0x6814, 0x20a2, 0x2069, 0x7719,
+       0x2da6, 0x8d68, 0x2da6, 0x0d7f, 0x0078, 0x555e, 0x20a3, 0x0100,
+       0x6298, 0x22a2, 0x20a3, 0x0000, 0x6230, 0x22a2, 0x20a3, 0x0888,
+       0xa18d, 0x0008, 0x21a2, 0x1078, 0x5677, 0x22a2, 0x20a3, 0x0000,
+       0x7a08, 0x22a2, 0x2fa2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x027f,
+       0x007c, 0x0e7e, 0x0d7e, 0x0c7e, 0x057e, 0x047e, 0x037e, 0x2061,
+       0x0100, 0x2071, 0x7700, 0x6130, 0x7818, 0x2068, 0x68a0, 0x2028,
+       0xd0bc, 0x00c0, 0x558a, 0xa080, 0x2329, 0x2014, 0xa294, 0x00ff,
+       0x0078, 0x558e, 0x6910, 0x6a14, 0x7364, 0x7468, 0x781c, 0xa086,
+       0x0006, 0x0040, 0x55e2, 0xd5bc, 0x0040, 0x559e, 0xa185, 0x0100,
+       0x6062, 0x6266, 0x636a, 0x646e, 0x0078, 0x55a4, 0x6063, 0x0100,
+       0x6266, 0x606b, 0x0000, 0x616e, 0x6073, 0x0809, 0x6077, 0x0008,
+       0x688c, 0x8000, 0xa084, 0x00ff, 0x688e, 0x8007, 0x607a, 0x607f,
+       0x0000, 0x2f00, 0x6082, 0x7808, 0x6086, 0x7810, 0x2070, 0x7014,
+       0x608a, 0x7010, 0x608e, 0x700c, 0x60c6, 0x7008, 0x60ca, 0x686c,
+       0x60ce, 0x60ab, 0x0036, 0x60af, 0x95d5, 0x60d7, 0x0000, 0xa582,
+       0x0080, 0x0048, 0x55d6, 0x6a00, 0xd2f4, 0x0040, 0x55d4, 0x6a14,
+       0xa294, 0x00ff, 0x0078, 0x55d6, 0x2011, 0x0000, 0x629e, 0x6017,
+       0x0016, 0x1078, 0x470b, 0x037f, 0x047f, 0x057f, 0x0c7f, 0x0d7f,
+       0x0e7f, 0x007c, 0x7810, 0x2070, 0x704c, 0xa084, 0x0003, 0xa086,
+       0x0002, 0x0040, 0x5631, 0xd5bc, 0x0040, 0x55f6, 0xa185, 0x0100,
+       0x6062, 0x6266, 0x636a, 0x646e, 0x0078, 0x55fc, 0x6063, 0x0100,
+       0x6266, 0x606b, 0x0000, 0x616e, 0x6073, 0x0880, 0x6077, 0x0008,
+       0x688c, 0x8000, 0xa084, 0x00ff, 0x688e, 0x8007, 0x607a, 0x607f,
+       0x0000, 0x2f00, 0x6086, 0x7808, 0x6082, 0x7060, 0x608a, 0x705c,
+       0x608e, 0x7080, 0x60c6, 0x707c, 0x60ca, 0x686c, 0x60ce, 0x60ab,
        0x0036, 0x60af, 0x95d5, 0x60d7, 0x0000, 0xa582, 0x0080, 0x0048,
-       0x54b4, 0x6a00, 0xd2f4, 0x0040, 0x54b2, 0x6a14, 0xa294, 0x00ff,
-       0x0078, 0x54b4, 0x2011, 0x0000, 0x629e, 0x6017, 0x0016, 0x1078,
-       0x45e8, 0x037f, 0x047f, 0x057f, 0x0c7f, 0x0d7f, 0x0e7f, 0x007c,
-       0x7810, 0x2070, 0x704c, 0xa084, 0x0003, 0xa086, 0x0002, 0x0040,
-       0x550f, 0xd5bc, 0x0040, 0x54d4, 0xa185, 0x0100, 0x6062, 0x6266,
-       0x636a, 0x646e, 0x0078, 0x54da, 0x6063, 0x0100, 0x6266, 0x606b,
-       0x0000, 0x616e, 0x6073, 0x0880, 0x6077, 0x0008, 0x688c, 0x8000,
+       0x562c, 0x6a00, 0xd2f4, 0x0040, 0x562a, 0x6a14, 0xa294, 0x00ff,
+       0x0078, 0x562c, 0x2011, 0x0000, 0x629e, 0x6017, 0x0012, 0x0078,
+       0x55d9, 0xd5bc, 0x0040, 0x563c, 0xa185, 0x0700, 0x6062, 0x6266,
+       0x636a, 0x646e, 0x0078, 0x5642, 0x6063, 0x0700, 0x6266, 0x606b,
+       0x0000, 0x616e, 0x6073, 0x0898, 0x6077, 0x0000, 0x688c, 0x8000,
        0xa084, 0x00ff, 0x688e, 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00,
-       0x6086, 0x7808, 0x6082, 0x7060, 0x608a, 0x705c, 0x608e, 0x7080,
-       0x60c6, 0x707c, 0x60ca, 0x686c, 0x60ce, 0x60ab, 0x0036, 0x60af,
-       0x95d5, 0x60d7, 0x0000, 0xa582, 0x0080, 0x0048, 0x550a, 0x6a00,
-       0xd2f4, 0x0040, 0x5508, 0x6a14, 0xa294, 0x00ff, 0x0078, 0x550a,
-       0x2011, 0x0000, 0x629e, 0x6017, 0x0012, 0x0078, 0x54b7, 0xd5bc,
-       0x0040, 0x551a, 0xa185, 0x0700, 0x6062, 0x6266, 0x636a, 0x646e,
-       0x0078, 0x5520, 0x6063, 0x0700, 0x6266, 0x606b, 0x0000, 0x616e,
-       0x6073, 0x0898, 0x6077, 0x0000, 0x688c, 0x8000, 0xa084, 0x00ff,
-       0x688e, 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00, 0x6086, 0x7808,
-       0x6082, 0x7014, 0x608a, 0x7010, 0x608e, 0x700c, 0x60c6, 0x7008,
-       0x60ca, 0x686c, 0x60ce, 0x60ab, 0x0036, 0x60af, 0x95d5, 0x60d7,
-       0x0000, 0xa582, 0x0080, 0x0048, 0x5550, 0x6a00, 0xd2f4, 0x0040,
-       0x554e, 0x6a14, 0xa294, 0x00ff, 0x0078, 0x5550, 0x2011, 0x0000,
-       0x629e, 0x6017, 0x0016, 0x0078, 0x54b7, 0x7a18, 0xa280, 0x0023,
-       0x2014, 0x8210, 0xa294, 0x00ff, 0x2202, 0x8217, 0x007c, 0x0d7e,
-       0x2069, 0x7836, 0x6843, 0x0001, 0x0d7f, 0x007c, 0x20e1, 0x9080,
-       0x60a3, 0x0056, 0x60a7, 0x9575, 0x1078, 0x5571, 0x1078, 0x45d8,
-       0x007c, 0x007e, 0x6014, 0xa084, 0x0004, 0xa085, 0x0009, 0x6016,
-       0x007f, 0x007c, 0x007e, 0x0c7e, 0x2061, 0x0100, 0x6014, 0xa084,
-       0x0004, 0xa085, 0x0008, 0x6016, 0x0c7f, 0x007f, 0x007c, 0x0c7e,
-       0x0d7e, 0x017e, 0x027e, 0x1078, 0x45e3, 0x2061, 0x0100, 0x2069,
-       0x0140, 0x6904, 0xa194, 0x4000, 0x0040, 0x55c4, 0x1078, 0x557a,
-       0x6803, 0x1000, 0x6803, 0x0000, 0x0c7e, 0x2061, 0x7836, 0x6128,
-       0xa192, 0x0002, 0x00c8, 0x55b1, 0x8108, 0x612a, 0x6124, 0x0c7f,
-       0x81ff, 0x0040, 0x55bf, 0x1078, 0x45d8, 0x1078, 0x5571, 0x0078,
-       0x55bf, 0x6124, 0xa1e5, 0x0000, 0x0040, 0x55bc, 0x1078, 0x75bc,
-       0x2009, 0x0014, 0x1078, 0x5c21, 0x0c7f, 0x0078, 0x55bf, 0x027f,
-       0x017f, 0x0d7f, 0x0c7f, 0x007c, 0x1078, 0x3573, 0x0078, 0x55bf,
-       0x0c7e, 0x0d7e, 0x0e7e, 0x017e, 0x027e, 0x1078, 0x45f1, 0x2071,
-       0x7836, 0x713c, 0x81ff, 0x0040, 0x55f2, 0x2061, 0x0100, 0x2069,
-       0x0140, 0x6904, 0xa194, 0x4000, 0x0040, 0x55f8, 0x6803, 0x1000,
-       0x6803, 0x0000, 0x037e, 0x2019, 0x0001, 0x1078, 0x5760, 0x037f,
-       0x713c, 0x2160, 0x1078, 0x75bc, 0x2009, 0x004a, 0x1078, 0x5c21,
-       0x0078, 0x55f2, 0x027f, 0x017f, 0x0e7f, 0x0d7f, 0x0c7f, 0x007c,
-       0x7144, 0xa192, 0x0002, 0x00c8, 0x55e2, 0x8108, 0x7146, 0x1078,
-       0x45e8, 0x0078, 0x55f2, 0x0e7e, 0x0d7e, 0x0c7e, 0x067e, 0x057e,
-       0x047e, 0x007e, 0x127e, 0x2091, 0x8000, 0x6018, 0x2068, 0x6ca0,
-       0x2071, 0x7836, 0x7018, 0x2068, 0x8dff, 0x0040, 0x562f, 0x68a0,
-       0xa406, 0x0040, 0x561f, 0x6854, 0x2068, 0x0078, 0x5614, 0x6010,
-       0x2060, 0x643c, 0x6540, 0x6644, 0xa6b4, 0x000f, 0x2d60, 0x1078,
-       0x38f1, 0x0040, 0x562f, 0x1078, 0x58fa, 0xa085, 0x0001, 0x127f,
+       0x6086, 0x7808, 0x6082, 0x7014, 0x608a, 0x7010, 0x608e, 0x700c,
+       0x60c6, 0x7008, 0x60ca, 0x686c, 0x60ce, 0x60ab, 0x0036, 0x60af,
+       0x95d5, 0x60d7, 0x0000, 0xa582, 0x0080, 0x0048, 0x5672, 0x6a00,
+       0xd2f4, 0x0040, 0x5670, 0x6a14, 0xa294, 0x00ff, 0x0078, 0x5672,
+       0x2011, 0x0000, 0x629e, 0x6017, 0x0016, 0x0078, 0x55d9, 0x7a18,
+       0xa280, 0x0023, 0x2014, 0x8210, 0xa294, 0x00ff, 0x2202, 0x8217,
+       0x007c, 0x0d7e, 0x2069, 0x7936, 0x6843, 0x0001, 0x0d7f, 0x007c,
+       0x20e1, 0x9080, 0x60a3, 0x0056, 0x60a7, 0x9575, 0x1078, 0x5693,
+       0x1078, 0x46fb, 0x007c, 0x007e, 0x6014, 0xa084, 0x0004, 0xa085,
+       0x0009, 0x6016, 0x007f, 0x007c, 0x007e, 0x0c7e, 0x2061, 0x0100,
+       0x6014, 0xa084, 0x0004, 0xa085, 0x0008, 0x6016, 0x0c7f, 0x007f,
+       0x007c, 0x0c7e, 0x0d7e, 0x017e, 0x027e, 0x1078, 0x4706, 0x2061,
+       0x0100, 0x2069, 0x0140, 0x6904, 0xa194, 0x4000, 0x0040, 0x56e6,
+       0x1078, 0x569c, 0x6803, 0x1000, 0x6803, 0x0000, 0x0c7e, 0x2061,
+       0x7936, 0x6128, 0xa192, 0x0002, 0x00c8, 0x56d3, 0x8108, 0x612a,
+       0x6124, 0x0c7f, 0x81ff, 0x0040, 0x56e1, 0x1078, 0x46fb, 0x1078,
+       0x5693, 0x0078, 0x56e1, 0x6124, 0xa1e5, 0x0000, 0x0040, 0x56de,
+       0x1078, 0x76c7, 0x2009, 0x0014, 0x1078, 0x5d41, 0x0c7f, 0x0078,
+       0x56e1, 0x027f, 0x017f, 0x0d7f, 0x0c7f, 0x007c, 0x1078, 0x3591,
+       0x0078, 0x56e1, 0x0c7e, 0x0d7e, 0x0e7e, 0x017e, 0x027e, 0x1078,
+       0x4714, 0x2071, 0x7936, 0x713c, 0x81ff, 0x0040, 0x5714, 0x2061,
+       0x0100, 0x2069, 0x0140, 0x6904, 0xa194, 0x4000, 0x0040, 0x571a,
+       0x6803, 0x1000, 0x6803, 0x0000, 0x037e, 0x2019, 0x0001, 0x1078,
+       0x5880, 0x037f, 0x713c, 0x2160, 0x1078, 0x76c7, 0x2009, 0x004a,
+       0x1078, 0x5d41, 0x0078, 0x5714, 0x027f, 0x017f, 0x0e7f, 0x0d7f,
+       0x0c7f, 0x007c, 0x7144, 0xa192, 0x0002, 0x00c8, 0x5704, 0x8108,
+       0x7146, 0x1078, 0x470b, 0x0078, 0x5714, 0x0e7e, 0x0d7e, 0x0c7e,
+       0x067e, 0x057e, 0x047e, 0x007e, 0x127e, 0x2091, 0x8000, 0x6018,
+       0x2068, 0x6ca0, 0x2071, 0x7936, 0x7018, 0x2068, 0x8dff, 0x0040,
+       0x574f, 0x68a0, 0xa406, 0x0040, 0x5741, 0x6854, 0x2068, 0x0078,
+       0x5736, 0x6010, 0x2060, 0x643c, 0x6540, 0x6e48, 0x2d60, 0x1078,
+       0x3991, 0x0040, 0x574f, 0x1078, 0x5a1a, 0xa085, 0x0001, 0x127f,
        0x007f, 0x047f, 0x057f, 0x067f, 0x0c7f, 0x0d7f, 0x0e7f, 0x007c,
-       0x157e, 0x147e, 0x20a1, 0x020b, 0x1078, 0x4fd4, 0x20a3, 0x0f00,
+       0x157e, 0x147e, 0x20a1, 0x020b, 0x1078, 0x50f8, 0x20a3, 0x0f00,
        0x20a3, 0x0000, 0x20a3, 0x0000, 0x7808, 0x20a2, 0x60c3, 0x0008,
-       0x1078, 0x5566, 0x147f, 0x157f, 0x007c, 0x157e, 0x147e, 0x20a1,
-       0x020b, 0x1078, 0x504b, 0x20a3, 0x0200, 0x20a3, 0x0000, 0x20a9,
-       0x0006, 0x2011, 0x7640, 0x2019, 0x7641, 0x23a6, 0x22a6, 0xa398,
-       0x0002, 0xa290, 0x0002, 0x00f0, 0x565d, 0x20a3, 0x0000, 0x20a3,
-       0x0000, 0x60c3, 0x001c, 0x1078, 0x5566, 0x147f, 0x157f, 0x007c,
-       0x157e, 0x147e, 0x017e, 0x027e, 0x20a1, 0x020b, 0x1078, 0x502b,
-       0x1078, 0x5042, 0x7810, 0x007e, 0xa080, 0x0015, 0x2098, 0x7808,
+       0x1078, 0x5688, 0x147f, 0x157f, 0x007c, 0x157e, 0x147e, 0x20a1,
+       0x020b, 0x1078, 0x516f, 0x20a3, 0x0200, 0x20a3, 0x0000, 0x20a9,
+       0x0006, 0x2011, 0x7740, 0x2019, 0x7741, 0x23a6, 0x22a6, 0xa398,
+       0x0002, 0xa290, 0x0002, 0x00f0, 0x577d, 0x20a3, 0x0000, 0x20a3,
+       0x0000, 0x60c3, 0x001c, 0x1078, 0x5688, 0x147f, 0x157f, 0x007c,
+       0x157e, 0x147e, 0x017e, 0x027e, 0x20a1, 0x020b, 0x1078, 0x514f,
+       0x1078, 0x5166, 0x7810, 0x007e, 0xa080, 0x0015, 0x2098, 0x7808,
        0xa088, 0x0002, 0x21a8, 0x53a6, 0xa080, 0x0004, 0x8003, 0x60c2,
-       0x007f, 0xa080, 0x0001, 0x2004, 0x7812, 0x1078, 0x5566, 0x027f,
+       0x007f, 0xa080, 0x0001, 0x2004, 0x7812, 0x1078, 0x5688, 0x027f,
        0x017f, 0x147f, 0x157f, 0x007c, 0x157e, 0x147e, 0x20a1, 0x020b,
-       0x1078, 0x4fd4, 0x20a3, 0x6200, 0x20a3, 0x0000, 0x20a3, 0x0000,
-       0x7808, 0x20a2, 0x60c3, 0x0008, 0x1078, 0x5566, 0x147f, 0x157f,
+       0x1078, 0x50f8, 0x20a3, 0x6200, 0x20a3, 0x0000, 0x20a3, 0x0000,
+       0x7808, 0x20a2, 0x60c3, 0x0008, 0x1078, 0x5688, 0x147f, 0x157f,
        0x007c, 0x0e7e, 0x0c7e, 0x007e, 0x127e, 0x2091, 0x8000, 0x2071,
-       0x7836, 0x700c, 0x2060, 0x8cff, 0x0040, 0x56c5, 0x1078, 0x6ac3,
-       0x00c0, 0x56bc, 0x1078, 0x5e4d, 0x600c, 0x007e, 0x1078, 0x5bfa,
-       0x1078, 0x58fa, 0x0c7f, 0x0078, 0x56b3, 0x700f, 0x0000, 0x700b,
+       0x7936, 0x700c, 0x2060, 0x8cff, 0x0040, 0x57e5, 0x1078, 0x6be3,
+       0x00c0, 0x57dc, 0x1078, 0x5f6d, 0x600c, 0x007e, 0x1078, 0x5d1a,
+       0x1078, 0x5a1a, 0x0c7f, 0x0078, 0x57d3, 0x700f, 0x0000, 0x700b,
        0x0000, 0x127f, 0x007f, 0x0c7f, 0x0e7f, 0x007c, 0x127e, 0x157e,
        0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x027e, 0x017e, 0x007e, 0x2091,
-       0x8000, 0x2069, 0x0100, 0x2079, 0x0140, 0x2071, 0x7836, 0x7024,
-       0x2060, 0x8cff, 0x0040, 0x571e, 0x1078, 0x557a, 0x68c3, 0x0000,
-       0x1078, 0x45e3, 0x2009, 0x0013, 0x1078, 0x5c21, 0x20a9, 0x01f4,
-       0x6824, 0xd094, 0x0040, 0x5701, 0x6827, 0x0004, 0x7804, 0xa084,
-       0x4000, 0x0040, 0x5713, 0x7803, 0x1000, 0x7803, 0x0000, 0x0078,
-       0x5713, 0xd084, 0x0040, 0x5708, 0x6827, 0x0001, 0x0078, 0x570a,
-       0x00f0, 0x56f0, 0x7804, 0xa084, 0x1000, 0x0040, 0x5713, 0x7803,
+       0x8000, 0x2069, 0x0100, 0x2079, 0x0140, 0x2071, 0x7936, 0x7024,
+       0x2060, 0x8cff, 0x0040, 0x583e, 0x1078, 0x569c, 0x68c3, 0x0000,
+       0x1078, 0x4706, 0x2009, 0x0013, 0x1078, 0x5d41, 0x20a9, 0x01f4,
+       0x6824, 0xd094, 0x0040, 0x5821, 0x6827, 0x0004, 0x7804, 0xa084,
+       0x4000, 0x0040, 0x5833, 0x7803, 0x1000, 0x7803, 0x0000, 0x0078,
+       0x5833, 0xd084, 0x0040, 0x5828, 0x6827, 0x0001, 0x0078, 0x582a,
+       0x00f0, 0x5810, 0x7804, 0xa084, 0x1000, 0x0040, 0x5833, 0x7803,
        0x0100, 0x7803, 0x0000, 0x6824, 0x007f, 0x017f, 0x027f, 0x0c7f,
-       0x0d7f, 0x0e7f, 0x0f7f, 0x157f, 0x127f, 0x007c, 0x2001, 0x7600,
-       0x2004, 0xa096, 0x0001, 0x0040, 0x5756, 0xa096, 0x0004, 0x0040,
-       0x5756, 0x6817, 0x0008, 0x68c3, 0x0000, 0x2011, 0x353a, 0x1078,
-       0x4566, 0x20a9, 0x01f4, 0x6824, 0xd094, 0x0040, 0x5744, 0x6827,
-       0x0004, 0x7804, 0xa084, 0x4000, 0x0040, 0x5756, 0x7803, 0x1000,
-       0x7803, 0x0000, 0x0078, 0x5756, 0xd084, 0x0040, 0x574b, 0x6827,
-       0x0001, 0x0078, 0x574d, 0x00f0, 0x5733, 0x7804, 0xa084, 0x1000,
-       0x0040, 0x5756, 0x7803, 0x0100, 0x7803, 0x0000, 0x007f, 0x017f,
+       0x0d7f, 0x0e7f, 0x0f7f, 0x157f, 0x127f, 0x007c, 0x2001, 0x7700,
+       0x2004, 0xa096, 0x0001, 0x0040, 0x5876, 0xa096, 0x0004, 0x0040,
+       0x5876, 0x6817, 0x0008, 0x68c3, 0x0000, 0x2011, 0x3558, 0x1078,
+       0x4689, 0x20a9, 0x01f4, 0x6824, 0xd094, 0x0040, 0x5864, 0x6827,
+       0x0004, 0x7804, 0xa084, 0x4000, 0x0040, 0x5876, 0x7803, 0x1000,
+       0x7803, 0x0000, 0x0078, 0x5876, 0xd084, 0x0040, 0x586b, 0x6827,
+       0x0001, 0x0078, 0x586d, 0x00f0, 0x5853, 0x7804, 0xa084, 0x1000,
+       0x0040, 0x5876, 0x7803, 0x0100, 0x7803, 0x0000, 0x007f, 0x017f,
        0x027f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x157f, 0x127f, 0x007c,
        0x127e, 0x157e, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x027e, 0x017e,
        0x007e, 0x2091, 0x8000, 0x2069, 0x0100, 0x2079, 0x0140, 0x2071,
-       0x7836, 0x703c, 0x2060, 0x8cff, 0x0040, 0x57ae, 0x6817, 0x0010,
-       0x68cb, 0x0000, 0x68c7, 0x0000, 0x1078, 0x45f1, 0x1078, 0x1c13,
-       0xa39d, 0x0000, 0x00c0, 0x5788, 0x2009, 0x0049, 0x1078, 0x5c21,
-       0x20a9, 0x03e8, 0x6824, 0xd094, 0x0040, 0x579b, 0x6827, 0x0004,
-       0x7804, 0xa084, 0x4000, 0x0040, 0x57ad, 0x7803, 0x1000, 0x7803,
-       0x0000, 0x0078, 0x57ad, 0xd094, 0x0040, 0x57a2, 0x6827, 0x0002,
-       0x0078, 0x57a4, 0x00f0, 0x578a, 0x7804, 0xa084, 0x1000, 0x0040,
-       0x57ad, 0x7803, 0x0100, 0x7803, 0x0000, 0x6824, 0x007f, 0x017f,
+       0x7936, 0x703c, 0x2060, 0x8cff, 0x0040, 0x58ce, 0x6817, 0x0010,
+       0x68cb, 0x0000, 0x68c7, 0x0000, 0x1078, 0x4714, 0x1078, 0x1c13,
+       0xa39d, 0x0000, 0x00c0, 0x58a8, 0x2009, 0x0049, 0x1078, 0x5d41,
+       0x20a9, 0x03e8, 0x6824, 0xd094, 0x0040, 0x58bb, 0x6827, 0x0004,
+       0x7804, 0xa084, 0x4000, 0x0040, 0x58cd, 0x7803, 0x1000, 0x7803,
+       0x0000, 0x0078, 0x58cd, 0xd094, 0x0040, 0x58c2, 0x6827, 0x0002,
+       0x0078, 0x58c4, 0x00f0, 0x58aa, 0x7804, 0xa084, 0x1000, 0x0040,
+       0x58cd, 0x7803, 0x0100, 0x7803, 0x0000, 0x6824, 0x007f, 0x017f,
        0x027f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x157f, 0x127f, 0x007c,
-       0x0d7e, 0x127e, 0x2091, 0x8000, 0x2069, 0x7836, 0x6a06, 0x127f,
-       0x0d7f, 0x007c, 0x0d7e, 0x127e, 0x2091, 0x8000, 0x2069, 0x7836,
+       0x0d7e, 0x127e, 0x2091, 0x8000, 0x2069, 0x7936, 0x6a06, 0x127f,
+       0x0d7f, 0x007c, 0x0d7e, 0x127e, 0x2091, 0x8000, 0x2069, 0x7936,
        0x6a32, 0x127f, 0x0d7f, 0x007c, 0x0f7e, 0x0e7e, 0x0c7e, 0x067e,
-       0x007e, 0x127e, 0x2071, 0x7836, 0x7614, 0x2660, 0x2678, 0x2091,
-       0x8000, 0x8cff, 0x0040, 0x580c, 0x601c, 0xa206, 0x00c0, 0x5807,
-       0x7014, 0xac36, 0x00c0, 0x57e6, 0x660c, 0x7616, 0x7010, 0xac36,
-       0x00c0, 0x57f4, 0x2c00, 0xaf36, 0x0040, 0x57f2, 0x2f00, 0x7012,
-       0x0078, 0x57f4, 0x7013, 0x0000, 0x660c, 0x067e, 0x2c00, 0xaf06,
-       0x0040, 0x57fd, 0x7e0e, 0x0078, 0x57fe, 0x2678, 0x600f, 0x0000,
-       0x1078, 0x6a96, 0x1078, 0x58fa, 0x0c7f, 0x0078, 0x57d9, 0x2c78,
-       0x600c, 0x2060, 0x0078, 0x57d9, 0x127f, 0x007f, 0x067f, 0x0c7f,
+       0x007e, 0x127e, 0x2071, 0x7936, 0x7614, 0x2660, 0x2678, 0x2091,
+       0x8000, 0x8cff, 0x0040, 0x592c, 0x601c, 0xa206, 0x00c0, 0x5927,
+       0x7014, 0xac36, 0x00c0, 0x5906, 0x660c, 0x7616, 0x7010, 0xac36,
+       0x00c0, 0x5914, 0x2c00, 0xaf36, 0x0040, 0x5912, 0x2f00, 0x7012,
+       0x0078, 0x5914, 0x7013, 0x0000, 0x660c, 0x067e, 0x2c00, 0xaf06,
+       0x0040, 0x591d, 0x7e0e, 0x0078, 0x591e, 0x2678, 0x600f, 0x0000,
+       0x1078, 0x6bb6, 0x1078, 0x5a1a, 0x0c7f, 0x0078, 0x58f9, 0x2c78,
+       0x600c, 0x2060, 0x0078, 0x58f9, 0x127f, 0x007f, 0x067f, 0x0c7f,
        0x0e7f, 0x0f7f, 0x007c, 0x157e, 0x147e, 0x20a1, 0x020b, 0x1078,
-       0x520d, 0x7810, 0x20a2, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2,
-       0x20a3, 0x4000, 0x0078, 0x5855, 0x157e, 0x147e, 0x20a1, 0x020b,
-       0x1078, 0x520d, 0x7810, 0x20a2, 0xa006, 0x20a2, 0x20a2, 0x20a2,
-       0x20a2, 0x20a3, 0x2000, 0x0078, 0x5855, 0x157e, 0x147e, 0x20a1,
-       0x020b, 0x1078, 0x520d, 0x7810, 0x20a2, 0xa006, 0x20a2, 0x20a2,
-       0x20a2, 0x20a2, 0x20a3, 0x0400, 0x0078, 0x5855, 0x157e, 0x147e,
-       0x20a1, 0x020b, 0x1078, 0x520d, 0x7810, 0x20a2, 0xa006, 0x20a2,
-       0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x0200, 0x1078, 0x5905, 0x60c3,
-       0x0020, 0x1078, 0x5566, 0x147f, 0x157f, 0x007c, 0x127e, 0x0c7e,
-       0x2091, 0x8000, 0x2061, 0x0100, 0x6120, 0xd1b4, 0x00c0, 0x586d,
-       0xd1bc, 0x00c0, 0x58b7, 0x0078, 0x58f7, 0x2009, 0x017f, 0x200b,
+       0x532f, 0x7810, 0x20a2, 0xa006, 0x20a2, 0x20a2, 0x20a2, 0x20a2,
+       0x20a3, 0x4000, 0x0078, 0x5975, 0x157e, 0x147e, 0x20a1, 0x020b,
+       0x1078, 0x532f, 0x7810, 0x20a2, 0xa006, 0x20a2, 0x20a2, 0x20a2,
+       0x20a2, 0x20a3, 0x2000, 0x0078, 0x5975, 0x157e, 0x147e, 0x20a1,
+       0x020b, 0x1078, 0x532f, 0x7810, 0x20a2, 0xa006, 0x20a2, 0x20a2,
+       0x20a2, 0x20a2, 0x20a3, 0x0400, 0x0078, 0x5975, 0x157e, 0x147e,
+       0x20a1, 0x020b, 0x1078, 0x532f, 0x7810, 0x20a2, 0xa006, 0x20a2,
+       0x20a2, 0x20a2, 0x20a2, 0x20a3, 0x0200, 0x1078, 0x5a25, 0x60c3,
+       0x0020, 0x1078, 0x5688, 0x147f, 0x157f, 0x007c, 0x127e, 0x0c7e,
+       0x2091, 0x8000, 0x2061, 0x0100, 0x6120, 0xd1b4, 0x00c0, 0x598d,
+       0xd1bc, 0x00c0, 0x59d7, 0x0078, 0x5a17, 0x2009, 0x017f, 0x200b,
        0x00a1, 0x157e, 0x007e, 0x0d7e, 0x2069, 0x0140, 0x20a9, 0x001e,
-       0x2009, 0x0169, 0x6804, 0xa084, 0x4000, 0x0040, 0x58ae, 0x6020,
-       0xd0b4, 0x0040, 0x58ae, 0x6024, 0xd094, 0x00c0, 0x58ae, 0x2104,
-       0xa084, 0x000f, 0xa086, 0x0004, 0x00c0, 0x58ae, 0x00f0, 0x587a,
+       0x2009, 0x0169, 0x6804, 0xa084, 0x4000, 0x0040, 0x59ce, 0x6020,
+       0xd0b4, 0x0040, 0x59ce, 0x6024, 0xd094, 0x00c0, 0x59ce, 0x2104,
+       0xa084, 0x000f, 0xa086, 0x0004, 0x00c0, 0x59ce, 0x00f0, 0x599a,
        0x027e, 0x6198, 0xa18c, 0x00ff, 0x8107, 0x6130, 0xa18c, 0x00ff,
        0xa10d, 0x6088, 0x628c, 0x618e, 0x608b, 0xbc91, 0x6043, 0x0001,
-       0x6043, 0x0000, 0x608a, 0x628e, 0x6024, 0xd094, 0x00c0, 0x58ad,
-       0x6a04, 0xa294, 0x4000, 0x00c0, 0x58a4, 0x027f, 0x0d7f, 0x007f,
-       0x157f, 0x2009, 0x017f, 0x200b, 0x0000, 0x0078, 0x58f7, 0x2009,
+       0x6043, 0x0000, 0x608a, 0x628e, 0x6024, 0xd094, 0x00c0, 0x59cd,
+       0x6a04, 0xa294, 0x4000, 0x00c0, 0x59c4, 0x027f, 0x0d7f, 0x007f,
+       0x157f, 0x2009, 0x017f, 0x200b, 0x0000, 0x0078, 0x5a17, 0x2009,
        0x017f, 0x200b, 0x00a1, 0x157e, 0x007e, 0x0d7e, 0x2069, 0x0140,
        0x20a9, 0x001e, 0x2009, 0x0169, 0x6804, 0xa084, 0x4000, 0x0040,
-       0x58f0, 0x6020, 0xd0bc, 0x0040, 0x58f0, 0x2104, 0xa084, 0x000f,
-       0xa086, 0x0004, 0x00c0, 0x58f0, 0x00f0, 0x58c4, 0x027e, 0x6164,
+       0x5a10, 0x6020, 0xd0bc, 0x0040, 0x5a10, 0x2104, 0xa084, 0x000f,
+       0xa086, 0x0004, 0x00c0, 0x5a10, 0x00f0, 0x59e4, 0x027e, 0x6164,
        0xa18c, 0x00ff, 0x8107, 0x6130, 0xa18c, 0x00ff, 0xa10d, 0x6088,
        0x628c, 0x608b, 0xbc91, 0x618e, 0x6043, 0x0001, 0x6043, 0x0000,
-       0x608a, 0x628e, 0x6a04, 0xa294, 0x4000, 0x00c0, 0x58ea, 0x027f,
+       0x608a, 0x628e, 0x6a04, 0xa294, 0x4000, 0x00c0, 0x5a0a, 0x027f,
        0x0d7f, 0x007f, 0x157f, 0x2009, 0x017f, 0x200b, 0x0000, 0x0c7f,
-       0x127f, 0x007c, 0x0e7e, 0x2071, 0x7836, 0x7020, 0xa005, 0x0040,
-       0x5903, 0x8001, 0x7022, 0x0e7f, 0x007c, 0x20a9, 0x0008, 0x20a2,
-       0x00f0, 0x5907, 0x20a2, 0x20a2, 0x007c, 0x0f7e, 0x0e7e, 0x0d7e,
+       0x127f, 0x007c, 0x0e7e, 0x2071, 0x7936, 0x7020, 0xa005, 0x0040,
+       0x5a23, 0x8001, 0x7022, 0x0e7f, 0x007c, 0x20a9, 0x0008, 0x20a2,
+       0x00f0, 0x5a27, 0x20a2, 0x20a2, 0x007c, 0x0f7e, 0x0e7e, 0x0d7e,
        0x0c7e, 0x077e, 0x067e, 0x007e, 0x127e, 0x2091, 0x8000, 0x2071,
-       0x7836, 0x7614, 0x2660, 0x2678, 0x2039, 0x0001, 0x87ff, 0x0040,
-       0x599d, 0x8cff, 0x0040, 0x599d, 0x601c, 0xa086, 0x0006, 0x00c0,
-       0x5998, 0x88ff, 0x0040, 0x5934, 0x2800, 0xac06, 0x00c0, 0x5998,
-       0x2039, 0x0000, 0x0078, 0x5938, 0x6018, 0xa206, 0x00c0, 0x5998,
-       0x7024, 0xac06, 0x00c0, 0x5966, 0x2069, 0x0100, 0x68c0, 0xa005,
-       0x0040, 0x5961, 0x6817, 0x0008, 0x68c3, 0x0000, 0x1078, 0x5a2a,
+       0x7936, 0x7614, 0x2660, 0x2678, 0x2039, 0x0001, 0x87ff, 0x0040,
+       0x5abd, 0x8cff, 0x0040, 0x5abd, 0x601c, 0xa086, 0x0006, 0x00c0,
+       0x5ab8, 0x88ff, 0x0040, 0x5a54, 0x2800, 0xac06, 0x00c0, 0x5ab8,
+       0x2039, 0x0000, 0x0078, 0x5a58, 0x6018, 0xa206, 0x00c0, 0x5ab8,
+       0x7024, 0xac06, 0x00c0, 0x5a86, 0x2069, 0x0100, 0x68c0, 0xa005,
+       0x0040, 0x5a81, 0x6817, 0x0008, 0x68c3, 0x0000, 0x1078, 0x5b4a,
        0x7027, 0x0000, 0x037e, 0x2069, 0x0140, 0x6b04, 0xa384, 0x1000,
-       0x0040, 0x5956, 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100,
-       0x6824, 0xd084, 0x0040, 0x595e, 0x6827, 0x0001, 0x037f, 0x0078,
-       0x5966, 0x6003, 0x0009, 0x630a, 0x0078, 0x5998, 0x7014, 0xac36,
-       0x00c0, 0x596c, 0x660c, 0x7616, 0x7010, 0xac36, 0x00c0, 0x597a,
-       0x2c00, 0xaf36, 0x0040, 0x5978, 0x2f00, 0x7012, 0x0078, 0x597a,
-       0x7013, 0x0000, 0x660c, 0x067e, 0x2c00, 0xaf06, 0x0040, 0x5983,
-       0x7e0e, 0x0078, 0x5984, 0x2678, 0x600f, 0x0000, 0x6010, 0x2068,
-       0x1078, 0x6938, 0x0040, 0x598e, 0x1078, 0x74f2, 0x1078, 0x6a96,
-       0x1078, 0x58fa, 0x88ff, 0x00c0, 0x59a7, 0x0c7f, 0x0078, 0x591e,
-       0x2c78, 0x600c, 0x2060, 0x0078, 0x591e, 0xa006, 0x127f, 0x007f,
+       0x0040, 0x5a76, 0x6803, 0x0100, 0x6803, 0x0000, 0x2069, 0x0100,
+       0x6824, 0xd084, 0x0040, 0x5a7e, 0x6827, 0x0001, 0x037f, 0x0078,
+       0x5a86, 0x6003, 0x0009, 0x630a, 0x0078, 0x5ab8, 0x7014, 0xac36,
+       0x00c0, 0x5a8c, 0x660c, 0x7616, 0x7010, 0xac36, 0x00c0, 0x5a9a,
+       0x2c00, 0xaf36, 0x0040, 0x5a98, 0x2f00, 0x7012, 0x0078, 0x5a9a,
+       0x7013, 0x0000, 0x660c, 0x067e, 0x2c00, 0xaf06, 0x0040, 0x5aa3,
+       0x7e0e, 0x0078, 0x5aa4, 0x2678, 0x600f, 0x0000, 0x6010, 0x2068,
+       0x1078, 0x6a58, 0x0040, 0x5aae, 0x1078, 0x75fd, 0x1078, 0x6bb6,
+       0x1078, 0x5a1a, 0x88ff, 0x00c0, 0x5ac7, 0x0c7f, 0x0078, 0x5a3e,
+       0x2c78, 0x600c, 0x2060, 0x0078, 0x5a3e, 0xa006, 0x127f, 0x007f,
        0x067f, 0x077f, 0x0c7f, 0x0d7f, 0x0e7f, 0x0f7f, 0x007c, 0x6017,
-       0x0000, 0x0c7f, 0xa8c5, 0x0001, 0x0078, 0x599e, 0x0f7e, 0x0e7e,
+       0x0000, 0x0c7f, 0xa8c5, 0x0001, 0x0078, 0x5abe, 0x0f7e, 0x0e7e,
        0x0d7e, 0x0c7e, 0x067e, 0x027e, 0x007e, 0x127e, 0x2091, 0x8000,
-       0x2071, 0x7836, 0x7638, 0x2660, 0x2678, 0x8cff, 0x0040, 0x5a19,
-       0x601c, 0xa086, 0x0006, 0x00c0, 0x5a14, 0x88ff, 0x0040, 0x59ce,
-       0x2800, 0xac06, 0x00c0, 0x5a14, 0x0078, 0x59d2, 0x6018, 0xa206,
-       0x00c0, 0x5a14, 0x703c, 0xac06, 0x00c0, 0x59e4, 0x037e, 0x2019,
-       0x0001, 0x1078, 0x5760, 0x7033, 0x0000, 0x703f, 0x0000, 0x7043,
-       0x0000, 0x7047, 0x0000, 0x037f, 0x7038, 0xac36, 0x00c0, 0x59ea,
-       0x660c, 0x763a, 0x7034, 0xac36, 0x00c0, 0x59f8, 0x2c00, 0xaf36,
-       0x0040, 0x59f6, 0x2f00, 0x7036, 0x0078, 0x59f8, 0x7037, 0x0000,
-       0x660c, 0x067e, 0x2c00, 0xaf06, 0x0040, 0x5a01, 0x7e0e, 0x0078,
-       0x5a02, 0x2678, 0x600f, 0x0000, 0x6010, 0x2068, 0x1078, 0x6938,
-       0x0040, 0x5a0c, 0x1078, 0x74f2, 0x1078, 0x6a96, 0x88ff, 0x00c0,
-       0x5a23, 0x0c7f, 0x0078, 0x59bd, 0x2c78, 0x600c, 0x2060, 0x0078,
-       0x59bd, 0xa006, 0x127f, 0x007f, 0x027f, 0x067f, 0x0c7f, 0x0d7f,
+       0x2071, 0x7936, 0x7638, 0x2660, 0x2678, 0x8cff, 0x0040, 0x5b39,
+       0x601c, 0xa086, 0x0006, 0x00c0, 0x5b34, 0x88ff, 0x0040, 0x5aee,
+       0x2800, 0xac06, 0x00c0, 0x5b34, 0x0078, 0x5af2, 0x6018, 0xa206,
+       0x00c0, 0x5b34, 0x703c, 0xac06, 0x00c0, 0x5b04, 0x037e, 0x2019,
+       0x0001, 0x1078, 0x5880, 0x7033, 0x0000, 0x703f, 0x0000, 0x7043,
+       0x0000, 0x7047, 0x0000, 0x037f, 0x7038, 0xac36, 0x00c0, 0x5b0a,
+       0x660c, 0x763a, 0x7034, 0xac36, 0x00c0, 0x5b18, 0x2c00, 0xaf36,
+       0x0040, 0x5b16, 0x2f00, 0x7036, 0x0078, 0x5b18, 0x7037, 0x0000,
+       0x660c, 0x067e, 0x2c00, 0xaf06, 0x0040, 0x5b21, 0x7e0e, 0x0078,
+       0x5b22, 0x2678, 0x600f, 0x0000, 0x6010, 0x2068, 0x1078, 0x6a58,
+       0x0040, 0x5b2c, 0x1078, 0x75fd, 0x1078, 0x6bb6, 0x88ff, 0x00c0,
+       0x5b43, 0x0c7f, 0x0078, 0x5add, 0x2c78, 0x600c, 0x2060, 0x0078,
+       0x5add, 0xa006, 0x127f, 0x007f, 0x027f, 0x067f, 0x0c7f, 0x0d7f,
        0x0e7f, 0x0f7f, 0x007c, 0x6017, 0x0000, 0x0c7f, 0xa8c5, 0x0001,
-       0x0078, 0x5a1a, 0x0e7e, 0x2071, 0x7836, 0x2001, 0x7600, 0x2004,
-       0xa086, 0x0002, 0x00c0, 0x5a38, 0x7007, 0x0005, 0x0078, 0x5a3a,
+       0x0078, 0x5b3a, 0x0e7e, 0x2071, 0x7936, 0x2001, 0x7700, 0x2004,
+       0xa086, 0x0002, 0x00c0, 0x5b58, 0x7007, 0x0005, 0x0078, 0x5b5a,
        0x7007, 0x0000, 0x0e7f, 0x007c, 0x0f7e, 0x0e7e, 0x0c7e, 0x067e,
-       0x027e, 0x007e, 0x127e, 0x2091, 0x8000, 0x2071, 0x7836, 0x2c10,
-       0x7638, 0x2660, 0x2678, 0x8cff, 0x0040, 0x5a7a, 0x2200, 0xac06,
-       0x00c0, 0x5a75, 0x7038, 0xac36, 0x00c0, 0x5a58, 0x660c, 0x763a,
-       0x7034, 0xac36, 0x00c0, 0x5a66, 0x2c00, 0xaf36, 0x0040, 0x5a64,
-       0x2f00, 0x7036, 0x0078, 0x5a66, 0x7037, 0x0000, 0x660c, 0x2c00,
-       0xaf06, 0x0040, 0x5a6e, 0x7e0e, 0x0078, 0x5a6f, 0x2678, 0x600f,
-       0x0000, 0xa085, 0x0001, 0x0078, 0x5a7a, 0x2c78, 0x600c, 0x2060,
-       0x0078, 0x5a4b, 0x127f, 0x007f, 0x027f, 0x067f, 0x0c7f, 0x0e7f,
+       0x027e, 0x007e, 0x127e, 0x2091, 0x8000, 0x2071, 0x7936, 0x2c10,
+       0x7638, 0x2660, 0x2678, 0x8cff, 0x0040, 0x5b9a, 0x2200, 0xac06,
+       0x00c0, 0x5b95, 0x7038, 0xac36, 0x00c0, 0x5b78, 0x660c, 0x763a,
+       0x7034, 0xac36, 0x00c0, 0x5b86, 0x2c00, 0xaf36, 0x0040, 0x5b84,
+       0x2f00, 0x7036, 0x0078, 0x5b86, 0x7037, 0x0000, 0x660c, 0x2c00,
+       0xaf06, 0x0040, 0x5b8e, 0x7e0e, 0x0078, 0x5b8f, 0x2678, 0x600f,
+       0x0000, 0xa085, 0x0001, 0x0078, 0x5b9a, 0x2c78, 0x600c, 0x2060,
+       0x0078, 0x5b6b, 0x127f, 0x007f, 0x027f, 0x067f, 0x0c7f, 0x0e7f,
        0x0f7f, 0x007c, 0x0f7e, 0x0e7e, 0x0d7e, 0x0c7e, 0x067e, 0x007e,
-       0x127e, 0x2091, 0x8000, 0x2071, 0x7836, 0x760c, 0x2660, 0x2678,
-       0x8cff, 0x0040, 0x5b13, 0x6018, 0xa080, 0x0028, 0x2004, 0xa206,
-       0x00c0, 0x5b0e, 0x7024, 0xac06, 0x00c0, 0x5ac1, 0x2069, 0x0100,
-       0x68c0, 0xa005, 0x0040, 0x5ac1, 0x1078, 0x557a, 0x68c3, 0x0000,
-       0x1078, 0x5a2a, 0x7027, 0x0000, 0x037e, 0x2069, 0x0140, 0x6b04,
-       0xa384, 0x1000, 0x0040, 0x5ab8, 0x6803, 0x0100, 0x6803, 0x0000,
-       0x2069, 0x0100, 0x6824, 0xd084, 0x0040, 0x5ac0, 0x6827, 0x0001,
-       0x037f, 0x700c, 0xac36, 0x00c0, 0x5ac7, 0x660c, 0x760e, 0x7008,
-       0xac36, 0x00c0, 0x5ad5, 0x2c00, 0xaf36, 0x0040, 0x5ad3, 0x2f00,
-       0x700a, 0x0078, 0x5ad5, 0x700b, 0x0000, 0x660c, 0x067e, 0x2c00,
-       0xaf06, 0x0040, 0x5ade, 0x7e0e, 0x0078, 0x5adf, 0x2678, 0x600f,
-       0x0000, 0x1078, 0x6aaf, 0x00c0, 0x5ae9, 0x1078, 0x22d7, 0x0078,
-       0x5b05, 0x1078, 0x6ac3, 0x00c0, 0x5af1, 0x1078, 0x5e4d, 0x0078,
-       0x5b05, 0x6010, 0x2068, 0x1078, 0x6938, 0x0040, 0x5b05, 0x601c,
-       0xa086, 0x0003, 0x00c0, 0x5b1b, 0x6837, 0x0103, 0x6b4a, 0x6847,
-       0x0000, 0x1078, 0x3a72, 0x1078, 0x6a89, 0x6003, 0x0000, 0x1078,
-       0x6a96, 0x1078, 0x58fa, 0x0c7f, 0x0078, 0x5a90, 0x2c78, 0x600c,
-       0x2060, 0x0078, 0x5a90, 0x127f, 0x007f, 0x067f, 0x0c7f, 0x0d7f,
-       0x0e7f, 0x0f7f, 0x007c, 0x601c, 0xa086, 0x0006, 0x00c0, 0x5afc,
-       0x1078, 0x74f2, 0x0078, 0x5b05, 0x037e, 0x157e, 0x137e, 0x147e,
+       0x127e, 0x2091, 0x8000, 0x2071, 0x7936, 0x760c, 0x2660, 0x2678,
+       0x8cff, 0x0040, 0x5c33, 0x6018, 0xa080, 0x0028, 0x2004, 0xa206,
+       0x00c0, 0x5c2e, 0x7024, 0xac06, 0x00c0, 0x5be1, 0x2069, 0x0100,
+       0x68c0, 0xa005, 0x0040, 0x5be1, 0x1078, 0x569c, 0x68c3, 0x0000,
+       0x1078, 0x5b4a, 0x7027, 0x0000, 0x037e, 0x2069, 0x0140, 0x6b04,
+       0xa384, 0x1000, 0x0040, 0x5bd8, 0x6803, 0x0100, 0x6803, 0x0000,
+       0x2069, 0x0100, 0x6824, 0xd084, 0x0040, 0x5be0, 0x6827, 0x0001,
+       0x037f, 0x700c, 0xac36, 0x00c0, 0x5be7, 0x660c, 0x760e, 0x7008,
+       0xac36, 0x00c0, 0x5bf5, 0x2c00, 0xaf36, 0x0040, 0x5bf3, 0x2f00,
+       0x700a, 0x0078, 0x5bf5, 0x700b, 0x0000, 0x660c, 0x067e, 0x2c00,
+       0xaf06, 0x0040, 0x5bfe, 0x7e0e, 0x0078, 0x5bff, 0x2678, 0x600f,
+       0x0000, 0x1078, 0x6bcf, 0x00c0, 0x5c09, 0x1078, 0x22d7, 0x0078,
+       0x5c25, 0x1078, 0x6be3, 0x00c0, 0x5c11, 0x1078, 0x5f6d, 0x0078,
+       0x5c25, 0x6010, 0x2068, 0x1078, 0x6a58, 0x0040, 0x5c25, 0x601c,
+       0xa086, 0x0003, 0x00c0, 0x5c3b, 0x6837, 0x0103, 0x6b4a, 0x6847,
+       0x0000, 0x1078, 0x3b92, 0x1078, 0x6ba9, 0x6003, 0x0000, 0x1078,
+       0x6bb6, 0x1078, 0x5a1a, 0x0c7f, 0x0078, 0x5bb0, 0x2c78, 0x600c,
+       0x2060, 0x0078, 0x5bb0, 0x127f, 0x007f, 0x067f, 0x0c7f, 0x0d7f,
+       0x0e7f, 0x0f7f, 0x007c, 0x601c, 0xa086, 0x0006, 0x00c0, 0x5c1c,
+       0x1078, 0x75fd, 0x0078, 0x5c25, 0x037e, 0x157e, 0x137e, 0x147e,
        0x3908, 0xa006, 0xa190, 0x0020, 0x221c, 0xa39e, 0x2149, 0x00c0,
-       0x5b35, 0x8210, 0x8000, 0x0078, 0x5b2c, 0xa005, 0x0040, 0x5b3f,
+       0x5c55, 0x8210, 0x8000, 0x0078, 0x5c4c, 0xa005, 0x0040, 0x5c5f,
        0x20a9, 0x0020, 0x2198, 0xa110, 0x22a0, 0x22c8, 0x53a3, 0x147f,
        0x137f, 0x157f, 0x037f, 0x007c, 0x0d7e, 0x20a1, 0x020b, 0x1078,
-       0x504b, 0x20a3, 0x0200, 0x20a3, 0x0014, 0x60c3, 0x0014, 0x20a3,
+       0x516f, 0x20a3, 0x0200, 0x20a3, 0x0014, 0x60c3, 0x0014, 0x20a3,
        0x0000, 0x20a3, 0x0000, 0x20a3, 0x514c, 0x20a3, 0x4f47, 0x20a3,
        0x4943, 0x20a3, 0x2020, 0x20a3, 0x0004, 0x20a3, 0x7878, 0x20a3,
-       0x0000, 0x20a3, 0x0000, 0x1078, 0x5566, 0x0d7f, 0x007c, 0x20a1,
-       0x020b, 0x1078, 0x504b, 0x20a3, 0x0210, 0x20a3, 0x0018, 0x20a3,
+       0x0000, 0x20a3, 0x0000, 0x1078, 0x5688, 0x0d7f, 0x007c, 0x20a1,
+       0x020b, 0x1078, 0x516f, 0x20a3, 0x0210, 0x20a3, 0x0018, 0x20a3,
        0x0800, 0x7810, 0xa084, 0xff00, 0x20a2, 0x20a3, 0x0000, 0x20a3,
        0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x7810,
        0xa084, 0x00ff, 0x20a2, 0x20a3, 0x0000, 0x20a3, 0x0000, 0x60c3,
-       0x0018, 0x1078, 0x5566, 0x007c, 0x2061, 0x7d00, 0x2a70, 0x7060,
-       0x7046, 0x704b, 0x7d00, 0x007c, 0x0e7e, 0x127e, 0x2071, 0x7600,
-       0x2091, 0x8000, 0x7544, 0xa582, 0x0001, 0x0048, 0x5bc6, 0x7048,
-       0x2060, 0x6000, 0xa086, 0x0000, 0x0040, 0x5bb2, 0xace0, 0x0008,
-       0x7054, 0xac02, 0x00c8, 0x5bae, 0x0078, 0x5ba1, 0x2061, 0x7d00,
-       0x0078, 0x5ba1, 0x6003, 0x0008, 0x8529, 0x7546, 0xaca8, 0x0008,
-       0x7054, 0xa502, 0x00c8, 0x5bc2, 0x754a, 0xa085, 0x0001, 0x127f,
-       0x0e7f, 0x007c, 0x704b, 0x7d00, 0x0078, 0x5bbd, 0xa006, 0x0078,
-       0x5bbf, 0x0e7e, 0x2071, 0x7600, 0x7544, 0xa582, 0x0001, 0x0048,
-       0x5bf7, 0x7048, 0x2060, 0x6000, 0xa086, 0x0000, 0x0040, 0x5be4,
-       0xace0, 0x0008, 0x7054, 0xac02, 0x00c8, 0x5be0, 0x0078, 0x5bd3,
-       0x2061, 0x7d00, 0x0078, 0x5bd3, 0x6003, 0x0008, 0x8529, 0x7546,
-       0xaca8, 0x0008, 0x7054, 0xa502, 0x00c8, 0x5bf3, 0x754a, 0xa085,
-       0x0001, 0x0e7f, 0x007c, 0x704b, 0x7d00, 0x0078, 0x5bef, 0xa006,
-       0x0078, 0x5bf1, 0xac82, 0x7d00, 0x1048, 0x12cd, 0x2001, 0x7615,
+       0x0018, 0x1078, 0x5688, 0x007c, 0x2061, 0x7e00, 0x2a70, 0x7060,
+       0x7046, 0x704b, 0x7e00, 0x007c, 0x0e7e, 0x127e, 0x2071, 0x7700,
+       0x2091, 0x8000, 0x7544, 0xa582, 0x0001, 0x0048, 0x5ce6, 0x7048,
+       0x2060, 0x6000, 0xa086, 0x0000, 0x0040, 0x5cd2, 0xace0, 0x0008,
+       0x7054, 0xac02, 0x00c8, 0x5cce, 0x0078, 0x5cc1, 0x2061, 0x7e00,
+       0x0078, 0x5cc1, 0x6003, 0x0008, 0x8529, 0x7546, 0xaca8, 0x0008,
+       0x7054, 0xa502, 0x00c8, 0x5ce2, 0x754a, 0xa085, 0x0001, 0x127f,
+       0x0e7f, 0x007c, 0x704b, 0x7e00, 0x0078, 0x5cdd, 0xa006, 0x0078,
+       0x5cdf, 0x0e7e, 0x2071, 0x7700, 0x7544, 0xa582, 0x0001, 0x0048,
+       0x5d17, 0x7048, 0x2060, 0x6000, 0xa086, 0x0000, 0x0040, 0x5d04,
+       0xace0, 0x0008, 0x7054, 0xac02, 0x00c8, 0x5d00, 0x0078, 0x5cf3,
+       0x2061, 0x7e00, 0x0078, 0x5cf3, 0x6003, 0x0008, 0x8529, 0x7546,
+       0xaca8, 0x0008, 0x7054, 0xa502, 0x00c8, 0x5d13, 0x754a, 0xa085,
+       0x0001, 0x0e7f, 0x007c, 0x704b, 0x7e00, 0x0078, 0x5d0f, 0xa006,
+       0x0078, 0x5d11, 0xac82, 0x7e00, 0x1048, 0x12cd, 0x2001, 0x7715,
        0x2004, 0xac02, 0x10c8, 0x12cd, 0xa006, 0x6006, 0x600a, 0x600e,
        0x6012, 0x6016, 0x601a, 0x601f, 0x0000, 0x6003, 0x0000, 0x2061,
-       0x7600, 0x6044, 0x8000, 0x6046, 0xa086, 0x0001, 0x0040, 0x5c19,
-       0x007c, 0x127e, 0x2091, 0x8000, 0x1078, 0x4c72, 0x127f, 0x0078,
-       0x5c18, 0x601c, 0xa084, 0x000f, 0x0079, 0x5c26, 0x5c2f, 0x5c37,
-       0x5c53, 0x5c6f, 0x6b40, 0x6b5c, 0x6b78, 0x5c2f, 0x5c37, 0xa18e,
-       0x0047, 0x00c0, 0x5c36, 0xa016, 0x1078, 0x156a, 0x007c, 0x067e,
-       0x6000, 0xa0b2, 0x0010, 0x10c8, 0x12cd, 0x1079, 0x5c41, 0x067f,
-       0x007c, 0x5c51, 0x5d38, 0x5e68, 0x5c51, 0x5ebf, 0x5c51, 0x5c51,
-       0x5c51, 0x5ce7, 0x6178, 0x5c51, 0x5c51, 0x5c51, 0x5c51, 0x5c51,
-       0x5c51, 0x1078, 0x12cd, 0x067e, 0x6000, 0xa0b2, 0x0010, 0x10c8,
-       0x12cd, 0x1079, 0x5c5d, 0x067f, 0x007c, 0x5c6d, 0x5c6d, 0x5c6d,
-       0x5c6d, 0x5c6d, 0x5c6d, 0x5c6d, 0x5c6d, 0x65ec, 0x66b2, 0x5c6d,
-       0x6605, 0x665e, 0x6605, 0x665e, 0x5c6d, 0x1078, 0x12cd, 0x067e,
-       0x6000, 0xa0b2, 0x0010, 0x10c8, 0x12cd, 0x1079, 0x5c79, 0x067f,
-       0x007c, 0x5c89, 0x61b6, 0x625c, 0x631e, 0x6476, 0x5c89, 0x5c89,
-       0x5c89, 0x6194, 0x65a1, 0x65a5, 0x5c89, 0x5c89, 0x5c89, 0x5c89,
-       0x65cb, 0x1078, 0x12cd, 0x20a9, 0x000e, 0x2e98, 0x6010, 0x20a0,
+       0x7700, 0x6044, 0x8000, 0x6046, 0xa086, 0x0001, 0x0040, 0x5d39,
+       0x007c, 0x127e, 0x2091, 0x8000, 0x1078, 0x4d96, 0x127f, 0x0078,
+       0x5d38, 0x601c, 0xa084, 0x000f, 0x0079, 0x5d46, 0x5d4f, 0x5d57,
+       0x5d73, 0x5d8f, 0x6c60, 0x6c7c, 0x6c98, 0x5d4f, 0x5d57, 0xa18e,
+       0x0047, 0x00c0, 0x5d56, 0xa016, 0x1078, 0x156a, 0x007c, 0x067e,
+       0x6000, 0xa0b2, 0x0010, 0x10c8, 0x12cd, 0x1079, 0x5d61, 0x067f,
+       0x007c, 0x5d71, 0x5e58, 0x5f88, 0x5d71, 0x5fdf, 0x5d71, 0x5d71,
+       0x5d71, 0x5e07, 0x6298, 0x5d71, 0x5d71, 0x5d71, 0x5d71, 0x5d71,
+       0x5d71, 0x1078, 0x12cd, 0x067e, 0x6000, 0xa0b2, 0x0010, 0x10c8,
+       0x12cd, 0x1079, 0x5d7d, 0x067f, 0x007c, 0x5d8d, 0x5d8d, 0x5d8d,
+       0x5d8d, 0x5d8d, 0x5d8d, 0x5d8d, 0x5d8d, 0x670c, 0x67d2, 0x5d8d,
+       0x6725, 0x677e, 0x6725, 0x677e, 0x5d8d, 0x1078, 0x12cd, 0x067e,
+       0x6000, 0xa0b2, 0x0010, 0x10c8, 0x12cd, 0x1079, 0x5d99, 0x067f,
+       0x007c, 0x5da9, 0x62d6, 0x637c, 0x643e, 0x6596, 0x5da9, 0x5da9,
+       0x5da9, 0x62b4, 0x66c1, 0x66c5, 0x5da9, 0x5da9, 0x5da9, 0x5da9,
+       0x66eb, 0x1078, 0x12cd, 0x20a9, 0x000e, 0x2e98, 0x6010, 0x20a0,
        0x53a3, 0x20a9, 0x0006, 0x3310, 0x3420, 0x9398, 0x94a0, 0x3318,
        0x3428, 0x222e, 0x2326, 0xa290, 0x0002, 0xa5a8, 0x0002, 0xa398,
-       0x0002, 0xa4a0, 0x0002, 0x00f0, 0x5c99, 0x0e7e, 0x1078, 0x6938,
-       0x0040, 0x5cb0, 0x6010, 0x2070, 0x7007, 0x0000, 0x7037, 0x0103,
-       0x0e7f, 0x1078, 0x5bfa, 0x007c, 0x0d7e, 0x037e, 0x7330, 0xa386,
-       0x0200, 0x00c0, 0x5cc1, 0x6018, 0x2068, 0x6813, 0x00ff, 0x6817,
-       0xfffd, 0x6010, 0xa005, 0x0040, 0x5ccb, 0x2068, 0x6807, 0x0000,
-       0x6837, 0x0103, 0x6b32, 0x1078, 0x5bfa, 0x037f, 0x0d7f, 0x007c,
+       0x0002, 0xa4a0, 0x0002, 0x00f0, 0x5db9, 0x0e7e, 0x1078, 0x6a58,
+       0x0040, 0x5dd0, 0x6010, 0x2070, 0x7007, 0x0000, 0x7037, 0x0103,
+       0x0e7f, 0x1078, 0x5d1a, 0x007c, 0x0d7e, 0x037e, 0x7330, 0xa386,
+       0x0200, 0x00c0, 0x5de1, 0x6018, 0x2068, 0x6813, 0x00ff, 0x6817,
+       0xfffd, 0x6010, 0xa005, 0x0040, 0x5deb, 0x2068, 0x6807, 0x0000,
+       0x6837, 0x0103, 0x6b32, 0x1078, 0x5d1a, 0x037f, 0x0d7f, 0x007c,
        0x0d7e, 0x20a9, 0x000e, 0x2e98, 0x6010, 0x20a0, 0x53a3, 0xa1b6,
-       0x0015, 0x00c0, 0x5ce4, 0x6018, 0x2068, 0x7038, 0x680a, 0x703c,
-       0x680e, 0x6800, 0xc08d, 0x6802, 0x0d7f, 0x0078, 0x5ca5, 0x2100,
-       0xa1b2, 0x0030, 0x10c8, 0x12cd, 0x0079, 0x5cee, 0x5d20, 0x5d2c,
-       0x5d20, 0x5d20, 0x5d20, 0x5d20, 0x5d1e, 0x5d1e, 0x5d1e, 0x5d1e,
-       0x5d1e, 0x5d1e, 0x5d1e, 0x5d1e, 0x5d1e, 0x5d1e, 0x5d1e, 0x5d1e,
-       0x5d1e, 0x5d1e, 0x5d1e, 0x5d1e, 0x5d1e, 0x5d1e, 0x5d1e, 0x5d1e,
-       0x5d1e, 0x5d1e, 0x5d1e, 0x5d1e, 0x5d1e, 0x5d20, 0x5d1e, 0x5d20,
-       0x5d20, 0x5d1e, 0x5d1e, 0x5d1e, 0x5d1e, 0x5d1e, 0x5d20, 0x5d1e,
-       0x5d1e, 0x5d1e, 0x5d1e, 0x5d1e, 0x5d1e, 0x5d1e, 0x1078, 0x12cd,
-       0x6003, 0x0001, 0x6106, 0x1078, 0x486a, 0x127e, 0x2091, 0x8000,
-       0x1078, 0x4c72, 0x127f, 0x007c, 0x6003, 0x0001, 0x6106, 0x1078,
-       0x486a, 0x127e, 0x2091, 0x8000, 0x1078, 0x4c72, 0x127f, 0x007c,
+       0x0015, 0x00c0, 0x5e04, 0x6018, 0x2068, 0x7038, 0x680a, 0x703c,
+       0x680e, 0x6800, 0xc08d, 0x6802, 0x0d7f, 0x0078, 0x5dc5, 0x2100,
+       0xa1b2, 0x0030, 0x10c8, 0x12cd, 0x0079, 0x5e0e, 0x5e40, 0x5e4c,
+       0x5e40, 0x5e40, 0x5e40, 0x5e40, 0x5e3e, 0x5e3e, 0x5e3e, 0x5e3e,
+       0x5e3e, 0x5e3e, 0x5e3e, 0x5e3e, 0x5e3e, 0x5e3e, 0x5e3e, 0x5e3e,
+       0x5e3e, 0x5e3e, 0x5e3e, 0x5e3e, 0x5e3e, 0x5e3e, 0x5e3e, 0x5e3e,
+       0x5e3e, 0x5e3e, 0x5e3e, 0x5e3e, 0x5e3e, 0x5e40, 0x5e3e, 0x5e40,
+       0x5e40, 0x5e3e, 0x5e3e, 0x5e3e, 0x5e3e, 0x5e3e, 0x5e40, 0x5e3e,
+       0x5e3e, 0x5e3e, 0x5e3e, 0x5e3e, 0x5e3e, 0x5e3e, 0x1078, 0x12cd,
+       0x6003, 0x0001, 0x6106, 0x1078, 0x498e, 0x127e, 0x2091, 0x8000,
+       0x1078, 0x4d96, 0x127f, 0x007c, 0x6003, 0x0001, 0x6106, 0x1078,
+       0x498e, 0x127e, 0x2091, 0x8000, 0x1078, 0x4d96, 0x127f, 0x007c,
        0x6004, 0xa0b2, 0x0030, 0x10c8, 0x12cd, 0xa1b6, 0x0013, 0x00c0,
-       0x5d44, 0x2008, 0x0079, 0x5dcb, 0xa1b6, 0x0027, 0x00c0, 0x5d99,
-       0x1078, 0x4b79, 0x6004, 0x1078, 0x6aaf, 0x0040, 0x5d5d, 0x1078,
-       0x6ac3, 0x0040, 0x5d91, 0xa08e, 0x0021, 0x0040, 0x5d95, 0xa08e,
-       0x0022, 0x0040, 0x5d91, 0x0078, 0x5d8c, 0x1078, 0x22d7, 0x2001,
-       0x0007, 0x1078, 0x37c9, 0x6018, 0xa080, 0x0028, 0x200c, 0x1078,
-       0x5e4d, 0xa186, 0x007e, 0x00c0, 0x5d72, 0x2001, 0x762f, 0x2014,
+       0x5e64, 0x2008, 0x0079, 0x5eeb, 0xa1b6, 0x0027, 0x00c0, 0x5eb9,
+       0x1078, 0x4c9d, 0x6004, 0x1078, 0x6bcf, 0x0040, 0x5e7d, 0x1078,
+       0x6be3, 0x0040, 0x5eb1, 0xa08e, 0x0021, 0x0040, 0x5eb5, 0xa08e,
+       0x0022, 0x0040, 0x5eb1, 0x0078, 0x5eac, 0x1078, 0x22d7, 0x2001,
+       0x0007, 0x1078, 0x37f4, 0x6018, 0xa080, 0x0028, 0x200c, 0x1078,
+       0x5f6d, 0xa186, 0x007e, 0x00c0, 0x5e92, 0x2001, 0x772f, 0x2014,
        0xc285, 0x2202, 0x017e, 0x027e, 0x037e, 0x2110, 0x2019, 0x0028,
-       0x1078, 0x495a, 0x1078, 0x489d, 0x0c7e, 0x6018, 0xa065, 0x0040,
-       0x5d83, 0x1078, 0x399e, 0x0c7f, 0x2c08, 0x1078, 0x7370, 0x037f,
-       0x027f, 0x017f, 0x1078, 0x3805, 0x1078, 0x5bfa, 0x1078, 0x4c72,
-       0x007c, 0x1078, 0x5e4d, 0x0078, 0x5d8c, 0x1078, 0x5e5c, 0x0078,
-       0x5d8c, 0xa186, 0x0014, 0x00c0, 0x5d90, 0x1078, 0x4b79, 0x1078,
-       0x22b5, 0x1078, 0x6aaf, 0x00c0, 0x5db8, 0x1078, 0x22d7, 0x6018,
-       0xa080, 0x0028, 0x200c, 0x1078, 0x5e4d, 0xa186, 0x007e, 0x00c0,
-       0x5db6, 0x2001, 0x762f, 0x200c, 0xc185, 0x2102, 0x0078, 0x5d8c,
-       0x1078, 0x6ac3, 0x00c0, 0x5dc0, 0x1078, 0x5e4d, 0x0078, 0x5d8c,
-       0x6004, 0xa08e, 0x0021, 0x0040, 0x5dbc, 0xa08e, 0x0022, 0x1040,
-       0x5e5c, 0x0078, 0x5d8c, 0x5dfd, 0x5dff, 0x5e03, 0x5e07, 0x5e0b,
-       0x5e0f, 0x5dfb, 0x5dfb, 0x5dfb, 0x5dfb, 0x5dfb, 0x5dfb, 0x5dfb,
-       0x5dfb, 0x5dfb, 0x5dfb, 0x5dfb, 0x5dfb, 0x5dfb, 0x5dfb, 0x5dfb,
-       0x5dfb, 0x5dfb, 0x5dfb, 0x5dfb, 0x5dfb, 0x5dfb, 0x5dfb, 0x5dfb,
-       0x5dfb, 0x5e13, 0x5e19, 0x5dfb, 0x5e23, 0x5e19, 0x5dfb, 0x5dfb,
-       0x5dfb, 0x5dfb, 0x5dfb, 0x5e19, 0x5e19, 0x5dfb, 0x5dfb, 0x5dfb,
-       0x5dfb, 0x5dfb, 0x5dfb, 0x1078, 0x12cd, 0x0078, 0x5e19, 0x2001,
-       0x000b, 0x0078, 0x5e2c, 0x2001, 0x0003, 0x0078, 0x5e2c, 0x2001,
-       0x0005, 0x0078, 0x5e2c, 0x2001, 0x0001, 0x0078, 0x5e2c, 0x2001,
-       0x0009, 0x0078, 0x5e2c, 0x1078, 0x12cd, 0x0078, 0x5e2b, 0x1078,
-       0x37c9, 0x1078, 0x4b79, 0x6003, 0x0002, 0x6017, 0x0028, 0x1078,
-       0x4c72, 0x0078, 0x5e2b, 0x1078, 0x4b79, 0x6003, 0x0004, 0x6017,
-       0x0028, 0x1078, 0x4c72, 0x007c, 0x1078, 0x37c9, 0x1078, 0x4b79,
-       0x6003, 0x0002, 0x037e, 0x2019, 0x765c, 0x2304, 0xa084, 0xff00,
-       0x00c0, 0x5e3e, 0x2019, 0x0028, 0x0078, 0x5e47, 0x8007, 0xa09a,
-       0x0004, 0x0048, 0x5e3a, 0x8003, 0x801b, 0x831b, 0xa318, 0x6316,
-       0x037f, 0x1078, 0x4c72, 0x0078, 0x5e2b, 0x0e7e, 0x1078, 0x6938,
-       0x0040, 0x5e5a, 0x6010, 0x2070, 0x7007, 0x0000, 0x7037, 0x0103,
+       0x1078, 0x4a7e, 0x1078, 0x49c1, 0x0c7e, 0x6018, 0xa065, 0x0040,
+       0x5ea3, 0x1078, 0x3a36, 0x0c7f, 0x2c08, 0x1078, 0x747b, 0x037f,
+       0x027f, 0x017f, 0x1078, 0x3834, 0x1078, 0x5d1a, 0x1078, 0x4d96,
+       0x007c, 0x1078, 0x5f6d, 0x0078, 0x5eac, 0x1078, 0x5f7c, 0x0078,
+       0x5eac, 0xa186, 0x0014, 0x00c0, 0x5eb0, 0x1078, 0x4c9d, 0x1078,
+       0x22b5, 0x1078, 0x6bcf, 0x00c0, 0x5ed8, 0x1078, 0x22d7, 0x6018,
+       0xa080, 0x0028, 0x200c, 0x1078, 0x5f6d, 0xa186, 0x007e, 0x00c0,
+       0x5ed6, 0x2001, 0x772f, 0x200c, 0xc185, 0x2102, 0x0078, 0x5eac,
+       0x1078, 0x6be3, 0x00c0, 0x5ee0, 0x1078, 0x5f6d, 0x0078, 0x5eac,
+       0x6004, 0xa08e, 0x0021, 0x0040, 0x5edc, 0xa08e, 0x0022, 0x1040,
+       0x5f7c, 0x0078, 0x5eac, 0x5f1d, 0x5f1f, 0x5f23, 0x5f27, 0x5f2b,
+       0x5f2f, 0x5f1b, 0x5f1b, 0x5f1b, 0x5f1b, 0x5f1b, 0x5f1b, 0x5f1b,
+       0x5f1b, 0x5f1b, 0x5f1b, 0x5f1b, 0x5f1b, 0x5f1b, 0x5f1b, 0x5f1b,
+       0x5f1b, 0x5f1b, 0x5f1b, 0x5f1b, 0x5f1b, 0x5f1b, 0x5f1b, 0x5f1b,
+       0x5f1b, 0x5f33, 0x5f39, 0x5f1b, 0x5f43, 0x5f39, 0x5f1b, 0x5f1b,
+       0x5f1b, 0x5f1b, 0x5f1b, 0x5f39, 0x5f39, 0x5f1b, 0x5f1b, 0x5f1b,
+       0x5f1b, 0x5f1b, 0x5f1b, 0x1078, 0x12cd, 0x0078, 0x5f39, 0x2001,
+       0x000b, 0x0078, 0x5f4c, 0x2001, 0x0003, 0x0078, 0x5f4c, 0x2001,
+       0x0005, 0x0078, 0x5f4c, 0x2001, 0x0001, 0x0078, 0x5f4c, 0x2001,
+       0x0009, 0x0078, 0x5f4c, 0x1078, 0x12cd, 0x0078, 0x5f4b, 0x1078,
+       0x37f4, 0x1078, 0x4c9d, 0x6003, 0x0002, 0x6017, 0x0028, 0x1078,
+       0x4d96, 0x0078, 0x5f4b, 0x1078, 0x4c9d, 0x6003, 0x0004, 0x6017,
+       0x0028, 0x1078, 0x4d96, 0x007c, 0x1078, 0x37f4, 0x1078, 0x4c9d,
+       0x6003, 0x0002, 0x037e, 0x2019, 0x775c, 0x2304, 0xa084, 0xff00,
+       0x00c0, 0x5f5e, 0x2019, 0x0028, 0x0078, 0x5f67, 0x8007, 0xa09a,
+       0x0004, 0x0048, 0x5f5a, 0x8003, 0x801b, 0x831b, 0xa318, 0x6316,
+       0x037f, 0x1078, 0x4d96, 0x0078, 0x5f4b, 0x0e7e, 0x1078, 0x6a58,
+       0x0040, 0x5f7a, 0x6010, 0x2070, 0x7007, 0x0000, 0x7037, 0x0103,
        0x7033, 0x0100, 0x0e7f, 0x007c, 0x0e7e, 0xacf0, 0x0004, 0x2e74,
        0x7000, 0x2070, 0x7037, 0x0103, 0x7023, 0x8001, 0x0e7f, 0x007c,
        0x0d7e, 0x6618, 0x2668, 0x6804, 0xa084, 0x00ff, 0x0d7f, 0xa0b2,
-       0x000c, 0x10c8, 0x12cd, 0x6604, 0xa6b6, 0x0028, 0x00c0, 0x5e7c,
-       0x1078, 0x6af8, 0x0078, 0x5eae, 0x6604, 0xa6b6, 0x0029, 0x00c0,
-       0x5e85, 0x1078, 0x6b12, 0x0078, 0x5eae, 0x6604, 0xa6b6, 0x001f,
-       0x00c0, 0x5e8e, 0x1078, 0x5c8b, 0x0078, 0x5eae, 0x6604, 0xa6b6,
-       0x0000, 0x00c0, 0x5e97, 0x1078, 0x5cd0, 0x0078, 0x5eae, 0x6604,
-       0xa6b6, 0x0022, 0x00c0, 0x5ea0, 0x1078, 0x5cb4, 0x0078, 0x5eae,
-       0xa1b6, 0x0015, 0x00c0, 0x5ea8, 0x1079, 0x5eb3, 0x0078, 0x5eae,
-       0xa1b6, 0x0016, 0x00c0, 0x5eaf, 0x1079, 0x5ff0, 0x007c, 0x1078,
-       0x5c2f, 0x0078, 0x5eae, 0x5ed7, 0x5eda, 0x5ed7, 0x5f1b, 0x5ed7,
-       0x5f8c, 0x5ed7, 0x5ed7, 0x5ed7, 0x5fc8, 0x5ed7, 0x5fde, 0xa1b6,
-       0x0048, 0x0040, 0x5ecb, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10,
+       0x000c, 0x10c8, 0x12cd, 0x6604, 0xa6b6, 0x0028, 0x00c0, 0x5f9c,
+       0x1078, 0x6c18, 0x0078, 0x5fce, 0x6604, 0xa6b6, 0x0029, 0x00c0,
+       0x5fa5, 0x1078, 0x6c32, 0x0078, 0x5fce, 0x6604, 0xa6b6, 0x001f,
+       0x00c0, 0x5fae, 0x1078, 0x5dab, 0x0078, 0x5fce, 0x6604, 0xa6b6,
+       0x0000, 0x00c0, 0x5fb7, 0x1078, 0x5df0, 0x0078, 0x5fce, 0x6604,
+       0xa6b6, 0x0022, 0x00c0, 0x5fc0, 0x1078, 0x5dd4, 0x0078, 0x5fce,
+       0xa1b6, 0x0015, 0x00c0, 0x5fc8, 0x1079, 0x5fd3, 0x0078, 0x5fce,
+       0xa1b6, 0x0016, 0x00c0, 0x5fcf, 0x1079, 0x6110, 0x007c, 0x1078,
+       0x5d4f, 0x0078, 0x5fce, 0x5ff7, 0x5ffa, 0x5ff7, 0x603b, 0x5ff7,
+       0x60ac, 0x5ff7, 0x5ff7, 0x5ff7, 0x60e8, 0x5ff7, 0x60fe, 0xa1b6,
+       0x0048, 0x0040, 0x5feb, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10,
        0x1078, 0x156a, 0x007c, 0x0e7e, 0xacf0, 0x0004, 0x2e74, 0x7000,
-       0x2070, 0x7037, 0x0103, 0x0e7f, 0x1078, 0x5bfa, 0x007c, 0x0005,
-       0x0005, 0x007c, 0x0e7e, 0x2071, 0x7600, 0x7078, 0xa086, 0x0074,
-       0x00c0, 0x5f04, 0x1078, 0x7344, 0x00c0, 0x5ef6, 0x0d7e, 0x6018,
-       0x2068, 0x1078, 0x5f08, 0x0d7f, 0x2001, 0x0006, 0x1078, 0x37c9,
-       0x1078, 0x22d7, 0x1078, 0x5bfa, 0x0078, 0x5f06, 0x2001, 0x000a,
-       0x1078, 0x37c9, 0x1078, 0x22d7, 0x6003, 0x0001, 0x6007, 0x0001,
-       0x1078, 0x486a, 0x0078, 0x5f06, 0x1078, 0x5f7c, 0x0e7f, 0x007c,
-       0x6800, 0xd084, 0x0040, 0x5f1a, 0x2001, 0x0000, 0x1078, 0x37b5,
-       0x2069, 0x7651, 0x6804, 0xd0a4, 0x0040, 0x5f1a, 0x2001, 0x0006,
-       0x1078, 0x37d7, 0x007c, 0x0d7e, 0x2011, 0x761e, 0x2204, 0xa086,
-       0x0074, 0x00c0, 0x5f78, 0x1078, 0x60ca, 0x6018, 0x2068, 0xa080,
-       0x0028, 0x2014, 0xa286, 0x007e, 0x0040, 0x5f43, 0xa286, 0x0080,
-       0x00c0, 0x5f6c, 0x6813, 0x00ff, 0x6817, 0xfffc, 0x6010, 0xa005,
-       0x0040, 0x5f62, 0x2068, 0x6807, 0x0000, 0x6837, 0x0103, 0x6833,
-       0x0200, 0x0078, 0x5f62, 0x0e7e, 0x0f7e, 0x6813, 0x00ff, 0x6817,
-       0xfffe, 0x2071, 0x762f, 0x2e04, 0xa085, 0x0003, 0x2072, 0x2071,
-       0x7b80, 0x2079, 0x0100, 0x2e04, 0xa084, 0x00ff, 0x2069, 0x7619,
-       0x206a, 0x78e6, 0x8e70, 0x2e04, 0x2069, 0x761a, 0x206a, 0x78ea,
-       0x0f7f, 0x0e7f, 0x2001, 0x0006, 0x1078, 0x37c9, 0x1078, 0x22d7,
-       0x1078, 0x5bfa, 0x0078, 0x5f7a, 0x2001, 0x0004, 0x1078, 0x37c9,
-       0x6003, 0x0001, 0x6007, 0x0003, 0x1078, 0x486a, 0x0078, 0x5f7a,
-       0x1078, 0x5f7c, 0x0d7f, 0x007c, 0x2001, 0x7600, 0x2004, 0xa086,
-       0x0003, 0x0040, 0x5f87, 0x2001, 0x0007, 0x1078, 0x37c9, 0x1078,
-       0x22d7, 0x1078, 0x5bfa, 0x007c, 0x0e7e, 0x2071, 0x7600, 0x7078,
-       0xa086, 0x0014, 0x00c0, 0x5fc2, 0x7000, 0xa086, 0x0003, 0x00c0,
-       0x5f9f, 0x6010, 0xa005, 0x00c0, 0x5f9f, 0x1078, 0x2db9, 0x0d7e,
-       0x6018, 0x2068, 0x1078, 0x3899, 0x1078, 0x5f08, 0x0d7f, 0x1078,
-       0x60d4, 0x00c0, 0x5fc2, 0x2001, 0x0006, 0x1078, 0x37c9, 0x0e7e,
-       0x6010, 0xa005, 0x0040, 0x5fbb, 0x2070, 0x7007, 0x0000, 0x7037,
-       0x0103, 0x7033, 0x0200, 0x0e7f, 0x1078, 0x22d7, 0x1078, 0x5bfa,
-       0x0078, 0x5fc6, 0x1078, 0x5e4d, 0x1078, 0x5f7c, 0x0e7f, 0x007c,
-       0x2011, 0x761e, 0x2204, 0xa086, 0x0014, 0x00c0, 0x5fdb, 0x2001,
-       0x0002, 0x1078, 0x37c9, 0x6003, 0x0001, 0x6007, 0x0001, 0x1078,
-       0x486a, 0x0078, 0x5fdd, 0x1078, 0x5f7c, 0x007c, 0x2011, 0x761e,
-       0x2204, 0xa086, 0x0004, 0x00c0, 0x5fed, 0x2001, 0x0007, 0x1078,
-       0x37c9, 0x1078, 0x5bfa, 0x0078, 0x5fef, 0x1078, 0x5f7c, 0x007c,
-       0x5ed7, 0x5ffc, 0x5ed7, 0x6022, 0x5ed7, 0x607d, 0x5ed7, 0x5ed7,
-       0x5ed7, 0x6092, 0x5ed7, 0x60a5, 0x0c7e, 0x1078, 0x60b8, 0x00c0,
-       0x6011, 0x2001, 0x0000, 0x1078, 0x37b5, 0x2001, 0x0002, 0x1078,
-       0x37c9, 0x6003, 0x0001, 0x6007, 0x0002, 0x1078, 0x486a, 0x0078,
-       0x6020, 0x2009, 0x7b8f, 0x2104, 0xa084, 0xff00, 0xa086, 0x1900,
-       0x00c0, 0x601e, 0x1078, 0x5bfa, 0x0078, 0x6020, 0x1078, 0x5f7c,
-       0x0c7f, 0x007c, 0x1078, 0x60c7, 0x00c0, 0x6036, 0x2001, 0x0000,
-       0x1078, 0x37b5, 0x2001, 0x0002, 0x1078, 0x37c9, 0x6003, 0x0001,
-       0x6007, 0x0002, 0x1078, 0x486a, 0x0078, 0x6058, 0x1078, 0x5e4d,
-       0x2009, 0x7b8e, 0x2134, 0xa6b4, 0x00ff, 0xa686, 0x0005, 0x0040,
-       0x6059, 0x2009, 0x7b8f, 0x2104, 0xa084, 0xff00, 0xa086, 0x1900,
-       0x00c0, 0x6056, 0xa686, 0x0009, 0x0040, 0x6059, 0x2001, 0x0004,
-       0x1078, 0x37c9, 0x1078, 0x5bfa, 0x0078, 0x6058, 0x1078, 0x5f7c,
-       0x007c, 0x0d7e, 0x6010, 0x2068, 0x1078, 0x6938, 0x0040, 0x6067,
-       0x6838, 0xd0fc, 0x0040, 0x6067, 0x0d7f, 0x0078, 0x6056, 0x6018,
-       0x2068, 0x6840, 0xa084, 0x00ff, 0xa005, 0x0040, 0x6078, 0x8001,
-       0x6842, 0x6017, 0x000a, 0x6007, 0x0016, 0x0d7f, 0x0078, 0x6058,
-       0x1078, 0x22b5, 0x0d7f, 0x0078, 0x6056, 0x1078, 0x60c7, 0x00c0,
-       0x608d, 0x2001, 0x0004, 0x1078, 0x37c9, 0x6003, 0x0001, 0x6007,
-       0x0003, 0x1078, 0x486a, 0x0078, 0x6091, 0x1078, 0x5e4d, 0x1078,
-       0x5f7c, 0x007c, 0x1078, 0x60c7, 0x00c0, 0x60a2, 0x2001, 0x0008,
-       0x1078, 0x37c9, 0x6003, 0x0001, 0x6007, 0x0005, 0x1078, 0x486a,
-       0x0078, 0x60a4, 0x1078, 0x5f7c, 0x007c, 0x1078, 0x60c7, 0x00c0,
-       0x60b5, 0x2001, 0x000a, 0x1078, 0x37c9, 0x6003, 0x0001, 0x6007,
-       0x0001, 0x1078, 0x486a, 0x0078, 0x60b7, 0x1078, 0x5f7c, 0x007c,
-       0x2009, 0x7b8e, 0x2104, 0xa086, 0x0003, 0x00c0, 0x60c6, 0x2009,
-       0x7b8f, 0x2104, 0xa084, 0xff00, 0xa086, 0x2a00, 0x007c, 0xa085,
+       0x2070, 0x7037, 0x0103, 0x0e7f, 0x1078, 0x5d1a, 0x007c, 0x0005,
+       0x0005, 0x007c, 0x0e7e, 0x2071, 0x7700, 0x7078, 0xa086, 0x0074,
+       0x00c0, 0x6024, 0x1078, 0x744f, 0x00c0, 0x6016, 0x0d7e, 0x6018,
+       0x2068, 0x1078, 0x6028, 0x0d7f, 0x2001, 0x0006, 0x1078, 0x37f4,
+       0x1078, 0x22d7, 0x1078, 0x5d1a, 0x0078, 0x6026, 0x2001, 0x000a,
+       0x1078, 0x37f4, 0x1078, 0x22d7, 0x6003, 0x0001, 0x6007, 0x0001,
+       0x1078, 0x498e, 0x0078, 0x6026, 0x1078, 0x609c, 0x0e7f, 0x007c,
+       0x6800, 0xd084, 0x0040, 0x603a, 0x2001, 0x0000, 0x1078, 0x37e0,
+       0x2069, 0x7751, 0x6804, 0xd0a4, 0x0040, 0x603a, 0x2001, 0x0006,
+       0x1078, 0x3802, 0x007c, 0x0d7e, 0x2011, 0x771e, 0x2204, 0xa086,
+       0x0074, 0x00c0, 0x6098, 0x1078, 0x61ea, 0x6018, 0x2068, 0xa080,
+       0x0028, 0x2014, 0xa286, 0x007e, 0x0040, 0x6063, 0xa286, 0x0080,
+       0x00c0, 0x608c, 0x6813, 0x00ff, 0x6817, 0xfffc, 0x6010, 0xa005,
+       0x0040, 0x6082, 0x2068, 0x6807, 0x0000, 0x6837, 0x0103, 0x6833,
+       0x0200, 0x0078, 0x6082, 0x0e7e, 0x0f7e, 0x6813, 0x00ff, 0x6817,
+       0xfffe, 0x2071, 0x772f, 0x2e04, 0xa085, 0x0003, 0x2072, 0x2071,
+       0x7c80, 0x2079, 0x0100, 0x2e04, 0xa084, 0x00ff, 0x2069, 0x7719,
+       0x206a, 0x78e6, 0x8e70, 0x2e04, 0x2069, 0x771a, 0x206a, 0x78ea,
+       0x0f7f, 0x0e7f, 0x2001, 0x0006, 0x1078, 0x37f4, 0x1078, 0x22d7,
+       0x1078, 0x5d1a, 0x0078, 0x609a, 0x2001, 0x0004, 0x1078, 0x37f4,
+       0x6003, 0x0001, 0x6007, 0x0003, 0x1078, 0x498e, 0x0078, 0x609a,
+       0x1078, 0x609c, 0x0d7f, 0x007c, 0x2001, 0x7700, 0x2004, 0xa086,
+       0x0003, 0x0040, 0x60a7, 0x2001, 0x0007, 0x1078, 0x37f4, 0x1078,
+       0x22d7, 0x1078, 0x5d1a, 0x007c, 0x0e7e, 0x2071, 0x7700, 0x7078,
+       0xa086, 0x0014, 0x00c0, 0x60e2, 0x7000, 0xa086, 0x0003, 0x00c0,
+       0x60bf, 0x6010, 0xa005, 0x00c0, 0x60bf, 0x1078, 0x2dd7, 0x0d7e,
+       0x6018, 0x2068, 0x1078, 0x38c8, 0x1078, 0x6028, 0x0d7f, 0x1078,
+       0x61f4, 0x00c0, 0x60e2, 0x2001, 0x0006, 0x1078, 0x37f4, 0x0e7e,
+       0x6010, 0xa005, 0x0040, 0x60db, 0x2070, 0x7007, 0x0000, 0x7037,
+       0x0103, 0x7033, 0x0200, 0x0e7f, 0x1078, 0x22d7, 0x1078, 0x5d1a,
+       0x0078, 0x60e6, 0x1078, 0x5f6d, 0x1078, 0x609c, 0x0e7f, 0x007c,
+       0x2011, 0x771e, 0x2204, 0xa086, 0x0014, 0x00c0, 0x60fb, 0x2001,
+       0x0002, 0x1078, 0x37f4, 0x6003, 0x0001, 0x6007, 0x0001, 0x1078,
+       0x498e, 0x0078, 0x60fd, 0x1078, 0x609c, 0x007c, 0x2011, 0x771e,
+       0x2204, 0xa086, 0x0004, 0x00c0, 0x610d, 0x2001, 0x0007, 0x1078,
+       0x37f4, 0x1078, 0x5d1a, 0x0078, 0x610f, 0x1078, 0x609c, 0x007c,
+       0x5ff7, 0x611c, 0x5ff7, 0x6142, 0x5ff7, 0x619d, 0x5ff7, 0x5ff7,
+       0x5ff7, 0x61b2, 0x5ff7, 0x61c5, 0x0c7e, 0x1078, 0x61d8, 0x00c0,
+       0x6131, 0x2001, 0x0000, 0x1078, 0x37e0, 0x2001, 0x0002, 0x1078,
+       0x37f4, 0x6003, 0x0001, 0x6007, 0x0002, 0x1078, 0x498e, 0x0078,
+       0x6140, 0x2009, 0x7c8f, 0x2104, 0xa084, 0xff00, 0xa086, 0x1900,
+       0x00c0, 0x613e, 0x1078, 0x5d1a, 0x0078, 0x6140, 0x1078, 0x609c,
+       0x0c7f, 0x007c, 0x1078, 0x61e7, 0x00c0, 0x6156, 0x2001, 0x0000,
+       0x1078, 0x37e0, 0x2001, 0x0002, 0x1078, 0x37f4, 0x6003, 0x0001,
+       0x6007, 0x0002, 0x1078, 0x498e, 0x0078, 0x6178, 0x1078, 0x5f6d,
+       0x2009, 0x7c8e, 0x2134, 0xa6b4, 0x00ff, 0xa686, 0x0005, 0x0040,
+       0x6179, 0x2009, 0x7c8f, 0x2104, 0xa084, 0xff00, 0xa086, 0x1900,
+       0x00c0, 0x6176, 0xa686, 0x0009, 0x0040, 0x6179, 0x2001, 0x0004,
+       0x1078, 0x37f4, 0x1078, 0x5d1a, 0x0078, 0x6178, 0x1078, 0x609c,
+       0x007c, 0x0d7e, 0x6010, 0x2068, 0x1078, 0x6a58, 0x0040, 0x6187,
+       0x6838, 0xd0fc, 0x0040, 0x6187, 0x0d7f, 0x0078, 0x6176, 0x6018,
+       0x2068, 0x6840, 0xa084, 0x00ff, 0xa005, 0x0040, 0x6198, 0x8001,
+       0x6842, 0x6017, 0x000a, 0x6007, 0x0016, 0x0d7f, 0x0078, 0x6178,
+       0x1078, 0x22b5, 0x0d7f, 0x0078, 0x6176, 0x1078, 0x61e7, 0x00c0,
+       0x61ad, 0x2001, 0x0004, 0x1078, 0x37f4, 0x6003, 0x0001, 0x6007,
+       0x0003, 0x1078, 0x498e, 0x0078, 0x61b1, 0x1078, 0x5f6d, 0x1078,
+       0x609c, 0x007c, 0x1078, 0x61e7, 0x00c0, 0x61c2, 0x2001, 0x0008,
+       0x1078, 0x37f4, 0x6003, 0x0001, 0x6007, 0x0005, 0x1078, 0x498e,
+       0x0078, 0x61c4, 0x1078, 0x609c, 0x007c, 0x1078, 0x61e7, 0x00c0,
+       0x61d5, 0x2001, 0x000a, 0x1078, 0x37f4, 0x6003, 0x0001, 0x6007,
+       0x0001, 0x1078, 0x498e, 0x0078, 0x61d7, 0x1078, 0x609c, 0x007c,
+       0x2009, 0x7c8e, 0x2104, 0xa086, 0x0003, 0x00c0, 0x61e6, 0x2009,
+       0x7c8f, 0x2104, 0xa084, 0xff00, 0xa086, 0x2a00, 0x007c, 0xa085,
        0x0001, 0x007c, 0x0c7e, 0x017e, 0xac88, 0x0006, 0x2164, 0x1078,
-       0x382f, 0x017f, 0x0c7f, 0x007c, 0x0e7e, 0x2071, 0x7b8c, 0x7004,
-       0xa086, 0x0014, 0x00c0, 0x60f7, 0x7008, 0xa086, 0x0800, 0x00c0,
-       0x60f7, 0x700c, 0xd0ec, 0x0040, 0x60f5, 0xa084, 0x0f00, 0xa086,
-       0x0100, 0x00c0, 0x60f5, 0x7024, 0xd0a4, 0x0040, 0x60f5, 0xd08c,
-       0x0040, 0x60f5, 0xa006, 0x0078, 0x60f7, 0xa085, 0x0001, 0x0e7f,
+       0x385e, 0x017f, 0x0c7f, 0x007c, 0x0e7e, 0x2071, 0x7c8c, 0x7004,
+       0xa086, 0x0014, 0x00c0, 0x6217, 0x7008, 0xa086, 0x0800, 0x00c0,
+       0x6217, 0x700c, 0xd0ec, 0x0040, 0x6215, 0xa084, 0x0f00, 0xa086,
+       0x0100, 0x00c0, 0x6215, 0x7024, 0xd0a4, 0x0040, 0x6215, 0xd08c,
+       0x0040, 0x6215, 0xa006, 0x0078, 0x6217, 0xa085, 0x0001, 0x0e7f,
        0x007c, 0x0e7e, 0x0d7e, 0x0c7e, 0x077e, 0x057e, 0x047e, 0x027e,
-       0x007e, 0x127e, 0x2091, 0x8000, 0x2029, 0x783f, 0x252c, 0x2021,
-       0x7845, 0x2424, 0x2061, 0x7d00, 0x2071, 0x7600, 0x7244, 0x7060,
-       0xa202, 0x00c8, 0x614e, 0x1078, 0x754e, 0x0040, 0x6146, 0x671c,
-       0xa786, 0x0001, 0x0040, 0x6146, 0xa786, 0x0007, 0x0040, 0x6146,
-       0x2500, 0xac06, 0x0040, 0x6146, 0x2400, 0xac06, 0x0040, 0x6146,
-       0x0c7e, 0x6000, 0xa086, 0x0004, 0x00c0, 0x6130, 0x1078, 0x166e,
-       0x6010, 0x2068, 0x1078, 0x6938, 0x0040, 0x6143, 0xa786, 0x0003,
-       0x00c0, 0x6158, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078,
-       0x3a72, 0x1078, 0x6a89, 0x1078, 0x6a96, 0x0c7f, 0xace0, 0x0008,
-       0x7054, 0xac02, 0x00c8, 0x614e, 0x0078, 0x610e, 0x127f, 0x007f,
+       0x007e, 0x127e, 0x2091, 0x8000, 0x2029, 0x793f, 0x252c, 0x2021,
+       0x7945, 0x2424, 0x2061, 0x7e00, 0x2071, 0x7700, 0x7244, 0x7060,
+       0xa202, 0x00c8, 0x626e, 0x1078, 0x7659, 0x0040, 0x6266, 0x671c,
+       0xa786, 0x0001, 0x0040, 0x6266, 0xa786, 0x0007, 0x0040, 0x6266,
+       0x2500, 0xac06, 0x0040, 0x6266, 0x2400, 0xac06, 0x0040, 0x6266,
+       0x0c7e, 0x6000, 0xa086, 0x0004, 0x00c0, 0x6250, 0x1078, 0x166e,
+       0x6010, 0x2068, 0x1078, 0x6a58, 0x0040, 0x6263, 0xa786, 0x0003,
+       0x00c0, 0x6278, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000, 0x1078,
+       0x3b92, 0x1078, 0x6ba9, 0x1078, 0x6bb6, 0x0c7f, 0xace0, 0x0008,
+       0x7054, 0xac02, 0x00c8, 0x626e, 0x0078, 0x622e, 0x127f, 0x007f,
        0x027f, 0x047f, 0x057f, 0x077f, 0x0c7f, 0x0d7f, 0x0e7f, 0x007c,
-       0xa786, 0x0006, 0x00c0, 0x613a, 0x1078, 0x74f2, 0x0078, 0x6143,
-       0x220c, 0x2304, 0xa106, 0x00c0, 0x616b, 0x8210, 0x8318, 0x00f0,
-       0x6160, 0xa006, 0x007c, 0x2304, 0xa102, 0x0048, 0x6173, 0x2001,
-       0x0001, 0x0078, 0x6175, 0x2001, 0x0000, 0xa18d, 0x0001, 0x007c,
-       0x6004, 0xa08a, 0x0030, 0x10c8, 0x12cd, 0x1078, 0x6aaf, 0x0040,
-       0x6187, 0x1078, 0x6ac3, 0x0040, 0x6190, 0x0078, 0x6189, 0x1078,
-       0x22d7, 0x1078, 0x4b79, 0x1078, 0x5bfa, 0x1078, 0x4c72, 0x007c,
-       0x1078, 0x5e4d, 0x0078, 0x6189, 0xa182, 0x0040, 0x0079, 0x6198,
-       0x61a8, 0x61a8, 0x61a8, 0x61a8, 0x61a8, 0x61a8, 0x61a8, 0x61a8,
-       0x61a8, 0x61a8, 0x61a8, 0x61aa, 0x61aa, 0x61aa, 0x61aa, 0x61a8,
-       0x1078, 0x12cd, 0x6003, 0x0001, 0x6106, 0x1078, 0x481d, 0x127e,
-       0x2091, 0x8000, 0x1078, 0x4c72, 0x127f, 0x007c, 0xa186, 0x0013,
-       0x00c0, 0x61bf, 0x6004, 0xa082, 0x0040, 0x0079, 0x6235, 0xa186,
-       0x0027, 0x00c0, 0x61dc, 0x1078, 0x4b79, 0x1078, 0x22b5, 0x0d7e,
-       0x6110, 0x2168, 0x1078, 0x6938, 0x0040, 0x61d6, 0x6837, 0x0103,
-       0x684b, 0x0029, 0x1078, 0x3a72, 0x1078, 0x6a89, 0x0d7f, 0x1078,
-       0x5bfa, 0x1078, 0x4c72, 0x007c, 0xa186, 0x0014, 0x00c0, 0x61e5,
-       0x6004, 0xa082, 0x0040, 0x0079, 0x6205, 0xa186, 0x0047, 0x10c0,
-       0x12cd, 0x2001, 0x0109, 0x2004, 0xd084, 0x0040, 0x6202, 0x127e,
-       0x2091, 0x2200, 0x007e, 0x017e, 0x027e, 0x1078, 0x46de, 0x027f,
-       0x017f, 0x007f, 0x127f, 0x6000, 0xa086, 0x0002, 0x00c0, 0x6202,
-       0x0078, 0x625c, 0x1078, 0x5c2f, 0x007c, 0x6217, 0x6215, 0x6215,
-       0x6215, 0x6215, 0x6215, 0x6215, 0x6215, 0x6215, 0x6215, 0x6215,
-       0x622e, 0x622e, 0x622e, 0x622e, 0x6215, 0x1078, 0x12cd, 0x1078,
-       0x4b79, 0x0d7e, 0x6110, 0x2168, 0x1078, 0x6938, 0x0040, 0x6228,
-       0x6837, 0x0103, 0x684b, 0x0006, 0x1078, 0x3a72, 0x1078, 0x6a89,
-       0x0d7f, 0x1078, 0x5bfa, 0x1078, 0x4c72, 0x007c, 0x1078, 0x4b79,
-       0x1078, 0x5bfa, 0x1078, 0x4c72, 0x007c, 0x6247, 0x6245, 0x6245,
-       0x6245, 0x6245, 0x6245, 0x6245, 0x6245, 0x6245, 0x6245, 0x6245,
-       0x6255, 0x6255, 0x6255, 0x6255, 0x6245, 0x1078, 0x12cd, 0x1078,
-       0x4b79, 0x6003, 0x0002, 0x1078, 0x4c72, 0x6010, 0xa088, 0x0013,
-       0x2104, 0xa085, 0x0400, 0x200a, 0x007c, 0x1078, 0x4b79, 0x6003,
-       0x000f, 0x1078, 0x4c72, 0x007c, 0xa182, 0x0040, 0x0079, 0x6260,
-       0x6270, 0x6270, 0x6270, 0x6270, 0x6270, 0x6272, 0x62fb, 0x6313,
-       0x6270, 0x6270, 0x6270, 0x6270, 0x6270, 0x6270, 0x6270, 0x6270,
-       0x1078, 0x12cd, 0x0e7e, 0x0d7e, 0x2071, 0x7b8c, 0x6110, 0x2168,
-       0x7614, 0xa6b4, 0x0fff, 0x86ff, 0x0040, 0x62df, 0xa68c, 0x00ff,
-       0xa186, 0x0002, 0x0040, 0x62a4, 0xa186, 0x0028, 0x00c0, 0x628e,
-       0x1078, 0x6a9d, 0x684b, 0x001c, 0x0078, 0x62a6, 0xd6dc, 0x0040,
-       0x6299, 0x684b, 0x0015, 0x7318, 0x6b62, 0x731c, 0x6b5e, 0x0078,
-       0x62a6, 0xd6d4, 0x0040, 0x62a4, 0x684b, 0x0007, 0x7318, 0x6b62,
-       0x731c, 0x6b5e, 0x0078, 0x62a6, 0x684b, 0x0000, 0x6837, 0x0103,
-       0x6e46, 0xa01e, 0xd6c4, 0x0040, 0x62b9, 0x7328, 0x732c, 0x6b56,
-       0x037e, 0x2308, 0x2019, 0x7b98, 0xad90, 0x0019, 0x1078, 0x6721,
-       0x037f, 0xd6cc, 0x0040, 0x62ef, 0x7124, 0x695a, 0xa192, 0x0021,
-       0x00c8, 0x62cd, 0x2071, 0x7b98, 0x831c, 0x2300, 0xae18, 0xad90,
-       0x001d, 0x1078, 0x6721, 0x0078, 0x62ef, 0x6838, 0xd0fc, 0x0040,
-       0x62d6, 0x2009, 0x0020, 0x695a, 0x0078, 0x62c2, 0x0f7e, 0x2d78,
-       0x1078, 0x66b9, 0x0f7f, 0x1078, 0x670e, 0x0078, 0x62f1, 0x684b,
-       0x0000, 0x6837, 0x0103, 0x6e46, 0x684c, 0xd0ac, 0x0040, 0x62ef,
-       0x6810, 0x6914, 0xa115, 0x0040, 0x62ef, 0x1078, 0x6467, 0x1078,
-       0x3a72, 0x6218, 0x2268, 0x6a3c, 0x8211, 0x6a3e, 0x0d7f, 0x0e7f,
-       0x1078, 0x5bfa, 0x007c, 0x0f7e, 0x6003, 0x0003, 0x2079, 0x7b8c,
+       0xa786, 0x0006, 0x00c0, 0x625a, 0x1078, 0x75fd, 0x0078, 0x6263,
+       0x220c, 0x2304, 0xa106, 0x00c0, 0x628b, 0x8210, 0x8318, 0x00f0,
+       0x6280, 0xa006, 0x007c, 0x2304, 0xa102, 0x0048, 0x6293, 0x2001,
+       0x0001, 0x0078, 0x6295, 0x2001, 0x0000, 0xa18d, 0x0001, 0x007c,
+       0x6004, 0xa08a, 0x0030, 0x10c8, 0x12cd, 0x1078, 0x6bcf, 0x0040,
+       0x62a7, 0x1078, 0x6be3, 0x0040, 0x62b0, 0x0078, 0x62a9, 0x1078,
+       0x22d7, 0x1078, 0x4c9d, 0x1078, 0x5d1a, 0x1078, 0x4d96, 0x007c,
+       0x1078, 0x5f6d, 0x0078, 0x62a9, 0xa182, 0x0040, 0x0079, 0x62b8,
+       0x62c8, 0x62c8, 0x62c8, 0x62c8, 0x62c8, 0x62c8, 0x62c8, 0x62c8,
+       0x62c8, 0x62c8, 0x62c8, 0x62ca, 0x62ca, 0x62ca, 0x62ca, 0x62c8,
+       0x1078, 0x12cd, 0x6003, 0x0001, 0x6106, 0x1078, 0x4941, 0x127e,
+       0x2091, 0x8000, 0x1078, 0x4d96, 0x127f, 0x007c, 0xa186, 0x0013,
+       0x00c0, 0x62df, 0x6004, 0xa082, 0x0040, 0x0079, 0x6355, 0xa186,
+       0x0027, 0x00c0, 0x62fc, 0x1078, 0x4c9d, 0x1078, 0x22b5, 0x0d7e,
+       0x6110, 0x2168, 0x1078, 0x6a58, 0x0040, 0x62f6, 0x6837, 0x0103,
+       0x684b, 0x0029, 0x1078, 0x3b92, 0x1078, 0x6ba9, 0x0d7f, 0x1078,
+       0x5d1a, 0x1078, 0x4d96, 0x007c, 0xa186, 0x0014, 0x00c0, 0x6305,
+       0x6004, 0xa082, 0x0040, 0x0079, 0x6325, 0xa186, 0x0047, 0x10c0,
+       0x12cd, 0x2001, 0x0109, 0x2004, 0xd084, 0x0040, 0x6322, 0x127e,
+       0x2091, 0x2200, 0x007e, 0x017e, 0x027e, 0x1078, 0x4802, 0x027f,
+       0x017f, 0x007f, 0x127f, 0x6000, 0xa086, 0x0002, 0x00c0, 0x6322,
+       0x0078, 0x637c, 0x1078, 0x5d4f, 0x007c, 0x6337, 0x6335, 0x6335,
+       0x6335, 0x6335, 0x6335, 0x6335, 0x6335, 0x6335, 0x6335, 0x6335,
+       0x634e, 0x634e, 0x634e, 0x634e, 0x6335, 0x1078, 0x12cd, 0x1078,
+       0x4c9d, 0x0d7e, 0x6110, 0x2168, 0x1078, 0x6a58, 0x0040, 0x6348,
+       0x6837, 0x0103, 0x684b, 0x0006, 0x1078, 0x3b92, 0x1078, 0x6ba9,
+       0x0d7f, 0x1078, 0x5d1a, 0x1078, 0x4d96, 0x007c, 0x1078, 0x4c9d,
+       0x1078, 0x5d1a, 0x1078, 0x4d96, 0x007c, 0x6367, 0x6365, 0x6365,
+       0x6365, 0x6365, 0x6365, 0x6365, 0x6365, 0x6365, 0x6365, 0x6365,
+       0x6375, 0x6375, 0x6375, 0x6375, 0x6365, 0x1078, 0x12cd, 0x1078,
+       0x4c9d, 0x6003, 0x0002, 0x1078, 0x4d96, 0x6010, 0xa088, 0x0013,
+       0x2104, 0xa085, 0x0400, 0x200a, 0x007c, 0x1078, 0x4c9d, 0x6003,
+       0x000f, 0x1078, 0x4d96, 0x007c, 0xa182, 0x0040, 0x0079, 0x6380,
+       0x6390, 0x6390, 0x6390, 0x6390, 0x6390, 0x6392, 0x641b, 0x6433,
+       0x6390, 0x6390, 0x6390, 0x6390, 0x6390, 0x6390, 0x6390, 0x6390,
+       0x1078, 0x12cd, 0x0e7e, 0x0d7e, 0x2071, 0x7c8c, 0x6110, 0x2168,
+       0x7614, 0xa6b4, 0x0fff, 0x86ff, 0x0040, 0x63ff, 0xa68c, 0x00ff,
+       0xa186, 0x0002, 0x0040, 0x63c4, 0xa186, 0x0028, 0x00c0, 0x63ae,
+       0x1078, 0x6bbd, 0x684b, 0x001c, 0x0078, 0x63c6, 0xd6dc, 0x0040,
+       0x63b9, 0x684b, 0x0015, 0x7318, 0x6b62, 0x731c, 0x6b5e, 0x0078,
+       0x63c6, 0xd6d4, 0x0040, 0x63c4, 0x684b, 0x0007, 0x7318, 0x6b62,
+       0x731c, 0x6b5e, 0x0078, 0x63c6, 0x684b, 0x0000, 0x6837, 0x0103,
+       0x6e46, 0xa01e, 0xd6c4, 0x0040, 0x63d9, 0x7328, 0x732c, 0x6b56,
+       0x037e, 0x2308, 0x2019, 0x7c98, 0xad90, 0x0019, 0x1078, 0x6841,
+       0x037f, 0xd6cc, 0x0040, 0x640f, 0x7124, 0x695a, 0xa192, 0x0021,
+       0x00c8, 0x63ed, 0x2071, 0x7c98, 0x831c, 0x2300, 0xae18, 0xad90,
+       0x001d, 0x1078, 0x6841, 0x0078, 0x640f, 0x6838, 0xd0fc, 0x0040,
+       0x63f6, 0x2009, 0x0020, 0x695a, 0x0078, 0x63e2, 0x0f7e, 0x2d78,
+       0x1078, 0x67d9, 0x0f7f, 0x1078, 0x682e, 0x0078, 0x6411, 0x684b,
+       0x0000, 0x6837, 0x0103, 0x6e46, 0x684c, 0xd0ac, 0x0040, 0x640f,
+       0x6810, 0x6914, 0xa115, 0x0040, 0x640f, 0x1078, 0x6587, 0x1078,
+       0x3b92, 0x6218, 0x2268, 0x6a3c, 0x8211, 0x6a3e, 0x0d7f, 0x0e7f,
+       0x1078, 0x5d1a, 0x007c, 0x0f7e, 0x6003, 0x0003, 0x2079, 0x7c8c,
        0x7c04, 0x7b00, 0x7e0c, 0x7d08, 0x6010, 0x2078, 0x7c12, 0x7b16,
-       0x7e0a, 0x7d0e, 0x0f7f, 0x2c10, 0x1078, 0x19c7, 0x1078, 0x4889,
-       0x1078, 0x4d32, 0x007c, 0x6003, 0x0004, 0x6110, 0x20e1, 0x0005,
+       0x7e0a, 0x7d0e, 0x0f7f, 0x2c10, 0x1078, 0x19c7, 0x1078, 0x49ad,
+       0x1078, 0x4e56, 0x007c, 0x6003, 0x0004, 0x6110, 0x20e1, 0x0005,
        0x3d18, 0x3e20, 0x2c10, 0x1078, 0x156a, 0x007c, 0xa182, 0x0040,
-       0x0079, 0x6322, 0x6332, 0x6332, 0x6332, 0x6332, 0x6332, 0x6334,
-       0x63cb, 0x6332, 0x6332, 0x63e1, 0x6443, 0x6332, 0x6332, 0x6332,
-       0x6332, 0x644e, 0x1078, 0x12cd, 0x077e, 0x0f7e, 0x0e7e, 0x0d7e,
-       0x2071, 0x7b8c, 0x6110, 0x2178, 0x7614, 0xa6b4, 0x0fff, 0x7e46,
+       0x0079, 0x6442, 0x6452, 0x6452, 0x6452, 0x6452, 0x6452, 0x6454,
+       0x64eb, 0x6452, 0x6452, 0x6501, 0x6563, 0x6452, 0x6452, 0x6452,
+       0x6452, 0x656e, 0x1078, 0x12cd, 0x077e, 0x0f7e, 0x0e7e, 0x0d7e,
+       0x2071, 0x7c8c, 0x6110, 0x2178, 0x7614, 0xa6b4, 0x0fff, 0x7e46,
        0x7f4c, 0xc7e5, 0x7f4e, 0x6218, 0x2268, 0x6a3c, 0x8211, 0x6a3e,
-       0x86ff, 0x0040, 0x63c6, 0xa694, 0xff00, 0xa284, 0x0c00, 0x0040,
-       0x6355, 0x7018, 0x7862, 0x701c, 0x785e, 0xa284, 0x0300, 0x0040,
-       0x63c6, 0x1078, 0x1327, 0x1040, 0x12cd, 0x2d00, 0x784a, 0x7f4c,
+       0x86ff, 0x0040, 0x64e6, 0xa694, 0xff00, 0xa284, 0x0c00, 0x0040,
+       0x6475, 0x7018, 0x7862, 0x701c, 0x785e, 0xa284, 0x0300, 0x0040,
+       0x64e6, 0x1078, 0x1327, 0x1040, 0x12cd, 0x2d00, 0x784a, 0x7f4c,
        0xc7cd, 0x7f4e, 0x6837, 0x0103, 0x7838, 0x683a, 0x783c, 0x683e,
        0x7840, 0x6842, 0x6e46, 0xa68c, 0x00ff, 0xa186, 0x0002, 0x0040,
-       0x638f, 0xa186, 0x0028, 0x00c0, 0x6379, 0x684b, 0x001c, 0x0078,
-       0x6391, 0xd6dc, 0x0040, 0x6384, 0x684b, 0x0015, 0x7318, 0x6b62,
-       0x731c, 0x6b5e, 0x0078, 0x6391, 0xd6d4, 0x0040, 0x638f, 0x684b,
-       0x0007, 0x7318, 0x6b62, 0x731c, 0x6b5e, 0x0078, 0x6391, 0x684b,
+       0x64af, 0xa186, 0x0028, 0x00c0, 0x6499, 0x684b, 0x001c, 0x0078,
+       0x64b1, 0xd6dc, 0x0040, 0x64a4, 0x684b, 0x0015, 0x7318, 0x6b62,
+       0x731c, 0x6b5e, 0x0078, 0x64b1, 0xd6d4, 0x0040, 0x64af, 0x684b,
+       0x0007, 0x7318, 0x6b62, 0x731c, 0x6b5e, 0x0078, 0x64b1, 0x684b,
        0x0000, 0x6f4e, 0x7850, 0x6852, 0x7854, 0x6856, 0xa01e, 0xd6c4,
-       0x0040, 0x63a6, 0x7328, 0x732c, 0x6b56, 0x037e, 0x2308, 0x2019,
-       0x7b98, 0xad90, 0x0019, 0x1078, 0x6721, 0x037f, 0xd6cc, 0x0040,
-       0x63c6, 0x7124, 0x695a, 0xa192, 0x0021, 0x00c8, 0x63ba, 0x2071,
-       0x7b98, 0x831c, 0x2300, 0xae18, 0xad90, 0x001d, 0x1078, 0x6721,
-       0x0078, 0x63c6, 0x7838, 0xd0fc, 0x0040, 0x63c3, 0x2009, 0x0020,
-       0x695a, 0x0078, 0x63af, 0x2d78, 0x1078, 0x66b9, 0x0d7f, 0x0e7f,
-       0x0f7f, 0x077f, 0x007c, 0x0f7e, 0x6003, 0x0003, 0x2079, 0x7b8c,
+       0x0040, 0x64c6, 0x7328, 0x732c, 0x6b56, 0x037e, 0x2308, 0x2019,
+       0x7c98, 0xad90, 0x0019, 0x1078, 0x6841, 0x037f, 0xd6cc, 0x0040,
+       0x64e6, 0x7124, 0x695a, 0xa192, 0x0021, 0x00c8, 0x64da, 0x2071,
+       0x7c98, 0x831c, 0x2300, 0xae18, 0xad90, 0x001d, 0x1078, 0x6841,
+       0x0078, 0x64e6, 0x7838, 0xd0fc, 0x0040, 0x64e3, 0x2009, 0x0020,
+       0x695a, 0x0078, 0x64cf, 0x2d78, 0x1078, 0x67d9, 0x0d7f, 0x0e7f,
+       0x0f7f, 0x077f, 0x007c, 0x0f7e, 0x6003, 0x0003, 0x2079, 0x7c8c,
        0x7c04, 0x7b00, 0x7e0c, 0x7d08, 0x6010, 0x2078, 0x7c12, 0x7b16,
-       0x7e0a, 0x7d0e, 0x0f7f, 0x2c10, 0x1078, 0x19c7, 0x1078, 0x555f,
-       0x007c, 0x0d7e, 0x6003, 0x0002, 0x1078, 0x4c21, 0x1078, 0x4d32,
-       0x6110, 0x2168, 0x694c, 0xd1e4, 0x0040, 0x6441, 0xd1cc, 0x0040,
-       0x641c, 0x6948, 0x6838, 0xd0fc, 0x0040, 0x6414, 0x017e, 0x684c,
+       0x7e0a, 0x7d0e, 0x0f7f, 0x2c10, 0x1078, 0x19c7, 0x1078, 0x5681,
+       0x007c, 0x0d7e, 0x6003, 0x0002, 0x1078, 0x4d45, 0x1078, 0x4e56,
+       0x6110, 0x2168, 0x694c, 0xd1e4, 0x0040, 0x6561, 0xd1cc, 0x0040,
+       0x653c, 0x6948, 0x6838, 0xd0fc, 0x0040, 0x6534, 0x017e, 0x684c,
        0x007e, 0x6850, 0x007e, 0xad90, 0x000d, 0xa198, 0x000d, 0x2009,
        0x0020, 0x157e, 0x21a8, 0x2304, 0x2012, 0x8318, 0x8210, 0x00f0,
-       0x6403, 0x157f, 0x007f, 0x6852, 0x007f, 0x684e, 0x017f, 0x2168,
-       0x1078, 0x1350, 0x0078, 0x643f, 0x017e, 0x1078, 0x1350, 0x0d7f,
-       0x1078, 0x670e, 0x0078, 0x643f, 0x6837, 0x0103, 0x6944, 0xa184,
-       0x00ff, 0xa186, 0x0002, 0x0040, 0x643b, 0xa086, 0x0028, 0x00c0,
-       0x642d, 0x684b, 0x001c, 0x0078, 0x643d, 0xd1dc, 0x0040, 0x6434,
-       0x684b, 0x0015, 0x0078, 0x643d, 0xd1d4, 0x0040, 0x643b, 0x684b,
-       0x0007, 0x0078, 0x643d, 0x684b, 0x0000, 0x1078, 0x3a72, 0x1078,
-       0x5bfa, 0x0d7f, 0x007c, 0x2019, 0x0001, 0x1078, 0x5760, 0x6003,
-       0x0002, 0x1078, 0x4c21, 0x1078, 0x4d32, 0x007c, 0x1078, 0x4c21,
-       0x1078, 0x22b5, 0x0d7e, 0x6110, 0x2168, 0x1078, 0x6938, 0x0040,
-       0x6461, 0x6837, 0x0103, 0x684b, 0x0029, 0x1078, 0x3a72, 0x1078,
-       0x6a89, 0x0d7f, 0x1078, 0x5bfa, 0x1078, 0x4d32, 0x007c, 0x684b,
-       0x0015, 0xd1fc, 0x0040, 0x6473, 0x684b, 0x0007, 0x8002, 0x8000,
+       0x6523, 0x157f, 0x007f, 0x6852, 0x007f, 0x684e, 0x017f, 0x2168,
+       0x1078, 0x1350, 0x0078, 0x655f, 0x017e, 0x1078, 0x1350, 0x0d7f,
+       0x1078, 0x682e, 0x0078, 0x655f, 0x6837, 0x0103, 0x6944, 0xa184,
+       0x00ff, 0xa186, 0x0002, 0x0040, 0x655b, 0xa086, 0x0028, 0x00c0,
+       0x654d, 0x684b, 0x001c, 0x0078, 0x655d, 0xd1dc, 0x0040, 0x6554,
+       0x684b, 0x0015, 0x0078, 0x655d, 0xd1d4, 0x0040, 0x655b, 0x684b,
+       0x0007, 0x0078, 0x655d, 0x684b, 0x0000, 0x1078, 0x3b92, 0x1078,
+       0x5d1a, 0x0d7f, 0x007c, 0x2019, 0x0001, 0x1078, 0x5880, 0x6003,
+       0x0002, 0x1078, 0x4d45, 0x1078, 0x4e56, 0x007c, 0x1078, 0x4d45,
+       0x1078, 0x22b5, 0x0d7e, 0x6110, 0x2168, 0x1078, 0x6a58, 0x0040,
+       0x6581, 0x6837, 0x0103, 0x684b, 0x0029, 0x1078, 0x3b92, 0x1078,
+       0x6ba9, 0x0d7f, 0x1078, 0x5d1a, 0x1078, 0x4e56, 0x007c, 0x684b,
+       0x0015, 0xd1fc, 0x0040, 0x6593, 0x684b, 0x0007, 0x8002, 0x8000,
        0x810a, 0xa189, 0x0000, 0x6962, 0x685e, 0x007c, 0xa182, 0x0040,
-       0x0079, 0x647a, 0x648a, 0x648a, 0x648a, 0x648a, 0x648a, 0x648c,
-       0x648a, 0x6530, 0x6538, 0x648a, 0x648a, 0x648a, 0x648a, 0x648a,
-       0x648a, 0x648a, 0x1078, 0x12cd, 0x077e, 0x0f7e, 0x0e7e, 0x0d7e,
-       0x2071, 0x7b8c, 0x6110, 0x2178, 0x7614, 0xa6b4, 0x0fff, 0x7e46,
+       0x0079, 0x659a, 0x65aa, 0x65aa, 0x65aa, 0x65aa, 0x65aa, 0x65ac,
+       0x65aa, 0x6650, 0x6658, 0x65aa, 0x65aa, 0x65aa, 0x65aa, 0x65aa,
+       0x65aa, 0x65aa, 0x1078, 0x12cd, 0x077e, 0x0f7e, 0x0e7e, 0x0d7e,
+       0x2071, 0x7c8c, 0x6110, 0x2178, 0x7614, 0xa6b4, 0x0fff, 0x7e46,
        0x7f4c, 0xc7e5, 0x7f4e, 0x6218, 0x2268, 0x6a3c, 0x8211, 0x6a3e,
-       0x86ff, 0x0040, 0x6522, 0xa694, 0xff00, 0xa284, 0x0c00, 0x0040,
-       0x64ad, 0x7018, 0x7862, 0x701c, 0x785e, 0xa284, 0x0300, 0x0040,
-       0x651f, 0x1078, 0x1327, 0x1040, 0x12cd, 0x2d00, 0x784a, 0x7f4c,
+       0x86ff, 0x0040, 0x6642, 0xa694, 0xff00, 0xa284, 0x0c00, 0x0040,
+       0x65cd, 0x7018, 0x7862, 0x701c, 0x785e, 0xa284, 0x0300, 0x0040,
+       0x663f, 0x1078, 0x1327, 0x1040, 0x12cd, 0x2d00, 0x784a, 0x7f4c,
        0xa7bd, 0x0200, 0x7f4e, 0x6837, 0x0103, 0x7838, 0x683a, 0x783c,
        0x683e, 0x7840, 0x6842, 0x6e46, 0xa68c, 0x00ff, 0xa186, 0x0002,
-       0x0040, 0x64e8, 0xa186, 0x0028, 0x00c0, 0x64d2, 0x684b, 0x001c,
-       0x0078, 0x64ea, 0xd6dc, 0x0040, 0x64dd, 0x684b, 0x0015, 0x7318,
-       0x6b62, 0x731c, 0x6b5e, 0x0078, 0x64ea, 0xd6d4, 0x0040, 0x64e8,
-       0x684b, 0x0007, 0x7318, 0x6b62, 0x731c, 0x6b5e, 0x0078, 0x64ea,
+       0x0040, 0x6608, 0xa186, 0x0028, 0x00c0, 0x65f2, 0x684b, 0x001c,
+       0x0078, 0x660a, 0xd6dc, 0x0040, 0x65fd, 0x684b, 0x0015, 0x7318,
+       0x6b62, 0x731c, 0x6b5e, 0x0078, 0x660a, 0xd6d4, 0x0040, 0x6608,
+       0x684b, 0x0007, 0x7318, 0x6b62, 0x731c, 0x6b5e, 0x0078, 0x660a,
        0x684b, 0x0000, 0x6f4e, 0x7850, 0x6852, 0x7854, 0x6856, 0xa01e,
-       0xd6c4, 0x0040, 0x64ff, 0x7328, 0x732c, 0x6b56, 0x037e, 0x2308,
-       0x2019, 0x7b98, 0xad90, 0x0019, 0x1078, 0x6721, 0x037f, 0xd6cc,
-       0x0040, 0x651f, 0x7124, 0x695a, 0xa192, 0x0021, 0x00c8, 0x6513,
-       0x2071, 0x7b98, 0x831c, 0x2300, 0xae18, 0xad90, 0x001d, 0x1078,
-       0x6721, 0x0078, 0x651f, 0x7838, 0xd0fc, 0x0040, 0x651c, 0x2009,
-       0x0020, 0x695a, 0x0078, 0x6508, 0x2d78, 0x1078, 0x66b9, 0xd6dc,
-       0x00c0, 0x6525, 0xa006, 0x0078, 0x6529, 0x2001, 0x0001, 0x7218,
+       0xd6c4, 0x0040, 0x661f, 0x7328, 0x732c, 0x6b56, 0x037e, 0x2308,
+       0x2019, 0x7c98, 0xad90, 0x0019, 0x1078, 0x6841, 0x037f, 0xd6cc,
+       0x0040, 0x663f, 0x7124, 0x695a, 0xa192, 0x0021, 0x00c8, 0x6633,
+       0x2071, 0x7c98, 0x831c, 0x2300, 0xae18, 0xad90, 0x001d, 0x1078,
+       0x6841, 0x0078, 0x663f, 0x7838, 0xd0fc, 0x0040, 0x663c, 0x2009,
+       0x0020, 0x695a, 0x0078, 0x6628, 0x2d78, 0x1078, 0x67d9, 0xd6dc,
+       0x00c0, 0x6645, 0xa006, 0x0078, 0x6649, 0x2001, 0x0001, 0x7218,
        0x731c, 0x1078, 0x15ae, 0x0d7f, 0x0e7f, 0x0f7f, 0x077f, 0x007c,
        0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10, 0x1078, 0x156a, 0x007c,
        0x0d7e, 0x6003, 0x0002, 0x6110, 0x2168, 0x694c, 0xd1e4, 0x0040,
-       0x659f, 0xd1cc, 0x0040, 0x656f, 0x6948, 0x6838, 0xd0fc, 0x0040,
-       0x6567, 0x017e, 0x684c, 0x007e, 0x6850, 0x007e, 0xad90, 0x000d,
+       0x66bf, 0xd1cc, 0x0040, 0x668f, 0x6948, 0x6838, 0xd0fc, 0x0040,
+       0x6687, 0x017e, 0x684c, 0x007e, 0x6850, 0x007e, 0xad90, 0x000d,
        0xa198, 0x000d, 0x2009, 0x0020, 0x157e, 0x21a8, 0x2304, 0x2012,
-       0x8318, 0x8210, 0x00f0, 0x6556, 0x157f, 0x007f, 0x6852, 0x007f,
-       0x684e, 0x017f, 0x2168, 0x1078, 0x1350, 0x0078, 0x659d, 0x017e,
-       0x1078, 0x1350, 0x0d7f, 0x1078, 0x670e, 0x0078, 0x659d, 0x6837,
-       0x0103, 0x6944, 0xa184, 0x00ff, 0xa186, 0x0002, 0x0040, 0x658e,
-       0xa086, 0x0028, 0x00c0, 0x6580, 0x684b, 0x001c, 0x0078, 0x659b,
-       0xd1dc, 0x0040, 0x6587, 0x684b, 0x0015, 0x0078, 0x659b, 0xd1d4,
-       0x0040, 0x658e, 0x684b, 0x0007, 0x0078, 0x659b, 0x684b, 0x0000,
-       0x684c, 0xd0ac, 0x0040, 0x659b, 0x6810, 0x6914, 0xa115, 0x0040,
-       0x659b, 0x1078, 0x6467, 0x1078, 0x3a72, 0x1078, 0x5bfa, 0x0d7f,
-       0x007c, 0x1078, 0x4b79, 0x0078, 0x65a7, 0x1078, 0x4c21, 0x1078,
-       0x6938, 0x0040, 0x65be, 0x0d7e, 0x6110, 0x2168, 0x6837, 0x0103,
-       0x2009, 0x760c, 0x210c, 0xd18c, 0x00c0, 0x65c7, 0xd184, 0x00c0,
-       0x65c3, 0x6108, 0x694a, 0x1078, 0x3a72, 0x0d7f, 0x1078, 0x5bfa,
-       0x1078, 0x4c72, 0x007c, 0x684b, 0x0004, 0x0078, 0x65bb, 0x684b,
-       0x0004, 0x0078, 0x65bb, 0xa182, 0x0040, 0x0079, 0x65cf, 0x65df,
-       0x65df, 0x65df, 0x65df, 0x65df, 0x65e1, 0x65df, 0x65e4, 0x65df,
-       0x65df, 0x65df, 0x65df, 0x65df, 0x65df, 0x65df, 0x65df, 0x1078,
-       0x12cd, 0x1078, 0x5bfa, 0x007c, 0x007e, 0x027e, 0xa016, 0x1078,
-       0x156a, 0x027f, 0x007f, 0x007c, 0xa182, 0x0085, 0x0079, 0x65f0,
-       0x65f9, 0x65f7, 0x65f7, 0x65f7, 0x65f7, 0x65f7, 0x65f7, 0x1078,
-       0x12cd, 0x6003, 0x0001, 0x6106, 0x1078, 0x481d, 0x127e, 0x2091,
-       0x8000, 0x1078, 0x4c72, 0x127f, 0x007c, 0xa186, 0x0013, 0x00c0,
-       0x660f, 0x6004, 0xa082, 0x0085, 0x2008, 0x0079, 0x6643, 0xa186,
-       0x0027, 0x00c0, 0x6630, 0x1078, 0x4b79, 0x1078, 0x22b5, 0x0d7e,
-       0x6010, 0x2068, 0x1078, 0x6938, 0x0040, 0x6626, 0x6837, 0x0103,
-       0x684b, 0x0029, 0x1078, 0x3a72, 0x1078, 0x6a89, 0x0d7f, 0x1078,
-       0x5bfa, 0x1078, 0x4c72, 0x007c, 0x1078, 0x5c2f, 0x0078, 0x662b,
-       0xa186, 0x0014, 0x00c0, 0x662c, 0x1078, 0x4b79, 0x0d7e, 0x6010,
-       0x2068, 0x1078, 0x6938, 0x0040, 0x6626, 0x6837, 0x0103, 0x684b,
-       0x0006, 0x0078, 0x6622, 0x664c, 0x664a, 0x664a, 0x664a, 0x664a,
-       0x664a, 0x6655, 0x1078, 0x12cd, 0x1078, 0x4b79, 0x6017, 0x0014,
-       0x6003, 0x000c, 0x1078, 0x4c72, 0x007c, 0x1078, 0x4b79, 0x6017,
-       0x0014, 0x6003, 0x000e, 0x1078, 0x4c72, 0x007c, 0xa182, 0x008c,
-       0x00c8, 0x6668, 0xa182, 0x0085, 0x0048, 0x6668, 0x0079, 0x666b,
-       0x1078, 0x5c2f, 0x007c, 0x6672, 0x6672, 0x6672, 0x6672, 0x6674,
-       0x6693, 0x6672, 0x1078, 0x12cd, 0x0d7e, 0x1078, 0x6a89, 0x1078,
-       0x6938, 0x0040, 0x668f, 0x6010, 0x2068, 0x6837, 0x0103, 0x6850,
-       0xd0b4, 0x0040, 0x6687, 0x684b, 0x0006, 0x0078, 0x668b, 0x684b,
-       0x0005, 0x1078, 0x6b3c, 0x6847, 0x0000, 0x1078, 0x3a72, 0x1078,
-       0x5bfa, 0x0d7f, 0x007c, 0x0d7e, 0x6010, 0x2068, 0x1078, 0x6938,
-       0x0040, 0x66ae, 0x6837, 0x0103, 0x6850, 0xd0b4, 0x0040, 0x66a4,
-       0x684b, 0x0006, 0x0078, 0x66a8, 0x684b, 0x0005, 0x1078, 0x6b3c,
-       0x6847, 0x0000, 0x1078, 0x3a72, 0x1078, 0x6a89, 0x0d7f, 0x1078,
-       0x5bfa, 0x007c, 0x1078, 0x4b79, 0x1078, 0x5bfa, 0x1078, 0x4c72,
+       0x8318, 0x8210, 0x00f0, 0x6676, 0x157f, 0x007f, 0x6852, 0x007f,
+       0x684e, 0x017f, 0x2168, 0x1078, 0x1350, 0x0078, 0x66bd, 0x017e,
+       0x1078, 0x1350, 0x0d7f, 0x1078, 0x682e, 0x0078, 0x66bd, 0x6837,
+       0x0103, 0x6944, 0xa184, 0x00ff, 0xa186, 0x0002, 0x0040, 0x66ae,
+       0xa086, 0x0028, 0x00c0, 0x66a0, 0x684b, 0x001c, 0x0078, 0x66bb,
+       0xd1dc, 0x0040, 0x66a7, 0x684b, 0x0015, 0x0078, 0x66bb, 0xd1d4,
+       0x0040, 0x66ae, 0x684b, 0x0007, 0x0078, 0x66bb, 0x684b, 0x0000,
+       0x684c, 0xd0ac, 0x0040, 0x66bb, 0x6810, 0x6914, 0xa115, 0x0040,
+       0x66bb, 0x1078, 0x6587, 0x1078, 0x3b92, 0x1078, 0x5d1a, 0x0d7f,
+       0x007c, 0x1078, 0x4c9d, 0x0078, 0x66c7, 0x1078, 0x4d45, 0x1078,
+       0x6a58, 0x0040, 0x66de, 0x0d7e, 0x6110, 0x2168, 0x6837, 0x0103,
+       0x2009, 0x770c, 0x210c, 0xd18c, 0x00c0, 0x66e7, 0xd184, 0x00c0,
+       0x66e3, 0x6108, 0x694a, 0x1078, 0x3b92, 0x0d7f, 0x1078, 0x5d1a,
+       0x1078, 0x4d96, 0x007c, 0x684b, 0x0004, 0x0078, 0x66db, 0x684b,
+       0x0004, 0x0078, 0x66db, 0xa182, 0x0040, 0x0079, 0x66ef, 0x66ff,
+       0x66ff, 0x66ff, 0x66ff, 0x66ff, 0x6701, 0x66ff, 0x6704, 0x66ff,
+       0x66ff, 0x66ff, 0x66ff, 0x66ff, 0x66ff, 0x66ff, 0x66ff, 0x1078,
+       0x12cd, 0x1078, 0x5d1a, 0x007c, 0x007e, 0x027e, 0xa016, 0x1078,
+       0x156a, 0x027f, 0x007f, 0x007c, 0xa182, 0x0085, 0x0079, 0x6710,
+       0x6719, 0x6717, 0x6717, 0x6717, 0x6717, 0x6717, 0x6717, 0x1078,
+       0x12cd, 0x6003, 0x0001, 0x6106, 0x1078, 0x4941, 0x127e, 0x2091,
+       0x8000, 0x1078, 0x4d96, 0x127f, 0x007c, 0xa186, 0x0013, 0x00c0,
+       0x672f, 0x6004, 0xa082, 0x0085, 0x2008, 0x0079, 0x6763, 0xa186,
+       0x0027, 0x00c0, 0x6750, 0x1078, 0x4c9d, 0x1078, 0x22b5, 0x0d7e,
+       0x6010, 0x2068, 0x1078, 0x6a58, 0x0040, 0x6746, 0x6837, 0x0103,
+       0x684b, 0x0029, 0x1078, 0x3b92, 0x1078, 0x6ba9, 0x0d7f, 0x1078,
+       0x5d1a, 0x1078, 0x4d96, 0x007c, 0x1078, 0x5d4f, 0x0078, 0x674b,
+       0xa186, 0x0014, 0x00c0, 0x674c, 0x1078, 0x4c9d, 0x0d7e, 0x6010,
+       0x2068, 0x1078, 0x6a58, 0x0040, 0x6746, 0x6837, 0x0103, 0x684b,
+       0x0006, 0x0078, 0x6742, 0x676c, 0x676a, 0x676a, 0x676a, 0x676a,
+       0x676a, 0x6775, 0x1078, 0x12cd, 0x1078, 0x4c9d, 0x6017, 0x0014,
+       0x6003, 0x000c, 0x1078, 0x4d96, 0x007c, 0x1078, 0x4c9d, 0x6017,
+       0x0014, 0x6003, 0x000e, 0x1078, 0x4d96, 0x007c, 0xa182, 0x008c,
+       0x00c8, 0x6788, 0xa182, 0x0085, 0x0048, 0x6788, 0x0079, 0x678b,
+       0x1078, 0x5d4f, 0x007c, 0x6792, 0x6792, 0x6792, 0x6792, 0x6794,
+       0x67b3, 0x6792, 0x1078, 0x12cd, 0x0d7e, 0x1078, 0x6ba9, 0x1078,
+       0x6a58, 0x0040, 0x67af, 0x6010, 0x2068, 0x6837, 0x0103, 0x6850,
+       0xd0b4, 0x0040, 0x67a7, 0x684b, 0x0006, 0x0078, 0x67ab, 0x684b,
+       0x0005, 0x1078, 0x6c5c, 0x6847, 0x0000, 0x1078, 0x3b92, 0x1078,
+       0x5d1a, 0x0d7f, 0x007c, 0x0d7e, 0x6010, 0x2068, 0x1078, 0x6a58,
+       0x0040, 0x67ce, 0x6837, 0x0103, 0x6850, 0xd0b4, 0x0040, 0x67c4,
+       0x684b, 0x0006, 0x0078, 0x67c8, 0x684b, 0x0005, 0x1078, 0x6c5c,
+       0x6847, 0x0000, 0x1078, 0x3b92, 0x1078, 0x6ba9, 0x0d7f, 0x1078,
+       0x5d1a, 0x007c, 0x1078, 0x4c9d, 0x1078, 0x5d1a, 0x1078, 0x4d96,
        0x007c, 0x057e, 0x067e, 0x0d7e, 0x0f7e, 0x2029, 0x0001, 0xa182,
-       0x0101, 0x00c8, 0x66c5, 0x0078, 0x66c7, 0x2009, 0x0100, 0x2130,
-       0x2069, 0x7b98, 0x831c, 0x2300, 0xad18, 0x2009, 0x0020, 0xaf90,
-       0x001d, 0x1078, 0x6721, 0xa6b2, 0x0020, 0x7804, 0xa06d, 0x0040,
-       0x66db, 0x1078, 0x1350, 0x1078, 0x1327, 0x0040, 0x6705, 0x8528,
+       0x0101, 0x00c8, 0x67e5, 0x0078, 0x67e7, 0x2009, 0x0100, 0x2130,
+       0x2069, 0x7c98, 0x831c, 0x2300, 0xad18, 0x2009, 0x0020, 0xaf90,
+       0x001d, 0x1078, 0x6841, 0xa6b2, 0x0020, 0x7804, 0xa06d, 0x0040,
+       0x67fb, 0x1078, 0x1350, 0x1078, 0x1327, 0x0040, 0x6825, 0x8528,
        0x6837, 0x0110, 0x683b, 0x0000, 0x2d20, 0x7c06, 0xa68a, 0x003d,
-       0x00c8, 0x66f1, 0x2608, 0xad90, 0x000f, 0x1078, 0x6721, 0x0078,
-       0x6705, 0xa6b2, 0x003c, 0x2009, 0x003c, 0x2d78, 0xad90, 0x000f,
-       0x1078, 0x6721, 0x0078, 0x66db, 0x0f7f, 0x852f, 0xa5ad, 0x0003,
-       0x7d36, 0xa5ac, 0x0000, 0x0078, 0x670a, 0x0f7f, 0x852f, 0xa5ad,
+       0x00c8, 0x6811, 0x2608, 0xad90, 0x000f, 0x1078, 0x6841, 0x0078,
+       0x6825, 0xa6b2, 0x003c, 0x2009, 0x003c, 0x2d78, 0xad90, 0x000f,
+       0x1078, 0x6841, 0x0078, 0x67fb, 0x0f7f, 0x852f, 0xa5ad, 0x0003,
+       0x7d36, 0xa5ac, 0x0000, 0x0078, 0x682a, 0x0f7f, 0x852f, 0xa5ad,
        0x0003, 0x7d36, 0x0d7f, 0x067f, 0x057f, 0x007c, 0x0f7e, 0x8dff,
-       0x0040, 0x671f, 0x6804, 0xa07d, 0x0040, 0x671d, 0x6807, 0x0000,
-       0x1078, 0x3a72, 0x2f68, 0x0078, 0x6712, 0x1078, 0x3a72, 0x0f7f,
-       0x007c, 0x157e, 0xa184, 0x0001, 0x0040, 0x6727, 0x8108, 0x810c,
-       0x21a8, 0x2304, 0x8007, 0x2012, 0x8318, 0x8210, 0x00f0, 0x6729,
+       0x0040, 0x683f, 0x6804, 0xa07d, 0x0040, 0x683d, 0x6807, 0x0000,
+       0x1078, 0x3b92, 0x2f68, 0x0078, 0x6832, 0x1078, 0x3b92, 0x0f7f,
+       0x007c, 0x157e, 0xa184, 0x0001, 0x0040, 0x6847, 0x8108, 0x810c,
+       0x21a8, 0x2304, 0x8007, 0x2012, 0x8318, 0x8210, 0x00f0, 0x6849,
        0x157f, 0x007c, 0x127e, 0x2091, 0x8000, 0x601c, 0xa084, 0x000f,
-       0x1079, 0x673c, 0x127f, 0x007c, 0x674b, 0x6744, 0x6746, 0x6764,
-       0x6744, 0x6746, 0x6746, 0x6746, 0x1078, 0x12cd, 0xa006, 0x007c,
-       0xa085, 0x0001, 0x007c, 0x0d7e, 0x6010, 0x2068, 0x1078, 0x6938,
-       0x0040, 0x6761, 0xa00e, 0x2001, 0x0005, 0x1078, 0x3b02, 0x1078,
-       0x6b3c, 0x1078, 0x3a72, 0x1078, 0x5bfa, 0xa085, 0x0001, 0x0d7f,
-       0x007c, 0xa006, 0x0078, 0x675f, 0x6000, 0xa08a, 0x0010, 0x10c8,
-       0x12cd, 0x1079, 0x676c, 0x007c, 0x677c, 0x6799, 0x677e, 0x67aa,
-       0x6795, 0x677c, 0x6746, 0x674b, 0x674b, 0x6746, 0x6746, 0x6746,
-       0x6746, 0x6746, 0x6746, 0x6746, 0x1078, 0x12cd, 0x0d7e, 0x6010,
-       0x2068, 0x1078, 0x6938, 0x0040, 0x6787, 0x1078, 0x6b3c, 0x0d7f,
-       0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0002, 0x1078, 0x481d,
-       0x1078, 0x4c72, 0xa085, 0x0001, 0x007c, 0x1078, 0x166e, 0x0078,
-       0x677e, 0x0e7e, 0x2071, 0x7836, 0x7024, 0xac06, 0x00c0, 0x67a2,
-       0x1078, 0x56ce, 0x1078, 0x5603, 0x0e7f, 0x00c0, 0x677e, 0x1078,
-       0x6746, 0x007c, 0x037e, 0x0e7e, 0x2071, 0x7836, 0x703c, 0xac06,
-       0x00c0, 0x67ba, 0x2019, 0x0000, 0x1078, 0x5760, 0x0e7f, 0x037f,
-       0x0078, 0x677e, 0x1078, 0x5a3c, 0x0e7f, 0x037f, 0x00c0, 0x677e,
-       0x1078, 0x6746, 0x007c, 0x0c7e, 0x601c, 0xa084, 0x000f, 0x1079,
-       0x67cb, 0x0c7f, 0x007c, 0x67da, 0x6837, 0x68dc, 0x67de, 0x67da,
-       0x67da, 0x71d2, 0x5bfa, 0x6837, 0x1078, 0x6ac3, 0x00c0, 0x67da,
-       0x1078, 0x5e4d, 0x007c, 0x6017, 0x0001, 0x007c, 0x6000, 0xa08a,
-       0x0010, 0x10c8, 0x12cd, 0x1079, 0x67e6, 0x007c, 0x67f6, 0x67f8,
-       0x6818, 0x682a, 0x682a, 0x67f6, 0x67da, 0x67da, 0x67da, 0x682a,
-       0x682a, 0x67f6, 0x67f6, 0x67f6, 0x67f6, 0x6834, 0x1078, 0x12cd,
-       0x0e7e, 0x6010, 0x2070, 0x7050, 0xc0b5, 0x7052, 0x2071, 0x7836,
-       0x7024, 0xac06, 0x0040, 0x6814, 0x1078, 0x5603, 0x6007, 0x0085,
-       0x6003, 0x000b, 0x601f, 0x0002, 0x6017, 0x0014, 0x1078, 0x481d,
-       0x1078, 0x4c72, 0x0e7f, 0x007c, 0x6017, 0x0001, 0x0078, 0x6812,
+       0x1079, 0x685c, 0x127f, 0x007c, 0x686b, 0x6864, 0x6866, 0x6884,
+       0x6864, 0x6866, 0x6866, 0x6866, 0x1078, 0x12cd, 0xa006, 0x007c,
+       0xa085, 0x0001, 0x007c, 0x0d7e, 0x6010, 0x2068, 0x1078, 0x6a58,
+       0x0040, 0x6881, 0xa00e, 0x2001, 0x0005, 0x1078, 0x3c22, 0x1078,
+       0x6c5c, 0x1078, 0x3b92, 0x1078, 0x5d1a, 0xa085, 0x0001, 0x0d7f,
+       0x007c, 0xa006, 0x0078, 0x687f, 0x6000, 0xa08a, 0x0010, 0x10c8,
+       0x12cd, 0x1079, 0x688c, 0x007c, 0x689c, 0x68b9, 0x689e, 0x68ca,
+       0x68b5, 0x689c, 0x6866, 0x686b, 0x686b, 0x6866, 0x6866, 0x6866,
+       0x6866, 0x6866, 0x6866, 0x6866, 0x1078, 0x12cd, 0x0d7e, 0x6010,
+       0x2068, 0x1078, 0x6a58, 0x0040, 0x68a7, 0x1078, 0x6c5c, 0x0d7f,
+       0x6007, 0x0085, 0x6003, 0x000b, 0x601f, 0x0002, 0x1078, 0x4941,
+       0x1078, 0x4d96, 0xa085, 0x0001, 0x007c, 0x1078, 0x166e, 0x0078,
+       0x689e, 0x0e7e, 0x2071, 0x7936, 0x7024, 0xac06, 0x00c0, 0x68c2,
+       0x1078, 0x57ee, 0x1078, 0x5725, 0x0e7f, 0x00c0, 0x689e, 0x1078,
+       0x6866, 0x007c, 0x037e, 0x0e7e, 0x2071, 0x7936, 0x703c, 0xac06,
+       0x00c0, 0x68da, 0x2019, 0x0000, 0x1078, 0x5880, 0x0e7f, 0x037f,
+       0x0078, 0x689e, 0x1078, 0x5b5c, 0x0e7f, 0x037f, 0x00c0, 0x689e,
+       0x1078, 0x6866, 0x007c, 0x0c7e, 0x601c, 0xa084, 0x000f, 0x1079,
+       0x68eb, 0x0c7f, 0x007c, 0x68fa, 0x6957, 0x69fc, 0x68fe, 0x68fa,
+       0x68fa, 0x72dd, 0x5d1a, 0x6957, 0x1078, 0x6be3, 0x00c0, 0x68fa,
+       0x1078, 0x5f6d, 0x007c, 0x6017, 0x0001, 0x007c, 0x6000, 0xa08a,
+       0x0010, 0x10c8, 0x12cd, 0x1079, 0x6906, 0x007c, 0x6916, 0x6918,
+       0x6938, 0x694a, 0x694a, 0x6916, 0x68fa, 0x68fa, 0x68fa, 0x694a,
+       0x694a, 0x6916, 0x6916, 0x6916, 0x6916, 0x6954, 0x1078, 0x12cd,
+       0x0e7e, 0x6010, 0x2070, 0x7050, 0xc0b5, 0x7052, 0x2071, 0x7936,
+       0x7024, 0xac06, 0x0040, 0x6934, 0x1078, 0x5725, 0x6007, 0x0085,
+       0x6003, 0x000b, 0x601f, 0x0002, 0x6017, 0x0014, 0x1078, 0x4941,
+       0x1078, 0x4d96, 0x0e7f, 0x007c, 0x6017, 0x0001, 0x0078, 0x6932,
        0x0d7e, 0x6010, 0x2068, 0x6850, 0xc0b5, 0x6852, 0x0d7f, 0x6007,
-       0x0085, 0x6003, 0x000b, 0x601f, 0x0002, 0x1078, 0x481d, 0x1078,
-       0x4c72, 0x007c, 0x0d7e, 0x6017, 0x0001, 0x6010, 0x2068, 0x6850,
-       0xc0b5, 0x6852, 0x0d7f, 0x007c, 0x1078, 0x5bfa, 0x007c, 0x6000,
-       0xa08a, 0x0010, 0x10c8, 0x12cd, 0x1079, 0x683f, 0x007c, 0x684f,
-       0x67db, 0x6851, 0x684f, 0x6851, 0x684f, 0x684f, 0x684f, 0x67d4,
-       0x67d4, 0x684f, 0x684f, 0x684f, 0x684f, 0x684f, 0x684f, 0x1078,
+       0x0085, 0x6003, 0x000b, 0x601f, 0x0002, 0x1078, 0x4941, 0x1078,
+       0x4d96, 0x007c, 0x0d7e, 0x6017, 0x0001, 0x6010, 0x2068, 0x6850,
+       0xc0b5, 0x6852, 0x0d7f, 0x007c, 0x1078, 0x5d1a, 0x007c, 0x6000,
+       0xa08a, 0x0010, 0x10c8, 0x12cd, 0x1079, 0x695f, 0x007c, 0x696f,
+       0x68fb, 0x6971, 0x696f, 0x6971, 0x696f, 0x696f, 0x696f, 0x68f4,
+       0x68f4, 0x696f, 0x696f, 0x696f, 0x696f, 0x696f, 0x696f, 0x1078,
        0x12cd, 0x0d7e, 0x6018, 0x2068, 0x6804, 0xa084, 0x00ff, 0x0d7f,
-       0xa08a, 0x000c, 0x10c8, 0x12cd, 0x1079, 0x685f, 0x007c, 0x686b,
-       0x688a, 0x686b, 0x688a, 0x686b, 0x688a, 0x686d, 0x6876, 0x686b,
-       0x688a, 0x686b, 0x6883, 0x1078, 0x12cd, 0x6004, 0xa08e, 0x0004,
-       0x0040, 0x6885, 0xa08e, 0x0002, 0x0040, 0x6885, 0x6004, 0x1078,
-       0x6ac3, 0x0040, 0x68d4, 0xa08e, 0x0021, 0x0040, 0x68d8, 0xa08e,
-       0x0022, 0x0040, 0x68d4, 0x1078, 0x22b5, 0x1078, 0x5e4d, 0x1078,
-       0x5bfa, 0x007c, 0x0c7e, 0x0d7e, 0x6104, 0xa186, 0x0016, 0x0040,
-       0x68c4, 0xa186, 0x0002, 0x00c0, 0x68b3, 0x6018, 0x2068, 0x68a0,
-       0xd0bc, 0x00c0, 0x68b3, 0x6840, 0xa084, 0x00ff, 0xa005, 0x0040,
-       0x68b3, 0x8001, 0x6842, 0x6013, 0x0000, 0x601f, 0x0007, 0x6017,
-       0x0398, 0x1078, 0x5b94, 0x0040, 0x68b3, 0x2d00, 0x601a, 0x601f,
-       0x0001, 0x0078, 0x68c4, 0x0d7f, 0x0c7f, 0x1078, 0x5e4d, 0x1078,
+       0xa08a, 0x000c, 0x10c8, 0x12cd, 0x1079, 0x697f, 0x007c, 0x698b,
+       0x69aa, 0x698b, 0x69aa, 0x698b, 0x69aa, 0x698d, 0x6996, 0x698b,
+       0x69aa, 0x698b, 0x69a3, 0x1078, 0x12cd, 0x6004, 0xa08e, 0x0004,
+       0x0040, 0x69a5, 0xa08e, 0x0002, 0x0040, 0x69a5, 0x6004, 0x1078,
+       0x6be3, 0x0040, 0x69f4, 0xa08e, 0x0021, 0x0040, 0x69f8, 0xa08e,
+       0x0022, 0x0040, 0x69f4, 0x1078, 0x22b5, 0x1078, 0x5f6d, 0x1078,
+       0x5d1a, 0x007c, 0x0c7e, 0x0d7e, 0x6104, 0xa186, 0x0016, 0x0040,
+       0x69e4, 0xa186, 0x0002, 0x00c0, 0x69d3, 0x6018, 0x2068, 0x68a0,
+       0xd0bc, 0x00c0, 0x69d3, 0x6840, 0xa084, 0x00ff, 0xa005, 0x0040,
+       0x69d3, 0x8001, 0x6842, 0x6013, 0x0000, 0x601f, 0x0007, 0x6017,
+       0x0398, 0x1078, 0x5cb4, 0x0040, 0x69d3, 0x2d00, 0x601a, 0x601f,
+       0x0001, 0x0078, 0x69e4, 0x0d7f, 0x0c7f, 0x1078, 0x5f6d, 0x1078,
        0x22b5, 0x0e7e, 0x127e, 0x2091, 0x8000, 0x1078, 0x22d7, 0x127f,
-       0x0e7f, 0x1078, 0x5bfa, 0x007c, 0x2001, 0x0002, 0x1078, 0x37c9,
-       0x6003, 0x0001, 0x6007, 0x0002, 0x1078, 0x486a, 0x1078, 0x4c72,
-       0x0d7f, 0x0c7f, 0x0078, 0x68c3, 0x1078, 0x5e4d, 0x0078, 0x6887,
-       0x1078, 0x5e5c, 0x0078, 0x6887, 0x6000, 0xa08a, 0x0010, 0x10c8,
-       0x12cd, 0x1079, 0x68e4, 0x007c, 0x68f4, 0x68f4, 0x68f4, 0x68f4,
-       0x68f4, 0x68f4, 0x68f4, 0x68f4, 0x68f4, 0x67da, 0x68f4, 0x67db,
-       0x68f6, 0x67db, 0x68ff, 0x68f4, 0x1078, 0x12cd, 0x6007, 0x008b,
-       0x6003, 0x000d, 0x1078, 0x481d, 0x1078, 0x4c72, 0x007c, 0x1078,
-       0x6a89, 0x1078, 0x6938, 0x0040, 0x6921, 0x1078, 0x22b5, 0x0d7e,
-       0x1078, 0x6938, 0x0040, 0x6914, 0x6010, 0x2068, 0x6837, 0x0103,
-       0x684b, 0x0006, 0x1078, 0x3a72, 0x0d7f, 0x601f, 0x0001, 0x6007,
-       0x0001, 0x6003, 0x0001, 0x1078, 0x486a, 0x1078, 0x4c72, 0x0078,
-       0x6923, 0x1078, 0x5bfa, 0x007c, 0xa284, 0x0007, 0x00c0, 0x6935,
-       0xa282, 0x7d00, 0x0048, 0x6935, 0x2001, 0x7615, 0x2004, 0xa202,
-       0x00c8, 0x6935, 0xa085, 0x0001, 0x007c, 0xa006, 0x0078, 0x6934,
-       0x027e, 0x0e7e, 0x2071, 0x7600, 0x6210, 0x7058, 0xa202, 0x0048,
-       0x694a, 0x705c, 0xa202, 0x00c8, 0x694a, 0xa085, 0x0001, 0x0e7f,
-       0x027f, 0x007c, 0xa006, 0x0078, 0x6947, 0x0e7e, 0x0c7e, 0x037e,
-       0x007e, 0x127e, 0x2091, 0x8000, 0x2061, 0x7d00, 0x2071, 0x7600,
-       0x7344, 0x7060, 0xa302, 0x00c8, 0x6973, 0x601c, 0xa206, 0x00c0,
-       0x696b, 0x1078, 0x6ac3, 0x00c0, 0x6967, 0x1078, 0x5e4d, 0x0c7e,
-       0x1078, 0x5bfa, 0x0c7f, 0xace0, 0x0008, 0x7054, 0xac02, 0x00c8,
-       0x6973, 0x0078, 0x6958, 0x127f, 0x007f, 0x037f, 0x0c7f, 0x0e7f,
-       0x007c, 0x0e7e, 0x0c7e, 0x017e, 0xa188, 0x7720, 0x210c, 0x81ff,
-       0x0040, 0x6991, 0x2061, 0x7d00, 0x2071, 0x7600, 0x017e, 0x1078,
-       0x5b94, 0x017f, 0x0040, 0x6994, 0x611a, 0x1078, 0x22b5, 0x1078,
-       0x5bfa, 0xa006, 0x0078, 0x6996, 0xa085, 0x0001, 0x017f, 0x0c7f,
+       0x0e7f, 0x1078, 0x5d1a, 0x007c, 0x2001, 0x0002, 0x1078, 0x37f4,
+       0x6003, 0x0001, 0x6007, 0x0002, 0x1078, 0x498e, 0x1078, 0x4d96,
+       0x0d7f, 0x0c7f, 0x0078, 0x69e3, 0x1078, 0x5f6d, 0x0078, 0x69a7,
+       0x1078, 0x5f7c, 0x0078, 0x69a7, 0x6000, 0xa08a, 0x0010, 0x10c8,
+       0x12cd, 0x1079, 0x6a04, 0x007c, 0x6a14, 0x6a14, 0x6a14, 0x6a14,
+       0x6a14, 0x6a14, 0x6a14, 0x6a14, 0x6a14, 0x68fa, 0x6a14, 0x68fb,
+       0x6a16, 0x68fb, 0x6a1f, 0x6a14, 0x1078, 0x12cd, 0x6007, 0x008b,
+       0x6003, 0x000d, 0x1078, 0x4941, 0x1078, 0x4d96, 0x007c, 0x1078,
+       0x6ba9, 0x1078, 0x6a58, 0x0040, 0x6a41, 0x1078, 0x22b5, 0x0d7e,
+       0x1078, 0x6a58, 0x0040, 0x6a34, 0x6010, 0x2068, 0x6837, 0x0103,
+       0x684b, 0x0006, 0x1078, 0x3b92, 0x0d7f, 0x601f, 0x0001, 0x6007,
+       0x0001, 0x6003, 0x0001, 0x1078, 0x498e, 0x1078, 0x4d96, 0x0078,
+       0x6a43, 0x1078, 0x5d1a, 0x007c, 0xa284, 0x0007, 0x00c0, 0x6a55,
+       0xa282, 0x7e00, 0x0048, 0x6a55, 0x2001, 0x7715, 0x2004, 0xa202,
+       0x00c8, 0x6a55, 0xa085, 0x0001, 0x007c, 0xa006, 0x0078, 0x6a54,
+       0x027e, 0x0e7e, 0x2071, 0x7700, 0x6210, 0x7058, 0xa202, 0x0048,
+       0x6a6a, 0x705c, 0xa202, 0x00c8, 0x6a6a, 0xa085, 0x0001, 0x0e7f,
+       0x027f, 0x007c, 0xa006, 0x0078, 0x6a67, 0x0e7e, 0x0c7e, 0x037e,
+       0x007e, 0x127e, 0x2091, 0x8000, 0x2061, 0x7e00, 0x2071, 0x7700,
+       0x7344, 0x7060, 0xa302, 0x00c8, 0x6a93, 0x601c, 0xa206, 0x00c0,
+       0x6a8b, 0x1078, 0x6be3, 0x00c0, 0x6a87, 0x1078, 0x5f6d, 0x0c7e,
+       0x1078, 0x5d1a, 0x0c7f, 0xace0, 0x0008, 0x7054, 0xac02, 0x00c8,
+       0x6a93, 0x0078, 0x6a78, 0x127f, 0x007f, 0x037f, 0x0c7f, 0x0e7f,
+       0x007c, 0x0e7e, 0x0c7e, 0x017e, 0xa188, 0x7820, 0x210c, 0x81ff,
+       0x0040, 0x6ab1, 0x2061, 0x7e00, 0x2071, 0x7700, 0x017e, 0x1078,
+       0x5cb4, 0x017f, 0x0040, 0x6ab4, 0x611a, 0x1078, 0x22b5, 0x1078,
+       0x5d1a, 0xa006, 0x0078, 0x6ab6, 0xa085, 0x0001, 0x017f, 0x0c7f,
        0x0e7f, 0x007c, 0x0c7e, 0x057e, 0x127e, 0x2091, 0x8000, 0x0c7e,
-       0x1078, 0x5b94, 0x057f, 0x0040, 0x69b3, 0x6612, 0x651a, 0x601f,
-       0x0003, 0x2009, 0x004b, 0x1078, 0x5c21, 0xa085, 0x0001, 0x127f,
-       0x057f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x69af, 0x0c7e, 0x057e,
-       0x127e, 0x2091, 0x8000, 0x62a0, 0x0c7e, 0x1078, 0x5b94, 0x057f,
-       0x0040, 0x69dd, 0x6013, 0x0000, 0x651a, 0x601f, 0x0003, 0x0c7e,
-       0x2560, 0x1078, 0x399e, 0x0c7f, 0x1078, 0x495a, 0x1078, 0x489d,
-       0x2c08, 0x1078, 0x7370, 0x2009, 0x004c, 0x1078, 0x5c21, 0xa085,
-       0x0001, 0x127f, 0x057f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x69d9,
+       0x1078, 0x5cb4, 0x057f, 0x0040, 0x6ad3, 0x6612, 0x651a, 0x601f,
+       0x0003, 0x2009, 0x004b, 0x1078, 0x5d41, 0xa085, 0x0001, 0x127f,
+       0x057f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x6acf, 0x0c7e, 0x057e,
+       0x127e, 0x2091, 0x8000, 0x62a0, 0x0c7e, 0x1078, 0x5cb4, 0x057f,
+       0x0040, 0x6afd, 0x6013, 0x0000, 0x651a, 0x601f, 0x0003, 0x0c7e,
+       0x2560, 0x1078, 0x3a36, 0x0c7f, 0x1078, 0x4a7e, 0x1078, 0x49c1,
+       0x2c08, 0x1078, 0x747b, 0x2009, 0x004c, 0x1078, 0x5d41, 0xa085,
+       0x0001, 0x127f, 0x057f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x6af9,
        0x0c7e, 0x057e, 0x127e, 0x2091, 0x8000, 0x62a0, 0x0c7e, 0x1078,
-       0x5b94, 0x057f, 0x0040, 0x6a08, 0x6612, 0x651a, 0x601f, 0x0003,
-       0x2019, 0x0005, 0x0c7e, 0x2560, 0x1078, 0x399e, 0x0c7f, 0x1078,
-       0x495a, 0x1078, 0x489d, 0x2c08, 0x1078, 0x7370, 0x2009, 0x004d,
-       0x1078, 0x5c21, 0xa085, 0x0001, 0x127f, 0x057f, 0x0c7f, 0x007c,
-       0xa006, 0x0078, 0x6a04, 0x0c7e, 0x057e, 0x127e, 0x2091, 0x8000,
-       0x62a0, 0x0c7e, 0x1078, 0x5b94, 0x057f, 0x0040, 0x6a33, 0x6612,
+       0x5cb4, 0x057f, 0x0040, 0x6b28, 0x6612, 0x651a, 0x601f, 0x0003,
+       0x2019, 0x0005, 0x0c7e, 0x2560, 0x1078, 0x3a36, 0x0c7f, 0x1078,
+       0x4a7e, 0x1078, 0x49c1, 0x2c08, 0x1078, 0x747b, 0x2009, 0x004d,
+       0x1078, 0x5d41, 0xa085, 0x0001, 0x127f, 0x057f, 0x0c7f, 0x007c,
+       0xa006, 0x0078, 0x6b24, 0x0c7e, 0x057e, 0x127e, 0x2091, 0x8000,
+       0x62a0, 0x0c7e, 0x1078, 0x5cb4, 0x057f, 0x0040, 0x6b53, 0x6612,
        0x651a, 0x601f, 0x0003, 0x2019, 0x0005, 0x0c7e, 0x2560, 0x1078,
-       0x399e, 0x0c7f, 0x1078, 0x495a, 0x1078, 0x489d, 0x2c08, 0x1078,
-       0x7370, 0x2009, 0x004e, 0x1078, 0x5c21, 0xa085, 0x0001, 0x127f,
-       0x057f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x6a2f, 0x0c7e, 0x127e,
-       0x2091, 0x8000, 0x0c7e, 0x1078, 0x5b94, 0x017f, 0x0040, 0x6a4f,
+       0x3a36, 0x0c7f, 0x1078, 0x4a7e, 0x1078, 0x49c1, 0x2c08, 0x1078,
+       0x747b, 0x2009, 0x004e, 0x1078, 0x5d41, 0xa085, 0x0001, 0x127f,
+       0x057f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x6b4f, 0x0c7e, 0x127e,
+       0x2091, 0x8000, 0x0c7e, 0x1078, 0x5cb4, 0x017f, 0x0040, 0x6b6f,
        0x660a, 0x611a, 0x601f, 0x0001, 0x2d00, 0x6012, 0x2009, 0x001f,
-       0x1078, 0x5c21, 0xa085, 0x0001, 0x127f, 0x0c7f, 0x007c, 0xa006,
-       0x0078, 0x6a4c, 0x0c7e, 0x127e, 0x2091, 0x8000, 0x0c7e, 0x1078,
-       0x5b94, 0x017f, 0x0040, 0x6a6b, 0x660a, 0x611a, 0x601f, 0x0008,
-       0x2d00, 0x6012, 0x2009, 0x0021, 0x1078, 0x5c21, 0xa085, 0x0001,
-       0x127f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x6a68, 0x0c7e, 0x127e,
-       0x2091, 0x8000, 0x0c7e, 0x1078, 0x5b94, 0x017f, 0x0040, 0x6a86,
+       0x1078, 0x5d41, 0xa085, 0x0001, 0x127f, 0x0c7f, 0x007c, 0xa006,
+       0x0078, 0x6b6c, 0x0c7e, 0x127e, 0x2091, 0x8000, 0x0c7e, 0x1078,
+       0x5cb4, 0x017f, 0x0040, 0x6b8b, 0x660a, 0x611a, 0x601f, 0x0008,
+       0x2d00, 0x6012, 0x2009, 0x0021, 0x1078, 0x5d41, 0xa085, 0x0001,
+       0x127f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x6b88, 0x0c7e, 0x127e,
+       0x2091, 0x8000, 0x0c7e, 0x1078, 0x5cb4, 0x017f, 0x0040, 0x6ba6,
        0x611a, 0x601f, 0x0001, 0x2d00, 0x6012, 0x2009, 0x0000, 0x1078,
-       0x5c21, 0xa085, 0x0001, 0x127f, 0x0c7f, 0x007c, 0xa006, 0x0078,
-       0x6a83, 0x027e, 0x0d7e, 0x6218, 0x2268, 0x6a3c, 0x82ff, 0x0040,
-       0x6a93, 0x8211, 0x6a3e, 0x0d7f, 0x027f, 0x007c, 0x6013, 0x0000,
+       0x5d41, 0xa085, 0x0001, 0x127f, 0x0c7f, 0x007c, 0xa006, 0x0078,
+       0x6ba3, 0x027e, 0x0d7e, 0x6218, 0x2268, 0x6a3c, 0x82ff, 0x0040,
+       0x6bb3, 0x8211, 0x6a3e, 0x0d7f, 0x027f, 0x007c, 0x6013, 0x0000,
        0x601f, 0x0007, 0x6017, 0x0014, 0x007c, 0x067e, 0x0c7e, 0x0d7e,
-       0x2031, 0x7652, 0x2634, 0xd6e4, 0x0040, 0x6aab, 0x6618, 0x2660,
-       0x6e44, 0x1078, 0x38d6, 0x0d7f, 0x0c7f, 0x067f, 0x007c, 0x007e,
-       0x017e, 0x6004, 0xa08e, 0x0002, 0x0040, 0x6ac0, 0xa08e, 0x0003,
-       0x0040, 0x6ac0, 0xa08e, 0x0004, 0x0040, 0x6ac0, 0xa085, 0x0001,
+       0x2031, 0x7752, 0x2634, 0xd6e4, 0x0040, 0x6bcb, 0x6618, 0x2660,
+       0x6e48, 0x1078, 0x3942, 0x0d7f, 0x0c7f, 0x067f, 0x007c, 0x007e,
+       0x017e, 0x6004, 0xa08e, 0x0002, 0x0040, 0x6be0, 0xa08e, 0x0003,
+       0x0040, 0x6be0, 0xa08e, 0x0004, 0x0040, 0x6be0, 0xa085, 0x0001,
        0x017f, 0x007f, 0x007c, 0x007e, 0x017e, 0x6004, 0xa08e, 0x0000,
-       0x0040, 0x6ad8, 0xa08e, 0x001f, 0x0040, 0x6ad8, 0xa08e, 0x0028,
-       0x0040, 0x6ad8, 0xa08e, 0x0029, 0x0040, 0x6ad8, 0xa085, 0x0001,
+       0x0040, 0x6bf8, 0xa08e, 0x001f, 0x0040, 0x6bf8, 0xa08e, 0x0028,
+       0x0040, 0x6bf8, 0xa08e, 0x0029, 0x0040, 0x6bf8, 0xa085, 0x0001,
        0x017f, 0x007f, 0x007c, 0x0c7e, 0x127e, 0x2091, 0x8000, 0x0c7e,
-       0x1078, 0x5b94, 0x017f, 0x0040, 0x6af5, 0x611a, 0x601f, 0x0001,
-       0x2d00, 0x6012, 0x1078, 0x22b5, 0x2009, 0x0028, 0x1078, 0x5c21,
-       0xa085, 0x0001, 0x127f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x6af2,
-       0xa186, 0x0015, 0x00c0, 0x6b0d, 0x2011, 0x761e, 0x2204, 0xa086,
-       0x0074, 0x00c0, 0x6b0d, 0x1078, 0x60ca, 0x6003, 0x0001, 0x6007,
-       0x0029, 0x1078, 0x486a, 0x0078, 0x6b11, 0x1078, 0x5e4d, 0x1078,
-       0x5bfa, 0x007c, 0xa186, 0x0015, 0x00c0, 0x6b2f, 0x2011, 0x761e,
-       0x2204, 0xa086, 0x0014, 0x00c0, 0x6b2f, 0x0d7e, 0x6018, 0x2068,
-       0x1078, 0x3899, 0x0d7f, 0x1078, 0x60d4, 0x00c0, 0x6b2f, 0x2001,
-       0x0006, 0x1078, 0x37c9, 0x1078, 0x5ca5, 0x0078, 0x6b33, 0x1078,
-       0x5e4d, 0x1078, 0x5bfa, 0x007c, 0x6848, 0xa086, 0x0005, 0x00c0,
-       0x6b3b, 0x1078, 0x6b3c, 0x007c, 0x6850, 0xc0ad, 0x6852, 0x007c,
-       0x067e, 0x6000, 0xa0b2, 0x0010, 0x10c8, 0x12cd, 0x1079, 0x6b4a,
-       0x067f, 0x007c, 0x6b5a, 0x6d31, 0x6e12, 0x6b5a, 0x6b5a, 0x6b5a,
-       0x6b5a, 0x6b5a, 0x6b94, 0x6e80, 0x6b5a, 0x6b5a, 0x6b5a, 0x6b5a,
-       0x6b5a, 0x6b5a, 0x1078, 0x12cd, 0x067e, 0x6000, 0xa0b2, 0x0010,
-       0x10c8, 0x12cd, 0x1079, 0x6b66, 0x067f, 0x007c, 0x6b76, 0x7181,
-       0x6b76, 0x6b76, 0x6b76, 0x6b76, 0x6b76, 0x6b76, 0x715c, 0x71cb,
-       0x6b76, 0x6b76, 0x6b76, 0x6b76, 0x6b76, 0x6b76, 0x1078, 0x12cd,
-       0x067e, 0x6000, 0xa0b2, 0x0010, 0x10c8, 0x12cd, 0x1079, 0x6b82,
-       0x067f, 0x007c, 0x6b92, 0x6fcd, 0x703f, 0x7061, 0x70ad, 0x6b92,
-       0x6b92, 0x7107, 0x6e8c, 0x7144, 0x7148, 0x6b92, 0x6b92, 0x6b92,
-       0x6b92, 0x6b92, 0x1078, 0x12cd, 0xa1b2, 0x0030, 0x10c8, 0x12cd,
-       0x2100, 0x0079, 0x6b9b, 0x6bcb, 0x6ca8, 0x6bcb, 0x6bcb, 0x6bcb,
-       0x6bcb, 0x6bcb, 0x6bcb, 0x6bcb, 0x6bcb, 0x6bcb, 0x6bcb, 0x6bcb,
-       0x6bcb, 0x6bcb, 0x6bcb, 0x6bcb, 0x6bcb, 0x6bcb, 0x6bcb, 0x6bcb,
-       0x6bcb, 0x6bcb, 0x6bcd, 0x6bfc, 0x6c07, 0x6c2f, 0x6c35, 0x6c69,
-       0x6ca1, 0x6bcb, 0x6bcb, 0x6cb0, 0x6bcb, 0x6bcb, 0x6cb7, 0x6cbe,
-       0x6bcb, 0x6bcb, 0x6bcb, 0x6bcb, 0x6bcb, 0x6cdb, 0x6bcb, 0x6bcb,
-       0x6ce6, 0x6bcb, 0x6bcb, 0x1078, 0x12cd, 0x1078, 0x3a1e, 0x6618,
-       0x0c7e, 0x2660, 0x1078, 0x382f, 0x0c7f, 0xa6b0, 0x0001, 0x2634,
-       0xa684, 0x00ff, 0xa082, 0x0006, 0x0048, 0x6bee, 0x1078, 0x72ac,
-       0x00c0, 0x6c29, 0x1078, 0x724a, 0x00c0, 0x6bea, 0x6007, 0x0008,
-       0x0078, 0x6ca3, 0x6007, 0x0009, 0x0078, 0x6ca3, 0x1078, 0x7441,
-       0x0040, 0x6bf8, 0x1078, 0x72ac, 0x0040, 0x6be2, 0x0078, 0x6c29,
-       0x6013, 0x1900, 0x0078, 0x6bea, 0x6106, 0x1078, 0x720c, 0x6007,
-       0x0006, 0x0078, 0x6ca3, 0x6007, 0x0007, 0x0078, 0x6ca3, 0x0d7e,
+       0x1078, 0x5cb4, 0x017f, 0x0040, 0x6c15, 0x611a, 0x601f, 0x0001,
+       0x2d00, 0x6012, 0x1078, 0x22b5, 0x2009, 0x0028, 0x1078, 0x5d41,
+       0xa085, 0x0001, 0x127f, 0x0c7f, 0x007c, 0xa006, 0x0078, 0x6c12,
+       0xa186, 0x0015, 0x00c0, 0x6c2d, 0x2011, 0x771e, 0x2204, 0xa086,
+       0x0074, 0x00c0, 0x6c2d, 0x1078, 0x61ea, 0x6003, 0x0001, 0x6007,
+       0x0029, 0x1078, 0x498e, 0x0078, 0x6c31, 0x1078, 0x5f6d, 0x1078,
+       0x5d1a, 0x007c, 0xa186, 0x0015, 0x00c0, 0x6c4f, 0x2011, 0x771e,
+       0x2204, 0xa086, 0x0014, 0x00c0, 0x6c4f, 0x0d7e, 0x6018, 0x2068,
+       0x1078, 0x38c8, 0x0d7f, 0x1078, 0x61f4, 0x00c0, 0x6c4f, 0x2001,
+       0x0006, 0x1078, 0x37f4, 0x1078, 0x5dc5, 0x0078, 0x6c53, 0x1078,
+       0x5f6d, 0x1078, 0x5d1a, 0x007c, 0x6848, 0xa086, 0x0005, 0x00c0,
+       0x6c5b, 0x1078, 0x6c5c, 0x007c, 0x6850, 0xc0ad, 0x6852, 0x007c,
+       0x067e, 0x6000, 0xa0b2, 0x0010, 0x10c8, 0x12cd, 0x1079, 0x6c6a,
+       0x067f, 0x007c, 0x6c7a, 0x6e51, 0x6f32, 0x6c7a, 0x6c7a, 0x6c7a,
+       0x6c7a, 0x6c7a, 0x6cb4, 0x6fa0, 0x6c7a, 0x6c7a, 0x6c7a, 0x6c7a,
+       0x6c7a, 0x6c7a, 0x1078, 0x12cd, 0x067e, 0x6000, 0xa0b2, 0x0010,
+       0x10c8, 0x12cd, 0x1079, 0x6c86, 0x067f, 0x007c, 0x6c96, 0x728c,
+       0x6c96, 0x6c96, 0x6c96, 0x6c96, 0x6c96, 0x6c96, 0x7267, 0x72d6,
+       0x6c96, 0x6c96, 0x6c96, 0x6c96, 0x6c96, 0x6c96, 0x1078, 0x12cd,
+       0x067e, 0x6000, 0xa0b2, 0x0010, 0x10c8, 0x12cd, 0x1079, 0x6ca2,
+       0x067f, 0x007c, 0x6cb2, 0x70d8, 0x714a, 0x716c, 0x71b8, 0x6cb2,
+       0x6cb2, 0x7212, 0x6fac, 0x724f, 0x7253, 0x6cb2, 0x6cb2, 0x6cb2,
+       0x6cb2, 0x6cb2, 0x1078, 0x12cd, 0xa1b2, 0x0030, 0x10c8, 0x12cd,
+       0x2100, 0x0079, 0x6cbb, 0x6ceb, 0x6dc8, 0x6ceb, 0x6ceb, 0x6ceb,
+       0x6ceb, 0x6ceb, 0x6ceb, 0x6ceb, 0x6ceb, 0x6ceb, 0x6ceb, 0x6ceb,
+       0x6ceb, 0x6ceb, 0x6ceb, 0x6ceb, 0x6ceb, 0x6ceb, 0x6ceb, 0x6ceb,
+       0x6ceb, 0x6ceb, 0x6ced, 0x6d1c, 0x6d27, 0x6d4f, 0x6d55, 0x6d89,
+       0x6dc1, 0x6ceb, 0x6ceb, 0x6dd0, 0x6ceb, 0x6ceb, 0x6dd7, 0x6dde,
+       0x6ceb, 0x6ceb, 0x6ceb, 0x6ceb, 0x6ceb, 0x6dfb, 0x6ceb, 0x6ceb,
+       0x6e06, 0x6ceb, 0x6ceb, 0x1078, 0x12cd, 0x1078, 0x3b3e, 0x6618,
+       0x0c7e, 0x2660, 0x1078, 0x385e, 0x0c7f, 0xa6b0, 0x0001, 0x2634,
+       0xa684, 0x00ff, 0xa082, 0x0006, 0x0048, 0x6d0e, 0x1078, 0x73b7,
+       0x00c0, 0x6d49, 0x1078, 0x7355, 0x00c0, 0x6d0a, 0x6007, 0x0008,
+       0x0078, 0x6dc3, 0x6007, 0x0009, 0x0078, 0x6dc3, 0x1078, 0x754c,
+       0x0040, 0x6d18, 0x1078, 0x73b7, 0x0040, 0x6d02, 0x0078, 0x6d49,
+       0x6013, 0x1900, 0x0078, 0x6d0a, 0x6106, 0x1078, 0x7317, 0x6007,
+       0x0006, 0x0078, 0x6dc3, 0x6007, 0x0007, 0x0078, 0x6dc3, 0x0d7e,
        0x6618, 0x2668, 0x6e04, 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006,
-       0x0040, 0x6c19, 0xa686, 0x0004, 0x0040, 0x6c19, 0x0d7f, 0x0078,
-       0x6c29, 0x1078, 0x730a, 0x00c0, 0x6c24, 0x1078, 0x3899, 0x6007,
-       0x000a, 0x0d7f, 0x0078, 0x6ca3, 0x6007, 0x000b, 0x0d7f, 0x0078,
-       0x6ca3, 0x1078, 0x22b5, 0x6007, 0x0001, 0x0078, 0x6ca3, 0x1078,
-       0x22b5, 0x6007, 0x000c, 0x0078, 0x6ca3, 0x1078, 0x3a1e, 0x6618,
+       0x0040, 0x6d39, 0xa686, 0x0004, 0x0040, 0x6d39, 0x0d7f, 0x0078,
+       0x6d49, 0x1078, 0x7415, 0x00c0, 0x6d44, 0x1078, 0x38c8, 0x6007,
+       0x000a, 0x0d7f, 0x0078, 0x6dc3, 0x6007, 0x000b, 0x0d7f, 0x0078,
+       0x6dc3, 0x1078, 0x22b5, 0x6007, 0x0001, 0x0078, 0x6dc3, 0x1078,
+       0x22b5, 0x6007, 0x000c, 0x0078, 0x6dc3, 0x1078, 0x3b3e, 0x6618,
        0xa6b0, 0x0001, 0x2634, 0xa684, 0x00ff, 0xa082, 0x0006, 0x0048,
-       0x6c56, 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, 0x00c0, 0x6c29,
-       0x1078, 0x7319, 0x00c0, 0x6c50, 0x6007, 0x000e, 0x0078, 0x6ca3,
-       0x1078, 0x22b5, 0x6007, 0x000f, 0x0078, 0x6ca3, 0x1078, 0x7441,
-       0x0040, 0x6c63, 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, 0x0040,
-       0x6c48, 0x0078, 0x6c29, 0x6013, 0x1900, 0x6007, 0x0009, 0x0078,
-       0x6ca3, 0x1078, 0x3a1e, 0x6618, 0xa6b0, 0x0001, 0x2634, 0xa684,
-       0x00ff, 0xa082, 0x0006, 0x0048, 0x6c8e, 0xa6b4, 0xff00, 0x8637,
-       0xa686, 0x0006, 0x00c0, 0x6c29, 0x1078, 0x7344, 0x00c0, 0x6c88,
-       0x1078, 0x724a, 0x00c0, 0x6c88, 0x6007, 0x0010, 0x0078, 0x6ca3,
-       0x1078, 0x22b5, 0x6007, 0x0011, 0x0078, 0x6ca3, 0x1078, 0x7441,
-       0x0040, 0x6c9b, 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, 0x0040,
-       0x6c7c, 0x0078, 0x6c29, 0x6013, 0x1900, 0x6007, 0x0009, 0x0078,
-       0x6ca3, 0x6007, 0x0012, 0x6003, 0x0001, 0x1078, 0x486a, 0x007c,
-       0x6007, 0x0001, 0x6003, 0x0001, 0x1078, 0x486a, 0x0078, 0x6ca7,
-       0x6007, 0x0020, 0x6003, 0x0001, 0x1078, 0x486a, 0x007c, 0x6007,
-       0x0023, 0x6003, 0x0001, 0x1078, 0x486a, 0x007c, 0x017e, 0x027e,
-       0x2011, 0x7b88, 0x2214, 0x2c08, 0x1078, 0x7509, 0x00c0, 0x6ccf,
-       0x2160, 0x6007, 0x0026, 0x6013, 0x1700, 0x0078, 0x6cd4, 0x1078,
-       0x5bfa, 0x2160, 0x6007, 0x0025, 0x6003, 0x0001, 0x1078, 0x486a,
-       0x027f, 0x017f, 0x007c, 0x6106, 0x1078, 0x6ced, 0x6007, 0x002b,
-       0x0078, 0x6ca3, 0x6007, 0x002c, 0x0078, 0x6ca3, 0x6106, 0x1078,
-       0x6cf2, 0x6007, 0x002e, 0x0078, 0x6ca3, 0x0d7e, 0x1078, 0x6d18,
-       0x0d7f, 0x007c, 0x0d7e, 0x1078, 0x6d27, 0x00c0, 0x6d11, 0x680c,
+       0x6d76, 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, 0x00c0, 0x6d49,
+       0x1078, 0x7424, 0x00c0, 0x6d70, 0x6007, 0x000e, 0x0078, 0x6dc3,
+       0x1078, 0x22b5, 0x6007, 0x000f, 0x0078, 0x6dc3, 0x1078, 0x754c,
+       0x0040, 0x6d83, 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, 0x0040,
+       0x6d68, 0x0078, 0x6d49, 0x6013, 0x1900, 0x6007, 0x0009, 0x0078,
+       0x6dc3, 0x1078, 0x3b3e, 0x6618, 0xa6b0, 0x0001, 0x2634, 0xa684,
+       0x00ff, 0xa082, 0x0006, 0x0048, 0x6dae, 0xa6b4, 0xff00, 0x8637,
+       0xa686, 0x0006, 0x00c0, 0x6d49, 0x1078, 0x744f, 0x00c0, 0x6da8,
+       0x1078, 0x7355, 0x00c0, 0x6da8, 0x6007, 0x0010, 0x0078, 0x6dc3,
+       0x1078, 0x22b5, 0x6007, 0x0011, 0x0078, 0x6dc3, 0x1078, 0x754c,
+       0x0040, 0x6dbb, 0xa6b4, 0xff00, 0x8637, 0xa686, 0x0006, 0x0040,
+       0x6d9c, 0x0078, 0x6d49, 0x6013, 0x1900, 0x6007, 0x0009, 0x0078,
+       0x6dc3, 0x6007, 0x0012, 0x6003, 0x0001, 0x1078, 0x498e, 0x007c,
+       0x6007, 0x0001, 0x6003, 0x0001, 0x1078, 0x498e, 0x0078, 0x6dc7,
+       0x6007, 0x0020, 0x6003, 0x0001, 0x1078, 0x498e, 0x007c, 0x6007,
+       0x0023, 0x6003, 0x0001, 0x1078, 0x498e, 0x007c, 0x017e, 0x027e,
+       0x2011, 0x7c88, 0x2214, 0x2c08, 0x1078, 0x7614, 0x00c0, 0x6def,
+       0x2160, 0x6007, 0x0026, 0x6013, 0x1700, 0x0078, 0x6df4, 0x1078,
+       0x5d1a, 0x2160, 0x6007, 0x0025, 0x6003, 0x0001, 0x1078, 0x498e,
+       0x027f, 0x017f, 0x007c, 0x6106, 0x1078, 0x6e0d, 0x6007, 0x002b,
+       0x0078, 0x6dc3, 0x6007, 0x002c, 0x0078, 0x6dc3, 0x6106, 0x1078,
+       0x6e12, 0x6007, 0x002e, 0x0078, 0x6dc3, 0x0d7e, 0x1078, 0x6e38,
+       0x0d7f, 0x007c, 0x0d7e, 0x1078, 0x6e47, 0x00c0, 0x6e31, 0x680c,
        0xa08c, 0xff00, 0x6824, 0xa084, 0x00ff, 0xa115, 0x6212, 0xd1e4,
-       0x0040, 0x6d06, 0x2009, 0x0001, 0x0078, 0x6d0d, 0xd1ec, 0x0040,
-       0x6d11, 0x2009, 0x0000, 0xa294, 0x00ff, 0x1078, 0x22f9, 0x0078,
-       0x6d15, 0xa085, 0x0001, 0x0078, 0x6d16, 0xa006, 0x0d7f, 0x007c,
-       0x2069, 0x7b8d, 0x6800, 0xa082, 0x0010, 0x00c8, 0x6d25, 0x6013,
-       0x0000, 0xa085, 0x0001, 0x0078, 0x6d26, 0xa006, 0x007c, 0x6013,
-       0x0000, 0x2069, 0x7b8c, 0x6808, 0xa084, 0xff00, 0xa086, 0x0800,
+       0x0040, 0x6e26, 0x2009, 0x0001, 0x0078, 0x6e2d, 0xd1ec, 0x0040,
+       0x6e31, 0x2009, 0x0000, 0xa294, 0x00ff, 0x1078, 0x22f9, 0x0078,
+       0x6e35, 0xa085, 0x0001, 0x0078, 0x6e36, 0xa006, 0x0d7f, 0x007c,
+       0x2069, 0x7c8d, 0x6800, 0xa082, 0x0010, 0x00c8, 0x6e45, 0x6013,
+       0x0000, 0xa085, 0x0001, 0x0078, 0x6e46, 0xa006, 0x007c, 0x6013,
+       0x0000, 0x2069, 0x7c8c, 0x6808, 0xa084, 0xff00, 0xa086, 0x0800,
        0x007c, 0x6004, 0xa0b2, 0x0030, 0x10c8, 0x12cd, 0xa1b6, 0x0013,
-       0x00c0, 0x6d3d, 0x2008, 0x0079, 0x6d50, 0xa1b6, 0x0027, 0x0040,
-       0x6d45, 0xa1b6, 0x0014, 0x10c0, 0x12cd, 0x2001, 0x0007, 0x1078,
-       0x37d7, 0x1078, 0x4b79, 0x1078, 0x6a96, 0x1078, 0x4c72, 0x007c,
-       0x6d80, 0x6d82, 0x6d80, 0x6d80, 0x6d80, 0x6d82, 0x6d8a, 0x6ded,
-       0x6db0, 0x6ded, 0x6dc4, 0x6ded, 0x6d8a, 0x6ded, 0x6de5, 0x6ded,
-       0x6de5, 0x6ded, 0x6ded, 0x6d80, 0x6d80, 0x6d80, 0x6d80, 0x6d80,
-       0x6d80, 0x6d80, 0x6d80, 0x6d80, 0x6d80, 0x6d80, 0x6d80, 0x6d80,
-       0x6ded, 0x6d80, 0x6d80, 0x6ded, 0x6d80, 0x6ded, 0x6ded, 0x6d80,
-       0x6d80, 0x6d80, 0x6d80, 0x6ded, 0x6ded, 0x6d80, 0x6ded, 0x6ded,
-       0x1078, 0x12cd, 0x1078, 0x4b79, 0x6003, 0x0002, 0x1078, 0x4c72,
-       0x0078, 0x6df3, 0x0f7e, 0x2079, 0x7651, 0x7804, 0x0f7f, 0xd0ac,
-       0x00c0, 0x6ded, 0x2001, 0x0000, 0x1078, 0x37b5, 0x2001, 0x0002,
-       0x1078, 0x37c9, 0x1078, 0x4b79, 0x601f, 0x0001, 0x6003, 0x0001,
-       0x6007, 0x0002, 0x1078, 0x486a, 0x1078, 0x4c72, 0x0c7e, 0x6118,
-       0x2160, 0x2009, 0x0001, 0x1078, 0x4573, 0x0c7f, 0x0078, 0x6df3,
+       0x00c0, 0x6e5d, 0x2008, 0x0079, 0x6e70, 0xa1b6, 0x0027, 0x0040,
+       0x6e65, 0xa1b6, 0x0014, 0x10c0, 0x12cd, 0x2001, 0x0007, 0x1078,
+       0x3802, 0x1078, 0x4c9d, 0x1078, 0x6bb6, 0x1078, 0x4d96, 0x007c,
+       0x6ea0, 0x6ea2, 0x6ea0, 0x6ea0, 0x6ea0, 0x6ea2, 0x6eaa, 0x6f0d,
+       0x6ed0, 0x6f0d, 0x6ee4, 0x6f0d, 0x6eaa, 0x6f0d, 0x6f05, 0x6f0d,
+       0x6f05, 0x6f0d, 0x6f0d, 0x6ea0, 0x6ea0, 0x6ea0, 0x6ea0, 0x6ea0,
+       0x6ea0, 0x6ea0, 0x6ea0, 0x6ea0, 0x6ea0, 0x6ea0, 0x6ea0, 0x6ea0,
+       0x6f0d, 0x6ea0, 0x6ea0, 0x6f0d, 0x6ea0, 0x6f0d, 0x6f0d, 0x6ea0,
+       0x6ea0, 0x6ea0, 0x6ea0, 0x6f0d, 0x6f0d, 0x6ea0, 0x6f0d, 0x6f0d,
+       0x1078, 0x12cd, 0x1078, 0x4c9d, 0x6003, 0x0002, 0x1078, 0x4d96,
+       0x0078, 0x6f13, 0x0f7e, 0x2079, 0x7751, 0x7804, 0x0f7f, 0xd0ac,
+       0x00c0, 0x6f0d, 0x2001, 0x0000, 0x1078, 0x37e0, 0x2001, 0x0002,
+       0x1078, 0x37f4, 0x1078, 0x4c9d, 0x601f, 0x0001, 0x6003, 0x0001,
+       0x6007, 0x0002, 0x1078, 0x498e, 0x1078, 0x4d96, 0x0c7e, 0x6118,
+       0x2160, 0x2009, 0x0001, 0x1078, 0x4696, 0x0c7f, 0x0078, 0x6f13,
        0x6618, 0x0d7e, 0x2668, 0x6e04, 0x0d7f, 0xa6b4, 0xff00, 0x8637,
-       0xa686, 0x0006, 0x0040, 0x6ded, 0xa686, 0x0004, 0x0040, 0x6ded,
-       0x2001, 0x0004, 0x0078, 0x6deb, 0x2001, 0x7600, 0x2004, 0xa086,
-       0x0003, 0x00c0, 0x6dcd, 0x1078, 0x2db9, 0x2001, 0x0006, 0x1078,
-       0x6df4, 0x6618, 0x0d7e, 0x2668, 0x6e04, 0x0d7f, 0xa6b4, 0xff00,
-       0x8637, 0xa686, 0x0006, 0x0040, 0x6ded, 0x2001, 0x0006, 0x0078,
-       0x6deb, 0x2001, 0x0004, 0x0078, 0x6deb, 0x2001, 0x0006, 0x1078,
-       0x6df4, 0x0078, 0x6ded, 0x1078, 0x37d7, 0x1078, 0x4b79, 0x1078,
-       0x5bfa, 0x1078, 0x4c72, 0x007c, 0x017e, 0x0d7e, 0x6118, 0x2168,
-       0x6900, 0xd184, 0x0040, 0x6e0f, 0x6104, 0xa18e, 0x000a, 0x00c0,
-       0x6e07, 0x699c, 0xd1a4, 0x00c0, 0x6e07, 0x2001, 0x0007, 0x1078,
-       0x37c9, 0x2001, 0x0000, 0x1078, 0x37b5, 0x1078, 0x22d7, 0x0d7f,
+       0xa686, 0x0006, 0x0040, 0x6f0d, 0xa686, 0x0004, 0x0040, 0x6f0d,
+       0x2001, 0x0004, 0x0078, 0x6f0b, 0x2001, 0x7700, 0x2004, 0xa086,
+       0x0003, 0x00c0, 0x6eed, 0x1078, 0x2dd7, 0x2001, 0x0006, 0x1078,
+       0x6f14, 0x6618, 0x0d7e, 0x2668, 0x6e04, 0x0d7f, 0xa6b4, 0xff00,
+       0x8637, 0xa686, 0x0006, 0x0040, 0x6f0d, 0x2001, 0x0006, 0x0078,
+       0x6f0b, 0x2001, 0x0004, 0x0078, 0x6f0b, 0x2001, 0x0006, 0x1078,
+       0x6f14, 0x0078, 0x6f0d, 0x1078, 0x3802, 0x1078, 0x4c9d, 0x1078,
+       0x5d1a, 0x1078, 0x4d96, 0x007c, 0x017e, 0x0d7e, 0x6118, 0x2168,
+       0x6900, 0xd184, 0x0040, 0x6f2f, 0x6104, 0xa18e, 0x000a, 0x00c0,
+       0x6f27, 0x699c, 0xd1a4, 0x00c0, 0x6f27, 0x2001, 0x0007, 0x1078,
+       0x37f4, 0x2001, 0x0000, 0x1078, 0x37e0, 0x1078, 0x22d7, 0x0d7f,
        0x017f, 0x007c, 0x0d7e, 0x6618, 0x2668, 0x6804, 0xa084, 0xff00,
        0x8007, 0x0d7f, 0xa0b2, 0x000c, 0x10c8, 0x12cd, 0xa1b6, 0x0015,
-       0x00c0, 0x6e26, 0x1079, 0x6e2d, 0x0078, 0x6e2c, 0xa1b6, 0x0016,
-       0x10c0, 0x12cd, 0x1079, 0x6e65, 0x007c, 0x5ed7, 0x5ed7, 0x5ed7,
-       0x5ed7, 0x5ed7, 0x5ed7, 0x5ed7, 0x6e39, 0x5ed7, 0x5ed7, 0x5ed7,
-       0x5ed7, 0x0f7e, 0x2079, 0x7651, 0x7804, 0x0f7f, 0xd0ac, 0x00c0,
-       0x6e55, 0x2001, 0x0000, 0x1078, 0x37b5, 0x2001, 0x0002, 0x1078,
-       0x37c9, 0x601f, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x1078,
-       0x486a, 0x1078, 0x4c72, 0x0078, 0x6e64, 0x2011, 0x7b83, 0x220c,
-       0x017e, 0x0c7e, 0x1078, 0x381d, 0x00c0, 0x6e64, 0x1078, 0x3619,
-       0x0c7f, 0x017f, 0x1078, 0x5bfa, 0x007c, 0x5ed7, 0x5ed7, 0x5ed7,
-       0x5ed7, 0x5ed7, 0x5ed7, 0x5ed7, 0x6e71, 0x5ed7, 0x5ed7, 0x5ed7,
-       0x5ed7, 0x1078, 0x60c7, 0x00c0, 0x6e7d, 0x6003, 0x0001, 0x6007,
-       0x0001, 0x1078, 0x486a, 0x0078, 0x6e7f, 0x1078, 0x5bfa, 0x007c,
-       0x6004, 0xa08a, 0x0030, 0x10c8, 0x12cd, 0x1078, 0x4b79, 0x1078,
-       0x6a96, 0x1078, 0x4c72, 0x007c, 0xa182, 0x0040, 0x0079, 0x6e90,
-       0x6ea0, 0x6ea0, 0x6ea0, 0x6ea0, 0x6ea2, 0x6ea0, 0x6ea0, 0x6ea0,
-       0x6ea0, 0x6ea0, 0x6ea0, 0x6ea0, 0x6ea0, 0x6ea0, 0x6ea0, 0x6ea0,
+       0x00c0, 0x6f46, 0x1079, 0x6f4d, 0x0078, 0x6f4c, 0xa1b6, 0x0016,
+       0x10c0, 0x12cd, 0x1079, 0x6f85, 0x007c, 0x5ff7, 0x5ff7, 0x5ff7,
+       0x5ff7, 0x5ff7, 0x5ff7, 0x5ff7, 0x6f59, 0x5ff7, 0x5ff7, 0x5ff7,
+       0x5ff7, 0x0f7e, 0x2079, 0x7751, 0x7804, 0x0f7f, 0xd0ac, 0x00c0,
+       0x6f75, 0x2001, 0x0000, 0x1078, 0x37e0, 0x2001, 0x0002, 0x1078,
+       0x37f4, 0x601f, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x1078,
+       0x498e, 0x1078, 0x4d96, 0x0078, 0x6f84, 0x2011, 0x7c83, 0x220c,
+       0x017e, 0x0c7e, 0x1078, 0x384c, 0x00c0, 0x6f84, 0x1078, 0x3637,
+       0x0c7f, 0x017f, 0x1078, 0x5d1a, 0x007c, 0x5ff7, 0x5ff7, 0x5ff7,
+       0x5ff7, 0x5ff7, 0x5ff7, 0x5ff7, 0x6f91, 0x5ff7, 0x5ff7, 0x5ff7,
+       0x5ff7, 0x1078, 0x61e7, 0x00c0, 0x6f9d, 0x6003, 0x0001, 0x6007,
+       0x0001, 0x1078, 0x498e, 0x0078, 0x6f9f, 0x1078, 0x5d1a, 0x007c,
+       0x6004, 0xa08a, 0x0030, 0x10c8, 0x12cd, 0x1078, 0x4c9d, 0x1078,
+       0x6bb6, 0x1078, 0x4d96, 0x007c, 0xa182, 0x0040, 0x0079, 0x6fb0,
+       0x6fc0, 0x6fc0, 0x6fc0, 0x6fc0, 0x6fc2, 0x6fc0, 0x6fc0, 0x6fc0,
+       0x6fc0, 0x6fc0, 0x6fc0, 0x6fc0, 0x6fc0, 0x6fc0, 0x6fc0, 0x6fc0,
        0x1078, 0x12cd, 0x0d7e, 0x0e7e, 0x0f7e, 0x157e, 0x047e, 0x027e,
-       0x6106, 0x2071, 0x7b80, 0x7444, 0xa4a4, 0xe600, 0x0040, 0x6f13,
-       0xa486, 0x2000, 0x0040, 0x6ed2, 0xa486, 0x0400, 0x0040, 0x6ed2,
-       0x7130, 0xa18c, 0x00ff, 0xa182, 0x0010, 0x00c8, 0x6fa5, 0x0c7e,
-       0x1078, 0x4604, 0x2c68, 0x0c7f, 0x6a00, 0xa284, 0x0001, 0x0040,
-       0x6f86, 0x1078, 0x46c2, 0x0040, 0x6fb1, 0xa295, 0x0200, 0x6a02,
-       0x0078, 0x6ed8, 0x2009, 0x0001, 0x2011, 0x0200, 0x1078, 0x46ac,
-       0x1078, 0x1327, 0x1040, 0x12cd, 0x6003, 0x0007, 0x2d00, 0x6837,
-       0x010d, 0x6803, 0x0000, 0x683b, 0x0000, 0x6c5a, 0x2c00, 0x685e,
-       0x6018, 0x2078, 0x78a0, 0x8007, 0x7130, 0xa18c, 0x00ff, 0xa10d,
-       0x6946, 0x684f, 0x0000, 0x6857, 0x0036, 0x1078, 0x3a72, 0xa486,
-       0x2000, 0x00c0, 0x6f01, 0x2019, 0x0017, 0x1078, 0x74ce, 0x0078,
-       0x6f73, 0xa486, 0x0400, 0x00c0, 0x6f0b, 0x2019, 0x0002, 0x1078,
-       0x74ce, 0x0078, 0x6f73, 0xa486, 0x0200, 0x00c0, 0x6f11, 0x1078,
-       0x74bf, 0x0078, 0x6f73, 0x7130, 0xa184, 0xff00, 0x00c0, 0x6fc5,
-       0xa18c, 0x00ff, 0xa182, 0x0010, 0x00c8, 0x6fc5, 0x0c7e, 0x1078,
-       0x4604, 0x2c68, 0x0c7f, 0x6a00, 0xa284, 0x0001, 0x0040, 0x6fc9,
-       0xa284, 0x0300, 0x00c0, 0x6fc1, 0x6804, 0xa005, 0x0040, 0x6fb1,
-       0x8001, 0x6806, 0x6003, 0x0007, 0x1078, 0x130c, 0x0040, 0x6f7a,
-       0x6013, 0x0000, 0x6803, 0x0000, 0x6837, 0x0116, 0x683b, 0x0000,
-       0x2c00, 0x684a, 0x6018, 0x2078, 0x78a0, 0x8007, 0xa10d, 0x6946,
-       0x6853, 0x003d, 0x7044, 0xa084, 0x0003, 0xa086, 0x0002, 0x00c0,
-       0x6f55, 0x684f, 0x0040, 0x0078, 0x6f5f, 0xa086, 0x0001, 0x00c0,
-       0x6f5d, 0x684f, 0x0080, 0x0078, 0x6f5f, 0x684f, 0x0000, 0x20a9,
-       0x000a, 0x2001, 0x7b90, 0xad90, 0x0015, 0x200c, 0x810f, 0x2112,
-       0x8000, 0x8210, 0x00f0, 0x6f65, 0x200c, 0x6982, 0x8000, 0x200c,
-       0x697e, 0x1078, 0x3a72, 0x027f, 0x047f, 0x157f, 0x0f7f, 0x0e7f,
-       0x0d7f, 0x007c, 0x6013, 0x0100, 0x6003, 0x0001, 0x6007, 0x0041,
-       0x1078, 0x481d, 0x1078, 0x4c72, 0x0078, 0x6f73, 0x2069, 0x7b92,
-       0x2d04, 0xa084, 0xff00, 0xa086, 0x1200, 0x00c0, 0x6fa5, 0x2069,
-       0x7b80, 0x686c, 0xa084, 0x00ff, 0x017e, 0x6110, 0xa18c, 0x0700,
-       0xa10d, 0x6112, 0x017f, 0x6003, 0x0001, 0x6007, 0x0043, 0x1078,
-       0x481d, 0x1078, 0x4c72, 0x0078, 0x6f73, 0x6013, 0x0200, 0x6003,
-       0x0001, 0x6007, 0x0041, 0x1078, 0x481d, 0x1078, 0x4c72, 0x0078,
-       0x6f73, 0x6013, 0x0300, 0x0078, 0x6fb7, 0x6013, 0x0100, 0x6003,
-       0x0001, 0x6007, 0x0041, 0x1078, 0x481d, 0x1078, 0x4c72, 0x0078,
-       0x6f73, 0x6013, 0x0500, 0x0078, 0x6fb7, 0x6013, 0x0600, 0x0078,
-       0x6f86, 0x6013, 0x0200, 0x0078, 0x6f86, 0xa186, 0x0013, 0x00c0,
-       0x6fdf, 0x6004, 0xa08a, 0x0040, 0x1048, 0x12cd, 0xa08a, 0x0050,
-       0x10c8, 0x12cd, 0xa082, 0x0040, 0x2008, 0x0079, 0x7010, 0xa186,
-       0x0047, 0x00c0, 0x6fe5, 0x0078, 0x703f, 0xa186, 0x0027, 0x0040,
-       0x6fed, 0xa186, 0x0014, 0x10c0, 0x12cd, 0x6004, 0xa082, 0x0040,
-       0x2008, 0x0079, 0x6ff3, 0x7003, 0x7005, 0x7005, 0x7003, 0x7003,
-       0x7003, 0x7003, 0x7003, 0x7003, 0x7003, 0x7003, 0x7003, 0x7003,
-       0x7003, 0x7003, 0x7003, 0x1078, 0x12cd, 0x2001, 0x0007, 0x1078,
-       0x37d7, 0x1078, 0x4b79, 0x1078, 0x6a96, 0x1078, 0x4c72, 0x007c,
-       0x7020, 0x7030, 0x7029, 0x7039, 0x7020, 0x7020, 0x7020, 0x7020,
-       0x7020, 0x7020, 0x7020, 0x7020, 0x7020, 0x7020, 0x7020, 0x7020,
-       0x1078, 0x12cd, 0x6010, 0xa088, 0x0013, 0x2104, 0xa085, 0x0400,
-       0x200a, 0x1078, 0x4b79, 0x6003, 0x0002, 0x1078, 0x4c72, 0x007c,
-       0x1078, 0x4b79, 0x1078, 0x4685, 0x1078, 0x5bfa, 0x1078, 0x4c72,
-       0x007c, 0x1078, 0x4b79, 0x2009, 0x0041, 0x0078, 0x7107, 0xa182,
-       0x0040, 0x0079, 0x7043, 0x7053, 0x7055, 0x7053, 0x7053, 0x7053,
-       0x7053, 0x7053, 0x7056, 0x7053, 0x7053, 0x7053, 0x7053, 0x7053,
-       0x7053, 0x7053, 0x7053, 0x1078, 0x12cd, 0x007c, 0x6003, 0x0004,
-       0x6110, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10, 0x1078, 0x156a,
-       0x007c, 0xa182, 0x0040, 0x0079, 0x7065, 0x7075, 0x7075, 0x7075,
-       0x7075, 0x7075, 0x7075, 0x7075, 0x7075, 0x7075, 0x7077, 0x709a,
-       0x7075, 0x7075, 0x7075, 0x7075, 0x709a, 0x1078, 0x12cd, 0x1078,
-       0x4c21, 0x1078, 0x4d32, 0x6010, 0x0d7e, 0x2068, 0x684c, 0xd0fc,
-       0x0040, 0x708d, 0xa08c, 0x0003, 0xa18e, 0x0002, 0x0040, 0x7093,
-       0x2009, 0x0041, 0x0d7f, 0x0078, 0x7107, 0x6003, 0x0007, 0x1078,
-       0x4685, 0x0d7f, 0x007c, 0x1078, 0x4685, 0x1078, 0x5bfa, 0x0d7f,
-       0x0078, 0x7092, 0x037e, 0x1078, 0x4c21, 0x1078, 0x4d32, 0x6010,
-       0x0d7e, 0x2068, 0x2019, 0x0004, 0x1078, 0x74f2, 0x1078, 0x6a96,
-       0x6017, 0x0028, 0x0d7f, 0x037f, 0x007c, 0xa186, 0x0013, 0x00c0,
-       0x70bb, 0x6004, 0xa086, 0x0042, 0x10c0, 0x12cd, 0x1078, 0x4b79,
-       0x1078, 0x4c72, 0x007c, 0xa186, 0x0027, 0x0040, 0x70c3, 0xa186,
-       0x0014, 0x00c0, 0x70d3, 0x6004, 0xa086, 0x0042, 0x10c0, 0x12cd,
-       0x2001, 0x0007, 0x1078, 0x37d7, 0x1078, 0x4b79, 0x1078, 0x6a96,
-       0x1078, 0x4c72, 0x007c, 0xa182, 0x0040, 0x0079, 0x70d7, 0x70e7,
-       0x70e7, 0x70e7, 0x70e7, 0x70e7, 0x70e7, 0x70e7, 0x70e9, 0x70f5,
-       0x70e7, 0x70e7, 0x70e7, 0x70e7, 0x70e7, 0x70e7, 0x70e7, 0x1078,
-       0x12cd, 0x037e, 0x047e, 0x20e1, 0x0005, 0x3d18, 0x3e20, 0x2c10,
-       0x1078, 0x156a, 0x047f, 0x037f, 0x007c, 0x6010, 0x0d7e, 0x2068,
-       0x684c, 0xd0fc, 0x0040, 0x7101, 0x2009, 0x0041, 0x0d7f, 0x0078,
-       0x7107, 0x6003, 0x0007, 0x1078, 0x4685, 0x0d7f, 0x007c, 0xa182,
-       0x0040, 0x0079, 0x710b, 0x711b, 0x711d, 0x7129, 0x7135, 0x711b,
-       0x711b, 0x711b, 0x711b, 0x711b, 0x711b, 0x711b, 0x711b, 0x711b,
-       0x711b, 0x711b, 0x711b, 0x1078, 0x12cd, 0x6003, 0x0001, 0x6106,
-       0x1078, 0x481d, 0x127e, 0x2091, 0x8000, 0x1078, 0x4c72, 0x127f,
-       0x007c, 0x6003, 0x0001, 0x6106, 0x1078, 0x481d, 0x127e, 0x2091,
-       0x8000, 0x1078, 0x4c72, 0x127f, 0x007c, 0x6003, 0x0003, 0x6106,
-       0x2c10, 0x1078, 0x19c7, 0x127e, 0x2091, 0x8000, 0x1078, 0x4889,
-       0x1078, 0x4d32, 0x127f, 0x007c, 0x1078, 0x4b79, 0x0078, 0x714a,
-       0x1078, 0x4c21, 0x6110, 0x81ff, 0x0040, 0x7157, 0x0d7e, 0x2168,
-       0x037e, 0x2019, 0x0029, 0x1078, 0x74f2, 0x037f, 0x0d7f, 0x1078,
-       0x6a96, 0x1078, 0x4c72, 0x007c, 0xa182, 0x0085, 0x0079, 0x7160,
-       0x7167, 0x7167, 0x7167, 0x7169, 0x7167, 0x7167, 0x7167, 0x1078,
-       0x12cd, 0x027e, 0x0e7e, 0x2071, 0x7b80, 0x7220, 0x1078, 0x740c,
-       0x0040, 0x7176, 0x6007, 0x0086, 0x0078, 0x7178, 0x6007, 0x0087,
-       0x6003, 0x0001, 0x1078, 0x481d, 0x1078, 0x4c72, 0x0e7f, 0x027f,
-       0x007c, 0xa186, 0x0013, 0x00c0, 0x7192, 0x6004, 0xa08a, 0x0085,
-       0x1048, 0x12cd, 0xa08a, 0x008c, 0x10c8, 0x12cd, 0xa082, 0x0085,
-       0x0079, 0x71a5, 0xa186, 0x0027, 0x0040, 0x719a, 0xa186, 0x0014,
-       0x10c0, 0x12cd, 0x2001, 0x0007, 0x1078, 0x37d7, 0x1078, 0x4b79,
-       0x1078, 0x6a96, 0x1078, 0x4c72, 0x007c, 0x71ac, 0x71ae, 0x71ae,
-       0x71ac, 0x71ac, 0x71ac, 0x71ac, 0x1078, 0x12cd, 0x1078, 0x4b79,
-       0x1078, 0x5bfa, 0x1078, 0x4c72, 0x007c, 0xa182, 0x0085, 0x1048,
-       0x12cd, 0xa182, 0x008c, 0x10c8, 0x12cd, 0xa182, 0x0085, 0x0079,
-       0x71c1, 0x71c8, 0x71c8, 0x71c8, 0x71ca, 0x71c8, 0x71c8, 0x71c8,
-       0x1078, 0x12cd, 0x007c, 0x1078, 0x4b79, 0x1078, 0x6a96, 0x1078,
-       0x4c72, 0x007c, 0x037e, 0x2019, 0x000b, 0x1078, 0x71db, 0x601f,
-       0x0006, 0x037f, 0x007c, 0x127e, 0x037e, 0x087e, 0x2091, 0x8000,
-       0x2c40, 0x1078, 0x590d, 0x00c0, 0x7208, 0x1078, 0x59ae, 0x00c0,
-       0x7208, 0x6000, 0xa086, 0x0000, 0x0040, 0x7208, 0x601c, 0xa086,
-       0x0007, 0x0040, 0x7208, 0x0d7e, 0x6000, 0xa086, 0x0004, 0x00c0,
-       0x71fb, 0x1078, 0x166e, 0x6010, 0x2068, 0x1078, 0x6938, 0x0040,
-       0x7203, 0x1078, 0x74f2, 0x0d7f, 0x6013, 0x0000, 0x601f, 0x0007,
-       0x087f, 0x037f, 0x127f, 0x007c, 0x0f7e, 0x0c7e, 0x037e, 0x157e,
-       0x2079, 0x7b80, 0x7838, 0xa08c, 0x00ff, 0x783c, 0x1078, 0x207f,
-       0x00c0, 0x7243, 0x017e, 0x0c7e, 0x1078, 0x381d, 0x00c0, 0x7243,
-       0x2011, 0x7b90, 0xac98, 0x000a, 0x20a9, 0x0004, 0x1078, 0x6160,
-       0x00c0, 0x7243, 0x017f, 0x027f, 0x027e, 0x017e, 0x2019, 0x0029,
-       0x1078, 0x5a82, 0x1078, 0x495a, 0x1078, 0x489d, 0x017f, 0x1078,
-       0x7370, 0x1078, 0x399e, 0x017f, 0x1078, 0x3619, 0x6612, 0x6516,
-       0xa006, 0x0078, 0x7245, 0x0c7f, 0x017f, 0x157f, 0x037f, 0x0c7f,
-       0x0f7f, 0x007c, 0x0c7e, 0x0d7e, 0x017e, 0x2009, 0x761e, 0x2104,
-       0xa086, 0x0074, 0x00c0, 0x72a1, 0x2069, 0x7b8e, 0x690c, 0xa182,
-       0x0100, 0x0048, 0x7291, 0x6908, 0xa184, 0x8000, 0x0040, 0x729d,
-       0xa184, 0x0800, 0x0040, 0x729d, 0x6910, 0xa18a, 0x0001, 0x0048,
-       0x7295, 0x6914, 0x2069, 0x7bae, 0x6904, 0x81ff, 0x00c0, 0x7289,
-       0x690c, 0xa182, 0x0100, 0x0048, 0x7291, 0x6908, 0x81ff, 0x00c0,
-       0x728d, 0x6910, 0xa18a, 0x0001, 0x0048, 0x7295, 0x6918, 0xa18a,
-       0x0001, 0x0048, 0x729d, 0x0078, 0x72a7, 0x6013, 0x0100, 0x0078,
-       0x72a3, 0x6013, 0x0300, 0x0078, 0x72a3, 0x6013, 0x0500, 0x0078,
-       0x72a3, 0x6013, 0x0700, 0x0078, 0x72a3, 0x6013, 0x0900, 0x0078,
-       0x72a3, 0x6013, 0x0b00, 0x0078, 0x72a3, 0x6013, 0x0f00, 0x0078,
-       0x72a3, 0x6013, 0x2d00, 0xa085, 0x0001, 0x0078, 0x72a8, 0xa006,
-       0x017f, 0x0d7f, 0x0c7f, 0x007c, 0x0c7e, 0x0d7e, 0x027e, 0x037e,
-       0x157e, 0x6218, 0x2268, 0x6b04, 0xa394, 0x00ff, 0xa286, 0x0006,
-       0x0040, 0x72d0, 0xa286, 0x0004, 0x0040, 0x72d0, 0xa394, 0xff00,
-       0x8217, 0xa286, 0x0006, 0x0040, 0x72d0, 0xa286, 0x0004, 0x0040,
-       0x72d0, 0x0c7e, 0x2d60, 0x1078, 0x382f, 0x0c7f, 0x0078, 0x7303,
-       0x2011, 0x7b96, 0xad98, 0x000a, 0x20a9, 0x0004, 0x1078, 0x6160,
-       0x00c0, 0x7304, 0x2011, 0x7b9a, 0xad98, 0x0006, 0x20a9, 0x0004,
-       0x1078, 0x6160, 0x00c0, 0x7304, 0x047e, 0x017e, 0x6aa0, 0xa294,
-       0x00ff, 0x8227, 0xa006, 0x2009, 0x7652, 0x210c, 0xd1a4, 0x0040,
-       0x72f8, 0x2009, 0x0029, 0x1078, 0x7536, 0x6800, 0xc0e5, 0x6802,
-       0x2019, 0x0029, 0x1078, 0x495a, 0x1078, 0x489d, 0x2c08, 0x1078,
-       0x7370, 0x017f, 0x047f, 0xa006, 0x157f, 0x037f, 0x027f, 0x0d7f,
-       0x0c7f, 0x007c, 0x0d7e, 0x2069, 0x7b8e, 0x6800, 0xa086, 0x0800,
-       0x0040, 0x7316, 0x6013, 0x0000, 0x0078, 0x7317, 0xa006, 0x0d7f,
-       0x007c, 0x0c7e, 0x0f7e, 0x017e, 0x027e, 0x037e, 0x157e, 0x2079,
-       0x7b8c, 0x7930, 0x7834, 0x1078, 0x207f, 0x00c0, 0x733d, 0x1078,
-       0x381d, 0x00c0, 0x733d, 0x2011, 0x7b90, 0xac98, 0x000a, 0x20a9,
-       0x0004, 0x1078, 0x6160, 0x00c0, 0x733d, 0x2011, 0x7b94, 0xac98,
-       0x0006, 0x20a9, 0x0004, 0x1078, 0x6160, 0x157f, 0x037f, 0x027f,
-       0x017f, 0x0f7f, 0x0c7f, 0x007c, 0x0c7e, 0x007e, 0x017e, 0x027e,
-       0x037e, 0x157e, 0x2011, 0x7b83, 0x2204, 0x8211, 0x220c, 0x1078,
-       0x207f, 0x00c0, 0x7369, 0x1078, 0x381d, 0x00c0, 0x7369, 0x2011,
-       0x7b96, 0xac98, 0x000a, 0x20a9, 0x0004, 0x1078, 0x6160, 0x00c0,
-       0x7369, 0x2011, 0x7b9a, 0xac98, 0x0006, 0x20a9, 0x0004, 0x1078,
-       0x6160, 0x157f, 0x037f, 0x027f, 0x017f, 0x007f, 0x0c7f, 0x007c,
-       0x0e7e, 0x0c7e, 0x077e, 0x067e, 0x057e, 0x047e, 0x027e, 0x127e,
-       0x2091, 0x8000, 0x2029, 0x783f, 0x252c, 0x2021, 0x7845, 0x2424,
-       0x2061, 0x7d00, 0x2071, 0x7600, 0x7644, 0x7060, 0x8001, 0xa602,
-       0x00c8, 0x73d5, 0x2100, 0xac06, 0x0040, 0x73cb, 0x1078, 0x754e,
-       0x0040, 0x73cb, 0x671c, 0xa786, 0x0001, 0x0040, 0x73ea, 0xa786,
-       0x0007, 0x0040, 0x73cb, 0x2500, 0xac06, 0x0040, 0x73cb, 0x2400,
-       0xac06, 0x0040, 0x73cb, 0x1078, 0x7562, 0x00c0, 0x73cb, 0x0d7e,
-       0x6000, 0xa086, 0x0004, 0x00c0, 0x73b1, 0x017e, 0x1078, 0x166e,
-       0x017f, 0x6010, 0x2068, 0x1078, 0x6938, 0x0040, 0x73c8, 0xa786,
-       0x0003, 0x00c0, 0x73de, 0x6837, 0x0103, 0x6b4a, 0x6847, 0x0000,
-       0x017e, 0x1078, 0x6b34, 0x1078, 0x3a72, 0x017f, 0x1078, 0x6a89,
-       0x0d7f, 0x1078, 0x6a96, 0xace0, 0x0008, 0x2001, 0x7615, 0x2004,
-       0xac02, 0x00c8, 0x73d5, 0x0078, 0x7382, 0x127f, 0x027f, 0x047f,
-       0x057f, 0x067f, 0x077f, 0x0c7f, 0x0e7f, 0x007c, 0xa786, 0x0006,
-       0x00c0, 0x73bb, 0xa386, 0x0005, 0x0040, 0x73cb, 0x1078, 0x74f2,
-       0x0078, 0x73c8, 0x1078, 0x7562, 0x00c0, 0x73cb, 0xa180, 0x0001,
-       0x2004, 0xa086, 0x0018, 0x00c0, 0x73cb, 0x6000, 0xa086, 0x0002,
-       0x00c0, 0x73cb, 0x1078, 0x6aaf, 0x0040, 0x7406, 0x1078, 0x6ac3,
-       0x00c0, 0x73cb, 0x1078, 0x5e4d, 0x0078, 0x7408, 0x1078, 0x22d7,
-       0x1078, 0x6a96, 0x0078, 0x73cb, 0x0c7e, 0x0e7e, 0x017e, 0x2c08,
-       0x2170, 0x1078, 0x7509, 0x017f, 0x0040, 0x741b, 0x601c, 0xa084,
-       0x000f, 0x1079, 0x741e, 0x0e7f, 0x0c7f, 0x007c, 0x7426, 0x7426,
-       0x7426, 0x7426, 0x7426, 0x7426, 0x7428, 0x7426, 0xa006, 0x007c,
-       0x047e, 0x017e, 0x7018, 0xa080, 0x0028, 0x2024, 0xa4a4, 0x00ff,
-       0x8427, 0x2c00, 0x2009, 0x0020, 0x1078, 0x7536, 0x017f, 0x047f,
-       0x037e, 0x2019, 0x0002, 0x1078, 0x71db, 0x037f, 0xa085, 0x0001,
-       0x007c, 0x2001, 0x0001, 0x1078, 0x37b5, 0x157e, 0x017e, 0x027e,
-       0x037e, 0x20a9, 0x0004, 0x2019, 0x7605, 0x2011, 0x7b96, 0x1078,
-       0x6160, 0x037f, 0x027f, 0x017f, 0x157f, 0xa005, 0x007c, 0x0f7e,
-       0x0e7e, 0x0c7e, 0x077e, 0x067e, 0x027e, 0x127e, 0x2091, 0x8000,
-       0x2061, 0x7d00, 0x2079, 0x0001, 0x8fff, 0x0040, 0x74b2, 0x2071,
-       0x7600, 0x7644, 0x7060, 0x8001, 0xa602, 0x00c8, 0x74b2, 0x88ff,
-       0x0040, 0x7478, 0x2800, 0xac06, 0x00c0, 0x74a8, 0x2079, 0x0000,
-       0x1078, 0x754e, 0x0040, 0x74a8, 0x2400, 0xac06, 0x0040, 0x74a8,
-       0x671c, 0xa786, 0x0006, 0x00c0, 0x74a8, 0xa786, 0x0007, 0x0040,
-       0x74a8, 0x88ff, 0x00c0, 0x7490, 0x6018, 0xa206, 0x00c0, 0x74a8,
-       0x0d7e, 0x6000, 0xa086, 0x0004, 0x00c0, 0x7498, 0x1078, 0x166e,
-       0x6010, 0x2068, 0x1078, 0x6938, 0x0040, 0x74a2, 0x047e, 0x1078,
-       0x74f2, 0x047f, 0x0d7f, 0x1078, 0x6a96, 0x88ff, 0x00c0, 0x74bb,
-       0xace0, 0x0008, 0x2001, 0x7615, 0x2004, 0xac02, 0x00c8, 0x74b2,
-       0x0078, 0x7464, 0xa006, 0x127f, 0x027f, 0x067f, 0x077f, 0x0c7f,
-       0x0e7f, 0x0f7f, 0x007c, 0xa8c5, 0x0001, 0x0078, 0x74b3, 0x087e,
-       0x2041, 0x0000, 0x2c20, 0x2019, 0x0002, 0x6218, 0x1078, 0x590d,
-       0x1078, 0x59ae, 0x1078, 0x7457, 0x087f, 0x007c, 0x027e, 0x047e,
-       0x087e, 0x0c7e, 0x157e, 0x2c20, 0x20a9, 0x007f, 0x2009, 0x0000,
-       0x017e, 0x037e, 0x1078, 0x381d, 0x00c0, 0x74e7, 0x2c10, 0x2041,
-       0x0000, 0x1078, 0x590d, 0x1078, 0x59ae, 0x1078, 0x7457, 0x037f,
-       0x017f, 0x8108, 0x00f0, 0x74d8, 0x157f, 0x0c7f, 0x087f, 0x047f,
-       0x027f, 0x007c, 0x017e, 0x0f7e, 0x8dff, 0x0040, 0x7506, 0x6800,
-       0xa07d, 0x0040, 0x7503, 0x6803, 0x0000, 0x6b52, 0x1078, 0x3a72,
-       0x2f68, 0x0078, 0x74f7, 0x6b52, 0x1078, 0x3a72, 0x0f7f, 0x017f,
-       0x007c, 0x0e7e, 0x047e, 0x037e, 0x2061, 0x7d00, 0x2071, 0x7600,
-       0x7444, 0x7060, 0x8001, 0xa402, 0x00c8, 0x7531, 0x2100, 0xac06,
-       0x0040, 0x7523, 0x6000, 0xa086, 0x0000, 0x0040, 0x7523, 0x6008,
-       0xa206, 0x0040, 0x752d, 0xace0, 0x0008, 0x2001, 0x7615, 0x2004,
-       0xac02, 0x00c8, 0x7531, 0x0078, 0x750e, 0xa085, 0x0001, 0x0078,
-       0x7532, 0xa006, 0x037f, 0x047f, 0x0e7f, 0x007c, 0x0d7e, 0x007e,
-       0x1078, 0x1327, 0x007f, 0x1040, 0x12cd, 0x6837, 0x010d, 0x6803,
-       0x0000, 0x683b, 0x0000, 0x685b, 0x0000, 0x685e, 0x6956, 0x6c46,
-       0x684f, 0x0000, 0x1078, 0x3a72, 0x0d7f, 0x007c, 0x6700, 0xa786,
-       0x0000, 0x0040, 0x7561, 0xa786, 0x0001, 0x0040, 0x7561, 0xa786,
-       0x000a, 0x0040, 0x7561, 0xa786, 0x0009, 0x0040, 0x7561, 0xa085,
-       0x0001, 0x007c, 0x0e7e, 0x6018, 0x2070, 0x70a0, 0xa206, 0x0e7f,
-       0x007c, 0x127e, 0x007e, 0x0e7e, 0x2091, 0x8000, 0x2071, 0x7640,
-       0xd5a4, 0x0040, 0x7576, 0x7034, 0x8000, 0x7036, 0xd5b4, 0x0040,
-       0x757c, 0x7030, 0x8000, 0x7032, 0xd5ac, 0x0040, 0x7583, 0x2071,
-       0x764a, 0x1078, 0x75b2, 0x0e7f, 0x007f, 0x127f, 0x007c, 0x127e,
-       0x007e, 0x0e7e, 0x2091, 0x8000, 0x2071, 0x7640, 0xd5a4, 0x0040,
-       0x7594, 0x7034, 0x8000, 0x7036, 0xd5b4, 0x0040, 0x759a, 0x7030,
-       0x8000, 0x7032, 0xd5ac, 0x0040, 0x75a1, 0x2071, 0x764a, 0x1078,
-       0x75b2, 0x0e7f, 0x007f, 0x127f, 0x007c, 0x127e, 0x007e, 0x0e7e,
-       0x2091, 0x8000, 0x2071, 0x7642, 0x1078, 0x75b2, 0x0e7f, 0x007f,
-       0x127f, 0x007c, 0x2e04, 0x8000, 0x2072, 0x00c8, 0x75bb, 0x8e70,
-       0x2e04, 0x8000, 0x2072, 0x007c, 0x0e7e, 0x2071, 0x7640, 0x1078,
-       0x75b2, 0x0e7f, 0x007c, 0x0e7e, 0x2071, 0x7644, 0x1078, 0x75b2,
-       0x0e7f, 0x007c, 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020,
-       0x0040, 0x0080, 0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 0x2000,
-       0x4000, 0x8000, 0x2212
+       0x6106, 0x2071, 0x7c80, 0x7444, 0xa4a4, 0xe600, 0x0040, 0x7026,
+       0x2009, 0x0000, 0x0c7e, 0x1078, 0x4727, 0x2c68, 0x0c7f, 0x6a00,
+       0xa284, 0x0001, 0x0040, 0x7091, 0x1078, 0x47e6, 0x0040, 0x70bc,
+       0xa295, 0x0200, 0x6a02, 0x0078, 0x6feb, 0x2009, 0x0001, 0x2011,
+       0x0200, 0x1078, 0x47d0, 0x1078, 0x1327, 0x1040, 0x12cd, 0x6003,
+       0x0007, 0x2d00, 0x6837, 0x010d, 0x6803, 0x0000, 0x683b, 0x0000,
+       0x6c5a, 0x2c00, 0x685e, 0x6018, 0x2078, 0x78a0, 0x8007, 0x7130,
+       0x694a, 0xa084, 0xff00, 0x6846, 0x684f, 0x0000, 0x6857, 0x0036,
+       0x1078, 0x3b92, 0xa486, 0x2000, 0x00c0, 0x7014, 0x2019, 0x0017,
+       0x1078, 0x75d9, 0x0078, 0x707e, 0xa486, 0x0400, 0x00c0, 0x701e,
+       0x2019, 0x0002, 0x1078, 0x75d9, 0x0078, 0x707e, 0xa486, 0x0200,
+       0x00c0, 0x7024, 0x1078, 0x75ca, 0x0078, 0x707e, 0x2009, 0x0000,
+       0x0c7e, 0x1078, 0x4727, 0x2c68, 0x0c7f, 0x6a00, 0xa284, 0x0001,
+       0x0040, 0x70d4, 0xa284, 0x0300, 0x00c0, 0x70cc, 0x6804, 0xa005,
+       0x0040, 0x70bc, 0x8001, 0x6806, 0x6003, 0x0007, 0x1078, 0x130c,
+       0x0040, 0x7085, 0x6013, 0x0000, 0x6803, 0x0000, 0x6837, 0x0116,
+       0x683b, 0x0000, 0x2c00, 0x684a, 0x6018, 0x2078, 0x78a0, 0x8007,
+       0x7130, 0x6986, 0x6846, 0x6853, 0x003d, 0x7044, 0xa084, 0x0003,
+       0xa086, 0x0002, 0x00c0, 0x7060, 0x684f, 0x0040, 0x0078, 0x706a,
+       0xa086, 0x0001, 0x00c0, 0x7068, 0x684f, 0x0080, 0x0078, 0x706a,
+       0x684f, 0x0000, 0x20a9, 0x000a, 0x2001, 0x7c90, 0xad90, 0x0015,
+       0x200c, 0x810f, 0x2112, 0x8000, 0x8210, 0x00f0, 0x7070, 0x200c,
+       0x6982, 0x8000, 0x200c, 0x697e, 0x1078, 0x3b92, 0x027f, 0x047f,
+       0x157f, 0x0f7f, 0x0e7f, 0x0d7f, 0x007c, 0x6013, 0x0100, 0x6003,
+       0x0001, 0x6007, 0x0041, 0x1078, 0x4941, 0x1078, 0x4d96, 0x0078,
+       0x707e, 0x2069, 0x7c92, 0x2d04, 0xa084, 0xff00, 0xa086, 0x1200,
+       0x00c0, 0x70b0, 0x2069, 0x7c80, 0x686c, 0xa084, 0x00ff, 0x017e,
+       0x6110, 0xa18c, 0x0700, 0xa10d, 0x6112, 0x017f, 0x6003, 0x0001,
+       0x6007, 0x0043, 0x1078, 0x4941, 0x1078, 0x4d96, 0x0078, 0x707e,
+       0x6013, 0x0200, 0x6003, 0x0001, 0x6007, 0x0041, 0x1078, 0x4941,
+       0x1078, 0x4d96, 0x0078, 0x707e, 0x6013, 0x0300, 0x0078, 0x70c2,
+       0x6013, 0x0100, 0x6003, 0x0001, 0x6007, 0x0041, 0x1078, 0x4941,
+       0x1078, 0x4d96, 0x0078, 0x707e, 0x6013, 0x0500, 0x0078, 0x70c2,
+       0x6013, 0x0600, 0x0078, 0x7091, 0x6013, 0x0200, 0x0078, 0x7091,
+       0xa186, 0x0013, 0x00c0, 0x70ea, 0x6004, 0xa08a, 0x0040, 0x1048,
+       0x12cd, 0xa08a, 0x0050, 0x10c8, 0x12cd, 0xa082, 0x0040, 0x2008,
+       0x0079, 0x711b, 0xa186, 0x0047, 0x00c0, 0x70f0, 0x0078, 0x714a,
+       0xa186, 0x0027, 0x0040, 0x70f8, 0xa186, 0x0014, 0x10c0, 0x12cd,
+       0x6004, 0xa082, 0x0040, 0x2008, 0x0079, 0x70fe, 0x710e, 0x7110,
+       0x7110, 0x710e, 0x710e, 0x710e, 0x710e, 0x710e, 0x710e, 0x710e,
+       0x710e, 0x710e, 0x710e, 0x710e, 0x710e, 0x710e, 0x1078, 0x12cd,
+       0x2001, 0x0007, 0x1078, 0x3802, 0x1078, 0x4c9d, 0x1078, 0x6bb6,
+       0x1078, 0x4d96, 0x007c, 0x712b, 0x713b, 0x7134, 0x7144, 0x712b,
+       0x712b, 0x712b, 0x712b, 0x712b, 0x712b, 0x712b, 0x712b, 0x712b,
+       0x712b, 0x712b, 0x712b, 0x1078, 0x12cd, 0x6010, 0xa088, 0x0013,
+       0x2104, 0xa085, 0x0400, 0x200a, 0x1078, 0x4c9d, 0x6003, 0x0002,
+       0x1078, 0x4d96, 0x007c, 0x1078, 0x4c9d, 0x1078, 0x47a8, 0x1078,
+       0x5d1a, 0x1078, 0x4d96, 0x007c, 0x1078, 0x4c9d, 0x2009, 0x0041,
+       0x0078, 0x7212, 0xa182, 0x0040, 0x0079, 0x714e, 0x715e, 0x7160,
+       0x715e, 0x715e, 0x715e, 0x715e, 0x715e, 0x7161, 0x715e, 0x715e,
+       0x715e, 0x715e, 0x715e, 0x715e, 0x715e, 0x715e, 0x1078, 0x12cd,
+       0x007c, 0x6003, 0x0004, 0x6110, 0x20e1, 0x0005, 0x3d18, 0x3e20,
+       0x2c10, 0x1078, 0x156a, 0x007c, 0xa182, 0x0040, 0x0079, 0x7170,
+       0x7180, 0x7180, 0x7180, 0x7180, 0x7180, 0x7180, 0x7180, 0x7180,
+       0x7180, 0x7182, 0x71a5, 0x7180, 0x7180, 0x7180, 0x7180, 0x71a5,
+       0x1078, 0x12cd, 0x1078, 0x4d45, 0x1078, 0x4e56, 0x6010, 0x0d7e,
+       0x2068, 0x684c, 0xd0fc, 0x0040, 0x7198, 0xa08c, 0x0003, 0xa18e,
+       0x0002, 0x0040, 0x719e, 0x2009, 0x0041, 0x0d7f, 0x0078, 0x7212,
+       0x6003, 0x0007, 0x1078, 0x47a8, 0x0d7f, 0x007c, 0x1078, 0x47a8,
+       0x1078, 0x5d1a, 0x0d7f, 0x0078, 0x719d, 0x037e, 0x1078, 0x4d45,
+       0x1078, 0x4e56, 0x6010, 0x0d7e, 0x2068, 0x2019, 0x0004, 0x1078,
+       0x75fd, 0x1078, 0x6bb6, 0x6017, 0x0028, 0x0d7f, 0x037f, 0x007c,
+       0xa186, 0x0013, 0x00c0, 0x71c6, 0x6004, 0xa086, 0x0042, 0x10c0,
+       0x12cd, 0x1078, 0x4c9d, 0x1078, 0x4d96, 0x007c, 0xa186, 0x0027,
+       0x0040, 0x71ce, 0xa186, 0x0014, 0x00c0, 0x71de, 0x6004, 0xa086,
+       0x0042, 0x10c0, 0x12cd, 0x2001, 0x0007, 0x1078, 0x3802, 0x1078,
+       0x4c9d, 0x1078, 0x6bb6, 0x1078, 0x4d96, 0x007c, 0xa182, 0x0040,
+       0x0079, 0x71e2, 0x71f2, 0x71f2, 0x71f2, 0x71f2, 0x71f2, 0x71f2,
+       0x71f2, 0x71f4, 0x7200, 0x71f2, 0x71f2, 0x71f2, 0x71f2, 0x71f2,
+       0x71f2, 0x71f2, 0x1078, 0x12cd, 0x037e, 0x047e, 0x20e1, 0x0005,
+       0x3d18, 0x3e20, 0x2c10, 0x1078, 0x156a, 0x047f, 0x037f, 0x007c,
+       0x6010, 0x0d7e, 0x2068, 0x684c, 0xd0fc, 0x0040, 0x720c, 0x2009,
+       0x0041, 0x0d7f, 0x0078, 0x7212, 0x6003, 0x0007, 0x1078, 0x47a8,
+       0x0d7f, 0x007c, 0xa182, 0x0040, 0x0079, 0x7216, 0x7226, 0x7228,
+       0x7234, 0x7240, 0x7226, 0x7226, 0x7226, 0x7226, 0x7226, 0x7226,
+       0x7226, 0x7226, 0x7226, 0x7226, 0x7226, 0x7226, 0x1078, 0x12cd,
+       0x6003, 0x0001, 0x6106, 0x1078, 0x4941, 0x127e, 0x2091, 0x8000,
+       0x1078, 0x4d96, 0x127f, 0x007c, 0x6003, 0x0001, 0x6106, 0x1078,
+       0x4941, 0x127e, 0x2091, 0x8000, 0x1078, 0x4d96, 0x127f, 0x007c,
+       0x6003, 0x0003, 0x6106, 0x2c10, 0x1078, 0x19c7, 0x127e, 0x2091,
+       0x8000, 0x1078, 0x49ad, 0x1078, 0x4e56, 0x127f, 0x007c, 0x1078,
+       0x4c9d, 0x0078, 0x7255, 0x1078, 0x4d45, 0x6110, 0x81ff, 0x0040,
+       0x7262, 0x0d7e, 0x2168, 0x037e, 0x2019, 0x0029, 0x1078, 0x75fd,
+       0x037f, 0x0d7f, 0x1078, 0x6bb6, 0x1078, 0x4d96, 0x007c, 0xa182,
+       0x0085, 0x0079, 0x726b, 0x7272, 0x7272, 0x7272, 0x7274, 0x7272,
+       0x7272, 0x7272, 0x1078, 0x12cd, 0x027e, 0x0e7e, 0x2071, 0x7c80,
+       0x7220, 0x1078, 0x7517, 0x0040, 0x7281, 0x6007, 0x0086, 0x0078,
+       0x7283, 0x6007, 0x0087, 0x6003, 0x0001, 0x1078, 0x4941, 0x1078,
+       0x4d96, 0x0e7f, 0x027f, 0x007c, 0xa186, 0x0013, 0x00c0, 0x729d,
+       0x6004, 0xa08a, 0x0085, 0x1048, 0x12cd, 0xa08a, 0x008c, 0x10c8,
+       0x12cd, 0xa082, 0x0085, 0x0079, 0x72b0, 0xa186, 0x0027, 0x0040,
+       0x72a5, 0xa186, 0x0014, 0x10c0, 0x12cd, 0x2001, 0x0007, 0x1078,
+       0x3802, 0x1078, 0x4c9d, 0x1078, 0x6bb6, 0x1078, 0x4d96, 0x007c,
+       0x72b7, 0x72b9, 0x72b9, 0x72b7, 0x72b7, 0x72b7, 0x72b7, 0x1078,
+       0x12cd, 0x1078, 0x4c9d, 0x1078, 0x5d1a, 0x1078, 0x4d96, 0x007c,
+       0xa182, 0x0085, 0x1048, 0x12cd, 0xa182, 0x008c, 0x10c8, 0x12cd,
+       0xa182, 0x0085, 0x0079, 0x72cc, 0x72d3, 0x72d3, 0x72d3, 0x72d5,
+       0x72d3, 0x72d3, 0x72d3, 0x1078, 0x12cd, 0x007c, 0x1078, 0x4c9d,
+       0x1078, 0x6bb6, 0x1078, 0x4d96, 0x007c, 0x037e, 0x2019, 0x000b,
+       0x1078, 0x72e6, 0x601f, 0x0006, 0x037f, 0x007c, 0x127e, 0x037e,
+       0x087e, 0x2091, 0x8000, 0x2c40, 0x1078, 0x5a2d, 0x00c0, 0x7313,
+       0x1078, 0x5ace, 0x00c0, 0x7313, 0x6000, 0xa086, 0x0000, 0x0040,
+       0x7313, 0x601c, 0xa086, 0x0007, 0x0040, 0x7313, 0x0d7e, 0x6000,
+       0xa086, 0x0004, 0x00c0, 0x7306, 0x1078, 0x166e, 0x6010, 0x2068,
+       0x1078, 0x6a58, 0x0040, 0x730e, 0x1078, 0x75fd, 0x0d7f, 0x6013,
+       0x0000, 0x601f, 0x0007, 0x087f, 0x037f, 0x127f, 0x007c, 0x0f7e,
+       0x0c7e, 0x037e, 0x157e, 0x2079, 0x7c80, 0x7838, 0xa08c, 0x00ff,
+       0x783c, 0x1078, 0x207f, 0x00c0, 0x734e, 0x017e, 0x0c7e, 0x1078,
+       0x384c, 0x00c0, 0x734e, 0x2011, 0x7c90, 0xac98, 0x000a, 0x20a9,
+       0x0004, 0x1078, 0x6280, 0x00c0, 0x734e, 0x017f, 0x027f, 0x027e,
+       0x017e, 0x2019, 0x0029, 0x1078, 0x5ba2, 0x1078, 0x4a7e, 0x1078,
+       0x49c1, 0x017f, 0x1078, 0x747b, 0x1078, 0x3a36, 0x017f, 0x1078,
+       0x3637, 0x6612, 0x6516, 0xa006, 0x0078, 0x7350, 0x0c7f, 0x017f,
+       0x157f, 0x037f, 0x0c7f, 0x0f7f, 0x007c, 0x0c7e, 0x0d7e, 0x017e,
+       0x2009, 0x771e, 0x2104, 0xa086, 0x0074, 0x00c0, 0x73ac, 0x2069,
+       0x7c8e, 0x690c, 0xa182, 0x0100, 0x0048, 0x739c, 0x6908, 0xa184,
+       0x8000, 0x0040, 0x73a8, 0xa184, 0x0800, 0x0040, 0x73a8, 0x6910,
+       0xa18a, 0x0001, 0x0048, 0x73a0, 0x6914, 0x2069, 0x7cae, 0x6904,
+       0x81ff, 0x00c0, 0x7394, 0x690c, 0xa182, 0x0100, 0x0048, 0x739c,
+       0x6908, 0x81ff, 0x00c0, 0x7398, 0x6910, 0xa18a, 0x0001, 0x0048,
+       0x73a0, 0x6918, 0xa18a, 0x0001, 0x0048, 0x73a8, 0x0078, 0x73b2,
+       0x6013, 0x0100, 0x0078, 0x73ae, 0x6013, 0x0300, 0x0078, 0x73ae,
+       0x6013, 0x0500, 0x0078, 0x73ae, 0x6013, 0x0700, 0x0078, 0x73ae,
+       0x6013, 0x0900, 0x0078, 0x73ae, 0x6013, 0x0b00, 0x0078, 0x73ae,
+       0x6013, 0x0f00, 0x0078, 0x73ae, 0x6013, 0x2d00, 0xa085, 0x0001,
+       0x0078, 0x73b3, 0xa006, 0x017f, 0x0d7f, 0x0c7f, 0x007c, 0x0c7e,
+       0x0d7e, 0x027e, 0x037e, 0x157e, 0x6218, 0x2268, 0x6b04, 0xa394,
+       0x00ff, 0xa286, 0x0006, 0x0040, 0x73db, 0xa286, 0x0004, 0x0040,
+       0x73db, 0xa394, 0xff00, 0x8217, 0xa286, 0x0006, 0x0040, 0x73db,
+       0xa286, 0x0004, 0x0040, 0x73db, 0x0c7e, 0x2d60, 0x1078, 0x385e,
+       0x0c7f, 0x0078, 0x740e, 0x2011, 0x7c96, 0xad98, 0x000a, 0x20a9,
+       0x0004, 0x1078, 0x6280, 0x00c0, 0x740f, 0x2011, 0x7c9a, 0xad98,
+       0x0006, 0x20a9, 0x0004, 0x1078, 0x6280, 0x00c0, 0x740f, 0x047e,
+       0x017e, 0x6aa0, 0xa294, 0x00ff, 0x8227, 0xa006, 0x2009, 0x7752,
+       0x210c, 0xd1a4, 0x0040, 0x7403, 0x2009, 0x0029, 0x1078, 0x7641,
+       0x6800, 0xc0e5, 0x6802, 0x2019, 0x0029, 0x1078, 0x4a7e, 0x1078,
+       0x49c1, 0x2c08, 0x1078, 0x747b, 0x017f, 0x047f, 0xa006, 0x157f,
+       0x037f, 0x027f, 0x0d7f, 0x0c7f, 0x007c, 0x0d7e, 0x2069, 0x7c8e,
+       0x6800, 0xa086, 0x0800, 0x0040, 0x7421, 0x6013, 0x0000, 0x0078,
+       0x7422, 0xa006, 0x0d7f, 0x007c, 0x0c7e, 0x0f7e, 0x017e, 0x027e,
+       0x037e, 0x157e, 0x2079, 0x7c8c, 0x7930, 0x7834, 0x1078, 0x207f,
+       0x00c0, 0x7448, 0x1078, 0x384c, 0x00c0, 0x7448, 0x2011, 0x7c90,
+       0xac98, 0x000a, 0x20a9, 0x0004, 0x1078, 0x6280, 0x00c0, 0x7448,
+       0x2011, 0x7c94, 0xac98, 0x0006, 0x20a9, 0x0004, 0x1078, 0x6280,
+       0x157f, 0x037f, 0x027f, 0x017f, 0x0f7f, 0x0c7f, 0x007c, 0x0c7e,
+       0x007e, 0x017e, 0x027e, 0x037e, 0x157e, 0x2011, 0x7c83, 0x2204,
+       0x8211, 0x220c, 0x1078, 0x207f, 0x00c0, 0x7474, 0x1078, 0x384c,
+       0x00c0, 0x7474, 0x2011, 0x7c96, 0xac98, 0x000a, 0x20a9, 0x0004,
+       0x1078, 0x6280, 0x00c0, 0x7474, 0x2011, 0x7c9a, 0xac98, 0x0006,
+       0x20a9, 0x0004, 0x1078, 0x6280, 0x157f, 0x037f, 0x027f, 0x017f,
+       0x007f, 0x0c7f, 0x007c, 0x0e7e, 0x0c7e, 0x077e, 0x067e, 0x057e,
+       0x047e, 0x027e, 0x127e, 0x2091, 0x8000, 0x2029, 0x793f, 0x252c,
+       0x2021, 0x7945, 0x2424, 0x2061, 0x7e00, 0x2071, 0x7700, 0x7644,
+       0x7060, 0x8001, 0xa602, 0x00c8, 0x74e0, 0x2100, 0xac06, 0x0040,
+       0x74d6, 0x1078, 0x7659, 0x0040, 0x74d6, 0x671c, 0xa786, 0x0001,
+       0x0040, 0x74f5, 0xa786, 0x0007, 0x0040, 0x74d6, 0x2500, 0xac06,
+       0x0040, 0x74d6, 0x2400, 0xac06, 0x0040, 0x74d6, 0x1078, 0x766d,
+       0x00c0, 0x74d6, 0x0d7e, 0x6000, 0xa086, 0x0004, 0x00c0, 0x74bc,
+       0x017e, 0x1078, 0x166e, 0x017f, 0x6010, 0x2068, 0x1078, 0x6a58,
+       0x0040, 0x74d3, 0xa786, 0x0003, 0x00c0, 0x74e9, 0x6837, 0x0103,
+       0x6b4a, 0x6847, 0x0000, 0x017e, 0x1078, 0x6c54, 0x1078, 0x3b92,
+       0x017f, 0x1078, 0x6ba9, 0x0d7f, 0x1078, 0x6bb6, 0xace0, 0x0008,
+       0x2001, 0x7715, 0x2004, 0xac02, 0x00c8, 0x74e0, 0x0078, 0x748d,
+       0x127f, 0x027f, 0x047f, 0x057f, 0x067f, 0x077f, 0x0c7f, 0x0e7f,
+       0x007c, 0xa786, 0x0006, 0x00c0, 0x74c6, 0xa386, 0x0005, 0x0040,
+       0x74d6, 0x1078, 0x75fd, 0x0078, 0x74d3, 0x1078, 0x766d, 0x00c0,
+       0x74d6, 0xa180, 0x0001, 0x2004, 0xa086, 0x0018, 0x00c0, 0x74d6,
+       0x6000, 0xa086, 0x0002, 0x00c0, 0x74d6, 0x1078, 0x6bcf, 0x0040,
+       0x7511, 0x1078, 0x6be3, 0x00c0, 0x74d6, 0x1078, 0x5f6d, 0x0078,
+       0x7513, 0x1078, 0x22d7, 0x1078, 0x6bb6, 0x0078, 0x74d6, 0x0c7e,
+       0x0e7e, 0x017e, 0x2c08, 0x2170, 0x1078, 0x7614, 0x017f, 0x0040,
+       0x7526, 0x601c, 0xa084, 0x000f, 0x1079, 0x7529, 0x0e7f, 0x0c7f,
+       0x007c, 0x7531, 0x7531, 0x7531, 0x7531, 0x7531, 0x7531, 0x7533,
+       0x7531, 0xa006, 0x007c, 0x047e, 0x017e, 0x7018, 0xa080, 0x0028,
+       0x2024, 0xa4a4, 0x00ff, 0x8427, 0x2c00, 0x2009, 0x0020, 0x1078,
+       0x7641, 0x017f, 0x047f, 0x037e, 0x2019, 0x0002, 0x1078, 0x72e6,
+       0x037f, 0xa085, 0x0001, 0x007c, 0x2001, 0x0001, 0x1078, 0x37e0,
+       0x157e, 0x017e, 0x027e, 0x037e, 0x20a9, 0x0004, 0x2019, 0x7705,
+       0x2011, 0x7c96, 0x1078, 0x6280, 0x037f, 0x027f, 0x017f, 0x157f,
+       0xa005, 0x007c, 0x0f7e, 0x0e7e, 0x0c7e, 0x077e, 0x067e, 0x027e,
+       0x127e, 0x2091, 0x8000, 0x2061, 0x7e00, 0x2079, 0x0001, 0x8fff,
+       0x0040, 0x75bd, 0x2071, 0x7700, 0x7644, 0x7060, 0x8001, 0xa602,
+       0x00c8, 0x75bd, 0x88ff, 0x0040, 0x7583, 0x2800, 0xac06, 0x00c0,
+       0x75b3, 0x2079, 0x0000, 0x1078, 0x7659, 0x0040, 0x75b3, 0x2400,
+       0xac06, 0x0040, 0x75b3, 0x671c, 0xa786, 0x0006, 0x00c0, 0x75b3,
+       0xa786, 0x0007, 0x0040, 0x75b3, 0x88ff, 0x00c0, 0x759b, 0x6018,
+       0xa206, 0x00c0, 0x75b3, 0x0d7e, 0x6000, 0xa086, 0x0004, 0x00c0,
+       0x75a3, 0x1078, 0x166e, 0x6010, 0x2068, 0x1078, 0x6a58, 0x0040,
+       0x75ad, 0x047e, 0x1078, 0x75fd, 0x047f, 0x0d7f, 0x1078, 0x6bb6,
+       0x88ff, 0x00c0, 0x75c6, 0xace0, 0x0008, 0x2001, 0x7715, 0x2004,
+       0xac02, 0x00c8, 0x75bd, 0x0078, 0x756f, 0xa006, 0x127f, 0x027f,
+       0x067f, 0x077f, 0x0c7f, 0x0e7f, 0x0f7f, 0x007c, 0xa8c5, 0x0001,
+       0x0078, 0x75be, 0x087e, 0x2041, 0x0000, 0x2c20, 0x2019, 0x0002,
+       0x6218, 0x1078, 0x5a2d, 0x1078, 0x5ace, 0x1078, 0x7562, 0x087f,
+       0x007c, 0x027e, 0x047e, 0x087e, 0x0c7e, 0x157e, 0x2c20, 0x20a9,
+       0x007f, 0x2009, 0x0000, 0x017e, 0x037e, 0x1078, 0x384c, 0x00c0,
+       0x75f2, 0x2c10, 0x2041, 0x0000, 0x1078, 0x5a2d, 0x1078, 0x5ace,
+       0x1078, 0x7562, 0x037f, 0x017f, 0x8108, 0x00f0, 0x75e3, 0x157f,
+       0x0c7f, 0x087f, 0x047f, 0x027f, 0x007c, 0x017e, 0x0f7e, 0x8dff,
+       0x0040, 0x7611, 0x6800, 0xa07d, 0x0040, 0x760e, 0x6803, 0x0000,
+       0x6b52, 0x1078, 0x3b92, 0x2f68, 0x0078, 0x7602, 0x6b52, 0x1078,
+       0x3b92, 0x0f7f, 0x017f, 0x007c, 0x0e7e, 0x047e, 0x037e, 0x2061,
+       0x7e00, 0x2071, 0x7700, 0x7444, 0x7060, 0x8001, 0xa402, 0x00c8,
+       0x763c, 0x2100, 0xac06, 0x0040, 0x762e, 0x6000, 0xa086, 0x0000,
+       0x0040, 0x762e, 0x6008, 0xa206, 0x0040, 0x7638, 0xace0, 0x0008,
+       0x2001, 0x7715, 0x2004, 0xac02, 0x00c8, 0x763c, 0x0078, 0x7619,
+       0xa085, 0x0001, 0x0078, 0x763d, 0xa006, 0x037f, 0x047f, 0x0e7f,
+       0x007c, 0x0d7e, 0x007e, 0x1078, 0x1327, 0x007f, 0x1040, 0x12cd,
+       0x6837, 0x010d, 0x6803, 0x0000, 0x683b, 0x0000, 0x685b, 0x0000,
+       0x685e, 0x6956, 0x6c46, 0x684f, 0x0000, 0x1078, 0x3b92, 0x0d7f,
+       0x007c, 0x6700, 0xa786, 0x0000, 0x0040, 0x766c, 0xa786, 0x0001,
+       0x0040, 0x766c, 0xa786, 0x000a, 0x0040, 0x766c, 0xa786, 0x0009,
+       0x0040, 0x766c, 0xa085, 0x0001, 0x007c, 0x0e7e, 0x6018, 0x2070,
+       0x70a0, 0xa206, 0x0e7f, 0x007c, 0x127e, 0x007e, 0x0e7e, 0x2091,
+       0x8000, 0x2071, 0x7740, 0xd5a4, 0x0040, 0x7681, 0x7034, 0x8000,
+       0x7036, 0xd5b4, 0x0040, 0x7687, 0x7030, 0x8000, 0x7032, 0xd5ac,
+       0x0040, 0x768e, 0x2071, 0x774a, 0x1078, 0x76bd, 0x0e7f, 0x007f,
+       0x127f, 0x007c, 0x127e, 0x007e, 0x0e7e, 0x2091, 0x8000, 0x2071,
+       0x7740, 0xd5a4, 0x0040, 0x769f, 0x7034, 0x8000, 0x7036, 0xd5b4,
+       0x0040, 0x76a5, 0x7030, 0x8000, 0x7032, 0xd5ac, 0x0040, 0x76ac,
+       0x2071, 0x774a, 0x1078, 0x76bd, 0x0e7f, 0x007f, 0x127f, 0x007c,
+       0x127e, 0x007e, 0x0e7e, 0x2091, 0x8000, 0x2071, 0x7742, 0x1078,
+       0x76bd, 0x0e7f, 0x007f, 0x127f, 0x007c, 0x2e04, 0x8000, 0x2072,
+       0x00c8, 0x76c6, 0x8e70, 0x2e04, 0x8000, 0x2072, 0x007c, 0x0e7e,
+       0x2071, 0x7740, 0x1078, 0x76bd, 0x0e7f, 0x007c, 0x0e7e, 0x2071,
+       0x7744, 0x1078, 0x76bd, 0x0e7f, 0x007c, 0x0001, 0x0002, 0x0004,
+       0x0008, 0x0010, 0x0020, 0x0040, 0x0080, 0x0100, 0x0200, 0x0400,
+       0x0800, 0x1000, 0x2000, 0x4000, 0x8000, 0x687d
 };
 
 /*
index 7c44cdf73537a69d165c26d6c99a2f067d8974bd..ed26de08f6a544b498c0d262a038e8c9fdca51a9 100644 (file)
@@ -470,6 +470,28 @@ __setup("max_scsi_luns=", scsi_luns_setup);
 
 #endif
 
+/*
+ *     Issue a command and wait for it to complete
+ */
+void scsi_wait_cmd (Scsi_Cmnd * SCpnt, const void *cmnd ,
+                 void *buffer, unsigned bufflen, void (*done)(Scsi_Cmnd *),
+                 int timeout, int retries)
+{
+       unsigned long flags;
+       DECLARE_MUTEX_LOCKED(sem);
+       
+       SCpnt->request.sem = &sem;
+       SCpnt->request.rq_status = RQ_SCSI_BUSY;
+       spin_lock_irqsave(&io_request_lock, flags);
+       scsi_do_cmd (SCpnt, (void *) cmnd,
+               buffer, bufflen, done, timeout, retries);
+       spin_unlock_irqrestore(&io_request_lock, flags);
+       down (&sem);
+       SCpnt->request.sem = NULL;
+}
+
+
 /*
  *  Detecting SCSI devices :
  *  We scan all present host adapter's busses,  from ID 0 to ID (max_id).
@@ -709,18 +731,10 @@ int scan_scsis_single(int channel, int dev, int lun, int *max_dev_lun,
        SCpnt->target = SDpnt->id;
        SCpnt->lun = SDpnt->lun;
        SCpnt->channel = SDpnt->channel;
-       {
-               DECLARE_MUTEX_LOCKED(sem);
-               SCpnt->request.sem = &sem;
-               SCpnt->request.rq_status = RQ_SCSI_BUSY;
-               spin_lock_irq(&io_request_lock);
-               scsi_do_cmd(SCpnt, (void *) scsi_cmd,
-                           (void *) NULL,
-                           0, scan_scsis_done, SCSI_TIMEOUT + 4 * HZ, 5);
-               spin_unlock_irq(&io_request_lock);
-               down(&sem);
-               SCpnt->request.sem = NULL;
-       }
+
+       scsi_wait_cmd (SCpnt, (void *) scsi_cmd,
+                  (void *) NULL,
+                  0, scan_scsis_done, SCSI_TIMEOUT + 4 * HZ, 5);
 
        SCSI_LOG_SCAN_BUS(3, printk("scsi: scan_scsis_single id %d lun %d. Return code 0x%08x\n",
                                    dev, lun, SCpnt->result));
@@ -750,18 +764,10 @@ int scan_scsis_single(int channel, int dev, int lun, int *max_dev_lun,
        scsi_cmd[4] = 255;
        scsi_cmd[5] = 0;
        SCpnt->cmd_len = 0;
-       {
-               DECLARE_MUTEX_LOCKED(sem);
-               SCpnt->request.sem = &sem;
-               SCpnt->request.rq_status = RQ_SCSI_BUSY;
-               spin_lock_irq(&io_request_lock);
-               scsi_do_cmd(SCpnt, (void *) scsi_cmd,
-                           (void *) scsi_result,
-                           256, scan_scsis_done, SCSI_TIMEOUT, 3);
-               spin_unlock_irq(&io_request_lock);
-               down(&sem);
-               SCpnt->request.sem = NULL;
-       }
+
+       scsi_wait_cmd (SCpnt, (void *) scsi_cmd,
+                  (void *) scsi_result,
+                  256, scan_scsis_done, SCSI_TIMEOUT, 3);
 
        SCSI_LOG_SCAN_BUS(3, printk("scsi: INQUIRY %s with code 0x%x\n",
                SCpnt->result ? "failed" : "successful", SCpnt->result));
@@ -892,18 +898,9 @@ int scan_scsis_single(int channel, int dev, int lun, int *max_dev_lun,
                scsi_cmd[4] = 0x2a;
                scsi_cmd[5] = 0;
                SCpnt->cmd_len = 0;
-               {
-                       DECLARE_MUTEX_LOCKED(sem);
-                       SCpnt->request.rq_status = RQ_SCSI_BUSY;
-                       SCpnt->request.sem = &sem;
-                       spin_lock_irq(&io_request_lock);
-                       scsi_do_cmd(SCpnt, (void *) scsi_cmd,
-                                   (void *) scsi_result, 0x2a,
-                                   scan_scsis_done, SCSI_TIMEOUT, 3);
-                       spin_unlock_irq(&io_request_lock);
-                       down(&sem);
-                       SCpnt->request.sem = NULL;
-               }
+               scsi_wait_cmd (SCpnt, (void *) scsi_cmd,
+                       (void *) scsi_result, 0x2a,
+                       scan_scsis_done, SCSI_TIMEOUT, 3);
        }
        /*
         * Detach the command from the device. It was just a temporary to be used while
@@ -1112,6 +1109,7 @@ Scsi_Cmnd *scsi_request_queueable(struct request * req, Scsi_Device * device)
        SCpnt->use_sg = 0;      /* Reset the scatter-gather flag */
        SCpnt->old_use_sg = 0;
        SCpnt->transfersize = 0;
+       SCpnt->resid = 0;
        SCpnt->underflow = 0;
        SCpnt->cmd_len = 0;
 
@@ -1283,7 +1281,7 @@ Scsi_Cmnd *scsi_allocate_device(struct request ** reqp, Scsi_Device * device,
        SCpnt->old_use_sg = 0;
        SCpnt->transfersize = 0;        /* No default transfer size */
        SCpnt->cmd_len = 0;
-
+       SCpnt->resid = 0;
        SCpnt->underflow = 0;   /* Do not flag underflow conditions */
 
        /* Since not everyone seems to set the device info correctly
@@ -1964,6 +1962,7 @@ void scsi_build_commandblocks(Scsi_Device * SDpnt)
                SCpnt->old_cmd_len = 0;
                SCpnt->underflow = 0;
                SCpnt->transfersize = 0;
+               SCpnt->resid = 0;
                SCpnt->serial_number = 0;
                SCpnt->serial_number_at_timeout = 0;
                SCpnt->host_scribble = NULL;
@@ -3244,7 +3243,7 @@ static void scsi_dump_status(int level)
                        }
                }
        }
-       printk("wait_for_request = %p\n", wait_for_request);
+       /* printk("wait_for_request = %p\n", &wait_for_request); */
 #endif /* CONFIG_SCSI_LOGGING */ /* } */
 #endif                         /* CONFIG_PROC_FS */
 }
index 31661b3f0390732936771ff292de5f74ff56eb9d..f370c542a1eb48a76f8121b494fa41d6dc7ef030 100644 (file)
@@ -385,6 +385,11 @@ extern void scsi_sleep(int);
  */
 
 extern void scsi_do_cmd(Scsi_Cmnd *, const void *cmnd,
+                        void *buffer, unsigned bufflen, 
+                        void (*done)(struct scsi_cmnd *),
+                        int timeout, int retries);
+
+extern void scsi_wait_cmd (Scsi_Cmnd *, const void *cmnd ,
                        void *buffer, unsigned bufflen,
                        void (*done) (struct scsi_cmnd *),
                        int timeout, int retries);
@@ -570,12 +575,16 @@ struct scsi_cmnd {
                                   reconnects.   Probably == sector
                                   size */
 
+       int     resid;          /* Number of bytes requested to be
+                                  transferred less actual number
+                                  transferred (0 if not supported) */
 
        struct request request; /* A copy of the command we are
                                   working on */
 
-       unsigned char sense_buffer[16];         /* Sense for this command, 
-                                                  needed */
+       unsigned char sense_buffer[64];  /* obtained by REQUEST SENSE when
+                                           CHECK CONDITION is received on
+                                           original command (auto-sense) */
 
        unsigned flags;
 
index 310b289ec524e85ad1b5ee5d89205098dae1a2fa..ac5c0904334c5ef4bcab35574353e60c97c7a2d8 100644 (file)
@@ -64,8 +64,8 @@ static int NR_REAL = -1;
 #endif
 #define START_PARTITION 4
 
-/* Number of jiffies to wait before completing a command */
-#define DISK_SPEED     10
+/* Time to wait before completing a command */
+#define DISK_SPEED     (HZ/10)   /* 100ms */
 #define CAPACITY (0x80000)
 
 static int starts[] =
@@ -378,7 +378,7 @@ int scsi_debug_queuecommand(Scsi_Cmnd * SCpnt, void (*done) (Scsi_Cmnd *))
                                scsi_debug_errsts = (COMMAND_COMPLETE << 8) | (CHECK_CONDITION << 1);
                                break;
                        }       /* End phony disk change code */
-#
+#endif
 
 #ifdef CLEAR
                        memcpy(buff, &target, sizeof(target));
index 1d45432b5de7e5f8f0851075bb73af3d8b19eff1..562ddae96395e07aa4197522d58510ef32c07bdd 100644 (file)
@@ -48,6 +48,7 @@ EXPORT_SYMBOL(scsicam_bios_param);
 EXPORT_SYMBOL(scsi_partsize);
 EXPORT_SYMBOL(scsi_allocate_device);
 EXPORT_SYMBOL(scsi_do_cmd);
+EXPORT_SYMBOL(scsi_wait_cmd);
 EXPORT_SYMBOL(scsi_command_size);
 EXPORT_SYMBOL(scsi_init_malloc);
 EXPORT_SYMBOL(scsi_init_free);
index 41548db214a85a0a8be82d0bc42d1bf6011be3c2..13b2bd580afccbe00bbc2940b0d05730e5cbf5d9 100644 (file)
@@ -26,6 +26,7 @@
 static int setsize(unsigned long capacity, unsigned int *cyls, unsigned int *hds,
                   unsigned int *secs);
 
+
 /*
  * Function : int scsicam_bios_param (Disk *disk, int dev, int *ip)
  *
@@ -47,7 +48,12 @@ int scsicam_bios_param(Disk * disk,  /* SCSI disk */
        int size = disk->capacity;
        unsigned long temp_cyl;
 
-       if (!(bh = bread(MKDEV(MAJOR(dev), MINOR(dev) & ~0xf), 0, 1024)))
+       int block = 1024; 
+
+       if(blksize_size[MAJOR(dev)])
+               block = blksize_size[MAJOR(dev)][MINOR(dev)];
+               
+       if (!(bh = bread(MKDEV(MAJOR(dev), MINOR(dev) & ~0xf), 0, block)))
                return -1;
 
        /* try to infer mapping from partition table */
index 71a869a8e04ed573a78bf54deebe70cb24ae7685..a2876d17cdb1ac8348697b06f22fddfe22de55d2 100644 (file)
@@ -1097,6 +1097,22 @@ static int check_scsidisk_media_change(kdev_t full_dev)
        return retval;
 }
 
+static void sd_wait_cmd (Scsi_Cmnd * SCpnt, const void *cmnd ,
+                 void *buffer, unsigned bufflen, void (*done)(Scsi_Cmnd *),
+                 int timeout, int retries)
+{
+       DECLARE_MUTEX_LOCKED(sem);
+       
+       SCpnt->request.sem = &sem;
+       SCpnt->request.rq_status = RQ_SCSI_BUSY;
+       scsi_do_cmd (SCpnt, (void *) cmnd,
+               buffer, bufflen, done, timeout, retries);
+       spin_unlock_irq(&io_request_lock);
+       down (&sem);
+       spin_lock_irq(&io_request_lock);
+       SCpnt->request.sem = NULL;
+}
+
 static void sd_init_done(Scsi_Cmnd * SCpnt)
 {
        struct request *req;
@@ -1113,8 +1129,8 @@ static int sd_init_onedisk(int i)
        unsigned char cmd[10];
        char nbuff[6];
        unsigned char *buffer;
-       unsigned long spintime;
-       int the_result, retries;
+       unsigned long spintime_value = 0;
+       int the_result, retries, spintime;
        Scsi_Cmnd *SCpnt;
 
        /*
@@ -1145,6 +1161,7 @@ static int sd_init_onedisk(int i)
        /* Spinup needs to be done for module loads too. */
        do {
                retries = 0;
+               
                while (retries < 3) {
                        cmd[0] = TEST_UNIT_READY;
                        cmd[1] = (rscsi_disks[i].device->lun << 5) & 0xe0;
@@ -1153,20 +1170,8 @@ static int sd_init_onedisk(int i)
                        SCpnt->sense_buffer[0] = 0;
                        SCpnt->sense_buffer[2] = 0;
 
-                       {
-                               DECLARE_MUTEX_LOCKED(sem);
-                               /* Mark as really busy again */
-                               SCpnt->request.rq_status = RQ_SCSI_BUSY;
-                               SCpnt->request.sem = &sem;
-                               scsi_do_cmd(SCpnt,
-                                           (void *) cmd, (void *) buffer,
-                                           512, sd_init_done, SD_TIMEOUT,
-                                           MAX_RETRIES);
-                               spin_unlock_irq(&io_request_lock);
-                               down(&sem);
-                               spin_lock_irq(&io_request_lock);
-                               SCpnt->request.sem = NULL;
-                       }
+                       sd_wait_cmd (SCpnt, (void *) cmd, (void *) buffer,
+                               512, sd_init_done,  SD_TIMEOUT, MAX_RETRIES);
 
                        the_result = SCpnt->result;
                        retries++;
@@ -1178,9 +1183,11 @@ static int sd_init_onedisk(int i)
                /* Look for non-removable devices that return NOT_READY.
                 * Issue command to spin up drive for these cases. */
                if (the_result && !rscsi_disks[i].device->removable &&
-                   SCpnt->sense_buffer[2] == NOT_READY) {
+                   SCpnt->sense_buffer[2] == NOT_READY) 
+               {
                        unsigned long time1;
-                       if (!spintime) {
+                       if (!spintime) 
+                       {
                                printk("%s: Spinning up disk...", nbuff);
                                cmd[0] = START_STOP;
                                cmd[1] = (rscsi_disks[i].device->lun << 5) & 0xe0;
@@ -1191,30 +1198,20 @@ static int sd_init_onedisk(int i)
                                SCpnt->sense_buffer[0] = 0;
                                SCpnt->sense_buffer[2] = 0;
 
-                               {
-                                       DECLARE_MUTEX_LOCKED(sem);
-                                       /* Mark as really busy again */
-                                       SCpnt->request.rq_status = RQ_SCSI_BUSY;
-                                       SCpnt->request.sem = &sem;
-                                       scsi_do_cmd(SCpnt,
-                                          (void *) cmd, (void *) buffer,
-                                          512, sd_init_done, SD_TIMEOUT,
-                                                   MAX_RETRIES);
-                                       spin_unlock_irq(&io_request_lock);
-                                       down(&sem);
-                                       spin_lock_irq(&io_request_lock);
-                                       SCpnt->request.sem = NULL;
-                               }
-
-                               spintime = jiffies;
+                               sd_wait_cmd(SCpnt, (void *) cmd, (void *) buffer,
+                                       512, sd_init_done, SD_TIMEOUT, MAX_RETRIES);
                        }
+
+                       spintime = 1;
+                       spintime_value = jiffies;
                        time1 = jiffies + HZ;
                        spin_unlock_irq(&io_request_lock);
-                       while (jiffies < time1);        /* Wait 1 second for next try */
+                       while(time_before(jiffies, time1)); /* Wait 1 second for next try */
                        printk(".");
                        spin_lock_irq(&io_request_lock);
                }
-       } while (the_result && spintime && spintime + 100 * HZ > jiffies);
+       } while(the_result && spintime && time_after(spintime_value+100*HZ, jiffies));
+
        if (spintime) {
                if (the_result)
                        printk("not responding...\n");
@@ -1231,20 +1228,8 @@ static int sd_init_onedisk(int i)
                SCpnt->sense_buffer[0] = 0;
                SCpnt->sense_buffer[2] = 0;
 
-               {
-                       DECLARE_MUTEX_LOCKED(sem);
-                       /* Mark as really busy again */
-                       SCpnt->request.rq_status = RQ_SCSI_BUSY;
-                       SCpnt->request.sem = &sem;
-                       scsi_do_cmd(SCpnt,
-                                   (void *) cmd, (void *) buffer,
-                                   8, sd_init_done, SD_TIMEOUT,
-                                   MAX_RETRIES);
-                       spin_unlock_irq(&io_request_lock);
-                       down(&sem);     /* sleep until it is ready */
-                       spin_lock_irq(&io_request_lock);
-                       SCpnt->request.sem = NULL;
-               }
+               sd_wait_cmd(SCpnt, (void *) cmd, (void *) buffer,
+                       8, sd_init_done, SD_TIMEOUT, MAX_RETRIES);
 
                the_result = SCpnt->result;
                retries--;
@@ -1320,14 +1305,15 @@ static int sd_init_onedisk(int i)
                                rscsi_disks[i].capacity = 0;
                        } else {
                                printk("scsi : deleting disk entry.\n");
+                               sd_detach(rscsi_disks[i].device);
                                rscsi_disks[i].device = NULL;
-                               sd_template.nr_dev--;
-                               SD_GENDISK(i).nr_real--;
 
                                /* Wake up a process waiting for device */
                                wake_up(&SCpnt->device->device_wait);
                                scsi_release_command(SCpnt);
                                SCpnt = NULL;
+                               scsi_free(buffer, 512);
+                               spin_unlock_irq(&io_request_lock);
 
                                return i;
                        }
@@ -1402,19 +1388,8 @@ static int sd_init_onedisk(int i)
                SCpnt->sense_buffer[2] = 0;
 
                /* same code as READCAPA !! */
-               {
-                       DECLARE_MUTEX_LOCKED(sem);
-                       SCpnt->request.rq_status = RQ_SCSI_BUSY;        /* Mark as really busy again */
-                       SCpnt->request.sem = &sem;
-                       scsi_do_cmd(SCpnt,
-                                   (void *) cmd, (void *) buffer,
-                                   512, sd_init_done, SD_TIMEOUT,
-                                   MAX_RETRIES);
-                       spin_unlock_irq(&io_request_lock);
-                       down(&sem);
-                       spin_lock_irq(&io_request_lock);
-                       SCpnt->request.sem = NULL;
-               }
+               sd_wait_cmd(SCpnt, (void *) cmd, (void *) buffer,
+                               512, sd_init_done, SD_TIMEOUT, MAX_RETRIES);
 
                the_result = SCpnt->result;
 
@@ -1673,6 +1648,8 @@ int revalidate_scsidisk(kdev_t dev, int maxusage)
 #endif
 
        sd_gendisks->part[start].nr_sects = CAPACITY;
+       if (!rscsi_disks[target].device)
+               return -EBUSY;
        resetup_one_dev(&SD_GENDISK(target),
                        target % SCSI_DISKS_PER_MAJOR);
 
index 27c9e1aa1cdcca0b617ddd386b32cfd140045449..f2575a21128053d5f50ac41216f33940b24711e1 100644 (file)
@@ -1216,6 +1216,9 @@ static int internal_command (unsigned char target, unsigned char lun,
 
 /* SJT: Start. Slow Write. */
 #ifdef SEAGATE_USE_ASM
+
+int __dummy_1,__dummy_2;
+
 /*
  *      We loop as long as we are in a data out phase, there is data to send, 
  *      and BSY is still active.
@@ -1246,9 +1249,9 @@ static int internal_command (unsigned char target, unsigned char lun,
                     "movb %%al, (%%edi)\n\t"
                     "loop 1b\n\t"
                 "2:\n"
-/* output */    : "=S" (data), "=c" (len) 
-/* input */     : "0" (data), "1" (len), "b" (phys_to_virt(st0x_cr_sr)), "D" (phys_to_virt(st0x_dr)) 
-/* clobbered */ : "eax", "ebx", "edi"); 
+/* output */    : "=S" (data), "=c" (len)  ,"=b" (__dummy_1) ,"=D" (__dummy_2)
+/* input */     : "0" (data), "1" (len), "2" (phys_to_virt(st0x_cr_sr)), "3" (phys_to_virt(st0x_dr)) 
+/* clobbered */ : "eax"); 
 #else /* SEAGATE_USE_ASM */
             while (len)
             {
@@ -1374,6 +1377,11 @@ static int internal_command (unsigned char target, unsigned char lun,
 
 /* SJT: Start. */
 #ifdef SEAGATE_USE_ASM
+
+int __dummy_3,__dummy_4;
+
+/* Dummy clobbering variables for the new gcc-2.95 */
+
 /*
  *      We loop as long as we are in a data in phase, there is room to read, 
  *      and BSY is still active
@@ -1405,9 +1413,9 @@ static int internal_command (unsigned char target, unsigned char lun,
                 "stosb\n\t"   
                 "loop 1b\n\t"
             "2:\n"
-/* output */    : "=D" (data), "=c" (len) 
-/* input */     : "0" (data), "1" (len), "S" (phys_to_virt(st0x_cr_sr)), "b" (phys_to_virt(st0x_dr)) 
-/* clobbered */ : "eax","ebx", "esi"); 
+/* output */    : "=D" (data), "=c" (len) ,"=S" (__dummy_3) ,"=b" (__dummy_4)
+/* input */     : "0" (data), "1" (len), "2" (phys_to_virt(st0x_cr_sr)), "3" (phys_to_virt(st0x_dr)) 
+/* clobbered */ : "eax" ); 
 #else /* SEAGATE_USE_ASM */
             while (len)
             {
index 211980958484112924eb51a0b325faa806b4b9be..4912846c0527f65079732d872ef1a39299337176 100644 (file)
@@ -1,6 +1,16 @@
 /*
  *      u14-34f.c - Low-level driver for UltraStor 14F/34F SCSI host adapters.
  *
+ *      16 Sep 1999 Rev. 5.11 for linux 2.2.12 and 2.3.18
+ *        + Updated to the new __setup interface for boot command line options.
+ *        + When loaded as a module, accepts the new parameter boot_options
+ *          which value is a string with the same format of the kernel boot
+ *          command line options. A valid example is:
+ *          modprobe u14-34f 'boot_options=\"0x230,0x340,lc:y,mq:4\"'
+ *
+ *      22 Jul 1999 Rev. 5.00 for linux 2.2.10 and 2.3.11
+ *        + Removed pre-2.2 source code compatibility.
+ *
  *      26 Jul 1998 Rev. 4.33 for linux 2.0.35 and 2.1.111
  *          Added command line option (et:[y|n]) to use the existing
  *          translation (returned by scsicam_bios_param) as disk geometry.
  *
  *          Multiple U14F and/or U34F host adapters are supported.
  *
- *  Copyright (C) 1994-1998 Dario Ballabio (dario@milano.europe.dg.com)
+ *  Copyright (C) 1994-1999 Dario Ballabio (dario@milano.europe.dg.com)
  *
  *  Redistribution and use in source and binary forms, with or without
  *  modification, are permitted provided that redistributions of source
  *  After the optional list of detection probes, other possible command line
  *  options are:
  *
- *  eh:y  use new scsi code (linux 2.2 only);
+ *  eh:y  use new scsi code;
  *  eh:n  use old scsi code;
  *  et:y  use disk geometry returned by scsicam_bios_param;
  *  et:n  use disk geometry jumpered on the board;
 #if defined(MODULE)
 #include <linux/module.h>
 
-#if LINUX_VERSION_CODE >= LinuxVersionCode(2,1,26)
+MODULE_PARM(boot_options, "s");
 MODULE_PARM(io_port, "1-" __MODULE_STRING(MAX_INT_PARAM) "i");
 MODULE_PARM(linked_comm, "i");
 MODULE_PARM(have_old_firmware, "i");
@@ -327,7 +337,6 @@ MODULE_PARM(max_queue_depth, "i");
 MODULE_PARM(use_new_eh_code, "i");
 MODULE_PARM(ext_tran, "i");
 MODULE_AUTHOR("Dario Ballabio");
-#endif
 
 #endif
 
@@ -349,42 +358,21 @@ MODULE_AUTHOR("Dario Ballabio");
 #include "u14-34f.h"
 #include <linux/stat.h>
 #include <linux/config.h>
-
-#if LINUX_VERSION_CODE >= LinuxVersionCode(2,1,36)
 #include <linux/init.h>
+#include <linux/ctype.h>
+
+#if LINUX_VERSION_CODE < LinuxVersionCode(2,3,18)
+#include <asm/spinlock.h>
 #else
-#define __initfunc(A) A
-#define __initdata
-#define __init
+#include <linux/spinlock.h>
 #endif
 
-#if LINUX_VERSION_CODE >= LinuxVersionCode(2,1,101)
-#include <linux/spinlock.h>
-#define IRQ_FLAGS
-#define IRQ_LOCK
-#define IRQ_LOCK_SAVE
-#define IRQ_UNLOCK
-#define IRQ_UNLOCK_RESTORE
 #define SPIN_FLAGS unsigned long spin_flags;
 #define SPIN_LOCK spin_lock_irq(&io_request_lock);
 #define SPIN_LOCK_SAVE spin_lock_irqsave(&io_request_lock, spin_flags);
 #define SPIN_UNLOCK spin_unlock_irq(&io_request_lock);
 #define SPIN_UNLOCK_RESTORE \
                   spin_unlock_irqrestore(&io_request_lock, spin_flags);
-static int use_new_eh_code = TRUE;
-#else
-#define IRQ_FLAGS unsigned long irq_flags;
-#define IRQ_LOCK cli();
-#define IRQ_LOCK_SAVE do {save_flags(irq_flags); cli();} while (0);
-#define IRQ_UNLOCK sti();
-#define IRQ_UNLOCK_RESTORE do {restore_flags(irq_flags);} while (0);
-#define SPIN_FLAGS
-#define SPIN_LOCK
-#define SPIN_LOCK_SAVE
-#define SPIN_UNLOCK
-#define SPIN_UNLOCK_RESTORE
-static int use_new_eh_code = FALSE;
-#endif
 
 struct proc_dir_entry proc_scsi_u14_34f = {
     PROC_SCSI_U14_34F, 6, "u14_34f",
@@ -467,6 +455,10 @@ struct proc_dir_entry proc_scsi_u14_34f = {
 #define ASOK              0x00
 #define ASST              0x91
 
+#if LINUX_VERSION_CODE < LinuxVersionCode(2,3,18)
+#define ARRAY_SIZE(x) (sizeof (x) / sizeof((x)[0]))
+#endif
+
 #define YESNO(a) ((a) ? 'y' : 'n')
 #define TLDEV(type) ((type) == TYPE_DISK || (type) == TYPE_ROM)
 
@@ -531,7 +523,7 @@ static char sha[MAX_BOARDS];
 /* Initialize num_boards so that ihdlr can work while detect is in progress */
 static unsigned int num_boards = MAX_BOARDS;
 
-static unsigned long io_port[] __initdata = {
+static unsigned long io_port[] = {
 
    /* Space for MAX_INT_PARAM ports usable while loading as a module */
    SKIP,    SKIP,   SKIP,   SKIP,   SKIP,   SKIP,   SKIP,   SKIP,
@@ -569,6 +561,8 @@ static int do_trace = FALSE;
 static int setup_done = FALSE;
 static int link_statistics = 0;
 static int ext_tran = FALSE;
+static int use_new_eh_code = TRUE;
+static char *boot_options = NULL;
 
 #if defined(HAVE_OLD_UX4F_FIRMWARE)
 static int have_old_firmware = TRUE;
@@ -591,9 +585,7 @@ static int max_queue_depth = MAX_CMD_PER_LUN;
 static void select_queue_depths(struct Scsi_Host *host, Scsi_Device *devlist) {
    Scsi_Device *dev;
    int j, ntag = 0, nuntag = 0, tqd, utqd;
-   IRQ_FLAGS
 
-   IRQ_LOCK_SAVE
    j = ((struct hostdata *) host->hostdata)->board_number;
 
    for(dev = devlist; dev; dev = dev->next) {
@@ -641,7 +633,6 @@ static void select_queue_depths(struct Scsi_Host *host, Scsi_Device *devlist) {
              dev->queue_depth, link_suffix, tag_suffix);
       }
 
-   IRQ_UNLOCK_RESTORE
    return;
 }
 
@@ -685,10 +676,8 @@ static int board_inquiry(unsigned int j) {
    outb(CMD_OGM_INTR, sh[j]->io_port + REG_LCL_INTR);
 
    SPIN_UNLOCK
-   IRQ_UNLOCK
    time = jiffies;
    while ((jiffies - time) < HZ && limit++ < 20000) udelay(100L);
-   IRQ_LOCK
    SPIN_LOCK
 
    if (cpp->adapter_status || HD(j)->cp_stat[0] != FREE) {
@@ -700,7 +689,7 @@ static int board_inquiry(unsigned int j) {
    return FALSE;
 }
 
-static inline int __init port_detect \
+static inline int port_detect \
       (unsigned long port_base, unsigned int j, Scsi_Host_Template *tpnt) {
    unsigned char irq, dma_channel, subversion, i;
    unsigned char in_byte;
@@ -746,7 +735,9 @@ static inline int __init port_detect \
    sprintf(name, "%s%d", driver_name, j);
 
    if(check_region(port_base, REGION_SIZE)) {
+#if defined(DEBUG_DETECT)
       printk("%s: address 0x%03lx in use, skipping probe.\n", name, port_base);
+#endif
       return FALSE;
       }
 
@@ -780,11 +771,7 @@ static inline int __init port_detect \
 
    if (have_old_firmware) tpnt->use_clustering = DISABLE_CLUSTERING;
 
-#if LINUX_VERSION_CODE >= LinuxVersionCode(2,1,101)
    tpnt->use_new_eh_code = use_new_eh_code;
-#else
-   use_new_eh_code = FALSE;
-#endif
 
    sh[j] = scsi_register(tpnt, sizeof(struct hostdata));
 
@@ -893,7 +880,7 @@ static inline int __init port_detect \
    if (max_queue_depth < MAX_CMD_PER_LUN) max_queue_depth = MAX_CMD_PER_LUN;
 
    if (j == 0) {
-      printk("UltraStor 14F/34F: Copyright (C) 1994-1998 Dario Ballabio.\n");
+      printk("UltraStor 14F/34F: Copyright (C) 1994-1999 Dario Ballabio.\n");
       printk("%s config options -> of:%c, lc:%c, mq:%d, eh:%c, et:%c.\n",
              driver_name, YESNO(have_old_firmware), YESNO(linked_comm),
              max_queue_depth, YESNO(use_new_eh_code), YESNO(ext_tran));
@@ -914,8 +901,7 @@ static inline int __init port_detect \
    return TRUE;
 }
 
-void __init u14_34f_setup(char *str, int *ints)
-{
+static void internal_setup(char *str, int *ints) {
    int i, argc = ints[0];
    char *cur = str, *pc;
 
@@ -949,14 +935,30 @@ void __init u14_34f_setup(char *str, int *ints)
    return;
 }
 
-int __init u14_34f_detect(Scsi_Host_Template *tpnt)
+static int option_setup(char *str) {
+   int ints[MAX_INT_PARAM];
+   char *cur = str;
+   int i = 1;
+
+   while (cur && isdigit(*cur) && i <= MAX_INT_PARAM) {
+      ints[i++] = simple_strtoul(cur, NULL, 0);
+
+      if ((cur = strchr(cur, ',')) != NULL) cur++;
+   }
+
+   ints[0] = i - 1;
+   internal_setup(cur, ints);
+   return 0;
+}
+
+int u14_34f_detect(Scsi_Host_Template *tpnt)
 {
    unsigned int j = 0, k;
-   IRQ_FLAGS
 
-   IRQ_LOCK_SAVE
    tpnt->proc_dir = &proc_scsi_u14_34f;
 
+   if(boot_options) option_setup(boot_options);
+
 #if defined(MODULE)
    /* io_port could have been modified when loading as a module */
    if(io_port[0] != SKIP) {
@@ -975,7 +977,6 @@ int __init u14_34f_detect(Scsi_Host_Template *tpnt)
       }
 
    num_boards = j;
-   IRQ_UNLOCK_RESTORE
    return j;
 }
 
@@ -1111,11 +1112,8 @@ static inline int do_qcomm(Scsi_Cmnd *SCpnt, void (*done)(Scsi_Cmnd *)) {
 
 int u14_34f_queuecommand(Scsi_Cmnd *SCpnt, void (*done)(Scsi_Cmnd *)) {
    int rtn;
-   IRQ_FLAGS
 
-   IRQ_LOCK_SAVE
    rtn = do_qcomm(SCpnt, done);
-   IRQ_UNLOCK_RESTORE
    return rtn;
 }
 
@@ -1187,16 +1185,11 @@ static inline int do_old_abort(Scsi_Cmnd *SCarg) {
 
 int u14_34f_old_abort(Scsi_Cmnd *SCarg) {
    int rtn;
-   IRQ_FLAGS
 
-   IRQ_LOCK_SAVE
    rtn = do_old_abort(SCarg);
-   IRQ_UNLOCK_RESTORE
    return rtn;
 }
 
-#if LINUX_VERSION_CODE >= LinuxVersionCode(2,1,101)
-
 static inline int do_abort(Scsi_Cmnd *SCarg) {
    unsigned int i, j;
 
@@ -1274,8 +1267,6 @@ int u14_34f_abort(Scsi_Cmnd *SCarg) {
    return do_abort(SCarg);
 }
 
-#endif /* new_eh_code */
-
 static inline int do_old_reset(Scsi_Cmnd *SCarg) {
    unsigned int i, j, time, k, c, limit = 0;
    int arg_done = FALSE;
@@ -1363,10 +1354,8 @@ static inline int do_old_reset(Scsi_Cmnd *SCarg) {
 
    HD(j)->in_reset = TRUE;
    SPIN_UNLOCK
-   IRQ_UNLOCK
    time = jiffies;
    while ((jiffies - time) < (10 * HZ) && limit++ < 200000) udelay(100L);
-   IRQ_LOCK
    SPIN_LOCK
    printk("%s: reset, interrupts disabled, loops %d.\n", BN(j), limit);
 
@@ -1402,7 +1391,6 @@ static inline int do_old_reset(Scsi_Cmnd *SCarg) {
          continue;
 
       SCpnt->scsi_done(SCpnt);
-      IRQ_LOCK
       }
 
    HD(j)->in_reset = FALSE;
@@ -1420,16 +1408,11 @@ static inline int do_old_reset(Scsi_Cmnd *SCarg) {
 
 int u14_34f_old_reset(Scsi_Cmnd *SCarg, unsigned int reset_flags) {
    int rtn;
-   IRQ_FLAGS
 
-   IRQ_LOCK_SAVE
    rtn = do_old_reset(SCarg);
-   IRQ_UNLOCK_RESTORE
    return rtn;
 }
 
-#if LINUX_VERSION_CODE >= LinuxVersionCode(2,1,101)
-
 static inline int do_reset(Scsi_Cmnd *SCarg) {
    unsigned int i, j, time, k, c, limit = 0;
    int arg_done = FALSE;
@@ -1511,10 +1494,8 @@ static inline int do_reset(Scsi_Cmnd *SCarg) {
 
    HD(j)->in_reset = TRUE;
    SPIN_UNLOCK
-   IRQ_UNLOCK
    time = jiffies;
    while ((jiffies - time) < (10 * HZ) && limit++ < 200000) udelay(100L);
-   IRQ_LOCK
    SPIN_LOCK
    printk("%s: reset, interrupts disabled, loops %d.\n", BN(j), limit);
 
@@ -1550,7 +1531,6 @@ static inline int do_reset(Scsi_Cmnd *SCarg) {
          continue;
 
       SCpnt->scsi_done(SCpnt);
-      IRQ_LOCK
       }
 
    HD(j)->in_reset = FALSE;
@@ -1567,8 +1547,6 @@ int u14_34f_reset(Scsi_Cmnd *SCarg) {
    return do_reset(SCarg);
 }
 
-#endif /* new_eh_code */
-
 int u14_34f_biosparam(Disk *disk, kdev_t dev, int *dkinfo) {
    unsigned int j = 0;
    int size = disk->capacity;
@@ -1957,24 +1935,18 @@ static inline void ihdlr(int irq, unsigned int j) {
 
 static void do_interrupt_handler(int irq, void *shap, struct pt_regs *regs) {
    unsigned int j;
-   IRQ_FLAGS
    SPIN_FLAGS
 
    /* Check if the interrupt must be processed by this handler */
    if ((j = (unsigned int)((char *)shap - sha)) >= num_boards) return;
 
    SPIN_LOCK_SAVE
-   IRQ_LOCK_SAVE
    ihdlr(irq, j);
-   IRQ_UNLOCK_RESTORE
    SPIN_UNLOCK_RESTORE
 }
 
 int u14_34f_release(struct Scsi_Host *shpnt) {
    unsigned int i, j;
-   IRQ_FLAGS
-
-   IRQ_LOCK_SAVE
 
    for (j = 0; sh[j] != NULL && sh[j] != shpnt; j++);
 
@@ -1990,7 +1962,6 @@ int u14_34f_release(struct Scsi_Host *shpnt) {
 
    release_region(sh[j]->io_port, sh[j]->n_io_port);
    scsi_unregister(sh[j]);
-   IRQ_UNLOCK_RESTORE
    return FALSE;
 }
 
@@ -1998,4 +1969,15 @@ int u14_34f_release(struct Scsi_Host *shpnt) {
 Scsi_Host_Template driver_template = ULTRASTOR_14_34F;
 
 #include "scsi_module.c"
+
+#else
+
+#if LINUX_VERSION_CODE < LinuxVersionCode(2,3,18)
+void u14_34f_setup(char *str, int *ints) {
+   internal_setup(str, ints);
+}
+#else
+__setup("u14-34f=", option_setup);
 #endif
+
+#endif /* end MODULE */
index 943b8cbb3cc89aa6b9892e4b68eca28480136b65..381e718d8659276b4ec35491f10f7a771cca3488 100644 (file)
@@ -16,12 +16,10 @@ int u14_34f_reset(Scsi_Cmnd *);
 int u14_34f_old_reset(Scsi_Cmnd *, unsigned int);
 int u14_34f_biosparam(Disk *, kdev_t, int *);
 
-#define U14_34F_VERSION "4.33.00"
+#define U14_34F_VERSION "5.11.00"
 
 #define LinuxVersionCode(v, p, s) (((v)<<16)+((p)<<8)+(s))
 
-#if LINUX_VERSION_CODE >= LinuxVersionCode(2,1,101)
-
 #define ULTRASTOR_14_34F {                                                   \
                 name:         "UltraStor 14F/34F rev. " U14_34F_VERSION " ", \
                 detect:                  u14_34f_detect,                     \
@@ -40,21 +38,4 @@ int u14_34f_biosparam(Disk *, kdev_t, int *);
                 use_new_eh_code:         1    /* Enable new error code */    \
                 }
 
-#else /* Use old scsi code */
-
-#define ULTRASTOR_14_34F {                                                   \
-                name:         "UltraStor 14F/34F rev. " U14_34F_VERSION " ", \
-                detect:                  u14_34f_detect,                     \
-                release:                 u14_34f_release,                    \
-                queuecommand:            u14_34f_queuecommand,               \
-                abort:                   u14_34f_old_abort,                  \
-                reset:                   u14_34f_old_reset,                  \
-                bios_param:              u14_34f_biosparam,                  \
-                this_id:                 7,                                  \
-                unchecked_isa_dma:       1,                                  \
-                use_clustering:          ENABLE_CLUSTERING                   \
-                }
-
-#endif
-
 #endif
index 53533c208b148c58872afecc5b91cb0c7c3962a2..e3218180279accb89b3aae07efe05a6dba6d00c2 100644 (file)
@@ -9,40 +9,40 @@
 
 # Prompt user for primary drivers.
 
-dep_tristate 'C-Media PCI (CMI8338/8378)' CONFIG_SOUND_CMPCI $CONFIG_SOUND
+dep_tristate '  C-Media PCI (CMI8338/8378)' CONFIG_SOUND_CMPCI $CONFIG_SOUND
 if [ "$CONFIG_SOUND_CMPCI" = "y" -o "$CONFIG_SOUND_CMPCI" = "m" ]; then
-   bool 'Enable legacy FM' CONFIG_SOUND_CMPCI_FM
-   bool 'Enable legacy MPU-401' CONFIG_SOUND_CMPCI_MIDI
+   bool '    Enable legacy FM' CONFIG_SOUND_CMPCI_FM
+   bool '    Enable legacy MPU-401' CONFIG_SOUND_CMPCI_MIDI
 fi
-dep_tristate 'Ensoniq AudioPCI (ES1370)' CONFIG_SOUND_ES1370 $CONFIG_SOUND
-dep_tristate 'Creative Ensoniq AudioPCI 97 (ES1371)' CONFIG_SOUND_ES1371 $CONFIG_SOUND
-dep_tristate 'ESS Technology Solo1' CONFIG_SOUND_ESSSOLO1 $CONFIG_SOUND
+dep_tristate '  Ensoniq AudioPCI (ES1370)' CONFIG_SOUND_ES1370 $CONFIG_SOUND
+dep_tristate '  Creative Ensoniq AudioPCI 97 (ES1371)' CONFIG_SOUND_ES1371 $CONFIG_SOUND
+dep_tristate '  ESS Technology Solo1' CONFIG_SOUND_ESSSOLO1 $CONFIG_SOUND
 if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
-    dep_tristate 'ESS Maestro, Maestro2, Maestro2E driver' CONFIG_SOUND_MAESTRO $CONFIG_SOUND
+    dep_tristate '  ESS Maestro, Maestro2, Maestro2E driver (EXPERIMENTAL)' CONFIG_SOUND_MAESTRO $CONFIG_SOUND
 fi
-dep_tristate 'S3 SonicVibes' CONFIG_SOUND_SONICVIBES $CONFIG_SOUND
+dep_tristate '  S3 SonicVibes' CONFIG_SOUND_SONICVIBES $CONFIG_SOUND
 if [ "$CONFIG_VISWS" = "y" ]; then
-    dep_tristate 'SGI Visual Workstation Sound' CONFIG_SOUND_VWSND $CONFIG_SOUND
+    dep_tristate '  SGI Visual Workstation Sound' CONFIG_SOUND_VWSND $CONFIG_SOUND
 fi
 
-dep_tristate 'Support for Turtle Beach MultiSound Classic, Tahiti, Monterey' CONFIG_SOUND_MSNDCLAS $CONFIG_SOUND
+dep_tristate '  Support for Turtle Beach MultiSound Classic, Tahiti, Monterey' CONFIG_SOUND_MSNDCLAS $CONFIG_SOUND
 if [ "$CONFIG_SOUND_MSNDCLAS" = "y" -o "$CONFIG_SOUND_MSNDCLAS" = "m" ]; then
    if [ "$CONFIG_SOUND_MSNDCLAS" = "y" ]; then
-     comment 'Compiled-in MSND Classic support requires firmware during compilation.'
+     comment '  Compiled-in MSND Classic support requires firmware during compilation.'
      define_bool CONFIG_MSNDCLAS_HAVE_BOOT y
    else
      define_bool CONFIG_MSNDCLAS_HAVE_BOOT n
    fi
-   string '  Full pathname of MSNDINIT.BIN firmware file' CONFIG_MSNDCLAS_INIT_FILE "/etc/sound/msndinit.bin"
-   string '  Full pathname of MSNDPERM.BIN firmware file' CONFIG_MSNDCLAS_PERM_FILE "/etc/sound/msndperm.bin"
+   string 'Full pathname of MSNDINIT.BIN firmware file' CONFIG_MSNDCLAS_INIT_FILE "/etc/sound/msndinit.bin"
+   string 'Full pathname of MSNDPERM.BIN firmware file' CONFIG_MSNDCLAS_PERM_FILE "/etc/sound/msndperm.bin"
 fi
 if [ "$CONFIG_SOUND_MSNDCLAS" = "y" ]; then
-   int 'MSND Classic IRQ 5,7,9,10,11,12' CONFIG_MSNDCLAS_IRQ 5
-   hex 'MSND Classic memory B0000,C8000,D0000,D8000,E0000,E8000' CONFIG_MSNDCLAS_MEM D0000
-   hex 'MSND Classic I/O 210,220,230,240,250,260,290,3E0' CONFIG_MSNDCLAS_IO 290
+   int '  MSND Classic IRQ 5, 7, 9, 10, 11, 12' CONFIG_MSNDCLAS_IRQ 5
+   hex '  MSND Classic memory B0000, C8000, D0000, D8000, E0000, E8000' CONFIG_MSNDCLAS_MEM D0000
+   hex '  MSND Classic I/O 210, 220, 230, 240, 250, 260, 290, 3E0' CONFIG_MSNDCLAS_IO 290
 fi
 
-dep_tristate 'Support for Turtle Beach MultiSound Pinnacle, Fiji' CONFIG_SOUND_MSNDPIN $CONFIG_SOUND
+dep_tristate '  Support for Turtle Beach MultiSound Pinnacle, Fiji' CONFIG_SOUND_MSNDPIN $CONFIG_SOUND
 if [ "$CONFIG_SOUND_MSNDPIN" = "y" -o "$CONFIG_SOUND_MSNDPIN" = "m" ]; then
    if [ "$CONFIG_SOUND_MSNDPIN" = "y" ]; then
      comment 'Compiled-in MSND Pinnacle support requires firmware during compilation.'
@@ -54,115 +54,94 @@ if [ "$CONFIG_SOUND_MSNDPIN" = "y" -o "$CONFIG_SOUND_MSNDPIN" = "m" ]; then
    string '  Full pathname of PNDSPERM.BIN firmware file' CONFIG_MSNDPIN_PERM_FILE "/etc/sound/pndsperm.bin"
 fi
 if [ "$CONFIG_SOUND_MSNDPIN" = "y" ]; then
-   int 'MSND Pinnacle IRQ 5,7,9,10,11,12' CONFIG_MSNDPIN_IRQ 5
-   hex 'MSND Pinnacle memory B0000,C8000,D0000,D8000,E0000,E8000' CONFIG_MSNDPIN_MEM D0000
-   hex 'MSND Pinnacle I/O 210,220,230,240,250,260,290,3E0' CONFIG_MSNDPIN_IO 290
-   bool 'MSND Pinnacle has S/PDIF I/O' CONFIG_MSNDPIN_DIGITAL
-   bool 'MSND Pinnacle non-PnP Mode' CONFIG_MSNDPIN_NONPNP
+   int '    MSND Pinnacle IRQ 5, 7, 9, 10, 11, 12' CONFIG_MSNDPIN_IRQ 5
+   hex '    MSND Pinnacle memory B0000, C8000, D0000, D8000, E0000, E8000' CONFIG_MSNDPIN_MEM D0000
+   hex 'MSND Pinnacle I/O 210, 220, 230, 240, 250, 260, 290, 3E0' CONFIG_MSNDPIN_IO 290
+   bool '  MSND Pinnacle has S/PDIF I/O' CONFIG_MSNDPIN_DIGITAL
+   bool '  MSND Pinnacle non-PnP Mode' CONFIG_MSNDPIN_NONPNP
    if [ "$CONFIG_MSNDPIN_NONPNP" = "y" ]; then
-     comment 'MSND Pinnacle DSP section will be configured to above parameters.'
-     hex 'MSND Pinnacle config port 250,260,270' CONFIG_MSNDPIN_CFG 250
-     comment 'Pinnacle-specific Device Configuration (0 disables)'
-     hex 'MSND Pinnacle MPU I/O (e.g. 330)' CONFIG_MSNDPIN_MPU_IO 0
-     int 'MSND Pinnacle MPU IRQ (e.g. 9)' CONFIG_MSNDPIN_MPU_IRQ 0
-     hex 'MSND Pinnacle IDE I/O 0 (e.g. 170)' CONFIG_MSNDPIN_IDE_IO0 0
-     hex 'MSND Pinnacle IDE I/O 1 (e.g. 376)' CONFIG_MSNDPIN_IDE_IO1 0
-     int 'MSND Pinnacle IDE IRQ (e.g. 15)' CONFIG_MSNDPIN_IDE_IRQ 0
-     hex 'MSND Pinnacle joystick I/O (e.g. 200)' CONFIG_MSNDPIN_JOYSTICK_IO 0
+      comment 'MSND Pinnacle DSP section will be configured to above parameters.'
+      hex 'MSND Pinnacle config port 250,260,270' CONFIG_MSNDPIN_CFG 250
+      comment 'Pinnacle-specific Device Configuration (0 disables)'
+      hex 'MSND Pinnacle MPU I/O (e.g. 330)' CONFIG_MSNDPIN_MPU_IO 0
+      int 'MSND Pinnacle MPU IRQ (e.g. 9)' CONFIG_MSNDPIN_MPU_IRQ 0
+      hex 'MSND Pinnacle IDE I/O 0 (e.g. 170)' CONFIG_MSNDPIN_IDE_IO0 0
+      hex 'MSND Pinnacle IDE I/O 1 (e.g. 376)' CONFIG_MSNDPIN_IDE_IO1 0
+      int 'MSND Pinnacle IDE IRQ (e.g. 15)' CONFIG_MSNDPIN_IDE_IRQ 0
+      hex 'MSND Pinnacle joystick I/O (e.g. 200)' CONFIG_MSNDPIN_JOYSTICK_IO 0
    fi
 fi
 if [ "$CONFIG_SOUND_MSNDPIN" = "y" -o "$CONFIG_SOUND_MSNDCLAS" = "y" ]; then
    int 'MSND buffer size (kB)' CONFIG_MSND_FIFOSIZE 128
 fi
 
-dep_tristate 'OSS sound modules' CONFIG_SOUND_OSS $CONFIG_SOUND
+dep_tristate '  OSS sound modules' CONFIG_SOUND_OSS $CONFIG_SOUND
 
 if [ "$CONFIG_SOUND_OSS" = "y" -o "$CONFIG_SOUND_OSS" = "m" ]; then
-  if [ "$CONFIG_SOUND_OSS" = "y" ]; then
-    bool 'Persistent DMA buffers' CONFIG_SOUND_DMAP
-  fi
+   if [ "$CONFIG_SOUND_OSS" = "y" ]; then
+      bool '    Persistent DMA buffers' CONFIG_SOUND_DMAP
+   fi
 
-  dep_tristate 'ProAudioSpectrum 16 support' CONFIG_SOUND_PAS $CONFIG_SOUND_OSS
-  if [ "$CONFIG_SOUND_PAS" = "y" ]; then
-      int 'PAS16 IRQ 3, 4, 5, 7, 9, 10, 11, 12, 14 or 15' CONFIG_PAS_IRQ 10
-      int 'PAS16 DMA 0, 1, 3, 5, 6 or 7' CONFIG_PAS_DMA 3
-      bool 'Enable PAS16 joystick port' CONFIG_PAS_JOYSTICK
-  fi
-  
-  dep_tristate '100% Sound Blaster compatibles (SB16/32/64, ESS, Jazz16) support' CONFIG_SOUND_SB $CONFIG_SOUND_OSS
-  if [ "$CONFIG_SOUND_SB" = "y" ]; then
-      hex 'I/O base for SB Check from manual of the card' CONFIG_SB_BASE 220
-      int 'Sound Blaster IRQ Check from manual of the card' CONFIG_SB_IRQ 7
-      int 'Sound Blaster DMA 0, 1 or 3' CONFIG_SB_DMA 1
-      int 'Sound Blaster 16 bit DMA (SB16, Jazz16, SMW) 5, 6 or 7 (use 1 for 8 bit cards)' CONFIG_SB_DMA2 5
-      hex 'MPU401 I/O base of SB16, Jazz16 and ES1688 Check from manual of the card' CONFIG_SB_MPU_BASE 330
-      comment 'MPU401 IRQ is only required with Jazz16, SM Wave and ESS1688.'
-      comment 'Enter -1 to the following question if you have something else such as SB16/32.'
-      int 'SB MPU401 IRQ (Jazz16, SM Wave and ES1688) Check from manual of the card' CONFIG_SB_MPU_IRQ -1
-  fi
-  
-  dep_tristate 'Generic OPL2/OPL3 FM synthesizer support' CONFIG_SOUND_ADLIB $CONFIG_SOUND_OSS
-  
-  dep_tristate 'Gravis Ultrasound support' CONFIG_SOUND_GUS $CONFIG_SOUND_OSS
-  if [ "$CONFIG_SOUND_GUS" = "y" -o "$CONFIG_SOUND_GUS" = "m" ]; then
-      bool '16 bit sampling option of GUS (_NOT_ GUS MAX)' CONFIG_GUS16 
-      bool 'GUS MAX support' CONFIG_GUSMAX
-  fi
-  if [ "$CONFIG_SOUND_GUS" = "y" ]; then
-      hex 'I/O base for GUS 210, 220, 230, 240, 250 or 260' CONFIG_GUS_BASE 220
-      int 'GUS IRQ 3, 5, 7, 9, 11, 12 or 15' CONFIG_GUS_IRQ 15
-      int 'GUS DMA 1, 3, 5, 6 or 7' CONFIG_GUS_DMA 6
-      int 'Second DMA channel for GUS 1, 3, 5, 6 or 7' CONFIG_GUS_DMA2 -1
-      if [ "$CONFIG_GUS16" = "y" ]; then
-       hex 'I/O base for the 16 bit daughtercard of GUS 530, 604, E80 or F40' CONFIG_GUS16_BASE 530
-       int 'GUS 16 bit daughtercard IRQ 3, 4, 5, 7, or 9' CONFIG_GUS16_IRQ 7
-       int 'GUS DMA 0, 1 or 3' CONFIG_GUS16_DMA 3
+   if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
+      dep_tristate '    AD1816(A) based cards (EXPERIMENTAL)' CONFIG_SOUND_AD1816 $CONFIG_SOUND
+      if [ "$CONFIG_SOUND_AD1816" = "y" ]; then
+        hex 'AD1816 audio I/O base 530, 604, E80 or F40' CONFIG_AD1816_BASE 530
+        int 'AD1816 audio IRQ 5, 7, 9, 11, 12 or 15' CONFIG_AD1816_IRQ 7
+        int 'AD1816 audio DMA 0, 1 or 3' CONFIG_AD1816_DMA 0
+        int 'AD1816 second (duplex) DMA 0, 1 or 3' CONFIG_AD1816_DMA2 3
+        int 'AD1816 clock chip frequency' CONFIG_AD1816_CLOCK 33000
       fi
-  fi
-  
-  dep_tristate 'MPU-401 support (NOT for SB16)' CONFIG_SOUND_MPU401 $CONFIG_SOUND_OSS
-  if [ "$CONFIG_SOUND_MPU401" = "y" ]; then
-      hex 'I/O base for MPU401 Check from manual of the card' CONFIG_MPU_BASE 330
-      int 'MPU401 IRQ Check from manual of the card' CONFIG_MPU_IRQ 9
-  fi
-  
-  dep_tristate 'PSS (AD1848, ADSP-2115, ESC614) support' CONFIG_SOUND_PSS $CONFIG_SOUND_OSS
-  if [ "$CONFIG_SOUND_PSS" = "y" ]; then
-      hex 'PSS I/O base 220 or 240' CONFIG_PSS_BASE 220
-      hex 'PSS audio I/O base 530, 604, E80 or F40' CONFIG_PSS_MSS_BASE 530
-      int 'PSS audio IRQ 7, 9, 10 or 11' CONFIG_PSS_MSS_IRQ 11
-      int 'PSS audio DMA 0, 1 or 3' CONFIG_PSS_MSS_DMA 3
-      hex 'PSS MIDI I/O base ' CONFIG_PSS_MPU_BASE 330
-      int 'PSS MIDI IRQ 3, 4, 5, 7, 9, 10, 11, 12' CONFIG_PSS_MPU_IRQ 9
-      bool '  Have DSPxxx.LD firmware file' CONFIG_PSS_HAVE_BOOT
-      if [ "$CONFIG_PSS_HAVE_BOOT" = "y" ]; then
-         string '  Full pathname of DSPxxx.LD firmware file' CONFIG_PSS_BOOT_FILE /etc/sound/dsp001.ld
-      fi
-  fi
-  if [ "$CONFIG_SOUND_PSS" = "y" -o "$CONFIG_SOUND_PSS" = "m" ]; then
-      bool '  Enable PSS mixer (Beethoven ADSP-16 and other compatibile)' CONFIG_PSS_MIXER
-  fi
-  
-  dep_tristate 'Microsoft Sound System support' CONFIG_SOUND_MSS $CONFIG_SOUND_OSS
-  if [ "$CONFIG_SOUND_MSS" = "y" ]; then
-      bool 'Enable support for the SoundPro mixer' CONFIG_SOUND_SPRO
-      hex 'MSS/WSS I/O base 530, 604, E80 or F40' CONFIG_MSS_BASE 530
-      int 'MSS/WSS IRQ 7, 9, 10 or 11' CONFIG_MSS_IRQ 11
-      int 'MSS/WSS DMA 0, 1 or 3' CONFIG_MSS_DMA 3
-      int 'MSS/WSS second DMA (if possible) 0, 1 or 3' CONFIG_MSS_DMA2 -1
-  fi
-  
-  dep_tristate 'Ensoniq SoundScape support' CONFIG_SOUND_SSCAPE $CONFIG_SOUND_OSS
-  if [ "$CONFIG_SOUND_SSCAPE" = "y" ]; then
+   fi
+
+   dep_tristate '    Aztech Sound Galaxy (non-PnP) cards' CONFIG_SOUND_SGALAXY $CONFIG_SOUND_OSS
+   if [ "$CONFIG_SOUND_SGALAXY" = "y" ]; then
+      hex 'SGALAXY audio I/O base 530, 604, E80 or F40' CONFIG_SGALAXY_BASE 530
+      int 'SGALAXY audio IRQ 5, 7, 9, 11, 12 or 15' CONFIG_SGALAXY_IRQ 11
+      int 'SGALAXY audio DMA 0, 1 or 3' CONFIG_SGALAXY_DMA 0
+      int 'SGALAXY second (duplex) DMA 0, 1 or 3' CONFIG_SGALAXY_DMA2 3
+      hex 'SGALAXY SB I/O base 220 or 240' CONFIG_SGALAXY_SGBASE 220
+   fi
+
+   dep_tristate '    Crystal CS4232 based (PnP) cards' CONFIG_SOUND_CS4232 $CONFIG_SOUND_OSS
+   if [ "$CONFIG_SOUND_CS4232" = "y" ]; then
+      hex 'CS4232 audio I/O base (normally 530, 604, E80 or F40)' CONFIG_CS4232_BASE 530
+      int 'CS4232 audio IRQ 5, 7, 9, 11, 12 or 15' CONFIG_CS4232_IRQ 11
+      int 'CS4232 audio DMA 0, 1 or 3' CONFIG_CS4232_DMA 0
+      int 'CS4232 second (duplex) DMA 0, 1 or 3' CONFIG_CS4232_DMA2 3
+      hex 'CS4232 MIDI I/O base 330, 370, 3B0 or 3F0' CONFIG_CS4232_MPU_BASE 330
+      int 'CS4232 MIDI IRQ 5, 7, 9, 11, 12 or 15' CONFIG_CS4232_MPU_IRQ 9
+   fi
+
+   dep_tristate '    Ensoniq SoundScape support' CONFIG_SOUND_SSCAPE $CONFIG_SOUND_OSS
+   if [ "$CONFIG_SOUND_SSCAPE" = "y" ]; then
       hex 'SoundScape MIDI I/O base 320, 330, 340 or 350' CONFIG_SSCAPE_BASE 330
       int 'SoundScape MIDI IRQ ' CONFIG_SSCAPE_IRQ 9
       int 'SoundScape initialization DMA 0, 1 or 3' CONFIG_SSCAPE_DMA 3
       hex 'SoundScape audio I/O base 534, 608, E84 or F44' CONFIG_SSCAPE_MSS_BASE 534
       int 'SoundScape audio IRQ 7, 9, 10 or 11' CONFIG_SSCAPE_MSS_IRQ 11
-  fi
-  
-  dep_tristate 'MediaTrix AudioTrix Pro support' CONFIG_SOUND_TRIX $CONFIG_SOUND_OSS
-  if [ "$CONFIG_SOUND_TRIX" = "y" ]; then
+   fi
+
+   dep_tristate '    Gravis Ultrasound support' CONFIG_SOUND_GUS $CONFIG_SOUND_OSS
+   if [ "$CONFIG_SOUND_GUS" = "y" -o "$CONFIG_SOUND_GUS" = "m" ]; then
+      bool '      16 bit sampling option of GUS (_NOT_ GUS MAX)' CONFIG_GUS16 
+      bool '      GUS MAX support' CONFIG_GUSMAX
+   fi
+   if [ "$CONFIG_SOUND_GUS" = "y" ]; then
+      hex 'I/O base for GUS 210, 220, 230, 240, 250 or 260' CONFIG_GUS_BASE 220
+      int 'GUS IRQ 3, 5, 7, 9, 11, 12 or 15' CONFIG_GUS_IRQ 15
+      int 'GUS DMA 1, 3, 5, 6 or 7' CONFIG_GUS_DMA 6
+      int 'Second DMA channel for GUS 1, 3, 5, 6 or 7' CONFIG_GUS_DMA2 -1
+      if [ "$CONFIG_GUS16" = "y" ]; then
+        hex 'I/O base for the 16 bit daughtercard of GUS 530, 604, E80 or F40' CONFIG_GUS16_BASE 530
+        int 'GUS 16 bit daughtercard IRQ 3, 4, 5, 7, or 9' CONFIG_GUS16_IRQ 7
+        int 'GUS DMA 0, 1 or 3' CONFIG_GUS16_DMA 3
+      fi
+   fi
+
+   dep_tristate '    Loopback MIDI device support' CONFIG_SOUND_VMIDI $CONFIG_SOUND_OSS
+
+   dep_tristate '    MediaTrix AudioTrix Pro support' CONFIG_SOUND_TRIX $CONFIG_SOUND_OSS
+   if [ "$CONFIG_SOUND_TRIX" = "y" ]; then
       hex 'TRIX audio I/O base 530, 604, E80 or F40' CONFIG_TRIX_BASE 530
       int 'TRIX audio IRQ 7, 9, 10 or 11' CONFIG_TRIX_IRQ 11
       int 'TRIX audio DMA 0, 1 or 3' CONFIG_TRIX_DMA 0
@@ -172,133 +151,153 @@ if [ "$CONFIG_SOUND_OSS" = "y" -o "$CONFIG_SOUND_OSS" = "m" ]; then
       hex 'TRIX SB I/O base 220, 210, 230, 240, 250, 260 or 270' CONFIG_TRIX_SB_BASE 220
       int 'TRIX SB IRQ 3, 4, 5 or 7' CONFIG_TRIX_SB_IRQ 7
       int 'TRIX SB DMA 1 or 3' CONFIG_TRIX_SB_DMA 1
-      bool '  Have TRXPRO.HEX firmware file' CONFIG_TRIX_HAVE_BOOT
+      bool '      Have TRXPRO.HEX firmware file' CONFIG_TRIX_HAVE_BOOT
       if [ "$CONFIG_TRIX_HAVE_BOOT" = "y" ]; then
        string '  Full pathname of TRXPRO.HEX firmware file' CONFIG_TRIX_BOOT_FILE /etc/sound/trxpro.hex
       fi
-  fi
+   fi
   
-  dep_tristate 'VIA 82C686 Audio Codec' CONFIG_SOUND_VIA82CXXX $CONFIG_SOUND_OSS
+   dep_tristate '    Microsoft Sound System support' CONFIG_SOUND_MSS $CONFIG_SOUND_OSS
+   if [ "$CONFIG_SOUND_MSS" = "y" ]; then
+      bool '      Enable support for the SoundPro mixer' CONFIG_SOUND_SPRO
+      hex 'MSS/WSS I/O base 530, 604, E80 or F40' CONFIG_MSS_BASE 530
+      int 'MSS/WSS IRQ 7, 9, 10 or 11' CONFIG_MSS_IRQ 11
+      int 'MSS/WSS DMA 0, 1 or 3' CONFIG_MSS_DMA 3
+      int 'MSS/WSS second DMA (if possible) 0, 1 or 3' CONFIG_MSS_DMA2 -1
+   fi
+
+   dep_tristate '    MPU-401 support (NOT for SB16)' CONFIG_SOUND_MPU401 $CONFIG_SOUND_OSS
+   if [ "$CONFIG_SOUND_MPU401" = "y" ]; then
+      hex 'I/O base for MPU401 Check from manual of the card' CONFIG_MPU_BASE 330
+      int 'MPU401 IRQ Check from manual of the card' CONFIG_MPU_IRQ 9
+   fi
+
+   dep_tristate '    NM256AV/NM256ZX audio support' CONFIG_SOUND_NM256 $CONFIG_SOUND_OSS
 
-  dep_tristate 'Support for OPTi MAD16 and/or Mozart based cards' CONFIG_SOUND_MAD16 $CONFIG_SOUND_OSS
-  if [ "$CONFIG_SOUND_MAD16" = "y" -o "$CONFIG_SOUND_MAD16" = "m" ]; then
-    bool 'Support MIDI in older MAD16 based cards (requires SB)' CONFIG_MAD16_OLDCARD
-  fi
-  if [ "$CONFIG_SOUND_MAD16" = "y" ]; then
+   dep_tristate '    OPTi MAD16 and/or Mozart based cards' CONFIG_SOUND_MAD16 $CONFIG_SOUND_OSS
+   if [ "$CONFIG_SOUND_MAD16" = "y" -o "$CONFIG_SOUND_MAD16" = "m" ]; then
+     bool '      Support MIDI in older MAD16 based cards (requires SB)' CONFIG_MAD16_OLDCARD
+   fi
+   if [ "$CONFIG_SOUND_MAD16" = "y" ]; then
       hex 'MAD16 audio I/O base 530, 604, E80 or F40' CONFIG_MAD16_BASE 530
       int 'MAD16 audio IRQ 7, 9, 10 or 11' CONFIG_MAD16_IRQ 11
       int 'MAD16 audio DMA 0, 1 or 3' CONFIG_MAD16_DMA 3
       int 'MAD16 second (duplex) DMA 0, 1 or 3' CONFIG_MAD16_DMA2 0
       hex 'MAD16 MIDI I/O base 300, 310, 320 or 330 (0 disables)' CONFIG_MAD16_MPU_BASE 330
       int 'MAD16 MIDI IRQ 5, 7, 9 or 10' CONFIG_MAD16_MPU_IRQ 9
-  fi
+   fi
+
+   dep_tristate '    ProAudioSpectrum 16 support' CONFIG_SOUND_PAS $CONFIG_SOUND_OSS
+   if [ "$CONFIG_SOUND_PAS" = "y" ]; then
+      int 'PAS16 IRQ 3, 4, 5, 7, 9, 10, 11, 12, 14 or 15' CONFIG_PAS_IRQ 10
+      int 'PAS16 DMA 0, 1, 3, 5, 6 or 7' CONFIG_PAS_DMA 3
+      bool '      Enable PAS16 joystick port' CONFIG_PAS_JOYSTICK
+   fi
+
+   dep_tristate '    PSS (AD1848, ADSP-2115, ESC614) support' CONFIG_SOUND_PSS $CONFIG_SOUND_OSS
+   if [ "$CONFIG_SOUND_PSS" = "y" ]; then
+      hex 'PSS I/O base 220 or 240' CONFIG_PSS_BASE 220
+      hex 'PSS audio I/O base 530, 604, E80 or F40' CONFIG_PSS_MSS_BASE 530
+      int 'PSS audio IRQ 7, 9, 10 or 11' CONFIG_PSS_MSS_IRQ 11
+      int 'PSS audio DMA 0, 1 or 3' CONFIG_PSS_MSS_DMA 3
+      hex 'PSS MIDI I/O base ' CONFIG_PSS_MPU_BASE 330
+      int 'PSS MIDI IRQ 3, 4, 5, 7, 9, 10, 11, 12' CONFIG_PSS_MPU_IRQ 9
+      bool '      Have DSPxxx.LD firmware file' CONFIG_PSS_HAVE_BOOT
+      if [ "$CONFIG_PSS_HAVE_BOOT" = "y" ]; then
+         string '  Full pathname of DSPxxx.LD firmware file' CONFIG_PSS_BOOT_FILE /etc/sound/dsp001.ld
+      fi
+   fi
+   if [ "$CONFIG_SOUND_PSS" = "y" -o "$CONFIG_SOUND_PSS" = "m" ]; then
+      bool '      Enable PSS mixer (Beethoven ADSP-16 and other compatibile)' CONFIG_PSS_MIXER
+   fi
+
+   dep_tristate '    SoftOSS software wave table engine' CONFIG_SOUND_SOFTOSS $CONFIG_SOUND_OSS
+   if [ "$CONFIG_SOUND_SOFTOSS" = "y" ]; then
+      int 'Sampling rate for SoftOSS 8000 to 48000' CONFIG_SOFTOSS_RATE 22050
+      int 'Max # of concurrent voices for SoftOSS 4 to 32' CONFIG_SOFTOSS_VOICES 32
+   fi
   
-  dep_tristate 'Full support for Turtle Beach WaveFront (Tropez Plus, Tropez, Maui) synth/soundcards' CONFIG_SOUND_WAVEFRONT $CONFIG_SOUND_OSS m
-  if [ "$CONFIG_SOUND_WAVEFRONT" = "y" ]; then
+   dep_tristate '    100% Sound Blaster compatibles (SB16/32/64, ESS, Jazz16) support' CONFIG_SOUND_SB $CONFIG_SOUND_OSS
+   if [ "$CONFIG_SOUND_SB" = "y" ]; then
+      hex 'I/O base for SB Check from manual of the card' CONFIG_SB_BASE 220
+      int 'Sound Blaster IRQ Check from manual of the card' CONFIG_SB_IRQ 7
+      int 'Sound Blaster DMA 0, 1 or 3' CONFIG_SB_DMA 1
+      int 'Sound Blaster 16 bit DMA (SB16, Jazz16, SMW) 5, 6 or 7 (use 1 for 8 bit cards)' CONFIG_SB_DMA2 5
+      hex 'MPU401 I/O base of SB16, Jazz16 and ES1688 Check from manual of the card' CONFIG_SB_MPU_BASE 330
+      comment 'MPU401 IRQ is only required with Jazz16, SM Wave and ESS1688.'
+      comment 'Enter -1 to the following question if you have something else such as SB16/32.'
+      int 'SB MPU401 IRQ (Jazz16, SM Wave and ES1688) Check from manual of the card' CONFIG_SB_MPU_IRQ -1
+   fi
+  
+   dep_tristate '    Full support for Turtle Beach WaveFront (Tropez Plus, Tropez, Maui) synth/soundcards' CONFIG_SOUND_WAVEFRONT $CONFIG_SOUND_OSS m
+   if [ "$CONFIG_SOUND_WAVEFRONT" = "y" ]; then
       hex 'I/O base for WaveFront 210, 230, 260, 290, 300, 320, 338 or 330' CONFIG_WAVEFRONT_BASE 330
       int 'WaveFront IRQ 5, 9, 12 or 15' CONFIG_WAVEFRONT_IRQ 9
-  fi
-
-  dep_tristate 'Support for Crystal CS4232 based (PnP) cards' CONFIG_SOUND_CS4232 $CONFIG_SOUND_OSS
-  if [ "$CONFIG_SOUND_CS4232" = "y" ]; then
-      hex 'CS4232 audio I/O base (normally 530, 604, E80 or F40)' CONFIG_CS4232_BASE 530
-      int 'CS4232 audio IRQ 5, 7, 9, 11, 12 or 15' CONFIG_CS4232_IRQ 11
-      int 'CS4232 audio DMA 0, 1 or 3' CONFIG_CS4232_DMA 0
-      int 'CS4232 second (duplex) DMA 0, 1 or 3' CONFIG_CS4232_DMA2 3
-      hex 'CS4232 MIDI I/O base 330, 370, 3B0 or 3F0' CONFIG_CS4232_MPU_BASE 330
-      int 'CS4232 MIDI IRQ 5, 7, 9, 11, 12 or 15' CONFIG_CS4232_MPU_IRQ 9
-  fi
-
-  dep_tristate 'Support for Yamaha OPL3-SA2, SA3, and SAx based PnP cards' CONFIG_SOUND_OPL3SA2 $CONFIG_SOUND_OSS
-  if [ "$CONFIG_SOUND_OPL3SA2" = "y" ]; then
-      int 'Chipset (-1 for autoprobe, 2, or 3)' CONFIG_OPL3SA2_CHIPSET -1
-      hex 'OPL3SA2 audio I/O base (530 - F48 valid)' CONFIG_OPL3SA2_BASE 530
-      int 'OPL3SA2 audio IRQ 5, 7, 9, 11, 12 or 15' CONFIG_OPL3SA2_IRQ 9
-      int 'OPL3SA2 audio DMA 0, 1 or 3' CONFIG_OPL3SA2_DMA 0
-      int 'OPL3SA2 second (duplex) DMA 0, 1 or 3' CONFIG_OPL3SA2_DMA2 1
-      hex 'OPL3SA2 control I/O base (100 - FFE valid)' CONFIG_OPL3SA2_CTRL_BASE 370
-      hex 'OPL3SA2 MIDI I/O base (300 - 334 valid)' CONFIG_OPL3SA2_MPU_BASE 330
-      int 'OPL3SA2 MIDI IRQ 5, 7, 9, 11, 12 or 15' CONFIG_OPL3SA2_MPU_IRQ 9
-  fi
+   fi
 
-  dep_tristate 'Limited support for Turtle Beach Wave Front (Maui, Tropez) synthesizers' CONFIG_SOUND_MAUI $CONFIG_SOUND_OSS
-  if [ "$CONFIG_SOUND_MAUI" = "y" ]; then
+   dep_tristate '    Limited support for Turtle Beach Wave Front (Maui, Tropez) synthesizers' CONFIG_SOUND_MAUI $CONFIG_SOUND_OSS
+   if [ "$CONFIG_SOUND_MAUI" = "y" ]; then
       hex 'I/O base for Maui 210, 230, 260, 290, 300, 320, 338 or 330' CONFIG_MAUI_BASE 330
       int 'Maui IRQ 5, 9, 12 or 15' CONFIG_MAUI_IRQ 9
-      bool '  Have OSWF.MOT firmware file' CONFIG_MAUI_HAVE_BOOT
+      bool '      Have OSWF.MOT firmware file' CONFIG_MAUI_HAVE_BOOT
       if [ "$CONFIG_MAUI_HAVE_BOOT" = "y" ]; then
-       string '  Full pathname of OSWF.MOT firmware file' CONFIG_MAUI_BOOT_FILE /etc/sound/oswf.mot
+        string '  Full pathname of OSWF.MOT firmware file' CONFIG_MAUI_BOOT_FILE /etc/sound/oswf.mot
       fi
-  fi
+   fi
 
-  
-  dep_tristate 'Support for Aztech Sound Galaxy (non-PnP) cards' CONFIG_SOUND_SGALAXY $CONFIG_SOUND_OSS
-  if [ "$CONFIG_SOUND_SGALAXY" = "y" ]; then
-      hex 'SGALAXY audio I/O base 530, 604, E80 or F40' CONFIG_SGALAXY_BASE 530
-      int 'SGALAXY audio IRQ 5, 7, 9, 11, 12 or 15' CONFIG_SGALAXY_IRQ 11
-      int 'SGALAXY audio DMA 0, 1 or 3' CONFIG_SGALAXY_DMA 0
-      int 'SGALAXY second (duplex) DMA 0, 1 or 3' CONFIG_SGALAXY_DMA2 3
-      hex 'SGALAXY SB I/O base 220 or 240' CONFIG_SGALAXY_SGBASE 220
-  fi
+   dep_tristate '    VIA 82C686 Audio Codec' CONFIG_SOUND_VIA82CXXX $CONFIG_SOUND_OSS
 
-  if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
-    dep_tristate 'Support for AD1816(A) based cards (EXPERIMENTAL)' CONFIG_SOUND_AD1816 $CONFIG_SOUND
-    if [ "$CONFIG_SOUND_AD1816" = "y" ]; then
-      hex 'AD1816 audio I/O base 530, 604, E80 or F40' CONFIG_AD1816_BASE 530
-      int 'AD1816 audio IRQ 5, 7, 9, 11, 12 or 15' CONFIG_AD1816_IRQ 7
-      int 'AD1816 audio DMA 0, 1 or 3' CONFIG_AD1816_DMA 0
-      int 'AD1816 second (duplex) DMA 0, 1 or 3' CONFIG_AD1816_DMA2 3
-      int 'AD1816 clock chip frequency' CONFIG_AD1816_CLOCK 33000
-    fi
-  fi
-  
-  dep_tristate 'Yamaha OPL3-SA1 audio controller' CONFIG_SOUND_OPL3SA1 $CONFIG_SOUND_OSS
-  if [ "$CONFIG_SOUND_OPL3SA1" = "y" ]; 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
+   if [ "$CONFIG_SOUND_OPL3SA1" = "y" ]; then
       hex 'OPL3-SA1 audio I/O base 530, 604, E80 or F40' CONFIG_OPL3SA1_BASE 530
       int 'OPL3-SA1 audio IRQ 7, 9, 10 or 11' CONFIG_OPL3SA1_IRQ 11
       int 'OPL3-SA1 audio DMA 0, 1 or 3' CONFIG_OPL3SA1_DMA 0
       int 'OPL3-SA1 second (duplex) DMA 0, 1 or 3' CONFIG_OPL3SA1_DMA2 3
       hex 'OPL3-SA1 MIDI I/O base 330, 370, 3B0 or 3F0' CONFIG_OPL3SA1_MPU_BASE 330
       int 'OPL3-SA1 MIDI IRQ 3, 4, 5, 7 or 9' CONFIG_OPL3SA1_MPU_IRQ 9
-  fi
-  
-  dep_tristate 'SoftOSS software wave table engine' CONFIG_SOUND_SOFTOSS $CONFIG_SOUND_OSS
-  if [ "$CONFIG_SOUND_SOFTOSS" = "y" ]; then
-      int 'Sampling rate for SoftOSS 8000 to 48000' CONFIG_SOFTOSS_RATE 22050
-      int 'Max # of concurrent voices for SoftOSS 4 to 32' CONFIG_SOFTOSS_VOICES 32
-  fi
+   fi
   
-  dep_tristate 'FM synthesizer (YM3812/OPL-3) support' CONFIG_SOUND_YM3812 $CONFIG_SOUND_OSS
+   dep_tristate '    Yamaha OPL3-SA2, SA3, and SAx based PnP cards' CONFIG_SOUND_OPL3SA2 $CONFIG_SOUND_OSS
+   if [ "$CONFIG_SOUND_OPL3SA2" = "y" ]; then
+      int 'Chipset (-1 for autoprobe, 2, or 3)' CONFIG_OPL3SA2_CHIPSET -1
+      hex 'OPL3SA2 audio I/O base (530 - F48 valid)' CONFIG_OPL3SA2_BASE 530
+      int 'OPL3SA2 audio IRQ 5, 7, 9, 11, 12 or 15' CONFIG_OPL3SA2_IRQ 9
+      int 'OPL3SA2 audio DMA 0, 1 or 3' CONFIG_OPL3SA2_DMA 0
+      int 'OPL3SA2 second (duplex) DMA 0, 1 or 3' CONFIG_OPL3SA2_DMA2 1
+      hex 'OPL3SA2 control I/O base (100 - FFE valid)' CONFIG_OPL3SA2_CTRL_BASE 370
+      hex 'OPL3SA2 MIDI I/O base (300 - 334 valid)' CONFIG_OPL3SA2_MPU_BASE 330
+      int 'OPL3SA2 MIDI IRQ 5, 7, 9, 11, 12 or 15' CONFIG_OPL3SA2_MPU_IRQ 9
+   fi
   
-  dep_tristate 'Loopback MIDI device support' CONFIG_SOUND_VMIDI $CONFIG_SOUND_OSS
   
-  dep_tristate '6850 UART support' CONFIG_SOUND_UART6850 $CONFIG_SOUND_OSS
-  if [ "$CONFIG_SOUND_UART6850" = "y" ]; then
+   dep_tristate '    6850 UART support' CONFIG_SOUND_UART6850 $CONFIG_SOUND_OSS
+   if [ "$CONFIG_SOUND_UART6850" = "y" ]; then
       hex 'I/O base for UART 6850 MIDI port (Unknown)' CONFIG_U6850_BASE 0
       int 'UART6850 IRQ (Unknown)' CONFIG_U6850_IRQ -1
-  fi
-  
-  if [ "$CONFIG_ARM" = "y" ]; then
-    dep_tristate 'VIDC 16-bit sound' CONFIG_SOUND_VIDC $CONFIG_SOUND_OSS
-    dep_tristate 'Netwinder WaveArtist' CONFIG_SOUND_WAVEARTIST $CONFIG_SOUND_OSS
-    if [ "$CONFIG_SOUND_WAVEARTIST" != "n" ]; then
-      hex '  WaveArtist I/O base' CONFIG_WAVEARTIST_BASE 250
-      int '  WaveArtist IRQ' CONFIG_WAVEARTIST_IRQ 12
-      int '  WaveArtist DMA' CONFIG_WAVEARTIST_DMA 3
-      int '  WaveArtist second DMA' CONFIG_WAVEARTIST_DMA2 7
-    fi
-  fi
+   fi
   
+   if [ "$CONFIG_ARM" = "y" ]; then
+      dep_tristate '    VIDC 16-bit sound' CONFIG_SOUND_VIDC $CONFIG_SOUND_OSS
+      dep_tristate '    Netwinder WaveArtist' CONFIG_SOUND_WAVEARTIST $CONFIG_SOUND_OSS
+      if [ "$CONFIG_SOUND_WAVEARTIST" != "n" ]; then
+        hex '    WaveArtist I/O base' CONFIG_WAVEARTIST_BASE 250
+        int '  WaveArtist IRQ' CONFIG_WAVEARTIST_IRQ 12
+        int '  WaveArtist DMA' CONFIG_WAVEARTIST_DMA 3
+        int '  WaveArtist second DMA' CONFIG_WAVEARTIST_DMA2 7
+      fi
+   fi
   
   
-  # Additional low level drivers.
+   # Additional low level drivers.
   
-  mainmenu_option next_comment
-  comment 'Additional low level sound drivers'
-  bool 'Additional low level sound drivers' CONFIG_LOWLEVEL_SOUND $CONFIG_SOUND_OSS
-  if [ "$CONFIG_LOWLEVEL_SOUND" = "y" ]; then
+   mainmenu_option next_comment
+   comment 'Additional low level sound drivers'
+   bool 'Additional low level sound drivers' CONFIG_LOWLEVEL_SOUND $CONFIG_SOUND_OSS
+   if [ "$CONFIG_LOWLEVEL_SOUND" = "y" ]; then
       source drivers/sound/lowlevel/Config.in
-  fi
-  endmenu
+   fi
+   endmenu
 fi
 
index 532a189d78c8b4285861da259b961d03b9669147..0def3ddd10a59f2e1a4b725ae34fedab76e6f204 100644 (file)
@@ -24,7 +24,8 @@ endif
 
 export-objs    :=  ad1848.o audio_syms.o midi_syms.o mpu401.o \
                    msnd.o opl3.o sb_card.o sequencer_syms.o \
-                   sound_core.o sound_syms.o uart401.o ad1816.o
+                   sound_core.o sound_syms.o uart401.o ad1816.o \
+                   nm256_audio.o
 
 
 
@@ -42,7 +43,6 @@ obj-          :=
 obj-$(CONFIG_SOUND)            += soundcore.o
 obj-$(CONFIG_DMASOUND)         += dmasound.o
 obj-$(CONFIG_SOUND_OSS)                += sound.o
-obj-$(CONFIG_SOUND_ADLIB)      += adlib_card.o opl3.o
 obj-$(CONFIG_SOUND_CS4232)     += cs4232.o ad1848.o 
 
 # In theory, there's probably no reason to include the uart401 code
@@ -65,7 +65,7 @@ obj-$(CONFIG_SOUND_PAS)               += pas2.o sb.o uart401.o
 obj-$(CONFIG_SOUND_PSS)                += pss.o ad1848.o mpu401.o
 obj-$(CONFIG_SOUND_SB)         += sb.o uart401.o
 obj-$(CONFIG_SOUND_SOFTOSS)    += softoss2.o
-obj-$(CONFIG_SOUND_SGALAXY)    += sgalaxy.o
+obj-$(CONFIG_SOUND_SGALAXY)    += sgalaxy.o ad1848.o
 obj-$(CONFIG_SOUND_AD1816)      += ad1816.o
 obj-$(CONFIG_SOUND_SSCAPE)     += sscape.o ad1848.o mpu401.o
 obj-$(CONFIG_SOUND_TRIX)       += trix.o ad1848.o sb.o uart401.o
@@ -76,6 +76,7 @@ obj-$(CONFIG_SOUND_VIDC)      += vidc_mod.o
 obj-$(CONFIG_SOUND_VWSND)      += vwsnd.o
 obj-$(CONFIG_SOUND_WAVEARTIST) += waveartist.o
 obj-$(CONFIG_SOUND_WAVEFRONT)   += wavefront.o
+obj-$(CONFIG_SOUND_NM256)      += nm256.o
 
 obj-$(CONFIG_SOUND_SONICVIBES) += sonicvibes.o
 obj-$(CONFIG_SOUND_CMPCI)      += cmpci.o
@@ -87,7 +88,7 @@ obj-$(CONFIG_SOUND_MAESTRO)   += maestro.o
 # Declare multi-part drivers.
 
 list-multi     := sound.o gus.o pas2.o sb.o softoss2.o vidc_mod.o \
-    soundcore.o wavefront.o
+    soundcore.o wavefront.o nm256.o
 
 sound-objs     :=                                                      \
     dev_table.o soundcard.o sound_syms.o               \
@@ -104,6 +105,7 @@ sb-objs             := sb_audio.o sb_card.o sb_common.o sb_midi.o sb_mixer.o        \
 softoss2-objs  := softoss.o softoss_rs.o
 vidc_mod-objs  := vidc.o vidc_audio.o vidc_fill.o vidc_mixer.o vidc_synth.o
 wavefront-objs  := wavfront.o wf_midi.o yss225.o
+nm256-objs     := nm256_audio.o ac97.o
 
 
 # Extract lists of the multi-part drivers.
@@ -189,6 +191,9 @@ vidc_mod.o: $(vidc_mod-objs)
 wavefront.o: $(wavefront-objs)
        $(LD) -r -o $@ $(wavefront-objs)
 
+nm256.o: $(nm256-objs)
+       $(LD) -r -o $@ $(nm256-objs)
+
 # Firmware files that need translation
 #
 # The translated files are protected by a file that keeps track
diff --git a/drivers/sound/ac97.c b/drivers/sound/ac97.c
new file mode 100644 (file)
index 0000000..bc31313
--- /dev/null
@@ -0,0 +1,408 @@
+#include "ac97.h"
+
+/* Flag for mono controls. */
+#define MO 0
+/* And for stereo. */
+#define ST 1
+
+static struct ac97_chn_desc {
+    int ac97_regnum;
+    int oss_channel;
+    int maxval;
+    int is_stereo;
+    int oss_mask;
+    int recordNum;
+    u16 regmask;
+} mixerRegs[] = {
+    { AC97_MASTER_VOL_STEREO, SOUND_MIXER_VOLUME,   0x3f, ST, SOUND_MASK_VOLUME,   5, 0x0000 },
+    { AC97_MASTER_VOL_MONO,   SOUND_MIXER_PHONEOUT, 0x3f, MO, SOUND_MASK_PHONEOUT, 6, 0x0000 },
+    { AC97_MASTER_TONE,       SOUND_MIXER_TREBLE,   0x0f, MO, SOUND_MASK_TREBLE,  -1, 0x00ff },
+    { AC97_MASTER_TONE,       SOUND_MIXER_BASS,     0x0f, MO, SOUND_MASK_BASS,    -1, 0xff00 },
+    { AC97_PCBEEP_VOL,        SOUND_MIXER_SPEAKER,  0x0f, MO, SOUND_MASK_SPEAKER, -1, 0x001e },
+    { AC97_PHONE_VOL,         SOUND_MIXER_PHONEIN,  0x1f, MO, SOUND_MASK_PHONEIN,  7, 0x0000 },
+    { AC97_MIC_VOL,           SOUND_MIXER_MIC,      0x1f, MO, SOUND_MASK_MIC,      0, 0x0000 },
+    { AC97_LINEIN_VOL,        SOUND_MIXER_LINE,     0x1f, ST, SOUND_MASK_LINE,     4, 0x0000 },
+    { AC97_CD_VOL,            SOUND_MIXER_CD,       0x1f, ST, SOUND_MASK_CD,       1, 0x0000 },
+    { AC97_VIDEO_VOL,         SOUND_MIXER_VIDEO,    0x1f, ST, SOUND_MASK_VIDEO,    2, 0x0000 },
+    { AC97_AUX_VOL,           SOUND_MIXER_LINE1,    0x1f, ST, SOUND_MASK_LINE1,           3, 0x0000 },
+    { AC97_PCMOUT_VOL,        SOUND_MIXER_PCM,      0x1f, ST, SOUND_MASK_PCM,     -1, 0x0000 },
+    { AC97_RECORD_GAIN,       SOUND_MIXER_IGAIN,    0x0f, ST, SOUND_MASK_IGAIN,   -1, 0x0000 },
+    { -1,   -1,                   0xff, 0, 0,                   -1, 0x0000 },
+};
+
+static struct ac97_chn_desc *
+ac97_find_chndesc (struct ac97_hwint *dev, int oss_channel)
+{
+    int x;
+
+    for (x = 0; mixerRegs[x].oss_channel != -1; x++) {
+       if (mixerRegs[x].oss_channel == oss_channel)
+           return mixerRegs + x;
+    }
+
+    return NULL;
+}
+
+static inline int
+ac97_is_valid_channel (struct ac97_hwint *dev, struct ac97_chn_desc *chn)
+{
+    return (dev->last_written_mixer_values[chn->ac97_regnum / 2]
+           != AC97_REG_UNSUPPORTED);
+}
+
+int
+ac97_init (struct ac97_hwint *dev)
+{
+    int x;
+    int reg0;
+
+    /* Clear out the arrays of cached values. */
+    for (x = 0; x < AC97_REG_CNT; x++)
+       dev->last_written_mixer_values[x] = AC97_REGVAL_UNKNOWN;
+
+    for (x = 0; x < SOUND_MIXER_NRDEVICES; x++)
+       dev->last_written_OSS_values[x] = AC97_REGVAL_UNKNOWN;
+
+    /* Clear the device masks.  */
+    dev->mixer_devmask = 0;
+    dev->mixer_stereomask = 0;
+    dev->mixer_recmask = 0;
+
+    /* ??? Do a "standard reset" via register 0? */
+
+    /* Hardware-dependent reset.  */
+    if (dev->reset_device (dev))
+       return -1;
+
+    /* Check the mixer device capabilities.  */
+    reg0 = dev->read_reg (dev, AC97_RESET);
+
+    if (reg0 < 0)
+       return -1;
+
+    /* Check for support for treble/bass controls.  */
+    if (! (reg0 & 4)) {
+       dev->last_written_mixer_values[AC97_MASTER_TONE / 2] 
+           = AC97_REG_UNSUPPORTED;
+    }
+
+    /* ??? There may be other tests here? */
+
+    /* Fill in the device masks.  */
+    for (x = 0; mixerRegs[x].ac97_regnum != -1; x++) {
+       if (ac97_is_valid_channel (dev, mixerRegs + x)) {
+           dev->mixer_devmask |= mixerRegs[x].oss_mask;
+
+           if (mixerRegs[x].is_stereo)
+               dev->mixer_stereomask |= mixerRegs[x].oss_mask;
+
+           if (mixerRegs[x].recordNum != -1)
+               dev->mixer_recmask |= mixerRegs[x].oss_mask;
+       }
+    }
+
+    return 0;
+}
+
+/* Return the contents of register REG; use the cache if the value in it
+   is valid.  Returns a negative error code on failure. */
+int
+ac97_get_register (struct ac97_hwint *dev, u8 reg) 
+{
+    if (reg > 127 || (reg & 1))
+       return -EINVAL;
+
+    /* See if it's in the cache, or if it's just plain invalid.  */
+    switch (dev->last_written_mixer_values[reg / 2]) {
+    case AC97_REG_UNSUPPORTED:
+       return -EINVAL;
+       break;
+    case AC97_REGVAL_UNKNOWN:
+       dev->last_written_mixer_values[reg / 2] = dev->read_reg (dev, reg);
+       break;
+    default:
+       break;
+    }
+    return dev->last_written_mixer_values[reg / 2];
+}
+
+/* Write VALUE to AC97 register REG, and cache its value in the last-written
+   cache.  Returns a negative error code on failure, or 0 on success. */
+int
+ac97_put_register (struct ac97_hwint *dev, u8 reg, u16 value)
+{
+    if (reg > 127 || (reg & 1))
+       return -EINVAL;
+
+    if (dev->last_written_mixer_values[reg / 2] == AC97_REG_UNSUPPORTED)
+       return -EINVAL;
+    else {
+       int res = dev->write_reg (dev, reg, value);
+       if (res >= 0) {
+           dev->last_written_mixer_values[reg / 2] = value;
+           return 0;
+       }
+       else
+           return res;
+    }
+}
+
+/* Scale VALUE (a value fro 0 to MAXVAL) to a value from 0-100.  If
+   IS_STEREO is set, VALUE is a stereo value; the left channel value
+   is in the lower 8 bits, and the right channel value is in the upper
+   8 bits.
+
+   A negative error code is returned on failure, or the unsigned
+   scaled value on success.  */
+
+static int
+ac97_scale_to_oss_val (int value, int maxval, int is_stereo)
+{
+    /* Muted?  */
+    if (value & AC97_MUTE)
+       return 0;
+
+    if (is_stereo)
+       return (ac97_scale_to_oss_val (value & 255, maxval, 0) << 8)
+       | (ac97_scale_to_oss_val ((value >> 8) & 255, maxval, 0) << 0);
+    else {
+       int i;
+       
+       /* Inverted. */
+       value = maxval - value;
+
+       i = (value * 100 + (maxval / 2)) / maxval;
+       if (i > 100)
+            i = 100;
+       return i;
+    }
+}
+
+static int
+ac97_scale_from_oss_val (int value, int maxval, int is_stereo)
+{
+    if (is_stereo)
+       return (ac97_scale_from_oss_val (value & 255, maxval, 0) << 8)
+       | (ac97_scale_from_oss_val ((value >> 8) & 255, maxval, 0) << 0);
+    else {
+       int i = maxval - ((value & 255) * maxval + 50) / 100;
+       if (i < 0)
+           i = 0;
+       return i;
+    }
+}
+
+int
+ac97_set_mixer (struct ac97_hwint *dev, int oss_channel, u16 oss_value)
+{
+    int scaled_value;
+    struct ac97_chn_desc *channel = ac97_find_chndesc (dev, oss_channel);
+    int result;
+
+    if (channel == NULL)
+       return -ENODEV;
+    if (! ac97_is_valid_channel (dev, channel))
+       return -ENODEV;
+    scaled_value = ac97_scale_from_oss_val (oss_value, channel->maxval,
+                                           channel->is_stereo);
+    if (scaled_value < 0)
+       return scaled_value;
+
+    if (channel->regmask != 0) {
+       int mv;
+
+       int oldval = ac97_get_register (dev, channel->ac97_regnum);
+       if (oldval < 0)
+           return oldval;
+
+       for (mv = channel->regmask; ! (mv & 1); mv >>= 1)
+           scaled_value <<= 1;
+
+       scaled_value &= channel->regmask;
+       scaled_value |= (oldval & ~channel->regmask);
+    }
+    result = ac97_put_register (dev, channel->ac97_regnum, scaled_value);
+    if (result == 0)
+       dev->last_written_OSS_values[oss_channel] = oss_value;
+    return result;
+}
+
+int
+ac97_get_mixer_scaled (struct ac97_hwint *dev, int oss_channel)
+{
+    struct ac97_chn_desc *channel = ac97_find_chndesc (dev, oss_channel);
+    int regval;
+
+    if (channel == NULL)
+       return -ENODEV;
+
+    if (! ac97_is_valid_channel (dev, channel))
+       return -ENODEV;
+
+    regval = ac97_get_register (dev, channel->ac97_regnum);
+
+    if (regval < 0)
+       return regval;
+
+    if (channel->regmask != 0) {
+       int mv;
+
+       regval &= channel->regmask;
+
+       for (mv = channel->regmask; ! (mv & 1); mv >>= 1)
+           regval >>= 1;
+    }
+    return ac97_scale_to_oss_val (regval, channel->maxval,
+                                 channel->is_stereo);
+}
+
+int
+ac97_get_recmask (struct ac97_hwint *dev)
+{
+    int recReg = ac97_get_register (dev, AC97_RECORD_SELECT);
+
+    if (recReg < 0)
+       return recReg;
+    else {
+       int x;
+       for (x = 0; mixerRegs[x].ac97_regnum >= 0; x++) {
+           if (mixerRegs[x].recordNum == (recReg & 7))
+               return mixerRegs[x].oss_mask;
+       }
+       return -ENODEV;
+    }
+}
+
+int
+ac97_set_recmask (struct ac97_hwint *dev, int oss_recmask)
+{
+    int x;
+
+    if (oss_recmask == 0)
+       oss_recmask = SOUND_MIXER_MIC;
+
+    for (x = 0; mixerRegs[x].ac97_regnum >= 0; x++) { 
+       if ((mixerRegs[x].recordNum >= 0)
+            && (oss_recmask & mixerRegs[x].oss_mask))
+           break;
+    }
+    if (mixerRegs[x].ac97_regnum < 0)
+       return -ENODEV;
+    else {
+       int regval = (mixerRegs[x].recordNum << 8) | mixerRegs[x].recordNum;
+       int res = ac97_put_register (dev, AC97_RECORD_SELECT, regval);
+       if (res == 0)
+           return ac97_get_recmask (dev);
+       else
+           return res;
+    }
+}
+
+/* Set the mixer DEV to the list of values in VALUE_LIST.  Return 0 on
+   success, or a negative error code.  */
+int
+ac97_set_values (struct ac97_hwint *dev, 
+                struct ac97_mixer_value_list *value_list)
+{
+    int x;
+
+    for (x = 0; value_list[x].oss_channel != -1; x++) {
+       int chnum = value_list[x].oss_channel;
+       struct ac97_chn_desc *chent = ac97_find_chndesc (dev, chnum);
+       if (chent != NULL) {
+           u16 val;
+           int res;
+
+           if (chent->is_stereo)
+               val = (value_list[x].value.stereo.right << 8) 
+                     | value_list[x].value.stereo.left;
+           else {
+               /* We do this so the returned value looks OK in the
+                  mixer app.  It's not necessary otherwise.  */
+               val = (value_list[x].value.mono << 8) 
+                     | value_list[x].value.mono;
+           }
+           res = ac97_set_mixer (dev, chnum, val);
+           if (res < 0)
+               return res;
+       }
+       else
+           return -ENODEV;
+    }
+    return 0;
+}
+
+int
+ac97_mixer_ioctl (struct ac97_hwint *dev, unsigned int cmd, caddr_t arg)
+{
+    int ret;
+
+    switch (cmd) {
+    case SOUND_MIXER_READ_RECSRC:
+       ret = ac97_get_recmask (dev);
+       break;
+
+    case SOUND_MIXER_WRITE_RECSRC:
+       {
+           if (get_user (ret, (int *) arg))
+               ret = -EFAULT;
+           else
+               ret = ac97_set_recmask (dev, ret);
+       }
+       break;
+
+    case SOUND_MIXER_READ_CAPS:
+       ret = SOUND_CAP_EXCL_INPUT;
+       break;
+
+    case SOUND_MIXER_READ_DEVMASK:
+       ret = dev->mixer_devmask;
+       break;
+
+    case SOUND_MIXER_READ_RECMASK:
+       ret = dev->mixer_recmask;
+       break;
+
+    case SOUND_MIXER_READ_STEREODEVS:
+       ret = dev->mixer_stereomask;
+       break;
+
+    default:
+       /* Read or write request. */
+       ret = -EINVAL;
+       if (_IOC_TYPE (cmd) == 'M') {
+           int dir = _IOC_DIR (cmd);
+           int channel = _IOC_NR (cmd);
+
+           if (channel >= 0 && channel < SOUND_MIXER_NRDEVICES) {
+               ret = 0;
+               if (dir & _IOC_WRITE) {
+                   int val;
+                   if (get_user (val, (int *) arg) == 0)
+                       ret = ac97_set_mixer (dev, channel, val);
+                   else
+                       ret = -EFAULT;
+               }
+               if (ret >= 0) {
+                   if (dev->last_written_OSS_values[channel] == AC97_REGVAL_UNKNOWN)
+                       dev->last_written_OSS_values[channel]
+                           = ac97_get_mixer_scaled (dev, channel);
+                   ret = dev->last_written_OSS_values[channel];
+               }
+           }
+       }
+       break;
+    }
+
+    if (ret < 0)
+       return ret;
+    else
+       return put_user(ret, (int *) arg);
+}
+
+\f
+/*
+ * Local variables:
+ *  c-basic-offset: 4
+ * End:
+ */
index 99ca6925bb8ab9c40ab9dbd002451af9aabc2aac..3269337d510ba32300dc9e1e6184bdcc58cc8d36 100644 (file)
@@ -2,12 +2,14 @@
  * ac97.h 
  * 
  * definitions for the AC97, Intel's Audio Codec 97 Spec
+ * also includes support for a generic AC97 interface
  */
 
 #ifndef _AC97_H_
 #define _AC97_H_
+#include "sound_config.h"
+#include "sound_calls.h"
 
-                                             // conections on concert 97 */
 #define  AC97_RESET              0x0000      //  */
 #define  AC97_MASTER_VOL_STEREO  0x0002      // Line Out
 #define  AC97_HEADPHONE_VOL      0x0004      // 
@@ -36,7 +38,6 @@
 #define  AC97_VENDOR_ID1         0x007c
 #define  AC97_VENDOR_ID2         0x007e
 
-
 /* volume control bit defines */
 
 #define AC97_MUTE                0x8000
 #define AC97_PWR_D3              AC97_PWR_PR0|AC97_PWR_PR1|AC97_PWR_PR2|AC97_PWR_PR3|AC97_PWR_PR4
 #define AC97_PWR_ANLOFF          AC97_PWR_PR2|AC97_PWR_PR3  /* analog section off */
 
-#endif /* _AC97_H_ */
-
-
-
+/* Total number of defined registers.  */
+#define AC97_REG_CNT 64
+
+/* Generic AC97 mixer interface. */
+
+/* Structure describing access to the hardware. */
+struct ac97_hwint
+{
+    /* Perform any hardware-specific reset and initialization.  Returns
+     0 on success, or a negative error code.  */
+    int (*reset_device) (struct ac97_hwint *dev);
+
+    /* Returns the contents of the specified register REG.  The caller
+       should check to see if the desired contents are available in
+       the cache first, if applicable. Returns a positive unsigned value
+       representing the contents of the register, or a negative error
+       code.  */
+    int (*read_reg) (struct ac97_hwint *dev, u8 reg);
+
+    /* Writes VALUE to register REG.  Returns 0 on success, or a
+       negative error code.  */
+    int (*write_reg) (struct ac97_hwint *dev, u8 reg, u16 value);
+
+    /* Hardware-specific information. */
+    void *driver_private;
+
+    /* Three OSS masks. */
+    int mixer_devmask;
+    int mixer_stereomask;
+    int mixer_recmask;
+
+    /* The mixer cache. The indices correspond to the AC97 hardware register
+       number / 2, since the register numbers are always an even number.
+
+       Unknown values are set to -1; unsupported registers contain a
+       -2.  */
+    int last_written_mixer_values[AC97_REG_CNT];
+
+    /* A cache of values written via OSS; we need these so we can return
+       the values originally written by the user.
+
+       Why the original user values?  Because the real-world hardware
+       has less precision, and some existing applications assume that
+       they will get back the exact value that they wrote (aumix).
+
+       A -1 value indicates that no value has been written to this mixer
+       channel via OSS.  */
+    int last_written_OSS_values[SOUND_MIXER_NRDEVICES];
+};
+
+/* Values stored in the register cache.  */
+#define AC97_REGVAL_UNKNOWN -1
+#define AC97_REG_UNSUPPORTED -2
+
+struct ac97_mixer_value_list
+{
+    /* Mixer channel to set.  List is terminated by a value of -1.  */
+    int oss_channel;
+    /* The scaled value to set it to; values generally range from 0-100. */
+    union {
+       struct {
+           u8 left, right;
+       } stereo;
+       u8 mono;
+    } value;
+};
+
+/* Initialize the ac97 mixer by resetting it.  */
+extern int ac97_init (struct ac97_hwint *dev);
+
+/* Sets the mixer DEV to the values in VALUE_LIST.  Returns 0 on success,
+   or a negative error code.  */
+extern int ac97_set_values (struct ac97_hwint *dev,
+                           struct ac97_mixer_value_list *value_list);
+
+/* Sets one mixer channel OSS_CHANNEL to the scaled value OSS_VALUE.
+   Returns the resulting (rescaled) value, or a negative value
+   representing an error code.
+
+   Stereo channels have two values in OSS_VALUE (the left value is in the
+   lower 8 bits, the right value is in the upper 8 bits). */
+extern int ac97_set_mixer (struct ac97_hwint *dev, int oss_channel,
+                          u16 oss_value);
+
+/* Return the contents of the specified AC97 register REG; it uses the
+   last-written value if it is available.  */
+extern int ac97_get_register (struct ac97_hwint *dev, u8 reg);
+
+/* Writes the specified VALUE to the AC97 register REG in the mixer.
+   Takes care of setting the last-written cache as well.  */
+extern int ac97_put_register (struct ac97_hwint *dev, u8 reg, u16 value);
+
+/* Returns the last OSS value written to the OSS_CHANNEL mixer channel.  */
+extern int ac97_get_mixer_scaled (struct ac97_hwint *dev, int oss_channel);
+
+/* Default ioctl. */
+extern int ac97_mixer_ioctl (struct ac97_hwint *dev, unsigned int cmd,
+                            caddr_t arg);
+#endif
+\f
+/*
+ * Local variables:
+ *  c-basic-offset: 4
+ * End:
+ */
index baa0907711a068f53e0bc4c602d8da6682b7e668..8de63a0682b623d254e71bbe9c595e2b830bba42 100644 (file)
@@ -106,7 +106,7 @@ int soundpro = 1;
 int soundpro = 0;
 #endif
 
-static volatile char irq2dev[17] = {
+static volatile signed char irq2dev[17] = {
        -1, -1, -1, -1, -1, -1, -1, -1,
        -1, -1, -1, -1, -1, -1, -1, -1, -1
 };
@@ -2434,11 +2434,12 @@ int probe_ms_sound(struct address_info *hw_config)
 
 void attach_ms_sound(struct address_info *hw_config)
 {
-       static char     interrupt_bits[12] =
+       static signed char interrupt_bits[12] =
        {
                -1, -1, -1, -1, -1, 0x00, -1, 0x08, -1, 0x10, 0x18, 0x20
        };
-       char            bits, dma2_bit = 0;
+       signed char     bits;
+       char            dma2_bit = 0;
 
        static char     dma_bits[4] =
        {
index b21d7316eed71940ec06467cf0bc41dc4c1bae8a..9bd6cc1c53ccbfd9d47398952e9fe8a386e0d8f4 100644 (file)
@@ -16,8 +16,6 @@
 #include "sound_config.h"
 #include "soundmodule.h"
 
-#ifdef CONFIG_YM3812
-
 void attach_adlib_card(struct address_info *hw_config)
 {
        hw_config->slots[0] = opl3_init(hw_config->io_base, hw_config->osp);
@@ -70,4 +68,3 @@ void cleanup_module(void)
 }
 
 #endif
-#endif
index efca048dc1e1bc2c203f4ceb45021c73ede1c0b4..37103e857d5ad220997dcc5e5b380c8fd4dbab72 100644 (file)
@@ -57,7 +57,8 @@
  *                     reported by Johan Maes <joma@telindus.be>
  *    22.03.99   0.12  return EAGAIN instead of EBUSY when O_NONBLOCK
  *                     read/write cannot be executed
- *
+ *    20 09 99   0.13  merged the generic changes in sonicvibes since this
+ *                    diverged.
  */
 
 /*****************************************************************************/
@@ -585,8 +586,9 @@ static int prog_dmabuf(struct cm_state *s, unsigned rec)
        db->hwptr = db->swptr = db->total_bytes = db->count = db->error = db->endcleared = 0;
        if (!db->rawbuf) {
                db->ready = db->mapped = 0;
-               for (order = DMABUF_DEFAULTORDER; order >= DMABUF_MINORDER && !db->rawbuf; order--)
-                       db->rawbuf = (void *)__get_free_pages(GFP_KERNEL | GFP_DMA, order);
+               for (order = DMABUF_DEFAULTORDER; order >= DMABUF_MINORDER; order--)
+                       if ((db->rawbuf = (void *)__get_free_pages(GFP_KERNEL | GFP_DMA, order)))
+                               break;
                if (!db->rawbuf)
                        return -ENOMEM;
                db->buforder = order;
@@ -1152,9 +1154,9 @@ static int drain_dac(struct cm_state *s, int nonblock)
                         current->state = TASK_RUNNING;
                         return -EBUSY;
                 }
-               tmo = (count * HZ) / s->ratedac;
+               tmo = 3 * HZ * (count + s->dma_dac.fragsize) / 2 / s->ratedac;
                tmo >>= sample_shift[(s->fmt >> CM_CFMT_DACSHIFT) & CM_CFMT_MASK];
-               if (!schedule_timeout(tmo ? : 1) && tmo)
+               if (!schedule_timeout(tmo + 1))
                        printk(KERN_DEBUG "cm: dma timed out??\n");
         }
         remove_wait_queue(&s->dma_dac.wait, &wait);
@@ -1630,9 +1632,11 @@ static int cm_ioctl(struct inode *inode, struct file *file, unsigned int cmd, un
         case SOUND_PCM_READ_BITS:
                return put_user((s->fmt & ((file->f_mode & FMODE_READ) ? (CM_CFMT_16BIT << CM_CFMT_ADCSHIFT) : (CM_CFMT_16BIT << CM_CFMT_DACSHIFT))) ? 16 : 8, (int *)arg);
 
+        case SOUND_PCM_READ_FILTER:
+               return put_user((file->f_mode & FMODE_READ) ? s->rateadc : s->ratedac, (int *)arg);
+
         case SOUND_PCM_WRITE_FILTER:
         case SNDCTL_DSP_SETSYNCRO:
-        case SOUND_PCM_READ_FILTER:
                 return -EINVAL;
                
        }
@@ -1732,6 +1736,7 @@ static /*const*/ struct file_operations cm_audio_fops = {
 static ssize_t cm_midi_read(struct file *file, char *buffer, size_t count, loff_t *ppos)
 {
        struct cm_state *s = (struct cm_state *)file->private_data;
+       DECLARE_WAITQUEUE(wait, current);
        ssize_t ret;
        unsigned long flags;
        unsigned ptr;
@@ -1742,7 +1747,10 @@ static ssize_t cm_midi_read(struct file *file, char *buffer, size_t count, loff_
                return -ESPIPE;
        if (!access_ok(VERIFY_WRITE, buffer, count))
                return -EFAULT;
+       if (count == 0)
+               return 0;
        ret = 0;
+       add_wait_queue(&s->midi.iwait, &wait);
        while (count > 0) {
                spin_lock_irqsave(&s->lock, flags);
                ptr = s->midi.ird;
@@ -1753,15 +1761,27 @@ static ssize_t cm_midi_read(struct file *file, char *buffer, size_t count, loff_
                if (cnt > count)
                        cnt = count;
                if (cnt <= 0) {
-                       if (file->f_flags & O_NONBLOCK)
-                               return ret ? ret : -EAGAIN;
-                       interruptible_sleep_on(&s->midi.iwait);
-                       if (signal_pending(current))
-                               return ret ? ret : -ERESTARTSYS;
+                       if (file->f_flags & O_NONBLOCK) 
+                       {
+                               if (!ret)
+                                       ret = -EAGAIN;
+                               break;
+                       }
+                       __set_current_state(TASK_INTERRUPTIBLE);
+                       schedule();
+                       if (signal_pending(current)) 
+                       {
+                               if (!ret)
+                                       ret = -ERESTARTSYS;
+                               break;
+                       }
                        continue;
                }
-               if (copy_to_user(buffer, s->midi.ibuf + ptr, cnt))
-                       return ret ? ret : -EFAULT;
+               if (copy_to_user(buffer, s->midi.ibuf + ptr, cnt)) {
+                       if (!ret)
+                               ret = -EFAULT;
+                       break;
+               }
                ptr = (ptr + cnt) % MIDIINBUF;
                spin_lock_irqsave(&s->lock, flags);
                s->midi.ird = ptr;
@@ -1770,13 +1790,17 @@ static ssize_t cm_midi_read(struct file *file, char *buffer, size_t count, loff_
                count -= cnt;
                buffer += cnt;
                ret += cnt;
+               break;
        }
+       __set_current_state(TASK_RUNNING);
+       remove_wait_queue(&s->midi.iwait, &wait);
        return ret;
 }
 
 static ssize_t cm_midi_write(struct file *file, const char *buffer, size_t count, loff_t *ppos)
 {
        struct cm_state *s = (struct cm_state *)file->private_data;
+       DECLARE_WAITQUEUE(wait, current);
        ssize_t ret;
        unsigned long flags;
        unsigned ptr;
@@ -1787,7 +1811,10 @@ static ssize_t cm_midi_write(struct file *file, const char *buffer, size_t count
                return -ESPIPE;
        if (!access_ok(VERIFY_READ, buffer, count))
                return -EFAULT;
+       if (count == 0)
+               return 0;
        ret = 0;
+       add_wait_queue(&s->midi.owait, &wait);
        while (count > 0) {
                spin_lock_irqsave(&s->lock, flags);
                ptr = s->midi.owr;
@@ -1800,15 +1827,25 @@ static ssize_t cm_midi_write(struct file *file, const char *buffer, size_t count
                if (cnt > count)
                        cnt = count;
                if (cnt <= 0) {
-                       if (file->f_flags & O_NONBLOCK)
-                               return ret ? ret : -EAGAIN;
-                       interruptible_sleep_on(&s->midi.owait);
-                       if (signal_pending(current))
-                               return ret ? ret : -ERESTARTSYS;
+                       if (file->f_flags & O_NONBLOCK) {
+                               if (!ret)
+                                       ret = -EAGAIN;
+                               break;
+                       }
+                       __set_current_state(TASK_INTERRUPTIBLE);
+                       schedule();
+                       if (signal_pending(current)) {
+                               if (!ret)
+                                       ret = -ERESTARTSYS;
+                               break;
+                       }
                        continue;
                }
-               if (copy_from_user(s->midi.obuf + ptr, buffer, cnt))
-                       return ret ? ret : -EFAULT;
+               if (copy_from_user(s->midi.obuf + ptr, buffer, cnt)) {
+                       if (!ret)
+                               ret = -EFAULT;
+                       break;
+               }
                ptr = (ptr + cnt) % MIDIOUTBUF;
                spin_lock_irqsave(&s->lock, flags);
                s->midi.owr = ptr;
@@ -1821,6 +1858,8 @@ static ssize_t cm_midi_write(struct file *file, const char *buffer, size_t count
                cm_handle_midi(s);
                spin_unlock_irqrestore(&s->lock, flags);
        }
+       __set_current_state(TASK_RUNNING);
+       remove_wait_queue(&s->midi.owait, &wait);
        return ret;
 }
 
@@ -1915,7 +1954,7 @@ static int cm_midi_release(struct inode *inode, struct file *file)
        VALIDATE_STATE(s);
 
        if (file->f_mode & FMODE_WRITE) {
-               current->state = TASK_INTERRUPTIBLE;
+               __set_current_state(TASK_INTERRUPTIBLE);
                add_wait_queue(&s->midi.owait, &wait);
                for (;;) {
                        spin_lock_irqsave(&s->lock, flags);
@@ -1927,7 +1966,7 @@ static int cm_midi_release(struct inode *inode, struct file *file)
                                break;
                        if (file->f_flags & O_NONBLOCK) {
                                remove_wait_queue(&s->midi.owait, &wait);
-                               current->state = TASK_RUNNING;
+                               set_current_state(TASK_RUNNING);
                                return -EBUSY;
                        }
                        tmo = (count * HZ) / 3100;
@@ -1935,7 +1974,7 @@ static int cm_midi_release(struct inode *inode, struct file *file)
                                printk(KERN_DEBUG "cm: midi timed out??\n");
                }
                remove_wait_queue(&s->midi.owait, &wait);
-               current->state = TASK_RUNNING;
+               set_current_state(TASK_RUNNING);
        }
        down(&s->open_sem);
        s->open_mode &= (~(file->f_mode << FMODE_MIDI_SHIFT)) & (FMODE_MIDI_READ|FMODE_MIDI_WRITE);
@@ -2345,11 +2384,6 @@ int __init init_cmpci(void)
 
 #ifdef MODULE
 
-#if 0
-MODULE_PARM(wavetable, "1-" __MODULE_STRING(NR_DEVICE) "i");
-MODULE_PARM_DESC(wavetable, "if 1 the wavetable synth is enabled");
-#endif
-
 MODULE_AUTHOR("ChenLi Tien, cltien@home.com");
 MODULE_DESCRIPTION("CMPCI Audio Driver");
 
index 85bde7d48fc3ba8a70dbe61fbbfbbba24160132a..e70c108411e55842a14648f377f1c9746b2d5eac 100644 (file)
@@ -187,7 +187,7 @@ static int open_dmap(struct audio_operations *adev, int mode, struct dma_buffpar
                printk(KERN_WARNING "Sound: DMA buffers not available\n");
                return -ENOSPC; /* Memory allocation failed during boot */
        }
-       if (sound_open_dma(dmap->dma, adev->name)) {
+       if (dmap->dma >= 0 && sound_open_dma(dmap->dma, adev->name)) {
                printk(KERN_WARNING "Unable to grab(2) DMA%d for the audio driver\n", dmap->dma);
                return -EBUSY;
        }
@@ -209,15 +209,16 @@ static void close_dmap(struct audio_operations *adev, struct dma_buffparms *dmap
 {
        unsigned long flags;
        
-       sound_close_dma(dmap->dma);
+       if (dmap->dma >= 0) {
+               sound_close_dma(dmap->dma);
+               flags=claim_dma_lock();
+               disable_dma(dmap->dma);
+               release_dma_lock(flags);
+       }
        if (dmap->flags & DMA_BUSY)
                dmap->dma_mode = DMODE_NONE;
        dmap->flags &= ~DMA_BUSY;
        
-       flags=claim_dma_lock();
-       disable_dma(dmap->dma);
-       release_dma_lock(flags);
-       
        if (sound_dmap_flag == DMAP_FREE_ON_CLOSE)
                sound_free_dmap(dmap);
 }
index 22464fbb3a91f1665221169b0426074dbd153249..341fb6f973bd7c0cceff742367f7965001a8df22 100644 (file)
@@ -108,12 +108,13 @@ History:
 #include <asm/amigaints.h>
 #endif /* CONFIG_AMIGA */
 #ifdef CONFIG_PPC
+#include <linux/adb.h>
+#include <linux/cuda.h>
+#include <linux/pmu.h>
 #include <asm/prom.h>
+#include <asm/machdep.h>
 #include <asm/io.h>
 #include <asm/dbdma.h>
-#include <asm/adb.h>
-#include <asm/cuda.h>
-#include <asm/pmu.h>
 #include "awacs_defs.h"
 #include <linux/nvram.h>
 #include <linux/vt_kern.h>
@@ -248,6 +249,9 @@ static int awacs_beep_state = 0;
 static short *beep_buf;
 static volatile struct dbdma_cmd *beep_dbdma_cmd;
 static void (*orig_mksound)(unsigned int, unsigned int);
+static int is_pbook_3400;
+static int is_pbook_G3;
+static unsigned char *macio_base;
 
 /* Burgundy functions */
 static void awacs_burgundy_wcw(unsigned addr,unsigned newval);
@@ -261,9 +265,9 @@ static int awacs_burgundy_read_mvolume(unsigned address);
 /*
  * Stuff for restoring after a sleep.
  */
-static int awacs_sleep_notify(struct notifier_block *, unsigned long, void *);
-struct notifier_block awacs_sleep_notifier = {
-       awacs_sleep_notify
+static int awacs_sleep_notify(struct pmu_sleep_notifier *self, int when);
+struct pmu_sleep_notifier awacs_sleep_notifier = {
+       awacs_sleep_notify, SLEEP_LEVEL_SOUND,
 };
 #endif /* CONFIG_PMAC_PBOOK */
 
@@ -3191,7 +3195,7 @@ static void PMacIrqCleanup(void)
                kfree(beep_buf);
        kd_mksound = orig_mksound;
 #ifdef CONFIG_PMAC_PBOOK
-       notifier_chain_unregister(&sleep_notifier_list, &awacs_sleep_notifier);
+       pmu_unregister_sleep_notifier(&awacs_sleep_notifier);
 #endif
 }
 #endif /* MODULE */
@@ -3600,14 +3604,15 @@ static void awacs_mksound(unsigned int hz, unsigned int ticks)
 /*
  * Save state when going to sleep, restore it afterwards.
  */
-static int awacs_sleep_notify(struct notifier_block *this,
-                             unsigned long code, void *x)
+static int awacs_sleep_notify(struct pmu_sleep_notifier *self, int when)
 {
-       switch (code) {
-       case PBOOK_SLEEP:
+       switch (when) {
+       case PBOOK_SLEEP_NOW:
                /* XXX we should stop any dma in progress when going to sleep
                   and restart it when we wake. */
                PMacSilence();
+               disable_irq(awacs_irq);
+               disable_irq(awacs_tx_irq);
                break;
        case PBOOK_WAKE:
                out_le32(&awacs->control, MASK_IEPC
@@ -3618,8 +3623,10 @@ static int awacs_sleep_notify(struct notifier_block *this,
                awacs_write(awacs_reg[2] | MASK_ADDR2);
                awacs_write(awacs_reg[4] | MASK_ADDR4);
                out_le32(&awacs->byteswap, sound.hard.format != AFMT_S16_BE);
+               enable_irq(awacs_irq);
+               enable_irq(awacs_tx_irq);
        }
-       return NOTIFY_DONE;
+       return PBOOK_SLEEP_OK;
 }
 #endif /* CONFIG_PMAC_PBOOK */
 
@@ -3844,7 +3851,7 @@ awacs_enable_amp(int spkr_vol)
        struct adb_request req;
 
        awacs_spkr_vol = spkr_vol;
-       if (adb_hardware != ADB_VIACUDA)
+       if (sys_ctrler != SYS_CTRLER_CUDA)
                return;
 
        /* turn on headphones */
@@ -4282,7 +4289,8 @@ static int mixer_ioctl(struct inode *inode, struct file *file, u_int cmd,
 
 #ifdef CONFIG_PPC
        case DMASND_AWACS:
-               if (awacs_revision<AWACS_BURGUNDY) { /* Different IOCTLS for burgundy*/
+               /* Different IOCTLS for burgundy*/
+               if (awacs_revision < AWACS_BURGUNDY) {
                        switch (cmd) {
                        case SOUND_MIXER_INFO: {
                            mixer_info info;
@@ -4349,7 +4357,8 @@ static int mixer_ioctl(struct inode *inode, struct file *file, u_int cmd,
                                IOCTL_IN(arg, data);
                                return IOCTL_OUT(arg, sound_set_volume(data));
                        case SOUND_MIXER_READ_SPEAKER:
-                               if (awacs_revision == 3 && adb_hardware == ADB_VIACUDA)
+                               if (awacs_revision == 3
+                                   && sys_ctrler == SYS_CTRLER_CUDA)
                                        data = awacs_spkr_vol;
                                else
                                        data = (awacs_reg[1] & MASK_CMUTE)? 0:
@@ -4357,7 +4366,8 @@ static int mixer_ioctl(struct inode *inode, struct file *file, u_int cmd,
                                return IOCTL_OUT(arg, data);
                        case SOUND_MIXER_WRITE_SPEAKER:
                                IOCTL_IN(arg, data);
-                               if (awacs_revision == 3 && adb_hardware == ADB_VIACUDA)
+                               if (awacs_revision == 3
+                                   && sys_ctrler == SYS_CTRLER_CUDA)
                                        awacs_enable_amp(data);
                                else
                                        data = awacs_volume_setter(data, 4, MASK_CMUTE, 6);
@@ -4960,7 +4970,7 @@ static int sq_open(struct inode *inode, struct file *file)
        }
 
 
-#ifdef CONFIG_PCC
+#ifdef CONFIG_PPC
        if (file->f_mode & FMODE_READ) {
                if (read_sq.busy) {
                        rc = -EBUSY;
@@ -5009,7 +5019,7 @@ err_out_nobusy:
                sq.busy = 0;
                WAKE_UP(sq.open_queue);
        }
-#ifdef CONFIG_PCC
+#ifdef CONFIG_PPC
        if (file->f_mode & FMODE_READ) {
                read_sq.busy = 0;
                WAKE_UP(read_sq.open_queue);
@@ -5564,9 +5574,33 @@ void __init dmasound_init(void)
                        printk(KERN_WARNING "dmasound: no memory for "
                               "beep buffer\n");
 #ifdef CONFIG_PMAC_PBOOK
-               notifier_chain_register(&sleep_notifier_list,
-                                       &awacs_sleep_notifier);
+               pmu_register_sleep_notifier(&awacs_sleep_notifier);
 #endif /* CONFIG_PMAC_PBOOK */
+
+               /* Powerbooks have odd ways of enabling inputs such as
+                  an expansion-bay CD or sound from an internal modem
+                  or a PC-card modem. */
+               if (machine_is_compatible("AAPL,3400/2400")) {
+                       is_pbook_3400 = 1;
+                       /*
+                        * Enable CD and PC-card sound inputs.
+                        * This is done by reading from address
+                        * f301a000, + 0x10 to enable the expansion-bay
+                        * CD sound input, + 0x80 to enable the PC-card
+                        * sound input.  The 0x100 seems to enable the
+                        * MESH and/or its SCSI bus drivers.
+                        */
+                       in_8((unsigned char *)0xf301a190);
+               } else if (machine_is_compatible("PowerBook1,1")) {
+                       np = find_devices("mac-io");
+                       if (np && np->n_addrs > 0) {
+                               is_pbook_G3 = 1;
+                               macio_base = (unsigned char *)
+                                       ioremap(np->addrs[0].address, 0x40);
+                               /* enable CD sound input */
+                               out_8(macio_base + 0x37, 3);
+                       }
+               }
        }
 #endif /* CONFIG_PPC */
 
index 303b5793d76b26d50872f4f53b4d9e83fb73394c..90ccaf342e9b6492fb2741b0345e5099f0ac1a22 100644 (file)
@@ -2113,14 +2113,14 @@ static int __init init_solo1(void)
                s->gpbase = RSRCADDRESS(pcidev, 4);
                s->irq = pcidev->irq;
                if (check_region(s->iobase, IOBASE_EXTENT) ||
-                   check_region(s->sbbase, SBBASE_EXTENT) ||
+                   check_region(s->sbbase+4, SBBASE_EXTENT-4) ||
                    check_region(s->ddmabase, DDMABASE_EXTENT) ||
                    check_region(s->mpubase, MPUBASE_EXTENT)) {
                        printk(KERN_ERR "solo1: io ports in use\n");
                        goto err_region;
                }
                request_region(s->iobase, IOBASE_EXTENT, "ESS Solo1");
-               request_region(s->sbbase, SBBASE_EXTENT, "ESS Solo1");
+               request_region(s->sbbase+4, SBBASE_EXTENT-4, "ESS Solo1");  /* allow OPL3 synth module */
                request_region(s->ddmabase, DDMABASE_EXTENT, "ESS Solo1");
                request_region(s->mpubase, MPUBASE_EXTENT, "ESS Solo1");
                if (request_irq(s->irq, solo1_interrupt, SA_SHIRQ, "ESS Solo1", s)) {
@@ -2192,7 +2192,7 @@ static int __init init_solo1(void)
                free_irq(s->irq, s);
        err_irq:
                release_region(s->iobase, IOBASE_EXTENT);
-               release_region(s->sbbase, SBBASE_EXTENT);
+               release_region(s->sbbase+4, SBBASE_EXTENT-4);
                release_region(s->ddmabase, DDMABASE_EXTENT);
                release_region(s->mpubase, MPUBASE_EXTENT);
        err_region:
@@ -2222,7 +2222,7 @@ static void __exit cleanup_solo1(void)
                pci_write_config_word(s->pcidev, 0x60, 0); /* turn off DDMA controller address space */
                free_irq(s->irq, s);
                release_region(s->iobase, IOBASE_EXTENT);
-               release_region(s->sbbase, SBBASE_EXTENT);
+               release_region(s->sbbase+4, SBBASE_EXTENT-4);
                release_region(s->ddmabase, DDMABASE_EXTENT);
                release_region(s->mpubase, MPUBASE_EXTENT);
                unregister_sound_dsp(s->dev_audio);
index 09a9f7249621838c714e58f36e318b6c93bc904d..30f1713f9f09698157e13663272267049de4d476 100644 (file)
@@ -1,57 +1,57 @@
-dep_tristate 'ACI mixer (miroPCM12)' CONFIG_ACI_MIXER $CONFIG_SOUND_OSS
+dep_tristate '  ACI mixer (miroPCM12)' CONFIG_ACI_MIXER $CONFIG_SOUND_OSS
 
-dep_tristate 'AWE32 synth' CONFIG_AWE32_SYNTH $CONFIG_SOUND_OSS
+dep_tristate '  AWE32 synth' CONFIG_AWE32_SYNTH $CONFIG_SOUND_OSS
 
 if [ "$CONFIG_SOUND_OSS" = "y" -o "$CONFIG_SOUND" = "m" ]; then
-    dep_tristate 'Gallant Audio Cards (SC-6000 and SC-6600 based)' CONFIG_AEDSP16 $CONFIG_SOUND_OSS
-    if [ "$CONFIG_AEDSP16" = "y" -o "$CONFIG_AEDSP16" = "m" ]; then
-       hex '  I/O base for Audio Excel DSP 16 220 or 240' CONFIG_AEDSP16_BASE 220
-        hex 'I/O base for MPU401 Check from manual of the card' CONFIG_MPU_BASE 330
-    fi
+   dep_tristate '  Gallant Audio Cards (SC-6000 and SC-6600 based)' CONFIG_AEDSP16 $CONFIG_SOUND_OSS
+   if [ "$CONFIG_AEDSP16" = "y" -o "$CONFIG_AEDSP16" = "m" ]; then
+      hex 'I/O base for Audio Excel DSP 16 220 or 240' CONFIG_AEDSP16_BASE 220
+      hex 'I/O base for MPU401 Check from manual of the card' CONFIG_MPU_BASE 330
+   fi
 
-    if [ "$CONFIG_AEDSP16" = "y" -o "$CONFIG_AEDSP16" = "m" ]; then
-       comment 'SC-6600 Audio Cards have no jumper switches at all'
-       bool 'SC-6600 based audio cards (new Audio Excel DSP 16)' CONFIG_SC6600
-       if [ "$CONFIG_SC6600" = "y" ]; then
-           comment 'SC-6600 specific configuration'
-           bool 'Activate SC-6600 Joystick Interface' CONFIG_SC6600_JOY
-           int 'SC-6600 CDROM Interface (4=None, 3=IDE, 1=Panasonic, 0=?Sony?)' CONFIG_SC6600_CDROM 4
-           hex 'SC-6600 CDROM Interface I/O Address' CONFIG_SC6600_CDROMBASE 0
-       fi
+   if [ "$CONFIG_AEDSP16" = "y" -o "$CONFIG_AEDSP16" = "m" ]; then
+      comment 'SC-6600 Audio Cards have no jumper switches at all'
+      bool '    SC-6600 based audio cards (new Audio Excel DSP 16)' CONFIG_SC6600
+      if [ "$CONFIG_SC6600" = "y" ]; then
+        comment 'SC-6600 specific configuration'
+        bool '      Activate SC-6600 Joystick Interface' CONFIG_SC6600_JOY
+        int 'SC-6600 CDROM Interface (4=None, 3=IDE, 1=Panasonic, 0=?Sony?)' CONFIG_SC6600_CDROM 4
+        hex 'SC-6600 CDROM Interface I/O Address' CONFIG_SC6600_CDROMBASE 0
+      fi
 
-       if [ "$CONFIG_SOUND_SB" = "y" -o "$CONFIG_SOUND_SB" = "m" ]; then
-           if [ "$CONFIG_AEDSP16_MSS" != "y" ]; then
-               bool 'Audio Excel DSP 16 (SBPro emulation)' CONFIG_AEDSP16_SBPRO
-               if [ "$CONFIG_AEDSP16_SBPRO" = "y" ]; then
-                   comment 'Audio Excel DSP 16 [Sound Blaster Pro]'
-                   hex 'I/O base for Audio Excel DSP 16 220, 240' CONFIG_AEDSP16_BASE $CONFIG_SB_BASE 220
-                   int 'Audio Excel DSP 16 IRQ 5, 7, 9, 10, 11' CONFIG_AEDSP16_SB_IRQ $CONFIG_SB_IRQ 5
-                   int 'Audio Excel DSP 16 DMA 0, 1 or 3' CONFIG_AEDSP16_SB_DMA $CONFIG_SB_DMA 0
-               fi
+      if [ "$CONFIG_SOUND_SB" = "y" -o "$CONFIG_SOUND_SB" = "m" ]; then
+        if [ "$CONFIG_AEDSP16_MSS" != "y" ]; then
+           bool 'Audio Excel DSP 16 (SBPro emulation)' CONFIG_AEDSP16_SBPRO
+           if [ "$CONFIG_AEDSP16_SBPRO" = "y" ]; then
+              comment 'Audio Excel DSP 16 [Sound Blaster Pro]'
+              hex 'I/O base for Audio Excel DSP 16 220, 240' CONFIG_AEDSP16_BASE $CONFIG_SB_BASE 220
+              int 'Audio Excel DSP 16 IRQ 5, 7, 9, 10, 11' CONFIG_AEDSP16_SB_IRQ $CONFIG_SB_IRQ 5
+              int 'Audio Excel DSP 16 DMA 0, 1 or 3' CONFIG_AEDSP16_SB_DMA $CONFIG_SB_DMA 0
            fi
-       fi
+        fi
+      fi
 
-       if [ "$CONFIG_SOUND_MSS" = "y" -o "$CONFIG_SOUND_MSS" = "m" ]; then
-           if [ "$CONFIG_AEDSP16_SBPRO" != "y" ]; then
-               bool 'Audio Excel DSP 16 (MSS emulation)' CONFIG_AEDSP16_MSS
-               if [ "$CONFIG_AEDSP16_MSS" = "y" ]; then
-                   comment 'Audio Excel DSP 16 [Microsoft Sound System]'
-                   hex 'I/O base for Audio Excel DSP 16 220 or 240' CONFIG_AEDSP16_BASE 220
-                   int 'Audio Excel DSP 16 IRQ 5, 7, 9, 10, 11' CONFIG_AEDSP16_MSS_IRQ $CONFIG_MSS_IRQ 5
-                   int 'Audio Excel DSP 16 DMA 0, 1 or 3' CONFIG_AEDSP16_MSS_DMA $CONFIG_MSS_DMA 1
-               fi
+      if [ "$CONFIG_SOUND_MSS" = "y" -o "$CONFIG_SOUND_MSS" = "m" ]; then
+        if [ "$CONFIG_AEDSP16_SBPRO" != "y" ]; then
+           bool '    Audio Excel DSP 16 (MSS emulation)' CONFIG_AEDSP16_MSS
+           if [ "$CONFIG_AEDSP16_MSS" = "y" ]; then
+              comment 'Audio Excel DSP 16 [Microsoft Sound System]'
+              hex 'I/O base for Audio Excel DSP 16 220 or 240' CONFIG_AEDSP16_BASE 220
+              int 'Audio Excel DSP 16 IRQ 5, 7, 9, 10, 11' CONFIG_AEDSP16_MSS_IRQ $CONFIG_MSS_IRQ 5
+              int 'Audio Excel DSP 16 DMA 0, 1 or 3' CONFIG_AEDSP16_MSS_DMA $CONFIG_MSS_DMA 1
            fi
-       fi
+        fi
+      fi
 
-       if [ "$CONFIG_SOUND_MPU401" = "y" -o "$CONFIG_SOUND_MPU401" = "m" ]; then
-           bool 'Audio Excel DSP 16 (MPU401 emulation)' CONFIG_AEDSP16_MPU401
-           if [ "$CONFIG_AEDSP16_MPU401" = "y" ]; then
-               comment 'Audio Excel DSP 16 [MPU-401]'
-               if [ "$CONFIG_AEDSP16_SBPRO" != "y" -a "$CONFIG_AEDSP16_MSS" != "y" ]; then
-                   hex 'I/O base for Audio Excel DSP 16 220 or 240' CONFIG_AEDSP16_BASE 220
-               fi
-               int 'MPU401 IRQ for Audio Excel DSP 16 5, 7, 9, 10 or 0 (disable)' CONFIG_AEDSP16_MPU_IRQ $CONFIG_MPU_IRQ
+      if [ "$CONFIG_SOUND_MPU401" = "y" -o "$CONFIG_SOUND_MPU401" = "m" ]; then
+        bool 'Audio Excel DSP 16 (MPU401 emulation)' CONFIG_AEDSP16_MPU401
+        if [ "$CONFIG_AEDSP16_MPU401" = "y" ]; then
+           comment 'Audio Excel DSP 16 [MPU-401]'
+           if [ "$CONFIG_AEDSP16_SBPRO" != "y" -a "$CONFIG_AEDSP16_MSS" != "y" ]; then
+              hex 'I/O base for Audio Excel DSP 16 220 or 240' CONFIG_AEDSP16_BASE 220
            fi
-       fi
-    fi
+           int 'MPU401 IRQ for Audio Excel DSP 16 5, 7, 9, 10 or 0 (disable)' CONFIG_AEDSP16_MPU_IRQ $CONFIG_MPU_IRQ
+        fi
+      fi
+   fi
 fi
index 9d64eaa1e36054ae72d02a75381087ffa55c8c06..e8ed6ceb5d81855838910afc36e55ee26bcbdf4e 100644 (file)
@@ -1,6 +1,12 @@
+#if defined(CONFIG_ACI_MIXER) || defined(CONFIG_ACI_MIXER_MODULE)
 extern int aci_implied_cmd(unsigned char opcode);
 extern int aci_write_cmd(unsigned char opcode, unsigned char parameter);
 extern int aci_write_cmd_d(unsigned char opcode, unsigned char parameter, unsigned char parameter2);
 extern int aci_read_cmd(unsigned char opcode, int length, unsigned char *parameter);
 extern int aci_indexed_cmd(unsigned char opcode, unsigned char index, unsigned char *parameter);
+#else
 
+#error Compiling a driver that needs the ACI-mixer but ACI-mixer support is not configured
+
+#endif
index 3f9250bcbe9a3784a8466b56a7bc9cfe4c52c21c..e0ed9e33acb948f7a214bf625fc895f371a6c85c 100644 (file)
@@ -24,7 +24,9 @@
  *     Heavily modified by Zach Brown <zab@redhat.com> based on lunch
  *     with ESS engineers.  Many thanks to Howard Kim for providing 
  *     contacts and hardware.  Honorable mention goes to Eric 
- *     Brombaugh for the BOB routines and nice hacking in general.
+ *     Brombaugh for the BOB routines and great record code hacking.
+ *     Best regards to the proprietors of Hack Central for fine
+ *     lodging.
  *
  *  Supported devices:
  *  /dev/dsp0-7    standard /dev/dsp device, (mostly) OSS compatible
  *  Driver Operation
  *
  *     We only drive the APU/Wavecache as typical DACs and drive the
- *     mixers in the codecs.  There are 64 APUs.  We assign 4 to each
- *     /dev/dsp? device.  2 channels for both in and out.
+ *     mixers in the codecs.  There are 64 APUs.  We assign 6 to each
+ *     /dev/dsp? device.  2 channels for output, and 4 channels for
+ *     input.
  *
- *     For output we maintain a ring buffer of data that we are dmaing
+ *     For output we maintain a ring buffer of data that we are DMAing
  *     to the card.  In mono operation this is nice and easy.  When
  *     we receive data we tack it onto the ring buffer and make sure
  *     the APU assigned to it is playing over the data.  When we fill
  *     mono encoded data.  This requires us to split the input from
  *     the client and complicates the buffer maths tremendously.  Ick.
  *
- *     Once input is actually written, it will be worth pointing out
- *     that only 44/16 input actually works.
+ *     This also pollutes the recording paths as well.  We have to use
+ *     2 l/r incoming APUs that are fixed at 16bit/48khz.  We then pipe
+ *     these through 2 rate converion apus that mix them down to the
+ *     requested frequency and write them to memory through the wavecache.
+ *     We also apparently need a 512byte region thats used as temp space 
+ *     between the incoming APUs and the rate converters.
  *
+ *     The wavecache makes our life even more fun.  First off, it can
+ *     only address the first 28 bits of PCI address space, making it
+ *     useless on quite a few architectures.  Secondly, its insane.
+ *     It can only fetch from 4 regions of PCI space, each 2 meg in length
+ *     and 4k aligned.  It then uses high bits of the address in the APU
+ *     to decide which buffer to use, but as far as I can tell can only
+ *     choose between 2 of the 4 available when you really want to hit
+ *     PCI space.  So all the memory we're touching has to fit in 2 regions
+ *     of 4 meg under 256meg.  So much for dynamic allocation of multiple
+ *     /dev/dsps.  So we force only 1 /dev/dsp, allocate both its read
+ *     and write buffers contiguously at open(), and allocate the weird
+ *     mixbuf input APU buffers on another page.  The first 2meg region
+ *     goes to the input/output buffers, and the second region goes to
+ *     the weird mixbuf.   Long term fixes?  Get an allocator that lets
+ *     us try and allocate from zones.  Alleviate pain by putting the mixbuf
+ *     in onboard ram rather than in system memory.  Buy a real sound card.
+ *     
  * History
+ *  v0.06 - Sep 20 1999 - Zach Brown <zab@redhat.com>
+ *     fix wavecache thinkos.  limit to 1 /dev/dsp.
+ *     eric is wearing his thinking toque this week.
+ *             spotted apu mode bugs and gain ramping problem
+ *     don't touch weird mixer regs, make recmask optional
+ *     fixed igain inversion, defaults for mixers, clean up rec_start
+ *     make mono recording work.
+ *     report subsystem stuff, please send reports.
+ *     littles: parallel out, amp now
+ *  v0.05 - Sep 17 1999 - Zach Brown <zab@redhat.com>
+ *     merged and fixed up Eric's initial recording code
+ *     munged format handling to catch misuse, needs rewrite.
+ *     revert ring bus init, fixup shared int, add pci busmaster setting
+ *     fix mixer oss interface, fix mic mute and recmask
+ *     mask off unsupported mixers, reset with all 1s, modularize defaults
+ *     make sure bob is running while we need it
+ *     got rid of device limit, initial minimal apm hooks
+ *     pull out dead code/includes, only allow multimedia/audio maestros
  *  v0.04 - Sep 01 1999 - Zach Brown <zab@redhat.com>
  *     copied memory leak fix from sonicvibes driver
  *     different ac97 reset, play with 2.0 ac97, simplify ring bus setup
- *     bob freq code, region sanity, jitter sync fix; all from eric 
+ *     bob freq code, region sanity, jitter sync fix; all from Eric 
  *
  * TODO
- *     recording is horribly broken
- *     codec timeouts (we're way under the example source's 20ms(!?))
  *     some people get indir reg timeouts?
- *     mixer interface broken?
  *     anyone have a pt101 codec?
- *     ess's ac97 codec (es1921) doesn't work
  *     mmap(), but beware stereo encoding nastiness.
  *     actually post pci writes
- *     check for bogon bios set irq/io windows
- *     compare our pci setup to the dos one, explains register timeouts?
  *     look really hard at the apu/bob/dma buffer code paths.
+ *     fix bob frequency
+ *     do smart things with ac97 2.0 bits.
+ *     fix wavecache so multiple /dev/dsps work
+ *     test different sized writes
+ *     fixup latencies ?
+ *     get apm save/restore working?
+ *     allocate dma bounce page
+ *     start_adc is called way too often
+ *     sort out 0x34->0x36 crap in init
+ *     wavecache needs to be looked at, multiple
+ *             dsps and recording seem confused
  *
  *     the entire issue of smp safety needs to be looked at.  cli() needs
  *     to be replaced with spinlock_irqsave, being very careful of call
  *     paths avoiding deadlock.  if lock hold times are quick just
  *     use one big ass per device spinlock.. 
+ *
+ *     apm is kind of a mess.  I doubt we can rely on the machine keeping
+ *     power to the maestro/codecs when we suspend.  This means we have
+ *     to keep full mixer/wavecache/apu state.  bother.  if we could rely 
+ *     on the chips being powered we would simply turn down the apus and
+ *     bob and it would all just work out.  That last bit I've implemented
+ *     before I realized how much it was all going to suck :).
+ *     
+ *     it also would be fun to have a mode that would not use pci dma at all
+ *     but would copy into the wavecache on board memory and use that 
+ *     on architectures that don't like the maestro's pci dma ickiness 
+ *     throughout.
  */
 
 /*****************************************************************************/
 
       
-#ifdef MODULE
 #include <linux/module.h>
-#ifdef MODVERSIONS
-#include <linux/modversions.h>
-#endif
-#endif
-
 #include <linux/version.h>
 #include <linux/string.h>
 #include <linux/ctype.h>
 #include <asm/uaccess.h>
 #include <asm/hardirq.h>
 
+#ifdef CONFIG_APM
+#include <linux/apm_bios.h>
+#endif
+
 #include "maestro.h"
-#include "maestro_tables.h"
 
 /* --------------------------------------------------------------------- */
 
@@ -137,25 +193,30 @@ static int debug=0;
 #endif
 
 /* --------------------------------------------------------------------- */
-
-#define DRIVER_VERSION "0.04"
+#define DRIVER_VERSION "0.06"
 
 #ifndef PCI_VENDOR_ESS
 #define PCI_VENDOR_ESS                 0x125D
 #define PCI_DEVICE_ID_ESS_ESS1968      0x1968          /* Maestro 2    */
 #define PCI_DEVICE_ID_ESS_ESS1978              0x1978          /* Maestro 2E   */
 
-#define PCI_VENDOR_ESS_OLD             0x1285          /* vendor id for maestro 1 */
+#define PCI_VENDOR_ESS_OLD             0x1285          /* Platform Tech, 
+                                               the people the maestro 
+                                               was bought from */
 #define PCI_DEVICE_ID_ESS_ESS0100      0x0100          /* maestro 1 */
 #endif /* PCI_VENDOR_ESS */
 
 #define ESS_CHAN_HARD          0x100
 
-#define ESS_CFMT_STEREO     0x01
-#define ESS_CFMT_16BIT      0x02
-#define ESS_CFMT_MASK       0x03
-#define ESS_CFMT_ASHIFT     0   
-#define ESS_CFMT_CSHIFT     4
+#undef CONFIG_APM /* see notes above */
+
+/* changed so that I could actually find all the
+       references and fix them up.  its a little more readable now. */
+#define ESS_FMT_STEREO 0x01
+#define ESS_FMT_16BIT  0x02
+#define ESS_FMT_MASK   0x03
+#define ESS_DAC_SHIFT  0   
+#define ESS_ADC_SHIFT  4
 
 #define ESS_ENABLE_PE          1
 #define ESS_ENABLE_RE          2
@@ -166,6 +227,10 @@ static int debug=0;
 #define DAC_RUNNING            1
 #define ADC_RUNNING            2
 
+#define NR_DSPS                1 /* our wavecache setup demands this. */
+
+#define SND_DEV_DSP16   5 
+
 static const unsigned sample_size[] = { 1, 2, 2, 4 };
 static const unsigned sample_shift[] = { 0, 1, 1, 2 };
 
@@ -181,16 +246,15 @@ static const char *card_names[]={
        [TYPE_MAESTRO2E] = "ESS Maestro 2E"
 };
 
-#define SND_DEV_DSP16   5 
 
 /* --------------------------------------------------------------------- */
 
 struct ess_state {
        unsigned int magic;
        /* FIXME: we probably want submixers in here, but only one record pair */
-       u8 apu[4];              /* Left, Right, Left In, Right In */
-       u8 apu_mode[4];         /* Running mode for this APU */
-       u8 apu_pan[4];          /* Panning setup for this APU */
+       u8 apu[6];              /* l/r output, l/r intput converters, l/r input apus */
+       u8 apu_mode[6];         /* Running mode for this APU */
+       u8 apu_pan[6];          /* Panning setup for this APU */
        struct ess_card *card;  /* Card info */
        /* wave stuff */
        unsigned int rateadc, ratedac;
@@ -209,6 +273,8 @@ struct ess_state {
                unsigned buforder;
                unsigned numfrag;
                unsigned fragshift;
+               /* XXX zab - swptr only in here so that it can be referenced by
+                       clear_advance, as far as I can tell :( */
                unsigned hwptr, swptr;
                unsigned total_bytes;
                int count;
@@ -227,6 +293,10 @@ struct ess_state {
                unsigned subdivision;
                u16 base;               /* Offset for ptr */
        } dma_dac, dma_adc;
+
+
+       /* pointer to each dsp?s piece of the apu->src buffer page */
+       void *mixbuf;
 };
        
 struct ess_card {
@@ -247,18 +317,30 @@ struct ess_card {
                int stereo_mixers;
                int record_sources;
                /* the caller must guarantee arg sanity before calling these */
-               int (*read_mixer)(struct ess_card *card, int index);
-               void (*write_mixer)(struct ess_card *card,int mixer, int vol);
+/*             int (*read_mixer)(struct ess_card *card, int index);*/
+               void (*write_mixer)(struct ess_card *card,int mixer, unsigned int left,unsigned int right);
                int (*recmask_io)(struct ess_card *card,int rw,int mask);
+               unsigned int mixer_state[SOUND_MIXER_NRDEVICES];
        } mix;
        
-       struct ess_state channels[8];
+       struct ess_state channels[NR_DSPS];
        u16 maestro_map[32];    /* Register map */
+#ifdef CONFIG_APM
+       /* we have to store this junk so that we can come back from a
+               suspend */
+       u16 apu_map[64][16];    /* contents of apu regs */
+#endif
+
+       /* 1 page of DMA-able memory for mixer apu buffers,
+               shared amongst dsp?s. */
+       void *mixpage;
 
        /* hardware resources */
        u32 iobase;
        u32 irq;
 
+       int bob_freq;
+       char bob_running;
 };
 
 extern __inline__ unsigned ld2(unsigned int x)
@@ -343,7 +425,7 @@ static u16 maestro_ac97_get(int io, u8 cmd)
                sanity--;
                if(!sanity)
                {
-                       printk(KERN_ERR "maestro: ac97 codec read timeout.\n");
+                       printk(KERN_ERR "maestro: ac97 codec timeout reading 0x%x.\n",cmd);
                        return 0;
                }
        }
@@ -352,6 +434,219 @@ static u16 maestro_ac97_get(int io, u8 cmd)
        return data;
 }
 
+/* OSS interface to the ac97s.. */
+
+#define AC97_STEREO_MASK (SOUND_MASK_VOLUME|\
+       SOUND_MASK_PCM|SOUND_MASK_LINE|SOUND_MASK_CD|\
+       SOUND_MASK_VIDEO|SOUND_MASK_LINE1|SOUND_MASK_IGAIN)
+
+#define AC97_SUPPORTED_MASK (AC97_STEREO_MASK | \
+       SOUND_MASK_BASS|SOUND_MASK_TREBLE|SOUND_MASK_MIC|\
+       SOUND_MASK_SPEAKER)
+
+#define AC97_RECORD_MASK (SOUND_MASK_MIC|\
+       SOUND_MASK_CD| SOUND_MASK_VIDEO| SOUND_MASK_LINE1| SOUND_MASK_LINE|\
+       SOUND_MASK_PHONEIN)
+
+#define supported_mixer(CARD,FOO) ( CARD->mix.supported_mixers & (1<<FOO) )
+
+/* this table has default mixer values for all OSS mixers.
+       be sure to fill it in if you add oss mixers
+       to anyone's supported mixer defines */
+
+/* possible __init */
+static struct mixer_defaults {
+       int mixer;
+       unsigned int value;
+} mixer_defaults[SOUND_MIXER_NRDEVICES] = {
+               /* all values 0 -> 100 in bytes */
+       {SOUND_MIXER_VOLUME,    0x3232},
+       {SOUND_MIXER_BASS,      0x3232},
+       {SOUND_MIXER_TREBLE,    0x3232},
+       {SOUND_MIXER_SPEAKER,   0x3232},
+       {SOUND_MIXER_MIC,       0x3232},
+       {SOUND_MIXER_LINE,      0x3232},
+       {SOUND_MIXER_CD,        0x3232},
+       {SOUND_MIXER_VIDEO,     0x3232},
+       {SOUND_MIXER_LINE1,     0x3232},
+       {SOUND_MIXER_PCM,       0x3232},
+       {SOUND_MIXER_IGAIN,     0x3232},
+       {-1,0}
+};
+       
+static struct ac97_mixer_hw {
+       unsigned char offset;
+       int scale;
+} ac97_hw[SOUND_MIXER_NRDEVICES]= {
+       [SOUND_MIXER_VOLUME]    =       {0x02,63},
+       [SOUND_MIXER_BASS]      =       {0x08,15},
+       [SOUND_MIXER_TREBLE]    =       {0x08,15},
+       [SOUND_MIXER_SPEAKER]   =       {0x0a,15},
+       [SOUND_MIXER_MIC]       =       {0x0e,31},
+       [SOUND_MIXER_LINE]      =       {0x10,31},
+       [SOUND_MIXER_CD]        =       {0x12,31},
+       [SOUND_MIXER_VIDEO]     =       {0x14,31},
+       [SOUND_MIXER_LINE1]     =       {0x16,31},
+       [SOUND_MIXER_PCM]       =       {0x18,31},
+       [SOUND_MIXER_IGAIN]     =       {0x1c,31}
+};
+
+#if 0 /* *shrug* removed simply because we never used it.
+               feel free to implement again if needed */
+
+/* reads the given OSS mixer from the ac97
+       the caller must have insured that the ac97 knows
+       about that given mixer, and should be holding a
+       spinlock for the card */
+static int ac97_read_mixer(struct ess_card *card, int mixer) 
+{
+       u16 val;
+       int ret=0;
+       struct ac97_mixer_hw *mh = &ac97_hw[mixer];
+
+       val = maestro_ac97_get(card->iobase , mh->offset);
+
+       if(AC97_STEREO_MASK & (1<<mixer)) {
+               /* nice stereo mixers .. */
+               int left,right;
+
+               left = (val >> 8)  & 0x7f;
+               right = val  & 0x7f;
+
+               if (mixer == SOUND_MIXER_IGAIN) {
+                       right = (right * 100) / mh->scale;
+                       left = (left * 100) / mh->scale;
+               else {
+                       right = 100 - ((right * 100) / mh->scale);
+                       left = 100 - ((left * 100) / mh->scale);
+               }
+
+               ret = left | (right << 8);
+       } else if (mixer == SOUND_MIXER_SPEAKER) {
+               ret = 100 - ((((val & 0x1e)>>1) * 100) / mh->scale);
+       } else if (mixer == SOUND_MIXER_MIC) {
+               ret = 100 - (((val & 0x1f) * 100) / mh->scale);
+       /*  the low bit is optional in the tone sliders and masking
+               it lets is avoid the 0xf 'bypass'.. */
+       } else if (mixer == SOUND_MIXER_BASS) {
+               ret = 100 - ((((val >> 8) & 0xe) * 100) / mh->scale);
+       } else if (mixer == SOUND_MIXER_TREBLE) {
+               ret = 100 - (((val & 0xe) * 100) / mh->scale);
+       }
+
+       M_printk("read mixer %d (0x%x) %x -> %x\n",mixer,mh->offset,val,ret);
+
+       return ret;
+}
+#endif
+
+/* write the OSS encoded volume to the given OSS encoded mixer,
+       again caller's job to make sure all is well in arg land,
+       call with spinlock held */
+static void ac97_write_mixer(struct ess_card *card,int mixer, unsigned int left, unsigned int right)
+{
+       u16 val=0;
+       struct ac97_mixer_hw *mh = &ac97_hw[mixer];
+
+       M_printk("wrote mixer %d (0x%x) %d,%d",mixer,mh->offset,left,right);
+
+       if(AC97_STEREO_MASK & (1<<mixer)) {
+               /* stereo mixers */
+
+
+               if (mixer == SOUND_MIXER_IGAIN) {
+                       right = (right * mh->scale) / 100;
+                       left = (left * mh->scale) / 100;
+               } else {
+                       right = ((100 - right) * mh->scale) / 100;
+                       left = ((100 - left) * mh->scale) / 100;
+               }
+
+               val = (left << 8) | right;
+
+       } else if (mixer == SOUND_MIXER_SPEAKER) {
+               val = (((100 - left) * mh->scale) / 100) << 1;
+       } else if (mixer == SOUND_MIXER_MIC) {
+               val = maestro_ac97_get(card->iobase , mh->offset) & ~0x801f;
+               val |= (((100 - left) * mh->scale) / 100);
+       /*  the low bit is optional in the tone sliders and masking
+               it lets is avoid the 0xf 'bypass'.. */
+       } else if (mixer == SOUND_MIXER_BASS) {
+               val = maestro_ac97_get(card->iobase , mh->offset) & ~0x0f00;
+               val |= ((((100 - left) * mh->scale) / 100) << 8) & 0x0e00;
+       } else if (mixer == SOUND_MIXER_TREBLE)  {
+               val = maestro_ac97_get(card->iobase , mh->offset) & ~0x000f;
+               val |= (((100 - left) * mh->scale) / 100) & 0x000e;
+       }
+
+       maestro_ac97_set(card->iobase , mh->offset, val);
+       
+       M_printk(" -> %x\n",val);
+}
+
+/* the following tables allow us to go from 
+       OSS <-> ac97 quickly. */
+
+enum ac97_recsettings {
+       AC97_REC_MIC=0,
+       AC97_REC_CD,
+       AC97_REC_VIDEO,
+       AC97_REC_AUX,
+       AC97_REC_LINE,
+       AC97_REC_STEREO, /* combination of all enabled outputs..  */
+       AC97_REC_MONO,        /*.. or the mono equivalent */
+       AC97_REC_PHONE        
+};
+
+static unsigned int ac97_rm2oss[] = {
+       [AC97_REC_MIC] = SOUND_MIXER_MIC, 
+       [AC97_REC_CD] = SOUND_MIXER_CD, 
+       [AC97_REC_VIDEO] = SOUND_MIXER_VIDEO, 
+       [AC97_REC_AUX] = SOUND_MIXER_LINE1, 
+       [AC97_REC_LINE] = SOUND_MIXER_LINE, 
+       [AC97_REC_PHONE] = SOUND_MIXER_PHONEIN
+};
+
+/* indexed by bit position */
+static unsigned int ac97_oss_rm[] = {
+       [SOUND_MIXER_MIC] = AC97_REC_MIC,
+       [SOUND_MIXER_CD] = AC97_REC_CD,
+       [SOUND_MIXER_VIDEO] = AC97_REC_VIDEO,
+       [SOUND_MIXER_LINE1] = AC97_REC_AUX,
+       [SOUND_MIXER_LINE] = AC97_REC_LINE,
+       [SOUND_MIXER_PHONEIN] = AC97_REC_PHONE
+};
+       
+/* read or write the recmask 
+       the ac97 can really have left and right recording
+       inputs independantly set, but OSS doesn't seem to 
+       want us to express that to the user. 
+       the caller guarantees that we have a supported bit set,
+       and they must be holding the card's spinlock */
+static int ac97_recmask_io(struct ess_card *card, int rw, int mask) 
+{
+       unsigned int val;
+
+       if (rw) {
+               /* read it from the card */
+               val = maestro_ac97_get(card->iobase, 0x1a) & 0x7;
+               return ac97_rm2oss[val];
+       }
+
+       /* else, write the first set in the mask as the
+               output */       
+
+       val = ffs(mask); 
+       val = ac97_oss_rm[val-1];
+       val |= val << 8;  /* set both channels */
+
+       M_printk("maestro: setting ac97 recmask to 0x%x\n",val);
+
+       maestro_ac97_set(card->iobase,0x1a,val);
+
+       return 0;
+};
+
 /*
  *     The Maestro can be wired to a standard AC97 compliant codec
  *     (see www.intel.com for the pdf's on this), or to a PT101 codec
@@ -360,10 +655,16 @@ static u16 maestro_ac97_get(int io, u8 cmd)
  *     The PT101 setup is untested.
  */
  
-static u16 maestro_ac97_init(int iobase)
+static u16 maestro_ac97_init(struct ess_card *card, int iobase)
 {
-       int val, seid, caps;
-       u16 vend1, vend2;
+       u16 vend1, vend2, caps;
+
+       card->mix.supported_mixers = AC97_SUPPORTED_MASK;
+       card->mix.stereo_mixers = AC97_STEREO_MASK;
+       card->mix.record_sources = AC97_RECORD_MASK;
+/*     card->mix.read_mixer = ac97_read_mixer;*/
+       card->mix.write_mixer = ac97_write_mixer;
+       card->mix.recmask_io = ac97_recmask_io;
 
 #if 0  /* this needs to be thought about harder */
        /* aim at the second codec */
@@ -390,29 +691,37 @@ static u16 maestro_ac97_init(int iobase)
 #endif
 
        /* perform codec reset */
-       maestro_ac97_set(iobase, 0x00, 0x0000);
+       maestro_ac97_set(iobase, 0x00, 0xFFFF);
 
-       /* should make sure we're ac97 2.1? */
        vend1 = maestro_ac97_get(iobase, 0x7c);
        vend2 = maestro_ac97_get(iobase, 0x7e);
 
-       val = maestro_ac97_get(iobase, 0x00);
-       seid = val >> 8;
-       caps = val & 255;
+       caps = maestro_ac97_get(iobase, 0x00);
 
-       printk(KERN_INFO "maestro: AC97 Codec detected: v: 0x%2x%2x 3d: 0x%x caps: 0x%x\n",
-               vend1,vend2,seid, caps);
+       printk(KERN_INFO "maestro: AC97 Codec detected: v: 0x%2x%2x caps: 0x%x pwr: 0x%x\n",
+               vend1,vend2,caps,maestro_ac97_get(iobase,0x26) & 0xf);
+
+       if (! (caps & 0x4) ) {
+               /* no bass/treble nobs */
+               card->mix.supported_mixers &= ~(SOUND_MASK_BASS|SOUND_MASK_TREBLE);
+       }
 
        /* XXX endianness, dork head. */
-       /* magic vendor specifc init code, _no_ idea what these do */
+       /* vendor specifc bits.. */
        switch ((long)(vend1 << 16) | vend2) {
        case 0x545200ff:        /* TriTech */
-               
+               /* no idea what this does */
                maestro_ac97_set(iobase,0x2a,0x0001);
                maestro_ac97_set(iobase,0x2c,0x0000);
                maestro_ac97_set(iobase,0x2c,0xffff);
                break;
        case 0x83847609:        /* ESS 1921 */
+               /* writing to 0xe (mic) or 0x1a (recmask) seems
+                       to hang this codec */
+               card->mix.supported_mixers &= ~(SOUND_MASK_MIC);
+               card->mix.record_sources = 0;
+               card->mix.recmask_io = NULL;
+               /* no idea what these do */
                maestro_ac97_set(iobase,0x76,0xABBA); /* o/~ Take a chance on me o/~ */
                udelay(20);
                maestro_ac97_set(iobase,0x78,0x3002);
@@ -423,34 +732,23 @@ static u16 maestro_ac97_init(int iobase)
        default: break;
        }
 
-       /* set master, headphone, master mono */
-        maestro_ac97_set(iobase, 0x02, 0x0000);
+#if 0 /* used to be set, lets try using the codec defaults */
        /* always set headphones to max unmuted, OSS won't 
                let us change it :( */
         maestro_ac97_set(iobase, 0x04, 0x0000);
         maestro_ac97_set(iobase, 0x06, 0x0000);
-        maestro_ac97_set(iobase, 0x08, 0x0606);
-       /* beep, phone, mic, line, cd video, aux */
-       maestro_ac97_set(iobase, 0x0A, 0x1F1F);
        maestro_ac97_set(iobase, 0x0C, 0x1F1F);
-       maestro_ac97_set(iobase, 0x0E, 0x1F1F);
-       maestro_ac97_set(iobase, 0x10, 0x1F1F);
-       maestro_ac97_set(iobase, 0x12, 0x1F1F);
-       maestro_ac97_set(iobase, 0x14, 0x1F1F);
-       maestro_ac97_set(iobase, 0x16, 0x1F1F);
-       /* unmute, but set pcm out to 1/2 */
-       maestro_ac97_set(iobase, 0x18, 0x0808);
        /* null record select */
        maestro_ac97_set(iobase, 0x1A, 0x0000);
-       /* record gain, record gain mic.. */
-       maestro_ac97_set(iobase, 0x1C, 0x0404);
+#endif
        maestro_ac97_set(iobase, 0x1E, 0x0404);
        /* null misc stuff */
        maestro_ac97_set(iobase, 0x20, 0x0000);
-       /* power up various units? */
-       maestro_ac97_set(iobase, 0x26, 0x000F);
+       /* the regs are read only, duh  :) */
+/*     maestro_ac97_set(iobase, 0x26, 0x000F);*/
 
-       /* lets see if they actually default to the spec :) */
+#if 0 /* this is a really good way to hang
+       codecs.  we need a better way. */
        if(maestro_ac97_get(iobase,0x36) ==0x8080) {
                int reg;
                printk("maestro: your ac97 might be 2.0, see if this makes sense:\n");
@@ -458,11 +756,12 @@ static u16 maestro_ac97_init(int iobase)
                        printk("   0x%2x: %4x\n",reg,maestro_ac97_get(iobase,reg));
                }
        }
+#endif
 
        return 0;
 }
 
-static u16 maestro_pt101_init(int iobase)
+static u16 maestro_pt101_init(struct ess_card *card,int iobase)
 {
        printk(KERN_INFO "maestro: PT101 Codec detected, initializing but _not_ installing mixer device.\n");
        /* who knows.. */
@@ -493,7 +792,9 @@ static void maestro_ac97_reset(int ioaddr)
        mdelay(1);*/
 
        /* well this seems to work a little
-               better on the 2e */
+               better on my pci board.. probably
+               because gpio is wired to ac97 reset */
+
        /* this screws around with the gpio
                mask/input/direction.. */
        outw(0x0000,  ioaddr+0x36);
@@ -617,12 +918,15 @@ static void apu_set_register(struct ess_state *ess, u16 channel, u8 reg, u16 dat
                channel&=~ESS_CHAN_HARD;
        else
        {
-               if(channel>3)
+               if(channel>5)
                        printk("BAD CHANNEL %d.\n",channel);
                else
                        channel = ess->apu[channel];
        }
-       
+#ifdef CONFIG_APM
+       /* store based on real hardware apu/reg */
+       ess->card->apu_map[channel][reg]=data;
+#endif
        reg|=(channel<<4);
        
        save_flags(flags);
@@ -654,9 +958,8 @@ static u16 apu_get_register(struct ess_state *ess, u16 channel, u8 reg)
 
 
 /*
- *     The wavecache does pci fetches for us and feeds
- *     them to the APUs..  
- *     XXX describe interface
+ *     The wavecache buffers between the APUs and
+ *     pci bus mastering
  */
  
 static void wave_set_register(struct ess_state *ess, u16 reg, u16 value)
@@ -694,9 +997,10 @@ static void sound_reset(int ioaddr)
        udelay(1);
 }
 
+/* sets the play formats of these apus, should be passed the already shifted format */
 static void set_apu_fmt(struct ess_state *s, int apu, int mode)
 {
-       if(mode&ESS_CFMT_16BIT) { 
+       if(mode&ESS_FMT_16BIT) { 
                s->apu_mode[apu] = 0x10;
                s->apu_mode[apu+1] = 0x10;
        } else {
@@ -705,11 +1009,12 @@ static void set_apu_fmt(struct ess_state *s, int apu, int mode)
        }
 }
 
+/* this only fixes the output apu mode to be later set by start_dac and
+       company.  output apu modes are set in ess_rec_setup */
 static void set_fmt(struct ess_state *s, unsigned char mask, unsigned char data)
 {
        s->fmt = (s->fmt & mask) | data;
-       set_apu_fmt(s, 0, s->fmt & ESS_CFMT_MASK);
-       set_apu_fmt(s, 2, (s->fmt >> ESS_CFMT_CSHIFT) & ESS_CFMT_MASK);
+       set_apu_fmt(s, 0, (s->fmt >> ESS_DAC_SHIFT) & ESS_FMT_MASK);
 }
 
 static u16 compute_rate(u32 freq)
@@ -732,17 +1037,19 @@ static void set_dac_rate(struct ess_state *s, unsigned rate)
 
        s->ratedac = rate;
 
-       if(!(s->fmt & ESS_CFMT_16BIT))
+       if(!((s->fmt >> ESS_DAC_SHIFT) & ESS_FMT_16BIT))
                rate >>= 1; /* who knows */
 
 /*     M_printk("computing dac rate %d with mode %d\n",rate,s->fmt);*/
 
        freq = compute_rate(rate);
        
-       /* Load the frequency, turn on 6dB, turn off the effects */
-       apu_set_register(s, 0, 2, (freq&0xFF)<<8|0x10);
+       /* Load the frequency, turn on 6dB */
+       apu_set_register(s, 0, 2,(apu_get_register(s, 0, 2)&0x00FF)|
+               ( ((freq&0xFF)<<8)|0x10 ));
        apu_set_register(s, 0, 3, freq>>8);
-       apu_set_register(s, 1, 2, (freq&0xFF)<<8|0x10);
+       apu_set_register(s, 1, 2,(apu_get_register(s, 1, 2)&0x00FF)|
+               ( ((freq&0xFF)<<8)|0x10 ));
        apu_set_register(s, 1, 3, freq>>8);
 }
 
@@ -759,11 +1066,23 @@ static void set_adc_rate(struct ess_state *s, unsigned rate)
 
        freq = compute_rate(rate);
        
-       /* Load the frequency, turn on 6dB, turn off the effects */
-       apu_set_register(s, 2, 2, (freq&0xFF)<<8|0x10);
+       /* Load the frequency, turn on 6dB */
+       apu_set_register(s, 2, 2,(apu_get_register(s, 2, 2)&0x00FF)|
+               ( ((freq&0xFF)<<8)|0x10 ));
        apu_set_register(s, 2, 3, freq>>8);
-       apu_set_register(s, 3, 2, (freq&0xFF)<<8|0x10);
+       apu_set_register(s, 3, 2,(apu_get_register(s, 3, 2)&0x00FF)|
+               ( ((freq&0xFF)<<8)|0x10 ));
        apu_set_register(s, 3, 3, freq>>8);
+
+       /* fix mixer rate at 48khz.  and its _must_ be 0x10000. */
+       freq = 0x10000;
+
+       apu_set_register(s, 4, 2,(apu_get_register(s, 4, 2)&0x00FF)|
+               ( ((freq&0xFF)<<8)|0x10 ));
+       apu_set_register(s, 4, 3, freq>>8);
+       apu_set_register(s, 5, 2,(apu_get_register(s, 5, 2)&0x00FF)|
+               ( ((freq&0xFF)<<8)|0x10 ));
+       apu_set_register(s, 5, 3, freq>>8);
 }
 
 
@@ -771,6 +1090,7 @@ static void set_adc_rate(struct ess_state *s, unsigned rate)
  *     Native play back driver 
  */
 
+/* the mode passed should be already shifted and masked */
 static void ess_play_setup(struct ess_state *ess, int mode, u32 rate, void *buffer, int size)
 {
        u32 pa;
@@ -786,7 +1106,7 @@ static void ess_play_setup(struct ess_state *ess, int mode, u32 rate, void *buff
 
        /* we're given the full size of the buffer, but
        in stereo each channel will only play its half */
-       if(mode&ESS_CFMT_STEREO) {
+       if(mode&ESS_FMT_STEREO) {
                size >>=1; 
                high_apu++;
        }
@@ -825,9 +1145,8 @@ static void ess_play_setup(struct ess_state *ess, int mode, u32 rate, void *buff
                        *2 accomodates for rampant shifting earlier */
                        pa = virt_to_bus(buffer + size*2);
 
-               M_printk("sending pa %x to %d\n",pa,channel);
-               
-               wave_set_register(ess, 0x01FC, (pa&0xFFE00000)>>12);
+               /* play bufs are in the same first region as record bufs */
+               wave_set_register(ess, 0x01FC , (pa&0xFFE00000)>>12);
 
                /* set the wavecache control reg */
                tmpval = (pa - 0x10) & 0xFFF8;
@@ -845,7 +1164,7 @@ static void ess_play_setup(struct ess_state *ess, int mode, u32 rate, void *buff
                if(!channel) ess->dma_dac.base = pa&0xFFFF;
                
 #if 0
-               if(mode&ESS_CFMT_STEREO)                        /* Enable stereo */
+               if(mode&ESS_FMT_STEREO)                 /* Enable stereo */
                        pa|=0x00800000;
 #endif
                pa|=0x00400000;                 /* System RAM */
@@ -854,11 +1173,8 @@ static void ess_play_setup(struct ess_state *ess, int mode, u32 rate, void *buff
                for(i=0;i<15;i++)               /* clear all PBRs */
                        apu_set_register(ess, channel, i, 0x0000);
                        
-               /* Load the frequency, turn on 6dB, turn off the effects */
-/*             apu_set_register(ess, channel, 2, (rate&0xFF)<<8|0x10);
-               apu_set_register(ess, channel, 3, rate>>8);*/
-               
 /* XXX think about endianess when writing these registers */
+               M_printk("maestro: ess_play_setup: APU[%d] pa = 0x%x\n", ess->apu[channel], pa);
                /* Load the buffer into the wave engine */
                apu_set_register(ess, channel, 4, ((pa>>16)&0xFF)<<8);
                apu_set_register(ess, channel, 5, pa&0xFFFF);
@@ -878,7 +1194,7 @@ static void ess_play_setup(struct ess_state *ess, int mode, u32 rate, void *buff
                /* mark dma and turn on filter stuff? */
                apu_set_register(ess, channel, 0, 0x400F);
                
-               if(mode&ESS_CFMT_STEREO)
+               if(mode&ESS_FMT_STEREO)
                        /* set panning: left or right */
                        apu_set_register(ess, channel, 10, 0x8F00 | (channel ? 0x10 : 0));
                else
@@ -896,7 +1212,7 @@ static void ess_play_setup(struct ess_state *ess, int mode, u32 rate, void *buff
        for(channel=0; channel<=high_apu; channel++)
        {
                /* Turn on the DMA */
-               if(mode&ESS_CFMT_16BIT)
+               if(mode&ESS_FMT_16BIT)
                {
                        apu_set_register(ess, channel, 0,
                                (apu_get_register(ess, channel, 0)&0xFF0F)|0x10);
@@ -911,14 +1227,160 @@ static void ess_play_setup(struct ess_state *ess, int mode, u32 rate, void *buff
        }
 }
 
+/*
+ *     Native record driver 
+ */
+
+/* again, passed mode is alrady shifted/masked */
+static void ess_rec_setup(struct ess_state *ess, int mode, u32 rate, void *buffer, int size)
+{
+       int apu_step = 2;
+       int channel;
+       u8 apu_type;
+
+       M_printk("maestro: ess_rec_setup: mode=%d rate=%d buf=0x%p len=%d.\n",
+               mode, rate, buffer, size);
+               
+       /* all maestro sizes are in 16bit words */
+       size >>=1;
+
+       /* we're given the full size of the buffer, but
+       in stereo each channel will only use its half */
+       if(mode&ESS_FMT_STEREO) {
+               size >>=1; 
+               apu_step = 1;
+       }
+       
+       /* APU assignments: 2 = mono/left SRC
+                           3 = right SRC
+                           4 = mono/left Input Mixer
+                           5 = right Input Mixer */
+       for(channel=2;channel<6;channel+=apu_step)
+       {
+               int i;
+               int bsize, route;
+               u32 pa;
+               u32 tmpval;
+
+               /* data seems to flow from the codec, through an apu into
+                       the 'mixbuf' bit of page, then through the SRC apu
+                       and out to the real 'buffer'.  ok.  sure.  */
+               
+               if(channel & 0x04) {
+                       /* ok, we're an input mixer going from adc
+                               through the mixbuf to the other apus */
+
+                       if(!(channel & 0x01)) { 
+                               pa = virt_to_bus(ess->mixbuf);
+                       } else {
+                               pa = virt_to_bus(ess->mixbuf + (PAGE_SIZE >> 4));
+                       }
+
+                       /* we source from a 'magic' apu */
+                       bsize = PAGE_SIZE >> 5; /* half of this channels alloc, in words */
+                       route = 0x14 + (channel - 4); /* parallel in crap, see maestro reg 0xC [8-11] */
+
+               } else {  
+                       /* we're a rate converter taking
+                               input from the input apus and outputing it to
+                               system memory */
+                       if(!(channel & 0x01))  {
+                               pa = virt_to_bus(buffer);
+                       } else {
+                               /* right channel records its split half.
+                               *2 accomodates for rampant shifting earlier */
+                               pa = virt_to_bus(buffer + size*2);
+                       }
+
+                       bsize = size; 
+                       /* get input from inputing apu */
+                       route = channel + 2;
+               }
+
+               M_printk("maestro: ess_rec_setup: getting pa 0x%x from %d\n",pa,channel);
+               
+               /* put our base address in the right region */
+               wave_set_register(ess, 0x01FC  + (channel >> 2), (pa&0xFFE00000)>>12);
+
+               /* set the wavecache control reg */
+               tmpval = (pa - 0x10) & 0xFFF8;
+               wave_set_register(ess, ess->apu[channel]<<3, tmpval);
+               
+               pa&=0x1FFFFF;                   /* Low 21 bits*/        
+               pa>>=1; /* words */
+               
+               /* base offset of dma calcs when reading the pointer
+                       on this left one */
+               if(channel==2) ess->dma_adc.base = pa&0xFFFF;
+
+               pa|=0x00400000;                 /* bit 22 -> System RAM */
+
+               if ( channel & 4) 
+                       pa|=0x00200000;                 /* bit 21 -> second region for mixbuf */
+               
+               M_printk("maestro: ess_rec_setup: APU[%d] pa = 0x%x size = 0x%x route = 0x%x\n", 
+                       ess->apu[channel], pa, bsize, route);
+               
+               /* Begin loading the APU */             
+               for(i=0;i<15;i++)               /* clear all PBRs */
+                       apu_set_register(ess, channel, i, 0x0000);
+                       
+               apu_set_register(ess, channel, 0, 0x400F);
+
+               /* need to enable subgroups.. and we should probably
+                       have different groups for different /dev/dsps..  */
+               apu_set_register(ess, channel, 2, 0x8);
+                               
+               /* Load the buffer into the wave engine */
+               apu_set_register(ess, channel, 4, ((pa>>16)&0xFF)<<8);
+               /* XXX reg is little endian.. */
+               apu_set_register(ess, channel, 5, pa&0xFFFF);
+               apu_set_register(ess, channel, 6, (pa+bsize)&0xFFFF);
+               apu_set_register(ess, channel, 7, bsize);
+                               
+               /* clear effects/env.. */
+               apu_set_register(ess, channel, 8, 0x00F0);
+               
+               /* amplitude now?  sure.  why not.  */
+               apu_set_register(ess, channel, 9, 0x0000);
+
+               /* set filter tune, radius, polar pan */
+               apu_set_register(ess, channel, 10, 0x8F08);
+
+               /* route input */
+               apu_set_register(ess, channel, 11, route);
+       }
+       
+       /* clear WP interupts */
+       outw(1, ess->card->iobase+0x04);
+       /* enable WP ints */
+       outw(inw(ess->card->iobase+0x18)|4, ess->card->iobase+0x18);
+
+       set_adc_rate(ess,rate);
+
+       for(channel=2; channel<6; channel+=apu_step)
+       {
+               if(channel & 0x04) {
+                       apu_type = 0x90;        /* Input Mixer */
+               } else {
+                       apu_type = 0xB0;        /* Sample Rate Converter */
+               }
+               
+               apu_set_register(ess, channel, 0,
+                               (apu_get_register(ess, channel, 0)&0xFF0F) | apu_type);
+               ess->apu_mode[channel] = apu_type;
+       }
+}
 /* --------------------------------------------------------------------- */
 
 static void set_dmaa(struct ess_state *s, unsigned int addr, unsigned int count)
 {
+       M_printk("set_dmaa??\n");
 }
 
 static void set_dmac(struct ess_state *s, unsigned int addr, unsigned int count)
 {
+       M_printk("set_dmac??\n");
 }
 
 /* Playback pointer */
@@ -932,11 +1394,11 @@ extern __inline__ unsigned get_dmaa(struct ess_state *s)
        outw(0, ioport+2);
        offset=inw(ioport);
 
-/*     M_printk("dmaa: offset: %d, base: %d\n",offset,s->dma_dac.base);*/
+/*     M_printk("dmaa: offset: %d, base: %d\n",offset,s->dma_dac.base); */
        
        offset-=s->dma_dac.base;
 
-       return (offset&0xFFFE)/*<<1*/; /* XXX printk didn't have it */
+       return (offset&0xFFFE)<<1; /* hardware is in words */
 }
 
 /* Record pointer */
@@ -949,8 +1411,11 @@ extern __inline__ unsigned get_dmac(struct ess_state *s)
        outw(s->apu[2]<<4|5, ioport);
        outw(0, ioport+2);
        offset=inw(ioport);
+
+/*     M_printk("dmac: offset: %d, base: %d\n",offset,s->dma_adc.base); */
        
        /* The offset is an address not a position relative to base */
+       offset-=s->dma_adc.base;
        
        return (offset&0xFFFE)<<1; /* hardware is in words */
 }
@@ -961,64 +1426,6 @@ extern __inline__ unsigned get_dmac(struct ess_state *s)
 
 static void ess_interrupt(int irq, void *dev_id, struct pt_regs *regs);
 
-#define ESS_HW_TIMER
-
-#ifndef ESS_HW_TIMER
-
-/* old kernel timer based timer ints, should BOB prove flakey */
-
-static struct timer_list tmp_timer;
-
-static int bob_stopped;
-
-static void ess_interrupt_fake(unsigned long v)
-{
-       ess_interrupt(5, (void *)v, NULL);
-       del_timer(&tmp_timer);
-       if(!bob_stopped)
-       {
-               tmp_timer.expires=jiffies+1;
-               add_timer(&tmp_timer);
-       }
-       else
-               M_printk("Stopping bob (SW)\n");
-}
-
-static void stop_bob(struct ess_state *s)
-{
-       bob_stopped=1;
-}
-
-static void kill_bob(struct ess_state *s)
-{
-       del_timer(&tmp_timer);
-       M_printk("Killing bob (SW)\n");
-}
-
-static void start_bob(struct ess_state *s)
-{
-       static int init=1;
-       if(init)
-       {
-               init=0;
-               init_timer(&tmp_timer);
-               tmp_timer.function = ess_interrupt_fake;
-       }
-       bob_stopped = 0;
-       if(!timer_pending(&tmp_timer))
-       {
-               del_timer(&tmp_timer);
-               tmp_timer.expires = jiffies+1;
-               tmp_timer.data = (unsigned long)s->card;
-               add_timer(&tmp_timer);
-               M_printk("Starting bob (SW)\n");
-       }
-}
-
-#else
-
-/* nice HW BOB implementation. */
-
 static void stop_bob(struct ess_state *s)
 {
        /* Mask IDR 11,17 */
@@ -1035,9 +1442,8 @@ static void start_bob(struct ess_state *s)
        int prescale;
        int divide;
        
-       int freq = 200;         /* requested frequency - calculate what we want here. */
-       
-       stop_bob(s);    /* make sure bob's not already running */
+       /* XXX make freq selector much smarter, see calc_bob_rate */
+       int freq = 150;         /* requested frequency - calculate what we want here. */
        
        /* compute ideal interrupt frequency for buffer size & play rate */
        /* first, find best prescaler value to match freq */
@@ -1073,26 +1479,69 @@ static void start_bob(struct ess_state *s)
        maestro_write(s, 0x11, maestro_read(s, 0x11)|1);
        maestro_write(s, 0x17, maestro_read(s, 0x17)|1);
 }
-#endif /* ESS_HW_TIMER */
 /* --------------------------------------------------------------------- */
 
-static int adc_active = 0;
+/* this quickly calculates the frequency needed for bob
+       and sets it if its different than what bob is
+       currently running at.  its called often so 
+       needs to be fairly quick. */
+#define BOB_MIN 50
+#define BOB_MAX 400
+static void calc_bob_rate(struct ess_state *s) {
+#if 0 /* this thing tries to set the frequency of bob such that
+       there are 2 interrupts / buffer walked by the dac/adc.  That
+       is probably very wrong for people who actually care about 
+       mid buffer positioning.  it should be calculated as bytes/interrupt
+       and that needs to be decided :)  so for now just use the static 150
+       in start_bob.*/
+
+       unsigned int dac_rate=2,adc_rate=1,newrate;
+       static int israte=-1;
+
+       if (s->dma_dac.fragsize == 0) dac_rate = BOB_MIN;
+       else  {
+               dac_rate =      (2 * s->ratedac * sample_size[(s->fmt >> ESS_DAC_SHIFT) & ESS_FMT_MASK]) /
+                               (s->dma_dac.fragsize) ;
+       }
+               
+       if (s->dma_adc.fragsize == 0) adc_rate = BOB_MIN;
+       else {
+               adc_rate =      (2 * s->rateadc * sample_size[(s->fmt >> ESS_DAC_SHIFT) & ESS_FMT_MASK]) /
+                               (s->dma_adc.fragsize) ;
+       }
+
+       if(dac_rate > adc_rate) newrate = adc_rate;
+       else newrate=dac_rate;
+
+       if(newrate > BOB_MAX) newrate = BOB_MAX;
+       else {
+               if(newrate < BOB_MIN) 
+                       newrate = BOB_MIN;
+       }
 
+       if( israte != newrate) {
+               printk("dac: %d  adc: %d rate: %d\n",dac_rate,adc_rate,israte);
+               israte=newrate;
+       }
+#endif
+
+}
+
+/* Stop our host of recording apus */
 extern inline void stop_adc(struct ess_state *s)
 {
        unsigned long flags;
 
        spin_lock_irqsave(&s->lock, flags);
-       /* Stop left and right recording APU */
        s->enable &= ~ADC_RUNNING;
        apu_set_register(s, 2, 0, apu_get_register(s, 2, 0)&0xFF0F);
        apu_set_register(s, 3, 0, apu_get_register(s, 3, 0)&0xFF0F);
-       adc_active&=~1;
-/*     if(!adc_active)
-               stop_bob(s); */
+       apu_set_register(s, 4, 0, apu_get_register(s, 2, 0)&0xFF0F);
+       apu_set_register(s, 5, 0, apu_get_register(s, 3, 0)&0xFF0F);
        spin_unlock_irqrestore(&s->lock, flags);
 }      
 
+/* stop output apus */
 extern inline void stop_dac(struct ess_state *s)
 {
        unsigned long flags;
@@ -1101,9 +1550,6 @@ extern inline void stop_dac(struct ess_state *s)
        s->enable &= ~DAC_RUNNING;
        apu_set_register(s, 0, 0, apu_get_register(s, 0, 0)&0xFF0F);
        apu_set_register(s, 1, 0, apu_get_register(s, 1, 0)&0xFF0F);
-       adc_active&=~2;
-/*     if(!adc_active)
-               stop_bob(s); */
        spin_unlock_irqrestore(&s->lock, flags);
 }      
 
@@ -1118,13 +1564,10 @@ static void start_dac(struct ess_state *s)
                apu_set_register(s, 0, 0, 
                        (apu_get_register(s, 0, 0)&0xFF0F)|s->apu_mode[0]);
 
-               if(s->fmt & ESS_CFMT_STEREO) 
+               if((s->fmt >> ESS_DAC_SHIFT)  & ESS_FMT_STEREO) 
                        apu_set_register(s, 1, 0, 
                                (apu_get_register(s, 1, 0)&0xFF0F)|s->apu_mode[1]);
        }
-/*     if(!adc_active)
-               start_bob(s);*/
-       adc_active|=2;
        spin_unlock_irqrestore(&s->lock, flags);
 }      
 
@@ -1138,25 +1581,31 @@ static void start_adc(struct ess_state *s)
                s->enable |= ADC_RUNNING;
                apu_set_register(s, 2, 0, 
                        (apu_get_register(s, 2, 0)&0xFF0F)|s->apu_mode[2]);
-               apu_set_register(s, 3, 0, 
-                       (apu_get_register(s, 3, 0)&0xFF0F)|s->apu_mode[3]);
+               apu_set_register(s, 4, 0, 
+                       (apu_get_register(s, 4, 0)&0xFF0F)|s->apu_mode[4]);
+               if( s->fmt & (ESS_FMT_STEREO << ESS_ADC_SHIFT)) {
+                       apu_set_register(s, 3, 0, 
+                               (apu_get_register(s, 3, 0)&0xFF0F)|s->apu_mode[3]);
+                       apu_set_register(s, 5, 0, 
+                               (apu_get_register(s, 5, 0)&0xFF0F)|s->apu_mode[5]);
+               }
+                       
        }
-/*     if(!adc_active)
-               start_bob(s); */
-       adc_active|=1;
        spin_unlock_irqrestore(&s->lock, flags);
 }      
 
 /* --------------------------------------------------------------------- */
 
+/* we allocate both buffers at once */
 #define DMABUF_DEFAULTORDER (15-PAGE_SHIFT)
-#define DMABUF_MINORDER 1
+#define DMABUF_MINORDER 2
 
 static void dealloc_dmabuf(struct dmabuf *db)
 {
        unsigned long map, mapend;
 
        if (db->rawbuf) {
+               M_printk("maestro: freeing %p\n",db->rawbuf);
                /* undo marking the pages as reserved */
                mapend = MAP_NR(db->rawbuf + (PAGE_SIZE << db->buforder) - 1);
                for (map = MAP_NR(db->rawbuf); map <= mapend; map++)
@@ -1167,7 +1616,6 @@ static void dealloc_dmabuf(struct dmabuf *db)
        db->mapped = db->ready = 0;
 }
 
-
 static int prog_dmabuf(struct ess_state *s, unsigned rec)
 {
        struct dmabuf *db = rec ? &s->dma_adc : &s->dma_dac;
@@ -1183,38 +1631,54 @@ static int prog_dmabuf(struct ess_state *s, unsigned rec)
        fmt = s->fmt;
        if (rec) {
                s->enable &= ~ESS_ENABLE_RE;
-               fmt >>= ESS_CFMT_CSHIFT;
+               fmt >>= ESS_ADC_SHIFT;
        } else {
                s->enable &= ~ESS_ENABLE_PE;
-               fmt >>= ESS_CFMT_ASHIFT;
+               fmt >>= ESS_DAC_SHIFT;
        }
        spin_unlock_irqrestore(&s->lock, flags);
+       fmt &= ESS_FMT_MASK;
 
        db->hwptr = db->swptr = db->total_bytes = db->count = db->error = db->endcleared = 0;
 
        if (!db->rawbuf) {
-               db->ready = db->mapped = 0;
+               void *rawbuf;
+               /* haha, this thing is hacked to hell and back.
+                       this is so ugly. */
+               s->dma_dac.ready = s->dma_dac.mapped = 0;
+               s->dma_adc.ready = s->dma_adc.mapped = 0;
 
                /* alloc as big a chunk as we can */
                for (order = DMABUF_DEFAULTORDER; order >= DMABUF_MINORDER; order--)
-                       if((db->rawbuf = (void *)__get_free_pages(GFP_KERNEL|GFP_DMA, order)))
+                       if((rawbuf = (void *)__get_free_pages(GFP_KERNEL|GFP_DMA, order)))
+
                                break;
 
-               if (!db->rawbuf)
+               if (!rawbuf)
                        return -ENOMEM;
 
-               db->buforder = order;
 
-               if ((virt_to_bus(db->rawbuf) ^ (virt_to_bus(db->rawbuf) + (PAGE_SIZE << db->buforder) - 1)) & ~0xffff)
+               /* we allocated both buffers */
+               s->dma_adc.rawbuf = rawbuf;
+               s->dma_dac.rawbuf = rawbuf + ( PAGE_SIZE << (order - 1) );
+
+               M_printk("maestro: allocated %ld bytes at %p\n",PAGE_SIZE<<order, db->rawbuf);
+
+               s->dma_adc.buforder = s->dma_dac.buforder = order - 1;
+
+               /* XXX these checks are silly now */
+#if 0
+               if ((virt_to_bus(db->rawbuf) ^ (virt_to_bus(db->rawbuf) + (PAGE_SIZE << order) - 1)) & ~0xffff)
                        printk(KERN_DEBUG "maestro: DMA buffer crosses 64k boundary: busaddr 0x%lx  size %ld\n", 
-                              virt_to_bus(db->rawbuf), PAGE_SIZE << db->buforder);
+                              virt_to_bus(db->rawbuf), PAGE_SIZE << order);
 
-               if ((virt_to_bus(db->rawbuf) + (PAGE_SIZE << db->buforder) - 1) & ~0xffffff)
+#endif
+               if ((virt_to_bus(db->rawbuf) + (PAGE_SIZE << order) - 1) & ~0xffffff)
                        printk(KERN_DEBUG "maestro: DMA buffer beyond 16MB: busaddr 0x%lx  size %ld\n", 
-                              virt_to_bus(db->rawbuf), PAGE_SIZE << db->buforder);
+                              virt_to_bus(db->rawbuf), PAGE_SIZE << order);
 
                /* now mark the pages as reserved; otherwise remap_page_range doesn't do what we want */
-               mapend = MAP_NR(db->rawbuf + (PAGE_SIZE << db->buforder) - 1);
+               mapend = MAP_NR(db->rawbuf + (PAGE_SIZE << order) - 1);
                for (map = MAP_NR(db->rawbuf); map <= mapend; map++)
                        set_bit(PG_reserved, &mem_map[map].flags);
        }
@@ -1226,9 +1690,13 @@ static int prog_dmabuf(struct ess_state *s, unsigned rec)
                else
                        db->fragshift = db->ossfragshift;
        } else {
+       /*      lets hand out reasonable big ass buffers by default */
+               db->fragshift = (db->buforder + PAGE_SHIFT -2);
+#if 0
                db->fragshift = ld2(bytepersec/100/(db->subdivision ? db->subdivision : 1));
                if (db->fragshift < 3)
-                       db->fragshift = 3;
+                       db->fragshift = 3; 
+#endif
        }
        db->numfrag = bufs >> db->fragshift;
        while (db->numfrag < 4 && db->fragshift > 3) {
@@ -1240,29 +1708,28 @@ static int prog_dmabuf(struct ess_state *s, unsigned rec)
                db->numfrag = db->ossmaxfrags;
        db->fragsamples = db->fragsize >> sample_shift[fmt];
        db->dmasize = db->numfrag << db->fragshift;
-       memset(db->rawbuf, (fmt & ESS_CFMT_16BIT) ? 0 : 0x80, db->dmasize);
+
+       memset(db->rawbuf, (fmt & ESS_FMT_16BIT) ? 0 : 0x80, db->dmasize);
+
        spin_lock_irqsave(&s->lock, flags);
        if (rec) {
-               set_dmac(s, virt_to_bus(db->rawbuf), db->numfrag << db->fragshift);
-               /* program enhanced mode registers */
-               /* FILL */
+               ess_rec_setup(s, fmt, s->rateadc, 
+                       db->rawbuf, db->numfrag << db->fragshift);
        } else {
-               /* set_dmaa(s, virt_to_bus(db->rawbuf), db->numfrag << db->fragshift); */
-               /* program enhanced mode registers */
-               /* FILL */
-               /*set_dac_rate(s, s->ratedac);   redundant */
                ess_play_setup(s, fmt, s->ratedac, 
                        db->rawbuf, db->numfrag << db->fragshift);
        }
        spin_unlock_irqrestore(&s->lock, flags);
        db->ready = 1;
+
        return 0;
 }
 
 /* XXX haha, way broken with our split stereo setup.  giggle. */
+/* only called by ess_write (dac ness ) */
 extern __inline__ void clear_advance(struct ess_state *s)
 {
-       unsigned char c = (s->fmt & (ESS_CFMT_16BIT << ESS_CFMT_ASHIFT)) ? 0 : 0x80;
+       unsigned char c = ((s->fmt >> ESS_DAC_SHIFT) & ESS_FMT_16BIT) ? 0 : 0x80;
        unsigned char *buf = s->dma_dac.rawbuf;
        unsigned bsize = s->dma_dac.dmasize;
        unsigned bptr = s->dma_dac.swptr;
@@ -1284,10 +1751,18 @@ static void ess_update_ptr(struct ess_state *s)
        unsigned hwptr;
        int diff;
 
-/* ADC is way broken.  compare to DAC.. */
        /* update ADC pointer */
        if (s->dma_adc.ready) {
-               hwptr = (/*s->dma_adc.dmasize - */get_dmac(s)) % s->dma_adc.dmasize;
+               /* oh boy should this all be re-written.  everything in the current code paths think
+               that the various counters/pointers are expressed in bytes to the user but we have
+               two apus doing stereo stuff so we fix it up here.. it propogates to all the various
+               counters from here.  Notice that this means that mono recording is very very
+               broken right now.  */
+               if ( s->fmt & (ESS_FMT_STEREO << ESS_ADC_SHIFT)) {
+                       hwptr = (get_dmac(s)*2) % s->dma_adc.dmasize;
+               } else {
+                       hwptr = get_dmac(s) % s->dma_adc.dmasize;
+               }
                diff = (s->dma_adc.dmasize + hwptr - s->dma_adc.hwptr) % s->dma_adc.dmasize;
                s->dma_adc.hwptr = hwptr;
                s->dma_adc.total_bytes += diff;
@@ -1314,8 +1789,9 @@ static void ess_update_ptr(struct ess_state *s)
                s->dma_dac.total_bytes += diff;
                if (s->dma_dac.mapped) {
                        s->dma_dac.count += diff;
-                       if (s->dma_dac.count >= (signed)s->dma_dac.fragsize)
+                       if (s->dma_dac.count >= (signed)s->dma_dac.fragsize) {
                                wake_up(&s->dma_dac.wait);
+                       }
                } else {
                        s->dma_dac.count -= diff;
 /*                     M_printk("maestro: ess_update_ptr: diff: %d, count: %d\n", diff, s->dma_dac.count); */
@@ -1334,8 +1810,9 @@ static void ess_update_ptr(struct ess_state *s)
                                clear_advance(s);
                                s->dma_dac.endcleared = 1;
                        }
-                       if (s->dma_dac.count + (signed)s->dma_dac.fragsize <= (signed)s->dma_dac.dmasize)
+                       if (s->dma_dac.count + (signed)s->dma_dac.fragsize <= (signed)s->dma_dac.dmasize) {
                                wake_up(&s->dma_dac.wait);
+                       }
                }
        }
 }
@@ -1347,8 +1824,8 @@ static void ess_interrupt(int irq, void *dev_id, struct pt_regs *regs)
        int i;
        u32 event;
 
-       event = inb(c->iobase+0x1A);
-       
+       if ( ! (event = inb(c->iobase+0x1A)) ) return;
+
        outw(inw(c->iobase+4)&1, c->iobase+4);
 
 /*     M_printk("maestro int: %x\n",event);*/
@@ -1360,219 +1837,57 @@ static void ess_interrupt(int irq, void *dev_id, struct pt_regs *regs)
                event = inw(c->iobase+0x18);
                outb(0xFF, c->iobase+0x1A);
        }
-       else
-       {
-               /* else ack 'em all, i imagine */
-               outb(0xFF, c->iobase+0x1A);
-       }
-               
-       /*
-        *      Update the pointers for all APU's we are running.
-        */
-       for(i=0;i<8;i++)
-       {
-               s=&c->channels[i];
-               if(s->dev_audio == -1)
-                       break;
-               spin_lock(&s->lock);
-               ess_update_ptr(s);
-               spin_unlock(&s->lock);
-       }
-}
-
-
-/* --------------------------------------------------------------------- */
-
-static const char invalid_magic[] = KERN_CRIT "maestro: invalid magic value in %s\n";
-
-#define VALIDATE_MAGIC(FOO,MAG)                         \
-({                                                \
-       if (!(FOO) || (FOO)->magic != MAG) { \
-               printk(invalid_magic,__FUNCTION__);            \
-               return -ENXIO;                    \
-       }                                         \
-})
-
-#define VALIDATE_STATE(a) VALIDATE_MAGIC(a,ESS_STATE_MAGIC)
-#define VALIDATE_CARD(a) VALIDATE_MAGIC(a,ESS_CARD_MAGIC)
-
-/* --------------------------------------------------------------------- */
-
-/* ac97 mixer routines.  */
-
-#define AC97_STEREO_MASK (SOUND_MASK_VOLUME|\
-       SOUND_MASK_PCM|SOUND_MASK_LINE|SOUND_MASK_CD|\
-       SOUND_MASK_VIDEO|SOUND_MASK_LINE1|SOUND_MASK_IGAIN)
-
-#define AC97_SUPPORTED_MASK (AC97_STEREO_MASK | \
-       SOUND_MASK_BASS|SOUND_MASK_TREBLE|SOUND_MASK_MIC|\
-       SOUND_MASK_SPEAKER)
-
-#define AC97_RECORD_MASK (SOUND_MASK_MIC|\
-       SOUND_MASK_CD| SOUND_MASK_VIDEO| SOUND_MASK_LINE1| SOUND_MASK_LINE|\
-       SOUND_MASK_PHONEIN)
-
-#define supported_mixer(CARD,FOO) ( CARD->mix.supported_mixers & (1<<FOO) )
-
-static struct ac97_mixer_hw {
-       unsigned char offset;
-       int scale;
-} ac97_hw[SOUND_MIXER_NRDEVICES]= {
-       [SOUND_MIXER_VOLUME]    =       {0x02,63},
-       [SOUND_MIXER_BASS]      =       {0x08,15},
-       [SOUND_MIXER_TREBLE]    =       {0x08,15},
-       [SOUND_MIXER_SPEAKER]   =       {0x0a,15},
-       [SOUND_MIXER_MIC]       =       {0x0e,31},
-       [SOUND_MIXER_LINE]      =       {0x10,31},
-       [SOUND_MIXER_CD]        =       {0x12,31},
-       [SOUND_MIXER_VIDEO]     =       {0x14,31},
-       [SOUND_MIXER_LINE1]     =       {0x16,31},
-       [SOUND_MIXER_PCM]       =       {0x18,31},
-       [SOUND_MIXER_IGAIN]     =       {0x1c,31}
-};
-
-/* reads the given OSS mixer from the ac97
-       the caller must have insured that the ac97 knows
-       about that given mixer, and should be holding a
-       spinlock for the card */
-static int ac97_read_mixer(struct ess_card *card, int mixer) 
-{
-       u16 val;
-       int ret=0;
-       struct ac97_mixer_hw *mh = &ac97_hw[mixer];
-
-       val = maestro_ac97_get(card->iobase , mh->offset);
-
-       if(AC97_STEREO_MASK & (1<<mixer)) {
-               /* nice stereo mixers .. */
-               int left,right;
-
-               left = (val >> 8)  & 0x7f;
-               right = val  & 0x7f;
-
-               right = 100 - ((right * 100) / mh->scale);
-               left = 100 - ((left * 100) / mh->scale);
-               ret = left | (right << 8);
-       } else if (mixer == SOUND_MIXER_SPEAKER) {
-               ret = 100 - ((((val & 0x1e)>>1) * 100) / mh->scale);
-       } else if (mixer == SOUND_MIXER_MIC) {
-               ret = 100 - (((val & 0x1f) * 100) / mh->scale);
-       /*  the low bit is optional in the tone sliders and masking
-               it lets is avoid the 0xf 'bypass'.. */
-       } else if (mixer == SOUND_MIXER_BASS) {
-               ret = 100 - ((((val >> 8) & 0xe) * 100) / mh->scale);
-       } else if (mixer == SOUND_MIXER_TREBLE) {
-               ret = 100 - (((val & 0xe) * 100) / mh->scale);
-       }
-
-       M_printk("read mixer %d (0x%x) %x -> %x\n",mixer,mh->offset,val,ret);
-
-       return ret;
-}
-
-/* write the OSS encoded volume to the given OSS encoded mixer,
-       again caller's job to make sure all is well in arg land,
-       call with spinlock held */
-static void ac97_write_mixer(struct ess_card *card,int mixer, int vol) 
-{
-       u16 val=0;
-       unsigned left, right;
-       struct ac97_mixer_hw *mh = &ac97_hw[mixer];
-
-       /* cleanse input a little */
-       right = ((vol >> 8)  & 0x7f) ;
-       left = (vol  & 0x7f) ;
-
-       if(right > 100) right = 100;
-       if(left > 100) left = 100;
-
-       M_printk("wrote mixer %d (0x%x) %d,%d",mixer,mh->offset,left,right);
-
-       if(AC97_STEREO_MASK & (1<<mixer)) {
-               /* stereo mixers */
-
-               right = ((100 - right) * mh->scale) / 100;
-               left = ((100 - left) * mh->scale) / 100;
-
-               val = (left << 8) | right;
-       } else if (mixer == SOUND_MIXER_SPEAKER) {
-               val = (((100 - left) * mh->scale) / 100) << 1;
-       } else if (mixer == SOUND_MIXER_MIC) {
-               val = maestro_ac97_get(card->iobase , mh->offset) & ~0x001f;
-               val |= (((100 - left) * mh->scale) / 100);
-       /*  the low bit is optional in the tone sliders and masking
-               it lets is avoid the 0xf 'bypass'.. */
-       } else if (mixer == SOUND_MIXER_BASS) {
-               val = maestro_ac97_get(card->iobase , mh->offset) & ~0x0f00;
-               val |= ((((100 - left) * mh->scale) / 100) << 8) & 0xe0;
-       } else if (mixer == SOUND_MIXER_TREBLE)  {
-               val = maestro_ac97_get(card->iobase , mh->offset) & ~0x000f;
-               val |= (((100 - left) * mh->scale) / 100) & 0xe;
-       }
-
-       maestro_ac97_set(card->iobase , mh->offset, val);
-       
-       M_printk(" -> %x\n",val);
+       else
+       {
+               /* else ack 'em all, i imagine */
+               outb(0xFF, c->iobase+0x1A);
+       }
+               
+       /*
+        *      Update the pointers for all APU's we are running.
+        */
+       for(i=0;i<NR_DSPS;i++)
+       {
+               s=&c->channels[i];
+               if(s->dev_audio == -1)
+                       break;
+               spin_lock(&s->lock);
+               ess_update_ptr(s);
+               spin_unlock(&s->lock);
+       }
 }
 
-enum ac97_recsettings {
-       AC97_REC_MIC=0,
-       AC97_REC_CD,
-       AC97_REC_VIDEO,
-       AC97_REC_AUX,
-       AC97_REC_LINE,
-       AC97_REC_STEREO, /* combination of all enabled outputs..  */
-       AC97_REC_MONO,        /*.. or the mono equivalent */
-       AC97_REC_PHONE        
-};
-static unsigned int ac97_rm2oss[] = {
-       [AC97_REC_MIC] = SOUND_MASK_MIC, 
-       [AC97_REC_CD] = SOUND_MASK_CD, 
-       [AC97_REC_VIDEO] = SOUND_MASK_VIDEO, 
-       [AC97_REC_AUX] = SOUND_MASK_LINE1, 
-       [AC97_REC_LINE] = SOUND_MASK_LINE, 
-       [AC97_REC_PHONE] = SOUND_MASK_PHONEIN
-};
 
-/* indexed by bit position, XXX dependant on OSS header internals */
-static unsigned int ac97_oss_rm[] = {
-       [SOUND_MIXER_MIC] = AC97_REC_MIC,
-       [SOUND_MIXER_CD] = AC97_REC_CD,
-       [SOUND_MIXER_VIDEO] = AC97_REC_VIDEO,
-       [SOUND_MIXER_LINE1] = AC97_REC_AUX,
-       [SOUND_MIXER_LINE] = AC97_REC_LINE,
-       [SOUND_MIXER_PHONEIN] = AC97_REC_PHONE
-};
-       
-/* read or write the recmask 
-       the ac97 can really have left and right recording
-       inputs independantly set, but OSS doesn't seem to 
-       want us to express that to the user. 
-       the caller guarantees that we have a supported bit set,
-       and they must be holding the card's spinlock */
-static int ac97_recmask_io(struct ess_card *card, int rw, int mask) 
-{
-       unsigned int val;
+/* --------------------------------------------------------------------- */
 
-       if (rw) {
-               /* read it from the card */
-               val = maestro_ac97_get(card->iobase, 0x1a) & 0x7;
-               return ac97_rm2oss[val];
-       }
+static const char invalid_magic[] = KERN_CRIT "maestro: invalid magic value in %s\n";
 
-       /* else, write the first set in the mask as the
-               output */       
+#define VALIDATE_MAGIC(FOO,MAG)                         \
+({                                                \
+       if (!(FOO) || (FOO)->magic != MAG) { \
+               printk(invalid_magic,__FUNCTION__);            \
+               return -ENXIO;                    \
+       }                                         \
+})
 
-       val = ffs(mask); 
-       val = ac97_oss_rm[val-1];
-       val |= val << 8;  /* set both channels */
+#define VALIDATE_STATE(a) VALIDATE_MAGIC(a,ESS_STATE_MAGIC)
+#define VALIDATE_CARD(a) VALIDATE_MAGIC(a,ESS_CARD_MAGIC)
 
-       maestro_ac97_set(card->iobase,0x1a,val);
+static void set_mixer(struct ess_card *card,unsigned int mixer, unsigned int val ) 
+{
+       unsigned int left,right;
+       /* cleanse input a little */
+       right = ((val >> 8)  & 0xff) ;
+       left = (val  & 0xff) ;
 
-       return 0;
-};
+       if(right > 100) right = 100;
+       if(left > 100) left = 100;
+
+       card->mix.mixer_state[mixer]=(right << 8) | left;
+       card->mix.write_mixer(card,mixer,left,right);
+}
 
-static int ac97_mixer_ioctl(struct ess_card *card, unsigned int cmd, unsigned long arg)
+static int mixer_ioctl(struct ess_card *card, unsigned int cmd, unsigned long arg)
 {
        unsigned long flags;
        int i, val=0;
@@ -1605,9 +1920,14 @@ static int ac97_mixer_ioctl(struct ess_card *card, unsigned int cmd, unsigned lo
         if (_IOC_DIR(cmd) == _IOC_READ) {
                 switch (_IOC_NR(cmd)) {
                 case SOUND_MIXER_RECSRC: /* give them the current record source */
-                       spin_lock_irqsave(&s->lock, flags);
-                       val = card->mix.recmask_io(card,1,0);
-                       spin_unlock_irqrestore(&s->lock, flags);
+
+                       if(!card->mix.recmask_io) {
+                               val = 0;
+                       } else {
+                               spin_lock_irqsave(&s->lock, flags);
+                               val = card->mix.recmask_io(card,1,0);
+                               spin_unlock_irqrestore(&s->lock, flags);
+                       }
                        break;
                        
                 case SOUND_MIXER_DEVMASK: /* give them the supported mixers */
@@ -1632,9 +1952,13 @@ static int ac97_mixer_ioctl(struct ess_card *card, unsigned int cmd, unsigned lo
                        if ( ! supported_mixer(card,i)) 
                                return -EINVAL;
 
-                       spin_lock_irqsave(&s->lock, flags);
+                       /* do we ever want to touch the hardware? */
+/*                     spin_lock_irqsave(&s->lock, flags);
                        val = card->mix.read_mixer(card,i);
-                       spin_unlock_irqrestore(&s->lock, flags);
+                       spin_unlock_irqrestore(&s->lock, flags);*/
+
+                       val = card->mix.mixer_state[i];
+/*                     M_printk("returned 0x%x for mixer %d\n",val,i);*/
 
                        break;
                }
@@ -1651,6 +1975,7 @@ static int ac97_mixer_ioctl(struct ess_card *card, unsigned int cmd, unsigned lo
        switch (_IOC_NR(cmd)) {
        case SOUND_MIXER_RECSRC: /* Arg contains a bit for each recording source */
 
+               if (!card->mix.recmask_io) return -EINVAL;
                if(! (val &= card->mix.record_sources)) return -EINVAL;
 
                spin_lock_irqsave(&s->lock, flags);
@@ -1665,7 +1990,7 @@ static int ac97_mixer_ioctl(struct ess_card *card, unsigned int cmd, unsigned lo
                        return -EINVAL;
 
                spin_lock_irqsave(&s->lock, flags);
-               card->mix.write_mixer(card,i,val);
+               set_mixer(card,i,val);
                spin_unlock_irqrestore(&s->lock, flags);
 
                return 0;
@@ -1712,7 +2037,7 @@ static int ess_ioctl_mixdev(struct inode *inode, struct file *file, unsigned int
 
        VALIDATE_CARD(card);
 
-       return ac97_mixer_ioctl(card, cmd, arg);
+       return mixer_ioctl(card, cmd, arg);
 }
 
 static /*const*/ struct file_operations ess_mixer_fops = {
@@ -1737,9 +2062,10 @@ static /*const*/ struct file_operations ess_mixer_fops = {
 
 static int drain_dac(struct ess_state *s, int nonblock)
 {
-        DECLARE_WAITQUEUE(wait,current);
+        DECLARE_WAITQUEUE(wait, current);
        unsigned long flags;
-       int count, tmo;
+       int count;
+       signed long tmo;
 
        if (s->dma_dac.mapped || !s->dma_dac.ready)
                return 0;
@@ -1759,9 +2085,11 @@ static int drain_dac(struct ess_state *s, int nonblock)
                         return -EBUSY;
                 }
                tmo = (count * HZ) / s->ratedac;
-               tmo >>= sample_shift[(s->fmt >> ESS_CFMT_ASHIFT) & ESS_CFMT_MASK];
-               if (!schedule_timeout(tmo ? : 1) && tmo)
-                       printk(KERN_DEBUG "maestro: dma timed out??\n");
+               tmo >>= sample_shift[(s->fmt >> ESS_DAC_SHIFT) & ESS_FMT_MASK];
+               /* XXX this is just broken.  someone is waking us up alot, or schedule_timeout is broken.
+                       or something.  who cares. - zach */
+               if (!schedule_timeout(tmo ? tmo : 1) && tmo)
+                       M_printk(KERN_DEBUG "maestro: dma timed out?? %ld\n",jiffies);
         }
         remove_wait_queue(&s->dma_dac.wait, &wait);
         current->state = TASK_RUNNING;
@@ -1771,16 +2099,48 @@ static int drain_dac(struct ess_state *s, int nonblock)
 }
 
 /* --------------------------------------------------------------------- */
+/* Zach sez: "god this is gross.." */
+int comb_stereo(unsigned char *real_buffer,unsigned char  *tmp_buffer, int offset, 
+       int count, int bufsize)
+{  
+       /* No such thing as stereo recording, so we
+       use dual input mixers.  which means we have to 
+       combine mono to stereo buffer.  yuck. 
+
+       but we don't have to be able to work a byte at a time..*/
+
+       unsigned char *so,*left,*right;
+       int i;
+
+       so = tmp_buffer;
+       left = real_buffer + offset;
+       right = real_buffer + bufsize/2 + offset;
+
+/*     M_printk("comb_stereo writing %d to %p from %p and %p, offset: %d size: %d\n",count/2, tmp_buffer,left,right,offset,bufsize);*/
 
+       for(i=count/4; i ; i--) {
+               (*(so+2)) = *(right++);
+               (*(so+3)) = *(right++);
+               (*so) = *(left++);
+               (*(so+1)) = *(left++);
+               so+=4;
+       }
+
+       return 0;
+}
+
+/* in this loop, dma_adc.count signifies the amount of data thats waiting
+       to be copied to the user's buffer.  it is filled by the interrupt
+       handler and drained by this loop. */
 static ssize_t ess_read(struct file *file, char *buffer, size_t count, loff_t *ppos)
 {
        struct ess_state *s = (struct ess_state *)file->private_data;
        ssize_t ret;
        unsigned long flags;
        unsigned swptr;
-       /* for damned dual players */
        int cnt;
-
+       unsigned char *combbuf = NULL;
+       
        VALIDATE_STATE(s);
        if (ppos != &file->f_pos)
                return -ESPIPE;
@@ -1790,25 +2150,34 @@ static ssize_t ess_read(struct file *file, char *buffer, size_t count, loff_t *p
                return ret;
        if (!access_ok(VERIFY_WRITE, buffer, count))
                return -EFAULT;
+       if(!(combbuf = kmalloc(count,GFP_KERNEL)))
+               return -ENOMEM;
        ret = 0;
-#if 0
-   spin_lock_irqsave(&s->lock, flags);
-   ess_update_ptr(s);
-   spin_unlock_irqrestore(&s->lock, flags);
-#endif
+
+       calc_bob_rate(s);
+
        while (count > 0) {
                spin_lock_irqsave(&s->lock, flags);
+               /* remember, all these things are expressed in bytes to be
+                       sent to the user.. hence the evil / 2 down below */
                swptr = s->dma_adc.swptr;
                cnt = s->dma_adc.dmasize-swptr;
                if (s->dma_adc.count < cnt)
                        cnt = s->dma_adc.count;
                spin_unlock_irqrestore(&s->lock, flags);
+
                if (cnt > count)
                        cnt = count;
+
+               if ( cnt > 0 ) cnt &= ~3;
+
                if (cnt <= 0) {
                        start_adc(s);
                        if (file->f_flags & O_NONBLOCK) 
-                               return ret ? ret : -EAGAIN;
+                       {
+                               ret = ret ? ret : -EAGAIN;
+                               goto rec_return_free;
+                       }
                        if (!interruptible_sleep_on_timeout(&s->dma_adc.wait, HZ)) {
                                printk(KERN_DEBUG "maestro: read: chip lockup? dmasz %u fragsz %u count %i hwptr %u swptr %u\n",
                                       s->dma_adc.dmasize, s->dma_adc.fragsize, s->dma_adc.count, 
@@ -1824,11 +2193,27 @@ static ssize_t ess_read(struct file *file, char *buffer, size_t count, loff_t *p
                                spin_unlock_irqrestore(&s->lock, flags);
                        }
                        if (signal_pending(current)) 
-                               return ret ? ret : -ERESTARTSYS;
+                       {
+                               ret = ret ? ret : -ERESTARTSYS;
+                               goto rec_return_free;
+                       }
                        continue;
                }
-               if (copy_to_user(buffer, s->dma_adc.rawbuf + swptr, cnt)) 
-                       return ret ? ret : -EFAULT;
+       
+               if(s->fmt & (ESS_FMT_STEREO << ESS_ADC_SHIFT)) {
+                       /* swptr/2 so that we know the real offset in each apu's buffer */
+                       comb_stereo(s->dma_adc.rawbuf,combbuf,swptr/2,cnt,s->dma_adc.dmasize);
+                       if (copy_to_user(buffer, combbuf, cnt)) {
+                               ret = ret ? ret : -EFAULT;
+                               goto rec_return_free;
+                       }
+               } else  {
+                       if (copy_to_user(buffer, s->dma_adc.rawbuf + swptr, cnt)) {
+                               ret = ret ? ret : -EFAULT;
+                               goto rec_return_free;
+                       }
+               }
+
                swptr = (swptr + cnt) % s->dma_adc.dmasize;
                spin_lock_irqsave(&s->lock, flags);
                s->dma_adc.swptr = swptr;
@@ -1840,10 +2225,13 @@ static ssize_t ess_read(struct file *file, char *buffer, size_t count, loff_t *p
                start_adc(s);
        }
 
+rec_return_free:
+       if(combbuf) kfree(combbuf);
        return ret;
 }
 
 /* god this is gross..*/
+/* again, the mode passed is shifted/masked */
 int split_stereo(unsigned char *real_buffer,unsigned char  *tmp_buffer, int offset, 
        int count, int bufsize, int mode)
 {  
@@ -1858,9 +2246,9 @@ int split_stereo(unsigned char *real_buffer,unsigned char  *tmp_buffer, int offs
        left = real_buffer + offset;
        right = real_buffer + bufsize/2 + offset;
 
-       M_printk("writing %d to %p and %p from %p:%d bufs: %d\n",count/2, left,right,real_buffer,offset,bufsize);
+/*     M_printk("writing %d to %p and %p from %p:%d bufs: %d\n",count/2, left,right,real_buffer,offset,bufsize);*/
 
-       if(mode & ESS_CFMT_16BIT) {
+       if(mode & ESS_FMT_16BIT) {
                for(i=count/4; i ; i--) {
                        *(right++) = (*(so+2));
                        *(right++) = (*(so+3));
@@ -1887,6 +2275,7 @@ static ssize_t ess_write(struct file *file, const char *buffer, size_t count, lo
        unsigned swptr;
        unsigned char *splitbuf = NULL;
        int cnt;
+       int mode = (s->fmt >> ESS_DAC_SHIFT) & ESS_FMT_MASK;
 
 /*     printk("maestro: ess_write: count %d\n", count);*/
        
@@ -1903,11 +2292,9 @@ static ssize_t ess_write(struct file *file, const char *buffer, size_t count, lo
        if (!(splitbuf = kmalloc(count,GFP_KERNEL)))
                return -ENOMEM; 
        ret = 0;
-#if 0
-   spin_lock_irqsave(&s->lock, flags);
-   ess_update_ptr(s);
-   spin_unlock_irqrestore(&s->lock, flags);
-#endif
+
+       calc_bob_rate(s);
+
        while (count > 0) {
                spin_lock_irqsave(&s->lock, flags);
 
@@ -1917,7 +2304,7 @@ static ssize_t ess_write(struct file *file, const char *buffer, size_t count, lo
                }
                swptr = s->dma_dac.swptr;
 
-               if(s->fmt & ESS_CFMT_STEREO) {
+               if(mode & ESS_FMT_STEREO) {
                        /* in stereo we have the 'dual' buffers.. */
                        cnt = ((s->dma_dac.dmasize/2)-swptr)*2;
                } else {
@@ -1962,12 +2349,13 @@ static ssize_t ess_write(struct file *file, const char *buffer, size_t count, lo
                        }
                        continue;
                }
-               if(s->fmt & ESS_CFMT_STEREO) {
+               if(mode & ESS_FMT_STEREO) {
                        if (copy_from_user(splitbuf, buffer, cnt)) {
                                if (!ret) ret = -EFAULT;
                                goto return_free;
                        }
-                       split_stereo(s->dma_dac.rawbuf,splitbuf,swptr,cnt,s->dma_dac.dmasize,s->fmt);
+                       split_stereo(s->dma_dac.rawbuf,splitbuf,swptr,cnt,s->dma_dac.dmasize,
+                               mode);
                } else {
                        if (copy_from_user(s->dma_dac.rawbuf + swptr, buffer, cnt)) {
                                if (!ret) ret = -EFAULT;
@@ -1975,7 +2363,7 @@ static ssize_t ess_write(struct file *file, const char *buffer, size_t count, lo
                        }
                }
 
-               if(s->fmt & ESS_CFMT_STEREO) {
+               if(mode & ESS_FMT_STEREO) {
                        /* again with the weird pointer magic*/
                        swptr = (swptr + (cnt/2)) % (s->dma_dac.dmasize/2);
                } else {
@@ -2026,7 +2414,7 @@ static unsigned int ess_poll(struct file *file, struct poll_table_struct *wait)
        return mask;
 }
 
-/* this needs to be fixed to deal with the dualing apus/buffers */
+/* this needs to be fixed to deal with the dual apus/buffers */
 #if 0
 static int ess_mmap(struct file *file, struct vm_area_struct *vma)
 {
@@ -2078,10 +2466,11 @@ static int ess_ioctl(struct inode *inode, struct file *file, unsigned int cmd, u
 
        case SNDCTL_DSP_SYNC:
                if (file->f_mode & FMODE_WRITE)
-                       return drain_dac(s, 0/*file->f_flags & O_NONBLOCK*/);
+                       return drain_dac(s, file->f_flags & O_NONBLOCK);
                return 0;
                
        case SNDCTL_DSP_SETDUPLEX:
+               /* XXX fix */
                return 0;
 
        case SNDCTL_DSP_GETCAPS:
@@ -2124,17 +2513,17 @@ static int ess_ioctl(struct inode *inode, struct file *file, unsigned int cmd, u
                        stop_adc(s);
                        s->dma_adc.ready = 0;
                        if (val)
-                               fmtd |= ESS_CFMT_STEREO << ESS_CFMT_CSHIFT;
+                               fmtd |= ESS_FMT_STEREO << ESS_ADC_SHIFT;
                        else
-                               fmtm &= ~(ESS_CFMT_STEREO << ESS_CFMT_CSHIFT);
+                               fmtm &= ~(ESS_FMT_STEREO << ESS_ADC_SHIFT);
                }
                if (file->f_mode & FMODE_WRITE) {
                        stop_dac(s);
                        s->dma_dac.ready = 0;
                        if (val)
-                               fmtd |= ESS_CFMT_STEREO << ESS_CFMT_ASHIFT;
+                               fmtd |= ESS_FMT_STEREO << ESS_DAC_SHIFT;
                        else
-                               fmtm &= ~(ESS_CFMT_STEREO << ESS_CFMT_ASHIFT);
+                               fmtm &= ~(ESS_FMT_STEREO << ESS_DAC_SHIFT);
                }
                set_fmt(s, fmtm, fmtd);
                return 0;
@@ -2148,22 +2537,22 @@ static int ess_ioctl(struct inode *inode, struct file *file, unsigned int cmd, u
                                stop_adc(s);
                                s->dma_adc.ready = 0;
                                if (val >= 2)
-                                       fmtd |= ESS_CFMT_STEREO << ESS_CFMT_CSHIFT;
+                                       fmtd |= ESS_FMT_STEREO << ESS_ADC_SHIFT;
                                else
-                                       fmtm &= ~(ESS_CFMT_STEREO << ESS_CFMT_CSHIFT);
+                                       fmtm &= ~(ESS_FMT_STEREO << ESS_ADC_SHIFT);
                        }
                        if (file->f_mode & FMODE_WRITE) {
                                stop_dac(s);
                                s->dma_dac.ready = 0;
                                if (val >= 2)
-                                       fmtd |= ESS_CFMT_STEREO << ESS_CFMT_ASHIFT;
+                                       fmtd |= ESS_FMT_STEREO << ESS_DAC_SHIFT;
                                else
-                                       fmtm &= ~(ESS_CFMT_STEREO << ESS_CFMT_ASHIFT);
+                                       fmtm &= ~(ESS_FMT_STEREO << ESS_DAC_SHIFT);
                        }
                        set_fmt(s, fmtm, fmtd);
                }
-               return put_user((s->fmt & ((file->f_mode & FMODE_READ) ? (ESS_CFMT_STEREO << ESS_CFMT_CSHIFT) 
-                                          : (ESS_CFMT_STEREO << ESS_CFMT_ASHIFT))) ? 2 : 1, (int *)arg);
+               return put_user((s->fmt & ((file->f_mode & FMODE_READ) ? (ESS_FMT_STEREO << ESS_ADC_SHIFT) 
+                                          : (ESS_FMT_STEREO << ESS_DAC_SHIFT))) ? 2 : 1, (int *)arg);
                
        case SNDCTL_DSP_GETFMTS: /* Returns a mask */
                 return put_user(AFMT_S8|AFMT_S16_LE, (int *)arg);
@@ -2176,24 +2565,28 @@ static int ess_ioctl(struct inode *inode, struct file *file, unsigned int cmd, u
                        if (file->f_mode & FMODE_READ) {
                                stop_adc(s);
                                s->dma_adc.ready = 0;
+       /* fixed at 16bit for now */
+                               fmtd |= ESS_FMT_16BIT << ESS_ADC_SHIFT;
+#if 0
                                if (val == AFMT_S16_LE)
-                                       fmtd |= ESS_CFMT_16BIT << ESS_CFMT_CSHIFT;
+                                       fmtd |= ESS_FMT_16BIT << ESS_ADC_SHIFT;
                                else
-                                       fmtm &= ~(ESS_CFMT_16BIT << ESS_CFMT_CSHIFT);
+                                       fmtm &= ~(ESS_FMT_16BIT << ESS_ADC_SHIFT);
+#endif
                        }
                        if (file->f_mode & FMODE_WRITE) {
                                stop_dac(s);
                                s->dma_dac.ready = 0;
                                if (val == AFMT_S16_LE)
-                                       fmtd |= ESS_CFMT_16BIT << ESS_CFMT_ASHIFT;
+                                       fmtd |= ESS_FMT_16BIT << ESS_DAC_SHIFT;
                                else
-                                       fmtm &= ~(ESS_CFMT_16BIT << ESS_CFMT_ASHIFT);
+                                       fmtm &= ~(ESS_FMT_16BIT << ESS_DAC_SHIFT);
                        }
                        set_fmt(s, fmtm, fmtd);
                }
                return put_user((s->fmt & ((file->f_mode & FMODE_READ) ? 
-                       (ESS_CFMT_16BIT << ESS_CFMT_CSHIFT) 
-                       : (ESS_CFMT_16BIT << ESS_CFMT_ASHIFT))) ? 
+                       (ESS_FMT_16BIT << ESS_ADC_SHIFT) 
+                       : (ESS_FMT_16BIT << ESS_DAC_SHIFT))) ? 
                                AFMT_S16_LE : 
                                AFMT_S8, 
                        (int *)arg);
@@ -2347,12 +2740,12 @@ static int ess_ioctl(struct inode *inode, struct file *file, unsigned int cmd, u
                return put_user((file->f_mode & FMODE_READ) ? s->rateadc : s->ratedac, (int *)arg);
 
         case SOUND_PCM_READ_CHANNELS:
-               return put_user((s->fmt & ((file->f_mode & FMODE_READ) ? (ESS_CFMT_STEREO << ESS_CFMT_CSHIFT) 
-                                          : (ESS_CFMT_STEREO << ESS_CFMT_ASHIFT))) ? 2 : 1, (int *)arg);
+               return put_user((s->fmt & ((file->f_mode & FMODE_READ) ? (ESS_FMT_STEREO << ESS_ADC_SHIFT) 
+                                          : (ESS_FMT_STEREO << ESS_DAC_SHIFT))) ? 2 : 1, (int *)arg);
 
         case SOUND_PCM_READ_BITS:
-               return put_user((s->fmt & ((file->f_mode & FMODE_READ) ? (ESS_CFMT_16BIT << ESS_CFMT_CSHIFT) 
-                                          : (ESS_CFMT_16BIT << ESS_CFMT_ASHIFT))) ? 16 : 8, (int *)arg);
+               return put_user((s->fmt & ((file->f_mode & FMODE_READ) ? (ESS_FMT_16BIT << ESS_ADC_SHIFT) 
+                                          : (ESS_FMT_16BIT << ESS_DAC_SHIFT))) ? 16 : 8, (int *)arg);
 
         case SOUND_PCM_WRITE_FILTER:
         case SNDCTL_DSP_SETSYNCRO:
@@ -2378,7 +2771,7 @@ static int ess_open(struct inode *inode, struct file *file)
         
        while (c!=NULL)
        {
-               for(i=0;i<8;i++)
+               for(i=0;i<NR_DSPS;i++)
                {
                        sp=&c->channels[i];
                        if(sp->dev_audio < 0)
@@ -2409,22 +2802,32 @@ static int ess_open(struct inode *inode, struct file *file)
                down(&s->open_sem);
        }
        if (file->f_mode & FMODE_READ) {
-               fmtm &= ~((ESS_CFMT_STEREO | ESS_CFMT_16BIT) << ESS_CFMT_CSHIFT);
+/*
+               fmtm &= ~((ESS_FMT_STEREO | ESS_FMT_16BIT) << ESS_ADC_SHIFT);
                if ((minor & 0xf) == SND_DEV_DSP16)
-                       fmts |= ESS_CFMT_16BIT << ESS_CFMT_CSHIFT;
+                       fmts |= ESS_FMT_16BIT << ESS_ADC_SHIFT; */
+
+               fmtm = (ESS_FMT_STEREO|ESS_FMT_16BIT) << ESS_ADC_SHIFT;
+
                s->dma_adc.ossfragshift = s->dma_adc.ossmaxfrags = s->dma_adc.subdivision = 0;
                set_adc_rate(s, 8000);
        }
        if (file->f_mode & FMODE_WRITE) {
-               fmtm &= ~((ESS_CFMT_STEREO | ESS_CFMT_16BIT) << ESS_CFMT_ASHIFT);
+               fmtm &= ~((ESS_FMT_STEREO | ESS_FMT_16BIT) << ESS_DAC_SHIFT);
                if ((minor & 0xf) == SND_DEV_DSP16)
-                       fmts |= ESS_CFMT_16BIT << ESS_CFMT_ASHIFT;
+                       fmts |= ESS_FMT_16BIT << ESS_DAC_SHIFT;
                s->dma_dac.ossfragshift = s->dma_dac.ossmaxfrags = s->dma_dac.subdivision = 0;
                set_dac_rate(s, 8000);
        }
        set_fmt(s, fmtm, fmts);
        s->open_mode |= file->f_mode & (FMODE_READ | FMODE_WRITE);
-       start_bob(s);
+
+       /* we're covered by the open_sem */
+       if( ! s->card->bob_running ) 
+               start_bob(s);
+       s->card->bob_running++;
+       M_printk("maestro: open, %d bobs now\n",s->card->bob_running);
+
        up(&s->open_sem);
        MOD_INC_USE_COUNT;
        return 0;
@@ -2440,14 +2843,21 @@ static int ess_release(struct inode *inode, struct file *file)
        down(&s->open_sem);
        if (file->f_mode & FMODE_WRITE) {
                stop_dac(s);
-               dealloc_dmabuf(&s->dma_dac);
        }
        if (file->f_mode & FMODE_READ) {
                stop_adc(s);
-               dealloc_dmabuf(&s->dma_adc);
        }
+
+       /* free our shared dma buffers */
+       dealloc_dmabuf(&s->dma_adc);
+       dealloc_dmabuf(&s->dma_dac);
+               
        s->open_mode &= (~file->f_mode) & (FMODE_READ|FMODE_WRITE);
-       stop_bob(s);
+       /* we're covered by the open_sem */
+       M_printk("maestro: %d -1 bob clients\n",s->card->bob_running);
+       if( --s->card->bob_running <= 0) {
+               stop_bob(s);
+       }
        up(&s->open_sem);
        wake_up(&s->open_wait);
        MOD_DEC_USE_COUNT;
@@ -2472,35 +2882,85 @@ static /*const*/ struct file_operations ess_audio_fops = {
        NULL,  /* lock */
 };
 
+#ifdef CONFIG_APM
+int maestro_apm_callback(apm_event_t ae) {
 
-/* --------------------------------------------------------------------- */
+       struct ess_card *s;
 
-/*     XXX get rid of this
- *     maximum number of devices 
- */
-#define NR_DEVICE 4
+       if(ae != APM_USER_SUSPEND)
+               return 0;
+
+       printk("suspending.. blowing away apus\n");
+
+       while ((s = devs)) {
+               int i;
+               devs = devs->next;
+       
+               for(i=0;i<NR_DSPS;i++) {
+                       struct ess_state *ess = &s->channels[i];
+                       int j;
+
+                       if(ess->dev_audio == -1)
+                               continue;
 
+                       for(j=0;j<6;j++) {
+                               apu_set_register(ess, ess->apu[j], 0,
+                                          (apu_get_register(ess, ess->apu[j], 0)&0xFF0F));
+                       }
+
+               }
+       }
+       if(devs) {
+               printk("suspending.. stopping bob\n");
+               stop_bob(devs);
+       }
+
+       return 0;
+}
+#endif
+
+void free_mixpage(struct ess_card *card) {
+       if (card->mixpage) {
+               /* undo marking the page as reserved */
+               clear_bit(PG_reserved, &mem_map[MAP_NR(card->mixpage)].flags);  
+               /* free mixpage */
+               free_pages((unsigned long)card->mixpage, 1);
+       }
+}
 /* --------------------------------------------------------------------- */
 
-static int maestro_install(struct pci_dev *pcidev, int card_type, int index)
+static int maestro_install(struct pci_dev *pcidev, int card_type)
 {
        u16 w;
-/*     u32 n;*/
+       u32 n;
        int iobase;
        int i;
        struct ess_card *card;
        struct ess_state *ess;
        int apu;
        int num = 0;
+
+       /* don't pick up weird modem maestros */
+       if(((pcidev->class >> 8) & 0xffff) != PCI_CLASS_MULTIMEDIA_AUDIO)
+               return 0;
                        
        iobase = pcidev->resource[0].start;
-
+       
        if(check_region(iobase, 256))
        {
                printk(KERN_WARNING "maestro: can't allocate 256 bytes I/O at 0x%4.4x\n", iobase);
                return 0;
        }
 
+       /* this was tripping up some machines */
+       if(pcidev->irq == 0) 
+       {
+               printk(KERN_WARNING "maestro: pci subsystem reports irq 0, this might not be correct.\n");
+       }
+
+       /* just to be sure */
+       pci_set_master(pcidev);
+
        card = kmalloc(sizeof(struct ess_card), GFP_KERNEL);
        if(card == NULL)
        {
@@ -2510,6 +2970,21 @@ static int maestro_install(struct pci_dev *pcidev, int card_type, int index)
        
        memset(card, 0, sizeof(*card));
 
+       /* allocate a page for the input mixer APUs 
+               512 * NR_DSPS must fit in here !!*/
+       if(!(card->mixpage = (void *)__get_free_pages(GFP_KERNEL|GFP_DMA, 1)))
+       {
+               printk(KERN_WARNING "maestro: can't allocate mixer page.\n");
+               kfree(card);
+               return 0;
+       }
+
+#ifdef CONFIG_APM
+       printk("reg_callback: %d\n",apm_register_callback(maestro_apm_callback));
+#endif
+       /* mark the page reserved */
+       set_bit(PG_reserved, &mem_map[MAP_NR(card->mixpage)].flags);
+
        card->iobase = iobase;
        card->card_type = card_type;
        card->irq = pcidev->irq;
@@ -2517,11 +2992,11 @@ static int maestro_install(struct pci_dev *pcidev, int card_type, int index)
        card->magic = ESS_CARD_MAGIC;
        devs = card;
        
-       /* init our 8 groups of 4 apus */
-       for(i=0;i<8;i++)
+       /* init our groups of 6 apus */
+       for(i=0;i<NR_DSPS;i++)
        {
                struct ess_state *s=&card->channels[i];
-               
+
                s->card = card;
                init_waitqueue_head(&s->dma_adc.wait);
                init_waitqueue_head(&s->dma_dac.wait);
@@ -2529,34 +3004,41 @@ static int maestro_install(struct pci_dev *pcidev, int card_type, int index)
                init_MUTEX(&s->open_sem);
                s->magic = ESS_STATE_MAGIC;
                
-               s->apu[0] = 4*i;
-               s->apu[1] = (4*i)+1;
-               s->apu[2] = (4*i)+2;
-               s->apu[3] = (4*i)+3;
+               s->apu[0] = 6*i;
+               s->apu[1] = (6*i)+1;
+               s->apu[2] = (6*i)+2;
+               s->apu[3] = (6*i)+3;
+               s->apu[4] = (6*i)+4;
+               s->apu[5] = (6*i)+5;
                
                if(s->dma_adc.ready || s->dma_dac.ready || s->dma_adc.rawbuf)
-                       printk("BOTCH!\n");
+                       printk("maestro: BOTCH!\n");
                /* register devices */
                if ((s->dev_audio = register_sound_dsp(&ess_audio_fops, -1)) < 0)
                        break;
+               /* divide the page into smaller chunks */
+               s->mixbuf = card->mixpage + (i * 512);
        }
        
        num = i;
        
        /* clear the rest if we ran out of slots to register */
-       for(;i<8;i++)
+       for(;i<NR_DSPS;i++)
        {
                struct ess_state *s=&card->channels[i];
                s->dev_audio = -1;
        }
        
        ess = &card->channels[0];
-       
+
        /*
         *      Ok card ready. Begin setup proper
         */
-        
-       printk(KERN_INFO "maestro: Configuring %s at 0x%04X\n", card_names[card_type], iobase);
+
+       printk(KERN_INFO "maestro: Configuring %s found at IO 0x%04X IRQ %d\n", 
+               card_names[card_type],iobase,card->irq);
+       pci_read_config_dword(pcidev, PCI_SUBSYSTEM_VENDOR_ID, &n);
+       printk(KERN_INFO "maestro:  subvendor id: 0x%08x\n",n); 
 
        /*
         *      Disable ACPI
@@ -2652,15 +3134,7 @@ static int maestro_install(struct pci_dev *pcidev, int card_type, int index)
        request_region(iobase, 256, card_names[card_type]);
        
        sound_reset(iobase);
-#if 0
 
-       /* reset the ring bus */
-
-       outw(inw(iobase + 0x36) & 0xdfff,  iobase+0x36); /* disable */
-       outw(0xC090, iobase+0x34);
-       udelay(20);
-       outw(inw(iobase + 0x36) |0x2000,  iobase+0x36); /* enable */
-#endif
        /*
         *      Ring Bus Setup
         */
@@ -2678,7 +3152,6 @@ static int maestro_install(struct pci_dev *pcidev, int card_type, int index)
         
        maestro_ac97_reset(iobase);
        
-#if 0
        /*
         *      Ring Bus Setup
         */
@@ -2746,11 +3219,9 @@ static int maestro_install(struct pci_dev *pcidev, int card_type, int index)
        w=inw(iobase+0x18);
        w|=(1<<0);              /* SB IRQ on */
        outw(w, iobase+0x18);
-#endif
 
 
-#if 0
-       /* asp crap */
+#if 0 /* asp crap */
        outb(0, iobase+0xA4); 
        outb(3, iobase+0xA2); 
        outb(0, iobase+0xA6);
@@ -2798,8 +3269,10 @@ static int maestro_install(struct pci_dev *pcidev, int card_type, int index)
        maestro_write(ess, 0x0B, 0x3F37);
        maestro_write(ess, 0x0C, 0x0098);
        
+       /* parallel out ?? */
        maestro_write(ess, 0x0C, 
-               (maestro_read(ess, 0x0C)&~0xF000)|0x8000);
+               (maestro_read(ess, 0x0C)&~0xF000)|0x8000); 
+       /* parallel in, has something to do with recording :) */
        maestro_write(ess, 0x0C, 
                (maestro_read(ess, 0x0C)&~0x0F00)|0x0500);
 
@@ -2815,22 +3288,23 @@ static int maestro_install(struct pci_dev *pcidev, int card_type, int index)
 
        outw(0xA1A0, 0x14+iobase);      /* 0300 ? */
 
-       if(maestro_ac97_get(iobase, 0x00)==0x0080)
-       {
-               maestro_pt101_init(iobase);
+       if(maestro_ac97_get(iobase, 0x00)==0x0080) {
+               maestro_pt101_init(card,iobase);
+       } else {
+               maestro_ac97_init(card,iobase);
        }
-       else
-       {
-               maestro_ac97_init(iobase);
-               card->mix.supported_mixers = AC97_SUPPORTED_MASK;
-               card->mix.stereo_mixers = AC97_STEREO_MASK;
-               card->mix.record_sources = AC97_RECORD_MASK;
-               card->mix.read_mixer = ac97_read_mixer;
-               card->mix.write_mixer = ac97_write_mixer;
-               card->mix.recmask_io = ac97_recmask_io;
 
-               if ((card->dev_mixer = register_sound_mixer(&ess_mixer_fops, -1)) < 0)
-                       printk("maestro: couldn't register mixer!\n");
+       if ((card->dev_mixer = register_sound_mixer(&ess_mixer_fops, -1)) < 0) {
+               printk("maestro: couldn't register mixer!\n");
+       } else {
+               int i;
+               for(i = 0 ; i < SOUND_MIXER_NRDEVICES ; i++) {
+                       struct mixer_defaults *md = &mixer_defaults[i];
+
+                       if(md->mixer == -1) break;
+                       if( ! supported_mixer(card,md->mixer)) continue;
+                       set_mixer(card,md->mixer,md->value);
+               }
        }
        
        /* Now clear the channel data */        
@@ -2844,12 +3318,13 @@ static int maestro_install(struct pci_dev *pcidev, int card_type, int index)
        {
                printk(KERN_ERR "maestro: unable to allocate irq %d,\n", card->irq);
                unregister_sound_mixer(card->dev_mixer);
-               for(i=0;i<8;i++)
+               for(i=0;i<NR_DSPS;i++)
                {
                        struct ess_state *s = &card->channels[i];
                        if(s->dev_audio != -1)
                                unregister_sound_dsp(s->dev_audio);
                }
+               free_mixpage(card);
                release_region(card->iobase, 256);              
                kfree(card);
                return 0;
@@ -2860,14 +3335,13 @@ static int maestro_install(struct pci_dev *pcidev, int card_type, int index)
 }
 
 #ifdef MODULE
-
-int __init init_module(void)
+int init_module(void)
 #else
 int __init init_maestro(void)
 #endif
 {
        struct pci_dev *pcidev = NULL;
-       int index = 0;
+       int foundone = 0;
 
        if (!pci_present())   /* No PCI bus in this machine! */
                return -ENODEV;
@@ -2879,35 +3353,32 @@ int __init init_maestro(void)
         *      Find the ESS Maestro 2.
         */
 
-       while((pcidev = pci_find_device(PCI_VENDOR_ESS, PCI_DEVICE_ID_ESS_ESS1968, pcidev))!=NULL)
-       {
-               index+=maestro_install(pcidev, TYPE_MAESTRO2, index);
-               if(index == NR_DEVICE)
-                       return index;
+       while( (pcidev = pci_find_device(PCI_VENDOR_ESS, PCI_DEVICE_ID_ESS_ESS1968, pcidev))!=NULL
+                       &&
+               ( maestro_install(pcidev, TYPE_MAESTRO2) )) {
+                       foundone=1;
        }
 
        /*
         *      Find the ESS Maestro 2E
         */
 
-       while((pcidev = pci_find_device(PCI_VENDOR_ESS, PCI_DEVICE_ID_ESS_ESS1978, pcidev))!=NULL)
-       {
-               index+=maestro_install(pcidev, TYPE_MAESTRO2E, index);
-               if(index == NR_DEVICE)
-                       return index;
+       while((pcidev = pci_find_device(PCI_VENDOR_ESS, PCI_DEVICE_ID_ESS_ESS1978, pcidev))!=NULL
+                       &&
+               ( maestro_install(pcidev, TYPE_MAESTRO2E) )) {
+                       foundone=1;
        }
 
        /*
         *      ESS Maestro 1
         */
 
-       while((pcidev = pci_find_device(PCI_VENDOR_ESS_OLD, PCI_DEVICE_ID_ESS_ESS0100, pcidev))!=NULL)
-       {
-               index+=maestro_install(pcidev, TYPE_MAESTRO, index);
-               if(index == NR_DEVICE)
-                       return index;
+       while((pcidev = pci_find_device(PCI_VENDOR_ESS_OLD, PCI_DEVICE_ID_ESS_ESS0100, pcidev))!=NULL
+                       &&
+               ( maestro_install(pcidev, TYPE_MAESTRO) )) {
+                       foundone=1;
        }
-       if(index==0)
+       if( ! foundone )
                return -ENODEV;
        return 0;
 }
@@ -2916,7 +3387,7 @@ int __init init_maestro(void)
 
 #ifdef MODULE
 
-MODULE_AUTHOR("Alan Cox <alan@redhat.com>");
+MODULE_AUTHOR("Zach Brown <zab@redhat.com>, Alan Cox <alan@redhat.com>");
 MODULE_DESCRIPTION("ESS Maestro Driver");
 #ifdef M_DEBUG
 MODULE_PARM(debug,"i");
@@ -2926,22 +3397,24 @@ void cleanup_module(void)
 {
        struct ess_card *s;
 
+#ifdef CONFIG_APM
+       apm_unregister_callback(maestro_apm_callback);
+#endif
        while ((s = devs)) {
                int i;
                devs = devs->next;
-#ifndef ESS_HW_TIMER
-               kill_bob(&s->channels[0]);
-#else
-               stop_bob(&s->channels[0]);
-#endif
+       
+               /* XXX maybe should force stop bob, but should be all 
+                       stopped by _release by now */
                free_irq(s->irq, s);
                unregister_sound_mixer(s->dev_mixer);
-               for(i=0;i<8;i++)
+               for(i=0;i<NR_DSPS;i++)
                {
                        struct ess_state *ess = &s->channels[i];
                        if(ess->dev_audio != -1)
                                unregister_sound_dsp(ess->dev_audio);
                }
+               free_mixpage(s);
                release_region(s->iobase, 256);
                kfree(s);
        }
@@ -2950,117 +3423,3 @@ void cleanup_module(void)
 
 #endif /* MODULE */
 
-#if 0
-/*============================================================================
- *  ex-code that we're not using anymore..
- *============================================================================
- */
-
-/*
- *     The ASSP is fortunately not double indexed
- */
-static void assp_set_register(int ioaddr, u32 reg, u32 value)
-{
-       unsigned long flags;
-       
-       save_flags(flags);
-       cli();
-       outl(reg, ioaddr+0x80);
-       outl(value, ioaddr+0x84);
-       restore_flags(flags);
-}
-
-static u32 assp_get_register(int ioaddr, u32 reg)
-{
-       unsigned long flags;
-       u32 value;
-       
-       save_flags(flags);
-       cli();
-       outl(reg, ioaddr+0x80);
-       value=inl(ioaddr+0x84);
-       restore_flags(flags);
-       
-       return value;
-}
-
-/* the ASP is basically a DSP that one can dma instructions
-       into.  it can do things like surround encoding or
-       fm synth in sb emul mode.  It is highly proprietary
-       and the ESS dudes are none too excited about telling
-       us about it.  so screw it, we'll just turn it off and
-       not bother with it.  Its not needed for apu/dac work. */
-
-
-static void asp_load(int ioaddr, u16 l, u16 h, u16 *data, int len)
-{
-       int i;
-       outw(l, ioaddr+0x80);
-       outw(h, ioaddr+0x82);
-       for(i=0;i<len;i++)
-               outw(*data++, ioaddr+0x84);
-}
-
-static void asp_memset(int ioaddr, u16 l, u16 h, u16 v, int len)
-{
-       int i;
-       outw(l, ioaddr+0x80);
-       outw(h, ioaddr+0x82);
-       for(i=0;i<len;i++)
-               outw(v, ioaddr+0x84);
-}
-
-/*
- *     Load a code table into the ASP.
- */
-
-#define ASSP_LOAD_PROGRAM 0x02 
-#define ASSP_LOAD_DATA 0x03 
-
-static void load_tables(int iobase)
-{
-       outb(0x00, ESS_SETUP_A4+iobase); /* start ASSP programming */
-
-       asp_load(iobase, 0x0, ASSP_LOAD_PROGRAM, asp_block_0,
-               sizeof(asp_block_0)/2);
-
-       asp_load(iobase, 0x0800, ASSP_LOAD_PROGRAM,
-               asp_block_1, sizeof(asp_block_1)/2);
-
-       asp_memset(iobase, 0x1000, ASSP_LOAD_DATA, 0, 1024);
-
-/*
- * At page 25 of the Maestro-2E data sheet, Table 7, there is a layout of the
- * ASSP memory mapping that describe the 0x2000-0x23FF as a data area.
- * The 1.10 version of the test code load 0x3B4 words of data into this area.
- * I have grabbed the data with hexdump and inserted them into this code.
- */ 
-       asp_load(iobase, 0x2000, ASSP_LOAD_DATA, asp_block_4,
-               sizeof(asp_block_4)/2);
-
-       asp_memset(iobase, 0x11BC, ASSP_LOAD_DATA, 0x18, 36);
-
-       asp_load(iobase, 0x13DC, ASSP_LOAD_DATA, asp_block_2,
-               sizeof(asp_block_2)/2);
-
-       asp_load(iobase, 0x1300, ASSP_LOAD_DATA, asp_block_3,
-               sizeof(asp_block_3)/2);
-
-       outb(0x41, ESS_SETUP_A4+iobase); /* stop programming and run ASSP */
-}
-/*
- *     Do not use the main maestro_reset.  it is known
- *     to leave certain chips in an unstable state.
- *     best to just reset the direct sound (apus) and
- *     assp pieces seperately.
- */
-
-static void maestro_reset(int ioaddr)
-{
-       outw(0x8000, 0x18+ioaddr);
-       udelay(10);
-       outw(0x0000, 0x18+ioaddr);
-       udelay(10);
-}
-#endif
diff --git a/drivers/sound/nm256.h b/drivers/sound/nm256.h
new file mode 100644 (file)
index 0000000..4cc720a
--- /dev/null
@@ -0,0 +1,254 @@
+#ifndef _NM256_H_
+#define _NM256_H_
+
+#include "ac97.h"
+
+enum nm256rev {
+    REV_NM256AV, REV_NM256ZX
+};
+
+struct nm256_info 
+{
+    /* Magic number used to verify that this struct is valid. */
+#define NM_MAGIC_SIG 0x55aa00ff
+    int magsig;
+
+    /* Revision number */
+    enum nm256rev rev;
+
+    struct ac97_hwint mdev;
+
+    /* Our audio device numbers. */
+    int dev[2];
+
+    /* The # of times each device has been opened. (Should only be 
+       0 or 1). */
+    int opencnt[2];
+
+    /* We use two devices, because we can do simultaneous play and record.
+       This keeps track of which device is being used for what purpose;
+       these are the actual device numbers. */
+    int dev_for_play;
+    int dev_for_record;
+
+    /* The mixer device. */
+    int mixer_oss_dev;
+
+    /* Can only be opened once for each operation.  These aren't set
+       until an actual I/O operation is performed; this allows one
+       device to be open for read/write without inhibiting I/O to
+       the other device.  */
+    int is_open_play;
+    int is_open_record;
+
+    /* Non-zero if we're currently playing a sample. */
+    int playing;
+    /* Ditto for recording a sample. */
+    int recording;
+
+    /* The two memory ports. */
+    char *ports[2];
+
+    /* Starting offset of the port1 area mapped into memory. */
+    u32 port1_start;
+    /* Ending offset. */
+    u32 port1_end;
+    /* The offset of the end of the actual buffer area.  */
+    u32 bufend;
+
+    /* The following are offsets within memory port 1. */
+    u32 coeffBuf;
+    u32 allCoeffBuf;
+    /* Record and playback buffers. */
+    u32 abuf1, abuf2;
+
+    /* Offset of the AC97 mixer in memory port 2. */
+    u32 mixer;
+
+    /* The sizes of the playback and record ring buffers. */
+    u32 playbackBufferSize;
+    u32 recordBufferSize;
+
+    /* Are the coefficient values in the memory cache current? */
+    u8 coeffsCurrent;
+
+    /* For writes, the amount we last wrote. */
+    u32 requested_amt;
+    /* The start of the block currently playing. */
+    u32 curPlayPos;
+
+    /* The amount of data we requested to record. */
+    u32 requestedRecAmt;
+    /* The offset of the currently-recording block. */
+    u32 curRecPos;
+    /* The destination buffer. */
+    char *recBuf;
+
+    /* Our IRQ number. */
+    int irq;
+
+    /* A flag indicating how many times we've grabbed the IRQ. */
+    int has_irq;
+
+    /* The card interrupt service routine. */
+    void (*introutine) (int, void *, struct pt_regs *);
+
+    /* Current audio config, cached. */
+    struct sinfo {
+       u32 samplerate;
+       u8 bits;
+       u8 stereo;
+    } sinfo[2]; /* goes with each device */
+
+    /* The cards are stored in a chain;  this is the next card. */
+    struct nm256_info *next_card;
+};
+
+/* Debug flag--bigger numbers mean more output. */
+extern int nm256_debug;
+
+/* Size of the second memory port. */
+#define NM_PORT2_SIZE 4096
+/* The location of the mixer. */
+#define NM_MIXER_BASE 0x600
+/* The maximum size of a coefficient entry. */
+#define NM_MAX_COEFFICIENT 0x5000
+
+/* The interrupt register. */
+#define NM_INT_REG 0xa04
+/* And its bits. */
+#define NM_PLAYBACK_INT 0x40
+#define NM_RECORD_INT 0x100
+#define NM_MISC_INT_1 0x4000
+#define NM_MISC_INT_2 0x1
+#define NM_ACK_INT(CARD, X) nm256_writePort16((CARD), 2, NM_INT_REG, (X) << 1)
+
+/* For the second revision.  It uses the same interrupt register, but it
+   holds 32 bits instead of 16.  */
+#define NM2_PLAYBACK_INT 0x10000
+#define NM2_RECORD_INT 0x80000
+#define NM2_MISC_INT_1 0x8
+#define NM2_MISC_INT_2 0x2
+#define NM2_ACK_INT(CARD, X) nm256_writePort32((CARD), 2, NM_INT_REG, (X))
+
+/* The playback registers start from here. */
+#define NM_PLAYBACK_REG_OFFSET 0x0
+/* The record registers start from here. */
+#define NM_RECORD_REG_OFFSET 0x200
+
+/* The rate register is located 2 bytes from the start of the register
+   area. */
+#define NM_RATE_REG_OFFSET 2
+
+/* Mono/stereo flag, number of bits on playback, and rate mask. */
+#define NM_RATE_STEREO 1
+#define NM_RATE_BITS_16 2
+#define NM_RATE_MASK 0xf0
+
+/* Playback enable register. */
+#define NM_PLAYBACK_ENABLE_REG (NM_PLAYBACK_REG_OFFSET + 0x1)
+#define NM_PLAYBACK_ENABLE_FLAG 1
+#define NM_PLAYBACK_ONESHOT 2
+#define NM_PLAYBACK_FREERUN 4
+
+/* Mutes the audio output. */
+#define NM_AUDIO_MUTE_REG (NM_PLAYBACK_REG_OFFSET + 0x18)
+#define NM_AUDIO_MUTE_LEFT 0x8000
+#define NM_AUDIO_MUTE_RIGHT 0x0080
+
+/* Recording enable register */
+#define NM_RECORD_ENABLE_REG (NM_RECORD_REG_OFFSET + 0)
+#define NM_RECORD_ENABLE_FLAG 1
+#define NM_RECORD_FREERUN 2
+
+#define NM_RBUFFER_START (NM_RECORD_REG_OFFSET + 0x4)
+#define NM_RBUFFER_END   (NM_RECORD_REG_OFFSET + 0x10)
+#define NM_RBUFFER_WMARK (NM_RECORD_REG_OFFSET + 0xc)
+#define NM_RBUFFER_CURRP (NM_RECORD_REG_OFFSET + 0x8)
+
+#define NM_PBUFFER_START (NM_PLAYBACK_REG_OFFSET + 0x4)
+#define NM_PBUFFER_END   (NM_PLAYBACK_REG_OFFSET + 0x14)
+#define NM_PBUFFER_WMARK (NM_PLAYBACK_REG_OFFSET + 0xc)
+#define NM_PBUFFER_CURRP (NM_PLAYBACK_REG_OFFSET + 0x8)
+
+/* A few trivial routines to make it easier to work with the registers
+   on the chip. */
+
+/* This is a common code portion used to fix up the port offsets. */
+#define NM_FIX_PORT \
+  if (port < 1 || port > 2 || card == NULL) \
+      return -1; \
+\
+  if (port == 1) { \
+        if (offset < card->port1_start || offset >= card->port1_end) { \
+           printk (KERN_ERR "Bad port request port 1:0x%x\n", offset); \
+            return -1; \
+        } \
+        offset -= card->port1_start; \
+   } else if (offset < 0 || offset > 4096) { \
+        printk (KERN_ERR "Bad port request port 2: 0x%x\n", offset); \
+        return -1; \
+   }
+
+#define DEFwritePortX(X, func) \
+static inline int nm256_writePort##X (struct nm256_info *card,\
+                                       int port, int offset, int value)\
+{\
+    u##X *addr;\
+\
+    NM_FIX_PORT;\
+\
+    addr = (u##X *)(card->ports[port - 1] + offset);\
+    func (value, addr);\
+    return 0;\
+}
+
+DEFwritePortX (8, writeb)
+DEFwritePortX (16, writew)
+DEFwritePortX (32, writel)
+
+#define DEFreadPortX(X) \
+static inline u##X nm256_readPort##X (struct nm256_info *card,\
+                                       int port, int offset)\
+{\
+    u##X *addr, res;\
+\
+    NM_FIX_PORT\
+\
+    addr = (u##X *)(card->ports[port - 1] + offset);\
+    memcpy_fromio (&res, addr, sizeof (res));\
+    return res;\
+}
+
+DEFreadPortX (8)
+DEFreadPortX (16)
+DEFreadPortX (32)
+
+static inline int
+nm256_writeBuffer8 (struct nm256_info *card, u8 *src, int port, int offset,
+                     int amt)
+{
+    NM_FIX_PORT;
+    memcpy_toio (card->ports[port - 1] + offset, src, amt);
+    return 0;
+}
+
+static inline int
+nm256_readBuffer8 (struct nm256_info *card, u8 *dst, int port, int offset,
+                    int amt)
+{
+    NM_FIX_PORT;
+    memcpy_fromio (dst, card->ports[port - 1] + offset, amt);
+    return 0;
+}
+
+/* Returns a non-zero value if we should use the coefficient cache. */
+extern int nm256_cachedCoefficients (struct nm256_info *card);
+
+#endif
+\f
+/*
+ * Local variables:
+ * c-basic-offset: 4
+ * End:
+ */
diff --git a/drivers/sound/nm256_audio.c b/drivers/sound/nm256_audio.c
new file mode 100644 (file)
index 0000000..0c3ee7b
--- /dev/null
@@ -0,0 +1,1393 @@
+/* Audio driver for the NeoMagic 256AV and 256ZX chipsets in native
+   mode, with AC97 mixer support.
+
+   Overall design and parts of this code stolen from vidc_*.c and
+   skeleton.c.
+
+   Yeah, there are a lot of magic constants in here.  You tell ME what
+   they are.  I just get this stuff psychically, remember? 
+
+   This driver was written by someone who wishes to remain anonymous. 
+   It is in the public domain, so share and enjoy.  Try to make a profit
+   off of it; go on, I dare you.  */
+
+#include <linux/config.h>
+#include <linux/pci.h>
+#include <linux/module.h>
+#include "sound_config.h"
+#include "soundmodule.h"
+#include "nm256.h"
+#include "nm256_coeff.h"
+
+int nm256_debug = 0;
+
+/* The size of the playback reserve. */
+#define NM256_PLAY_WMARK_SIZE 512
+
+static struct audio_driver nm256_audio_driver;
+
+static int nm256_grabInterrupt (struct nm256_info *card);
+static int nm256_releaseInterrupt (struct nm256_info *card);
+static void nm256_interrupt (int irq, void *dev_id, struct pt_regs *dummy);
+static void nm256_interrupt_zx (int irq, void *dev_id, 
+                                 struct pt_regs *dummy);
+
+/* These belong in linux/pci.h. */
+#define PCI_DEVICE_ID_NEOMAGIC_NM256AV_AUDIO 0x8005
+#define PCI_DEVICE_ID_NEOMAGIC_NM256ZX_AUDIO 0x8006
+
+/* List of cards.  */
+static struct nm256_info *nmcard_list;
+
+/* Locate the card in our list. */
+static struct nm256_info *
+nm256_find_card (int dev)
+{
+    struct nm256_info *card;
+
+    for (card = nmcard_list; card != NULL; card = card->next_card)
+       if (card->dev[0] == dev || card->dev[1] == dev)
+           return card;
+
+    return NULL;
+}
+
+/* Ditto, but find the card struct corresponding to the mixer device DEV 
+   instead. */
+static struct nm256_info *
+nm256_find_card_for_mixer (int dev)
+{
+    struct nm256_info *card;
+
+    for (card = nmcard_list; card != NULL; card = card->next_card)
+       if (card->mixer_oss_dev == dev)
+           return card;
+
+    return NULL;
+}
+
+static int usecache = 0;
+static int buffertop = 0;
+
+/* Check to see if we're using the bank of cached coefficients. */
+int
+nm256_cachedCoefficients (struct nm256_info *card)
+{
+    return usecache;
+}
+
+/* The actual rates supported by the card. */
+static int samplerates[9] = {
+    8000, 11025, 16000, 22050, 24000, 32000, 44100, 48000, 99999999
+};
+
+/* Set the card samplerate, word size and stereo mode to correspond to
+   the settings in the CARD struct for the specified device in DEV.
+   We keep two separate sets of information, one for each device; the
+   hardware is not actually configured until a read or write is
+   attempted. */
+
+int
+nm256_setInfo (int dev, struct nm256_info *card)
+{
+    int x;
+    int w;
+    int targetrate;
+
+    if (card->dev[0] == dev)
+       w = 0;
+    else if (card->dev[1] == dev)
+       w = 1;
+    else
+       return -ENODEV;
+
+    targetrate = card->sinfo[w].samplerate;
+
+    if ((card->sinfo[w].bits != 8 && card->sinfo[w].bits != 16)
+       || targetrate < samplerates[0]
+       || targetrate > samplerates[7])
+       return -EINVAL;
+
+    for (x = 0; x < 8; x++)
+       if (targetrate < ((samplerates[x] + samplerates[x + 1]) / 2))
+           break;
+
+    if (x < 8) {
+       u8 speedbits = ((x << 4) & NM_RATE_MASK)
+           | (card->sinfo[w].bits == 16 ? NM_RATE_BITS_16: 0) 
+           | (card->sinfo[w].stereo ? NM_RATE_STEREO : 0);
+
+       card->sinfo[w].samplerate = samplerates[x];
+
+       if (card->dev_for_play == dev && card->playing) {
+           nm256_loadCoefficient (card, 0, x);
+           nm256_writePort8 (card, 2,
+                               NM_PLAYBACK_REG_OFFSET + NM_RATE_REG_OFFSET,
+                               speedbits);
+       }
+
+       if (card->dev_for_record == dev && card->recording) {
+           nm256_loadCoefficient (card, 1, x);
+           nm256_writePort8 (card, 2, 
+                               NM_RECORD_REG_OFFSET + NM_RATE_REG_OFFSET,
+                               speedbits);
+       }
+       return 0;
+    }
+    else
+       return -EINVAL;
+}
+
+/* Start the play process going. */
+static void
+startPlay (struct nm256_info *card)
+{
+    if (! card->playing) {
+       card->playing = 1;
+       if (nm256_grabInterrupt (card) == 0) {
+           nm256_setInfo (card->dev_for_play, card);
+
+           /* Enable playback engine and interrupts. */
+           nm256_writePort8 (card, 2, NM_PLAYBACK_ENABLE_REG,
+                               NM_PLAYBACK_ENABLE_FLAG | NM_PLAYBACK_FREERUN);
+
+           /* Enable both channels. */
+           nm256_writePort16 (card, 2, NM_AUDIO_MUTE_REG, 0x0);
+       }
+    }
+}
+
+/* Request one chunk of AMT bytes from the recording device.  When the
+   operation is complete, the data will be copied into BUFFER and the
+   function DMAbuf_inputintr will be invoked. */
+
+static void
+nm256_startRecording (struct nm256_info *card, char *buffer, u32 amt)
+{
+    u32 endpos;
+    int enableEngine = 0;
+    u32 ringsize = card->recordBufferSize;
+
+    if (amt > (ringsize / 2)) {
+       /* Of course this won't actually work right, because the
+          caller is going to assume we will give what we got asked
+          for. */
+       printk (KERN_ERR "NM256: Read request too large: %d\n", amt);
+       amt = ringsize / 2;
+    }
+
+    if (amt < 8) {
+       printk (KERN_ERR "NM256: Read request too small; %d\n", amt);
+       return;
+    }
+
+    /* If we're not currently recording, set up the start and end registers
+       for the recording engine. */
+    if (! card->recording) {
+       card->recording = 1;
+       if (nm256_grabInterrupt (card) == 0) {
+           card->curRecPos = 0;
+           nm256_setInfo (card->dev_for_record, card);
+           nm256_writePort32 (card, 2, NM_RBUFFER_START, card->abuf2);
+           nm256_writePort32 (card, 2, NM_RBUFFER_END,
+                                card->abuf2 + ringsize);
+
+           nm256_writePort32 (card, 2, NM_RBUFFER_CURRP,
+                                card->abuf2 + card->curRecPos);
+           enableEngine = 1;
+       }
+       else {
+           /* Not sure what else to do here.  */
+           return;
+       }
+    }
+
+    endpos = card->abuf2 + ((card->curRecPos + amt) % ringsize);
+
+    card->recBuf = buffer;
+    card->requestedRecAmt = amt;
+    nm256_writePort32 (card, 2, NM_RBUFFER_WMARK, endpos);
+    /* Enable recording engine and interrupts. */
+    if (enableEngine)
+       nm256_writePort8 (card, 2, NM_RECORD_ENABLE_REG,
+                           NM_RECORD_ENABLE_FLAG | NM_RECORD_FREERUN);
+}
+
+/* Stop the play engine. */
+static void
+stopPlay (struct nm256_info *card)
+{
+    /* Shut off sound from both channels. */
+    nm256_writePort16 (card, 2, NM_AUDIO_MUTE_REG,
+                        NM_AUDIO_MUTE_LEFT | NM_AUDIO_MUTE_RIGHT);
+    /* Disable play engine. */
+    nm256_writePort8 (card, 2, NM_PLAYBACK_ENABLE_REG, 0);
+    if (card->playing) {
+       nm256_releaseInterrupt (card);
+
+       /* Reset the relevant state bits. */
+       card->playing = 0;
+       card->curPlayPos = 0;
+    }
+}
+
+/* Stop recording. */
+static void
+stopRecord (struct nm256_info *card)
+{
+    /* Disable recording engine. */
+    nm256_writePort8 (card, 2, NM_RECORD_ENABLE_REG, 0);
+
+    if (card->recording) {
+       nm256_releaseInterrupt (card);
+
+       card->recording = 0;
+       card->curRecPos = 0;
+    }
+}
+
+/* Ring buffers, man.  That's where the hip-hop, wild-n-wooly action's at.
+   1972?
+
+   Write AMT bytes of BUFFER to the playback ring buffer, and start the
+   playback engine running.  It will only accept up to 1/2 of the total
+   size of the ring buffer.  */
+
+static void
+nm256_write_block (struct nm256_info *card, char *buffer, u32 amt)
+{
+    u32 ringsize = card->playbackBufferSize;
+    u32 endstop;
+
+    if (amt > (ringsize / 2)) {
+       printk (KERN_ERR "NM256: Write request too large: %d\n", amt);
+       amt = (ringsize / 2);
+    }
+
+    if (amt < NM256_PLAY_WMARK_SIZE) {
+       printk (KERN_ERR "NM256: Write request too small: %d\n", amt);
+       return;
+    }
+
+    card->curPlayPos %= ringsize;
+
+    card->requested_amt = amt;
+
+    if ((card->curPlayPos + amt) >= ringsize) {
+       u32 rem = ringsize - card->curPlayPos;
+
+       nm256_writeBuffer8 (card, buffer, 1,
+                             card->abuf1 + card->curPlayPos,
+                             rem);
+       if (amt > rem)
+           nm256_writeBuffer8 (card, buffer, 1, card->abuf1,
+                                 amt - rem);
+    } 
+    else
+       nm256_writeBuffer8 (card, buffer, 1,
+                             card->abuf1 + card->curPlayPos,
+                             amt);
+
+    /* Setup the start-n-stop-n-limit registers, and start that engine
+       goin'. 
+
+       Normally we just let it wrap around to avoid the click-click
+       action scene. */
+    if (! card->playing) {
+       /* The PBUFFER_END register in this case points to one "word"
+          before the end of the buffer. */
+       int w = (card->dev_for_play == card->dev[0] ? 0 : 1);
+       int wordsize = (card->sinfo[w].bits == 16 ? 2 : 1)
+           * (card->sinfo[w].stereo ? 2 : 1);
+
+       /* Need to set the not-normally-changing-registers up. */
+       nm256_writePort32 (card, 2, NM_PBUFFER_START,
+                            card->abuf1 + card->curPlayPos);
+       nm256_writePort32 (card, 2, NM_PBUFFER_END,
+                            card->abuf1 + ringsize - wordsize);
+       nm256_writePort32 (card, 2, NM_PBUFFER_CURRP,
+                            card->abuf1 + card->curPlayPos);
+    }
+    endstop = (card->curPlayPos + amt - NM256_PLAY_WMARK_SIZE) % ringsize;
+    nm256_writePort32 (card, 2, NM_PBUFFER_WMARK, card->abuf1 + endstop);
+    if (! card->playing)
+       startPlay (card);
+}
+
+/* We just got a card playback interrupt; process it. */
+static void
+nm256_get_new_block (struct nm256_info *card)
+{
+    /* Check to see how much got played so far. */
+    u32 amt = nm256_readPort32 (card, 2, NM_PBUFFER_CURRP) - card->abuf1;
+
+    if (amt >= card->playbackBufferSize) {
+       printk (KERN_ERR "NM256: Sound playback pointer invalid!\n");
+       amt = 0;
+    }
+
+    if (amt < card->curPlayPos)
+       amt = (card->playbackBufferSize - card->curPlayPos) + amt;
+    else
+       amt -= card->curPlayPos;
+
+    if (card->requested_amt > (amt + NM256_PLAY_WMARK_SIZE)) {
+       u32 endstop = 
+           card->curPlayPos + card->requested_amt - NM256_PLAY_WMARK_SIZE;
+       nm256_writePort32 (card, 2, NM_PBUFFER_WMARK, card->abuf1 + endstop);
+    } else {
+       card->curPlayPos += card->requested_amt;
+       /* Get a new block to write.  This will eventually invoke
+          nm256_write_block ().  */
+       DMAbuf_outputintr (card->dev_for_play, 1);
+    }
+}
+
+/* Ultra cheez-whiz.  But I'm too lazy to grep headers. */
+#define MIN(X,Y) ((X) < (Y) ? (X) : (Y))
+
+/* Read the last-recorded block from the ring buffer, copy it into the
+   saved buffer pointer, and invoke DMAuf_inputintr() with the recording
+   device. */
+
+static void
+nm256_read_block (struct nm256_info *card)
+{
+    /* Grab the current position of the recording pointer. */
+    u32 currptr = nm256_readPort32 (card, 2, NM_RBUFFER_CURRP) - card->abuf2;
+    u32 amtToRead = card->requestedRecAmt;
+    u32 ringsize = card->recordBufferSize;
+
+    if (currptr >= card->recordBufferSize) {
+       printk (KERN_ERR "NM256: Sound buffer record pointer invalid!\n");
+        currptr = 0;
+    }
+
+    /* This test is probably redundant; we shouldn't be here unless
+       it's true.  */
+    if (card->recording) {
+       /* If we wrapped around, copy everything from the start of our
+          recording buffer to the end of the buffer. */
+       if (currptr < card->curRecPos) {
+           u32 amt = MIN (ringsize - card->curRecPos, amtToRead);
+
+           nm256_readBuffer8 (card, card->recBuf, 1,
+                                card->abuf2 + card->curRecPos,
+                                amt);
+           amtToRead -= amt;
+           card->curRecPos += amt;
+           card->recBuf += amt;
+           if (card->curRecPos == ringsize)
+               card->curRecPos = 0;
+       }
+
+       if ((card->curRecPos < currptr) && (amtToRead > 0)) {
+           u32 amt = MIN (currptr - card->curRecPos, amtToRead);
+           nm256_readBuffer8 (card, card->recBuf, 1,
+                                card->abuf2 + card->curRecPos, amt);
+           card->curRecPos = ((card->curRecPos + amt) % ringsize);
+       }
+       card->recBuf = NULL;
+       card->requestedRecAmt = 0;
+       DMAbuf_inputintr (card->dev_for_record);
+    }
+}
+#undef MIN
+
+/* Initialize the hardware and various other card data we'll need
+   later. */
+static void
+nm256_initHw (struct nm256_info *card)
+{
+    int x;
+
+    card->playbackBufferSize = 16384;
+    card->recordBufferSize = 16384;
+
+    card->coeffBuf = card->bufend - NM_MAX_COEFFICIENT;
+    card->abuf2 = card->coeffBuf - card->recordBufferSize;
+    card->abuf1 = card->abuf2 - card->playbackBufferSize;
+    card->allCoeffBuf = card->abuf2 - (NM_TOTAL_COEFF_COUNT * 4);
+
+    /* Fixed setting. */
+    card->mixer = NM_MIXER_BASE;
+
+    card->playing = 0;
+    card->is_open_play = 0;
+    card->curPlayPos = 0;
+
+    card->recording = 0;
+    card->is_open_record = 0;
+    card->curRecPos = 0;
+
+    card->coeffsCurrent = 0;
+
+    card->opencnt[0] = 0; card->opencnt[1] = 0;
+
+    /* Reset everything. */
+    nm256_writePort8 (card, 2, 0, 0x11);
+
+    /* Disable recording. */
+    nm256_writePort8 (card, 2, NM_RECORD_ENABLE_REG, 0);
+    nm256_writePort16 (card, 2, 0x214, 0);
+
+    /* Reasonable default settings, but largely unnecessary. */
+    for (x = 0; x < 2; x++) {
+       card->sinfo[x].bits = 8;
+       card->sinfo[x].stereo = 0;
+       card->sinfo[x].samplerate = 8000;
+    }
+}
+
+/* Handle a potential interrupt for the device referred to by DEV_ID. */
+
+static void
+nm256_interrupt (int irq, void *dev_id, struct pt_regs *dummy)
+{
+    struct nm256_info *card = (struct nm256_info *)dev_id;
+    u16 status;
+    static int badintrcount = 0;
+
+    if ((card == NULL) || (card->magsig != NM_MAGIC_SIG)) {
+       printk (KERN_ERR "NM256: Bad card pointer\n");
+       return;
+    }
+
+    status = nm256_readPort16 (card, 2, NM_INT_REG);
+
+    /* Not ours. */
+    if (status == 0) {
+       if (badintrcount++ > 1000) {
+           printk (KERN_ERR "NM256: Releasing interrupt, over 1000 invalid interrupts\n");
+           nm256_releaseInterrupt (card);
+       }
+       return;
+    }
+
+    badintrcount = 0;
+
+    if (status & NM_PLAYBACK_INT) {
+       status &= ~NM_PLAYBACK_INT;
+       NM_ACK_INT (card, NM_PLAYBACK_INT);
+
+       if (card->playing)
+           nm256_get_new_block (card);
+    }
+
+    if (status & NM_RECORD_INT) {
+       status &= ~NM_RECORD_INT;
+       NM_ACK_INT (card, NM_RECORD_INT);
+
+       if (card->recording)
+           nm256_read_block (card);
+    }
+
+    if (status & NM_MISC_INT_1) {
+       u8 cbyte;
+
+       status &= ~NM_MISC_INT_1;
+       printk (KERN_ERR "NM256: Got misc interrupt #1\n");
+       NM_ACK_INT (card, NM_MISC_INT_1);
+       nm256_writePort16 (card, 2, NM_INT_REG, 0x8000);
+       cbyte = nm256_readPort8 (card, 2, 0x400);
+       nm256_writePort8 (card, 2, 0x400, cbyte | 2);
+    }
+
+    if (status & NM_MISC_INT_2) {
+       u8 cbyte;
+
+       status &= ~NM_MISC_INT_2;
+       printk (KERN_ERR "NM256: Got misc interrupt #2\n");
+       NM_ACK_INT (card, NM_MISC_INT_2);
+       cbyte = nm256_readPort8 (card, 2, 0x400);
+       nm256_writePort8 (card, 2, 0x400, cbyte & ~2);
+    }
+
+    if (status) {
+       printk (KERN_ERR "NM256: Fire in the hole! Unknown status 0x%x\n",
+               status);
+       /* Pray. */
+       NM_ACK_INT (card, status);
+    }
+}
+
+/* Handle a potential interrupt for the device referred to by DEV_ID.
+   This handler is for the 256ZX.  */
+
+static void
+nm256_interrupt_zx (int irq, void *dev_id, struct pt_regs *dummy)
+{
+    struct nm256_info *card = (struct nm256_info *)dev_id;
+    u32 status;
+    static int badintrcount = 0;
+
+    if ((card == NULL) || (card->magsig != NM_MAGIC_SIG)) {
+       printk (KERN_ERR "NM256: Bad card pointer\n");
+       return;
+    }
+
+    status = nm256_readPort32 (card, 2, NM_INT_REG);
+
+    /* Not ours. */
+    if (status == 0) {
+       if (badintrcount++ > 1000) {
+           printk (KERN_ERR "NM256: Releasing interrupt, over 1000 invalid interrupts\n");
+           nm256_releaseInterrupt (card);
+       }
+       return;
+    }
+
+    badintrcount = 0;
+
+    if (status & NM2_PLAYBACK_INT) {
+       status &= ~NM2_PLAYBACK_INT;
+       NM2_ACK_INT (card, NM2_PLAYBACK_INT);
+
+       if (card->playing)
+           nm256_get_new_block (card);
+    }
+
+    if (status & NM2_RECORD_INT) {
+       status &= ~NM2_RECORD_INT;
+       NM2_ACK_INT (card, NM2_RECORD_INT);
+
+       if (card->recording)
+           nm256_read_block (card);
+    }
+
+    if (status & NM2_MISC_INT_1) {
+       u8 cbyte;
+
+       status &= ~NM2_MISC_INT_1;
+       printk (KERN_ERR "NM256: Got misc interrupt #1\n");
+       NM2_ACK_INT (card, NM2_MISC_INT_1);
+       cbyte = nm256_readPort8 (card, 2, 0x400);
+       nm256_writePort8 (card, 2, 0x400, cbyte | 2);
+    }
+
+    if (status & NM2_MISC_INT_2) {
+       u8 cbyte;
+
+       status &= ~NM2_MISC_INT_2;
+       printk (KERN_ERR "NM256: Got misc interrupt #2\n");
+       NM2_ACK_INT (card, NM2_MISC_INT_2);
+       cbyte = nm256_readPort8 (card, 2, 0x400);
+       nm256_writePort8 (card, 2, 0x400, cbyte & ~2);
+    }
+
+    if (status) {
+       printk (KERN_ERR "NM256: Fire in the hole! Unknown status 0x%x\n",
+               status);
+       /* Pray. */
+       NM2_ACK_INT (card, status);
+    }
+}
+
+/* Request our interrupt. */
+static int
+nm256_grabInterrupt (struct nm256_info *card)
+{
+    if (card->has_irq++ == 0) {
+       if (request_irq (card->irq, card->introutine, SA_SHIRQ,
+                        "NM256_audio", card) < 0) {
+           printk (KERN_ERR "NM256: can't obtain IRQ %d\n", card->irq);
+           return -1;
+       }
+    }
+    return 0;
+}
+
+/* Release our interrupt. */
+static int
+nm256_releaseInterrupt (struct nm256_info *card)
+{
+    if (card->has_irq <= 0) {
+       printk (KERN_ERR "nm256: too many calls to releaseInterrupt\n");
+       return -1;
+    }
+    card->has_irq--;
+    if (card->has_irq == 0) {
+       free_irq (card->irq, card);
+    }
+    return 0;
+}
+
+static int
+nm256_isReady (struct ac97_hwint *dev)
+{
+    struct nm256_info *card = (struct nm256_info *)dev->driver_private;
+    int t2 = 10;
+    u32 testaddr;
+    u16 testb;
+    int done = 0;
+
+    if (card->magsig != NM_MAGIC_SIG) {
+       printk (KERN_ERR "NM256: Bad magic signature in isReady!\n");
+       return 0;
+    }
+
+    if (card->rev == REV_NM256AV) {
+       testaddr = 0xa06;
+       testb = 0x0100;
+    } else if (card->rev == REV_NM256ZX) {
+       testaddr = 0xa08;
+       testb = 0x0800;
+    } else {
+       return -1;
+    }
+
+    while (t2-- > 0) {
+       if ((nm256_readPort16 (card, 2, testaddr) & testb) == 0) {
+           done = 1;
+           break;
+       }
+       udelay (100);
+    }
+    return done;
+}
+
+static int
+nm256_readAC97Reg (struct ac97_hwint *dev, u8 reg)
+{
+    struct nm256_info *card = (struct nm256_info *)dev->driver_private;
+
+    if (card->magsig != NM_MAGIC_SIG) {
+       printk (KERN_ERR "NM256: Bad magic signature in readAC97Reg!\n");
+       return -EINVAL;
+    }
+
+    if (reg < 128) {
+       int res;
+
+       nm256_isReady (dev);
+       res = nm256_readPort16 (card, 2, card->mixer + reg);
+        udelay (1000);
+       return res;
+    }
+    else
+       return -EINVAL;
+}
+
+static int
+nm256_writeAC97Reg (struct ac97_hwint *dev, u8 reg, u16 value)
+{
+    unsigned long flags;
+    int tries = 2;
+    int done = 0;
+    u32 base;
+
+    struct nm256_info *card = (struct nm256_info *)dev->driver_private;
+
+    if (card->magsig != NM_MAGIC_SIG) {
+       printk (KERN_ERR "NM256: Bad magic signature in writeAC97Reg!\n");
+       return -EINVAL;
+    }
+
+    base = card->mixer;
+
+    save_flags (flags);
+    cli ();
+
+    nm256_isReady (dev);
+
+    /* Wait for the write to take, too. */
+    while ((tries-- > 0) && !done) {
+       nm256_writePort16 (card, 2, base + reg, value);
+       if (nm256_isReady (dev)) {
+           done = 1;
+           break;
+       }
+
+    }
+
+    restore_flags (flags);
+    udelay (1000);
+
+    return ! done;
+}
+
+struct initialValues 
+{
+    unsigned short port;
+    unsigned short value;
+};
+
+static struct initialValues nm256_ac97_initial_values[] = 
+{
+    { 0x0002, 0x8000 },
+    { 0x0004, 0x0000 },
+    { 0x0006, 0x0000 },
+    { 0x000A, 0x0000 },
+    { 0x000C, 0x0008 },
+    { 0x000E, 0x8008 },
+    { 0x0010, 0x8808 },
+    { 0x0012, 0x8808 },
+    { 0x0014, 0x8808 },
+    { 0x0016, 0x8808 },
+    { 0x0018, 0x0808 },
+    { 0x001A, 0x0000 },
+    { 0x001C, 0x0B0B },
+    { 0x0020, 0x0000 },
+    { 0xffff, 0xffff }
+};
+
+static int
+nm256_resetAC97 (struct ac97_hwint *dev)
+{
+    struct nm256_info *card = (struct nm256_info *)dev->driver_private;
+    int x;
+
+    if (card->magsig != NM_MAGIC_SIG) {
+       printk (KERN_ERR "NM256: Bad magic signature in resetAC97!\n");
+       return -EINVAL;
+    }
+
+    /* Reset the card.  'Tis magic!  */
+    nm256_writePort8 (card, 2, 0x6c0, 1);
+    nm256_writePort8 (card, 2, 0x6cc, 0x87);
+    nm256_writePort8 (card, 2, 0x6cc, 0x80);
+    nm256_writePort8 (card, 2, 0x6cc, 0x0);
+
+    for (x = 0; nm256_ac97_initial_values[x].port != 0xffff; x++) {
+       ac97_put_register (dev,
+                          nm256_ac97_initial_values[x].port, 
+                          nm256_ac97_initial_values[x].value);
+    }
+
+    return 0;
+}
+
+/* We don't do anything special here.  */
+static int
+nm256_default_mixer_ioctl (int dev, unsigned int cmd, caddr_t arg)
+{
+    struct nm256_info *card = nm256_find_card_for_mixer (dev);
+    if (card != NULL)
+       return ac97_mixer_ioctl (&(card->mdev), cmd, arg);
+    else
+       return -ENODEV;
+}
+
+static struct mixer_operations nm256_mixer_operations = {
+    "NeoMagic",
+    "NM256AC97Mixer",
+    nm256_default_mixer_ioctl
+};
+
+/* I "love" C sometimes.  Got braces?  */
+static struct ac97_mixer_value_list mixer_defaults[] = {
+    { SOUND_MIXER_VOLUME,  { { 85, 85 } } },
+    { SOUND_MIXER_SPEAKER, { { 100 } } },
+    { SOUND_MIXER_PCM,     { { 65, 65 } } },
+    { SOUND_MIXER_CD,      { { 65, 65 } } },
+    { -1,                  {  { 0,  0 } } }
+};
+
+static int
+nm256_install_mixer (struct nm256_info *card)
+{
+    int mixer;
+
+    card->mdev.reset_device = nm256_resetAC97;
+    card->mdev.read_reg = nm256_readAC97Reg;
+    card->mdev.write_reg = nm256_writeAC97Reg;
+    card->mdev.driver_private = (void *)card;
+
+    if (ac97_init (&(card->mdev)))
+       return -1;
+
+    mixer = sound_alloc_mixerdev();
+    if (num_mixers >= MAX_MIXER_DEV) {
+       printk ("NM256 mixer: Unable to alloc mixerdev\n");
+       return -1;
+    }
+
+    mixer_devs[mixer] = &nm256_mixer_operations;
+    card->mixer_oss_dev = mixer;
+
+    /* Some reasonable default values.  */
+    ac97_set_values (&(card->mdev), mixer_defaults);
+
+    printk(KERN_INFO "Initialized AC97 mixer\n");
+    return 0;
+}
+
+/* See if the signature left by the NM256 BIOS is intact; if so, we use
+   the associated address as the end of our buffer. */
+static void
+nm256_peek_for_sig (struct nm256_info *card, u32 port1addr)
+{
+    char *temp = ioremap_nocache (port1addr + card->port1_end - 0x0400, 16);
+    u32 sig;
+
+    if (temp == NULL) {
+       printk (KERN_ERR "NM256: Unable to scan for card signature in video RAM\n");
+       return;
+    }
+    memcpy_fromio (&sig, temp, sizeof (u32));
+    if ((sig & 0xffff0000) == 0x4e4d0000) {
+       memcpy_fromio (&(card->bufend), temp + 4, sizeof (u32));
+       printk (KERN_INFO "NM256: Found card signature in video RAM: 0x%x\n",
+               card->bufend);
+    }
+
+    release_region ((unsigned long) temp, 16);
+}
+
+/* Install a driver for the soundcard referenced by PCIDEV. */
+
+static int
+nm256_install(struct pci_dev *pcidev, enum nm256rev rev, char *verstr)
+{
+    struct nm256_info *card;
+    u32 port1addr = pcidev->resource[0].start;
+    u32 port2addr = pcidev->resource[1].start;
+    int x;
+
+    card = kmalloc (sizeof (struct nm256_info), GFP_KERNEL);
+    if (card == NULL) {
+       printk (KERN_ERR "NM256: out of memory!\n");
+       return 0;
+    }
+
+    card->magsig = NM_MAGIC_SIG;
+    card->playing  = 0;
+    card->recording = 0;
+    card->rev = rev;
+
+    /* The NM256 has two memory ports.  The first port is nothing
+       more than a chunk of video RAM, which is used as the I/O ring
+       buffer.  The second port has the actual juicy stuff (like the
+       mixer and the playback engine control registers). */
+
+    card->ports[1] = ioremap_nocache (port2addr, NM_PORT2_SIZE);
+
+    if (card->ports[1] == NULL) {
+       printk (KERN_ERR "NM256: Unable to remap port 2\n");
+       kfree_s (card, sizeof (struct nm256_info));
+       return 0;
+    }
+
+    if (card->rev == REV_NM256AV) {
+       card->port1_end = 2560 * 1024;
+       card->introutine = nm256_interrupt;
+    } 
+    else {
+       if (nm256_readPort8 (card, 2, 0xa0b) != 0)
+           card->port1_end = 6144 * 1024;
+       else
+           card->port1_end = 4096 * 1024;
+
+       card->introutine = nm256_interrupt_zx;
+    }
+
+    /* Default value. */
+    card->bufend = card->port1_end - 0x1400;
+
+    if (buffertop >= 98304 && buffertop < card->port1_end)
+       card->bufend = buffertop;
+    else
+       nm256_peek_for_sig (card, port1addr);
+
+    card->port1_start = card->bufend - 98304;
+
+    printk (KERN_INFO "NM256: Mapping port 1 from 0x%x - 0x%x\n",
+           card->port1_start, card->port1_end);
+
+    card->ports[0] =
+       ioremap_nocache (port1addr + card->port1_start,
+                        card->port1_end - card->port1_start);
+
+    if (card->ports[0] == NULL) {
+       printk (KERN_ERR "NM256: Unable to remap port 1\n");
+       release_region ((unsigned long) card->ports[1], NM_PORT2_SIZE);
+       kfree_s (card, sizeof (struct nm256_info));
+       return 0;
+    }
+
+    /* See if we can get the interrupt. */
+
+    card->irq = pcidev->irq;
+    card->has_irq = 0;
+
+    if (nm256_grabInterrupt (card) != 0) {
+       release_region ((unsigned long) card->ports[0], 
+                       card->port1_end - card->port1_start);
+       release_region ((unsigned long) card->ports[1], NM_PORT2_SIZE);
+       kfree_s (card, sizeof (struct nm256_info));
+       return 0;
+    }
+
+    nm256_releaseInterrupt (card);
+
+    /*
+     * Init the board.
+     */
+
+    nm256_initHw (card);
+
+    for (x = 0; x < 2; x++) {
+       if ((card->dev[x] = 
+            sound_install_audiodrv(AUDIO_DRIVER_VERSION,
+                                   "NM256", &nm256_audio_driver,
+                                   sizeof(struct audio_driver),
+                                   DMA_NODMA, AFMT_U8 | AFMT_S16_LE,
+                                   NULL, -1, -1)) >= 0) {
+           /* 1K minimum buffer size. */
+           audio_devs[card->dev[x]]->min_fragment = 10;
+           /* Maximum of 8K buffer size. */
+           audio_devs[card->dev[x]]->max_fragment = 13;
+       }
+       else {
+           printk(KERN_ERR "NM256: Too many PCM devices available\n");
+           release_region ((unsigned long) card->ports[0], 
+                           card->port1_end - card->port1_start);
+           release_region ((unsigned long) card->ports[1], NM_PORT2_SIZE);
+           kfree_s (card, sizeof (struct nm256_info));
+           return 0;
+       }
+    }
+
+    /* Insert the card in the list.  */
+    card->next_card = nmcard_list;
+    nmcard_list = card;
+
+    printk(KERN_INFO "Initialized NeoMagic %s audio in PCI native mode\n",
+          verstr);
+
+    /* 
+     * And our mixer.  (We should allow support for other mixers, maybe.)
+     */
+
+    nm256_install_mixer (card);
+
+    return 1;
+}
+
+/*
+ *     This loop walks the PCI configuration database and finds where
+ *     the sound cards are.
+ */
+int
+init_nm256(void)
+{
+    struct pci_dev *pcidev = NULL;
+    int count = 0;
+
+    if(! pci_present())
+       return -ENODEV;
+
+    while((pcidev = pci_find_device(PCI_VENDOR_ID_NEOMAGIC,
+                                   PCI_DEVICE_ID_NEOMAGIC_NM256AV_AUDIO,
+                                   pcidev)) != NULL) {
+       count += nm256_install(pcidev, REV_NM256AV, "256AV");
+    }
+
+    while((pcidev = pci_find_device(PCI_VENDOR_ID_NEOMAGIC,
+                                   PCI_DEVICE_ID_NEOMAGIC_NM256ZX_AUDIO,
+                                   pcidev)) != NULL) {
+       count += nm256_install(pcidev, REV_NM256ZX, "256ZX");
+    }
+
+    if (count == 0)
+       return -ENODEV;
+
+    printk (KERN_INFO "Done installing NM256 audio driver.\n");
+    return 0;
+}
+
+/*
+ * Open the device
+ *
+ * DEV  - device
+ * MODE - mode to open device (logical OR of OPEN_READ and OPEN_WRITE)
+ *
+ * Called when opening the DMAbuf               (dmabuf.c:259)
+ */
+static int
+nm256_audio_open(int dev, int mode)
+{
+    struct nm256_info *card = nm256_find_card (dev);
+    int w;
+       
+    if (card == NULL)
+       return -ENODEV;
+
+    if (card->dev[0] == dev)
+       w = 0;
+    else if (card->dev[1] == dev)
+       w = 1;
+    else
+       return -ENODEV;
+
+    if (card->opencnt[w] > 0)
+       return -EBUSY;
+
+    /* No bits set? Huh? */
+    if (! ((mode & OPEN_READ) || (mode & OPEN_WRITE)))
+       return -EIO;
+
+    /* If it's open for both read and write, and the card's currently
+       being read or written to, then do the opposite of what has
+       already been done.  Otherwise, don't specify any mode until the
+       user actually tries to do I/O. */
+
+    if ((mode & OPEN_WRITE) && (mode & OPEN_READ)) {
+       if (card->is_open_play)
+           mode = OPEN_WRITE;
+       else if (card->is_open_record)
+           mode = OPEN_READ;
+       else mode = 0;
+    }
+       
+    if (mode & OPEN_WRITE) {
+       if (card->is_open_play == 0) {
+           card->dev_for_play = dev;
+           card->is_open_play = 1;
+       }
+       else
+           return -EBUSY;
+    }
+
+    if (mode & OPEN_READ) {
+       if (card->is_open_record == 0) {
+           card->dev_for_record = dev;
+           card->is_open_record = 1;
+       }
+       else
+           return -EBUSY;
+    }
+
+    card->opencnt[w]++;
+    return 0;
+}
+
+/*
+ * Close the device
+ *
+ * DEV  - device
+ *
+ * Called when closing the DMAbuf               (dmabuf.c:477)
+ *      after halt_xfer
+ */
+static void
+nm256_audio_close(int dev)
+{
+    struct nm256_info *card = nm256_find_card (dev);
+       
+    if (card != NULL) {
+       int w;
+
+       if (card->dev[0] == dev)
+           w = 0;
+       else if (card->dev[1] == dev)
+           w = 1;
+       else
+           return;
+
+       card->opencnt[w]--;
+       if (card->opencnt[w] <= 0) {
+           card->opencnt[w] = 0;
+
+           if (card->dev_for_play == dev) {
+               stopPlay (card);
+               card->is_open_play = 0;
+               card->dev_for_play = -1;
+           }
+
+           if (card->dev_for_record == dev) {
+               stopRecord (card);
+               card->is_open_record = 0;
+               card->dev_for_record = -1;
+           }
+       }
+    }
+}
+
+static int
+nm256_audio_ioctl(int dev, unsigned int cmd, caddr_t arg)
+{
+    int ret;
+    u32 oldinfo;
+    int w;
+
+    struct nm256_info *card = nm256_find_card (dev);
+
+    if (card == NULL)
+       return -ENODEV;
+
+    if (dev == card->dev[0])
+       w = 0;
+    else
+       w = 1;
+
+    switch (cmd)
+       {
+       case SOUND_PCM_WRITE_RATE:
+           get_user_ret(ret, (int *) arg, -EFAULT);
+
+           if (ret != 0) {
+               oldinfo = card->sinfo[w].samplerate;
+               card->sinfo[w].samplerate = ret;
+               ret = nm256_setInfo(dev, card);
+               if (ret != 0)
+                   card->sinfo[w].samplerate = oldinfo;
+           }
+           if (ret == 0)
+               ret = card->sinfo[w].samplerate;
+           break;
+
+       case SOUND_PCM_READ_RATE:
+           ret = card->sinfo[w].samplerate;
+           break;
+
+       case SNDCTL_DSP_STEREO:
+           get_user_ret(ret, (int *) arg, -EFAULT);
+
+           card->sinfo[w].stereo = ret ? 1 : 0;
+           ret = nm256_setInfo (dev, card);
+           if (ret == 0)
+               ret = card->sinfo[w].stereo;
+
+           break;
+
+       case SOUND_PCM_WRITE_CHANNELS:
+           get_user_ret(ret, (int *) arg, -EFAULT);
+
+           if (ret < 1 || ret > 3)
+               ret = card->sinfo[w].stereo + 1;
+           else {
+               card->sinfo[w].stereo = ret - 1;
+               ret = nm256_setInfo (dev, card);
+               if (ret == 0)
+                   ret = card->sinfo[w].stereo + 1;
+           }
+           break;
+
+       case SOUND_PCM_READ_CHANNELS:
+           ret = card->sinfo[w].stereo + 1;
+           break;
+
+       case SNDCTL_DSP_SETFMT:
+           get_user_ret(ret, (int *) arg, -EFAULT);
+
+           if (ret != 0) {
+               oldinfo = card->sinfo[w].bits;
+               card->sinfo[w].bits = ret;
+               ret = nm256_setInfo (dev, card);
+               if (ret != 0)
+                   card->sinfo[w].bits = oldinfo;
+           }
+           if (ret == 0)
+               ret = card->sinfo[w].bits;
+           break;
+
+       case SOUND_PCM_READ_BITS:
+           ret = card->sinfo[w].bits;
+           break;
+
+       default:
+           return -EINVAL;
+       }
+    return put_user(ret, (int *) arg);
+}
+
+/* Given the dev DEV and an associated physical buffer PHYSBUF, return
+   a pointer to the actual buffer in kernel space. */
+
+static char *
+nm256_getDMAbuffer (int dev, unsigned long physbuf)
+{
+    struct audio_operations *adev = audio_devs[dev];
+    struct dma_buffparms *dmap = adev->dmap_out;
+    char *dma_start =
+       (char *)(physbuf - (unsigned long)dmap->raw_buf_phys 
+                + (unsigned long)dmap->raw_buf);
+
+    return dma_start;
+}
+
+
+/*
+ * Output a block to sound device
+ *
+ * dev          - device number
+ * buf          - physical address of buffer
+ * total_count  - total byte count in buffer
+ * intrflag     - set if this has been called from an interrupt 
+ *                               (via DMAbuf_outputintr)
+ * restart_dma  - set if engine needs to be re-initialised
+ *
+ * Called when:
+ *  1. Starting output                                  (dmabuf.c:1327)
+ *  2.                                                  (dmabuf.c:1504)
+ *  3. A new buffer needs to be sent to the device      (dmabuf.c:1579)
+ */
+static void
+nm256_audio_output_block(int dev, unsigned long physbuf,
+                                      int total_count, int intrflag)
+{
+    struct nm256_info *card = nm256_find_card (dev);
+
+    if (card != NULL) {
+       char *dma_buf = nm256_getDMAbuffer (dev, physbuf);
+       card->is_open_play = 1;
+       card->dev_for_play = dev;
+       nm256_write_block (card, dma_buf, total_count);
+    }
+}
+
+static void
+nm256_audio_start_input(int dev, unsigned long physbuf, int count,
+                         int intrflag)
+{
+    struct nm256_info *card = nm256_find_card (dev);
+
+    if (card != NULL) {
+       char *dma_buf = nm256_getDMAbuffer (dev, physbuf);
+       card->is_open_record = 1;
+       card->dev_for_record = dev;
+       nm256_startRecording (card, dma_buf, count);
+    }
+}
+
+static int
+nm256_audio_prepare_for_input(int dev, int bsize, int bcount)
+{
+    struct nm256_info *card = nm256_find_card (dev);
+
+    if (card == NULL) 
+       return -ENODEV;
+
+    if (card->is_open_record && card->dev_for_record != dev)
+       return -EBUSY;
+
+    audio_devs[dev]->dmap_in->flags |= DMA_NODMA;
+    return 0;
+}
+
+/*
+ * Prepare for outputting samples to `dev'
+ *
+ * Each buffer that will be passed will be `bsize' bytes long,
+ * with a total of `bcount' buffers.
+ *
+ * Called when:
+ *  1. A trigger enables audio output                   (dmabuf.c:978)
+ *  2. We get a write buffer without dma_mode setup     (dmabuf.c:1152)
+ *  3. We restart a transfer                            (dmabuf.c:1324)
+ */
+static int
+nm256_audio_prepare_for_output(int dev, int bsize, int bcount)
+{
+    struct nm256_info *card = nm256_find_card (dev);
+
+    if (card == NULL)
+       return -ENODEV;
+
+    if (card->is_open_play && card->dev_for_play != dev)
+       return -EBUSY;
+
+    audio_devs[dev]->dmap_out->flags |= DMA_NODMA;
+    return 0;
+}
+
+/* Stop the current operations associated with DEV.  */
+static void
+nm256_audio_reset(int dev)
+{
+    struct nm256_info *card = nm256_find_card (dev);
+
+    if (card != NULL) {
+       if (card->dev_for_play == dev)
+           stopPlay (card);
+       if (card->dev_for_record == dev)
+           stopRecord (card);
+    }
+}
+
+static int
+nm256_audio_local_qlen(int dev)
+{
+    return 0;
+}
+
+static struct audio_driver nm256_audio_driver =
+{
+    nm256_audio_open,                  /* open                 */
+    nm256_audio_close,                 /* close                */
+    nm256_audio_output_block,          /* output_block         */
+    nm256_audio_start_input,           /* start_input          */
+    nm256_audio_ioctl,                 /* ioctl                */
+    nm256_audio_prepare_for_input,     /* prepare_for_input    */
+    nm256_audio_prepare_for_output,    /* prepare_for_output   */
+    nm256_audio_reset,                 /* reset                */
+    nm256_audio_local_qlen,            /*+local_qlen           */
+    NULL,                              /*+copy_from_user       */
+    NULL,                              /*+halt_input           */
+    NULL,                              /* halt_output          */
+    NULL,                              /*+trigger              */
+    NULL,                              /*+set_speed            */
+    NULL,                              /*+set_bits             */
+    NULL,                              /*+set_channels         */
+};
+
+EXPORT_SYMBOL(init_nm256);
+
+#ifdef MODULE
+
+static int loaded = 0;
+
+MODULE_PARM (usecache, "i");
+MODULE_PARM (buffertop, "i");
+MODULE_PARM (nm256_debug, "i");
+
+int
+init_module (void)
+{
+    nmcard_list = NULL;
+    printk (KERN_INFO "NeoMagic 256AV/256ZX audio driver, version 1.0\n");
+
+    if (init_nm256 () == 0) {
+       SOUND_LOCK;
+       loaded = 1;
+       return 0;
+    }
+    else
+       return -ENODEV;
+}
+
+void
+cleanup_module (void)
+{
+    if (loaded) {
+       struct nm256_info *card;
+       struct nm256_info *next_card;
+
+       SOUND_LOCK_END;
+
+       for (card = nmcard_list; card != NULL; card = next_card) {
+           stopPlay (card);
+           stopRecord (card);
+           if (card->has_irq)
+               free_irq (card->irq, card);
+           release_region ((unsigned long) card->ports[0], 
+                           card->port1_end - card->port1_start);
+           release_region ((unsigned long) card->ports[1], NM_PORT2_SIZE);
+           sound_unload_mixerdev (card->mixer_oss_dev);
+           sound_unload_audiodev (card->dev[0]);
+           sound_unload_audiodev (card->dev[1]);
+           next_card = card->next_card;
+           kfree_s (card, sizeof (struct nm256_info));
+       }
+       nmcard_list = NULL;
+    }
+}
+#endif
+\f
+/*
+ * Local variables:
+ *  c-basic-offset: 4
+ * End:
+ */
diff --git a/drivers/sound/nm256_coeff.h b/drivers/sound/nm256_coeff.h
new file mode 100644 (file)
index 0000000..c8fc7ec
--- /dev/null
@@ -0,0 +1,4693 @@
+#ifndef NM256_COEFF_H
+#define NM256_COEFF_H
+
+#define NM_TOTAL_COEFF_COUNT 0x3158
+
+static char coefficients[NM_TOTAL_COEFF_COUNT * 4] = { 
+       0xFF, 0xFF, 0x2F, 0x00, 0x4B, 0xFF, 0xA5, 0x01, 0xEF, 0xFC, 0x21,
+       0x05, 0x87, 0xF7, 0x62, 0x11, 0xE9, 0x45, 0x5E, 0xF9, 0xB5, 0x01,
+       0xDE, 0xFF, 0xA4, 0xFF, 0x60, 0x00, 0xCA, 0xFF, 0x0D, 0x00, 0xFD,
+       0xFF, 0x36, 0x00, 0x36, 0xFF, 0xE6, 0x01, 0x3D, 0xFC, 0xD6, 0x06,
+       0x4C, 0xF3, 0xED, 0x20, 0x3D, 0x3D, 0x4A, 0xF3, 0x4E, 0x05, 0xB1,
+       0xFD, 0xE1, 0x00, 0xC3, 0xFF, 0x05, 0x00, 0x02, 0x00, 0xFD, 0xFF,
+       0x2A, 0x00, 0x5C, 0xFF, 0xAA, 0x01, 0x71, 0xFC, 0x07, 0x07, 0x7E,
+       0xF1, 0x44, 0x30, 0x44, 0x30, 0x7E, 0xF1, 0x07, 0x07, 0x71, 0xFC,
+       0xAA, 0x01, 0x5C, 0xFF, 0x2A, 0x00, 0xFD, 0xFF, 0x02, 0x00, 0x05,
+       0x00, 0xC3, 0xFF, 0xE1, 0x00, 0xB1, 0xFD, 0x4E, 0x05, 0x4A, 0xF3,
+       0x3D, 0x3D, 0xED, 0x20, 0x4C, 0xF3, 0xD6, 0x06, 0x3D, 0xFC, 0xE6,
+       0x01, 0x36, 0xFF, 0x36, 0x00, 0xFD, 0xFF, 0x0D, 0x00, 0xCA, 0xFF,
+       0x60, 0x00, 0xA4, 0xFF, 0xDE, 0xFF, 0xB5, 0x01, 0x5E, 0xF9, 0xE9,
+       0x45, 0x62, 0x11, 0x87, 0xF7, 0x21, 0x05, 0xEF, 0xFC, 0xA5, 0x01,
+       0x4B, 0xFF, 0x2F, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x1E, 0x00, 0x84,
+       0xFF, 0x11, 0x01, 0x34, 0xFE, 0x8F, 0x02, 0xC7, 0xFC, 0xAE, 0x03,
+       0xF7, 0x48, 0xAE, 0x03, 0xC7, 0xFC, 0x8F, 0x02, 0x34, 0xFE, 0x11,
+       0x01, 0x84, 0xFF, 0x1E, 0x00, 0xFE, 0xFF, 0x34, 0x00, 0x3D, 0xFF,
+       0xCA, 0x01, 0x95, 0xFC, 0xEA, 0x05, 0xBB, 0xF5, 0x25, 0x17, 0x3C,
+       0x43, 0x8D, 0xF6, 0x43, 0x03, 0xF5, 0xFE, 0x26, 0x00, 0x20, 0x00,
+       0xE2, 0xFF, 0x08, 0x00, 0xFD, 0xFF, 0x30, 0x00, 0x4D, 0xFF, 0xC5,
+       0x01, 0x4C, 0xFC, 0x26, 0x07, 0xA3, 0xF1, 0xAB, 0x2C, 0xBB, 0x33,
+       0x8F, 0xF1, 0xCA, 0x06, 0xA6, 0xFC, 0x85, 0x01, 0x6F, 0xFF, 0x24,
+       0x00, 0xFD, 0xFF, 0x03, 0x00, 0xFE, 0xFF, 0xD5, 0xFF, 0xBC, 0x00,
+       0xF0, 0xFD, 0xEC, 0x04, 0xD9, 0xF3, 0xB1, 0x3E, 0xCD, 0x1E, 0xC1,
+       0xF3, 0xAF, 0x06, 0x49, 0xFC, 0xE4, 0x01, 0x36, 0xFF, 0x36, 0x00,
+       0xFE, 0xFF, 0x16, 0x00, 0xA6, 0xFF, 0xBB, 0x00, 0xE9, 0xFE, 0x38,
+       0x01, 0x4B, 0xFF, 0x28, 0xFE, 0x3A, 0x48, 0x04, 0x0A, 0x2E, 0xFA,
+       0xDF, 0x03, 0x8A, 0xFD, 0x60, 0x01, 0x65, 0xFF, 0x27, 0x00, 0x00,
+       0x00, 0xFF, 0xFF, 0x2E, 0x00, 0x50, 0xFF, 0x98, 0x01, 0x0D, 0xFD,
+       0xE0, 0x04, 0x14, 0xF8, 0xC3, 0x0F, 0x89, 0x46, 0x4C, 0xFA, 0x38,
+       0x01, 0x25, 0x00, 0x7D, 0xFF, 0x73, 0x00, 0xC2, 0xFF, 0x0F, 0x00,
+       0xFD, 0xFF, 0x35, 0x00, 0x3A, 0xFF, 0xE3, 0x01, 0x31, 0xFC, 0x0F,
+       0x07, 0x84, 0xF2, 0x29, 0x25, 0x1A, 0x3A, 0x67, 0xF2, 0xF6, 0x05,
+       0x41, 0xFD, 0x24, 0x01, 0xA1, 0xFF, 0x12, 0x00, 0x00, 0x00, 0xFF,
+       0xFF, 0x15, 0x00, 0x97, 0xFF, 0x37, 0x01, 0x22, 0xFD, 0x23, 0x06,
+       0x2F, 0xF2, 0x11, 0x39, 0x7B, 0x26, 0x50, 0xF2, 0x1B, 0x07, 0x32,
+       0xFC, 0xE1, 0x01, 0x3C, 0xFF, 0x35, 0x00, 0xFD, 0xFF, 0x0E, 0x00,
+       0xC8, 0xFF, 0x64, 0x00, 0x9B, 0xFF, 0xEE, 0xFF, 0x98, 0x01, 0x93,
+       0xF9, 0x10, 0x46, 0x03, 0x11, 0xA7, 0xF7, 0x12, 0x05, 0xF6, 0xFC,
+       0xA2, 0x01, 0x4C, 0xFF, 0x2F, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x26,
+       0x00, 0x6A, 0xFF, 0x53, 0x01, 0xA6, 0xFD, 0xA6, 0x03, 0xA1, 0xFA,
+       0xDE, 0x08, 0x76, 0x48, 0x0C, 0xFF, 0xDE, 0xFE, 0x73, 0x01, 0xC9,
+       0xFE, 0xCA, 0x00, 0xA0, 0xFF, 0x17, 0x00, 0xFE, 0xFF, 0x36, 0x00,
+       0x36, 0xFF, 0xE1, 0x01, 0x52, 0xFC, 0x93, 0x06, 0x10, 0xF4, 0x78,
+       0x1D, 0x90, 0x3F, 0x3E, 0xF4, 0xAA, 0x04, 0x19, 0xFE, 0xA4, 0x00,
+       0xE2, 0xFF, 0xFA, 0xFF, 0x03, 0x00, 0xFD, 0xFF, 0x26, 0x00, 0x68,
+       0xFF, 0x93, 0x01, 0x92, 0xFC, 0xE2, 0x06, 0x83, 0xF1, 0x8C, 0x32,
+       0xED, 0x2D, 0x90, 0xF1, 0x1E, 0x07, 0x57, 0xFC, 0xBD, 0x01, 0x51,
+       0xFF, 0x2E, 0x00, 0xFD, 0xFF, 0x07, 0x00, 0xE8, 0xFF, 0x12, 0x00,
+       0x42, 0x00, 0xC4, 0xFE, 0x94, 0x03, 0x02, 0xF6, 0x89, 0x42, 0x76,
+       0x18, 0x5C, 0xF5, 0x12, 0x06, 0x84, 0xFC, 0xD1, 0x01, 0x3B, 0xFF,
+       0x34, 0x00, 0xFE, 0xFF, 0x1D, 0x00, 0x8A, 0xFF, 0x03, 0x01, 0x53,
+       0xFE, 0x53, 0x02, 0x39, 0xFD, 0xA9, 0x02, 0xF2, 0x48, 0xB9, 0x04,
+       0x54, 0xFC, 0xCA, 0x02, 0x16, 0xFE, 0x20, 0x01, 0x7F, 0xFF, 0x20,
+       0x00, 0x00, 0x00, 0xFF, 0xFF, 0x33, 0x00, 0x40, 0xFF, 0xC3, 0x01,
+       0xA7, 0xFC, 0xC0, 0x05, 0x1E, 0xF6, 0xD8, 0x15, 0xE7, 0x43, 0x20,
+       0xF7, 0xEF, 0x02, 0x27, 0xFF, 0x0A, 0x00, 0x2E, 0x00, 0xDD, 0xFF,
+       0x09, 0x00, 0xFD, 0xFF, 0x31, 0x00, 0x48, 0xFF, 0xCD, 0x01, 0x43,
+       0xFC, 0x2A, 0x07, 0xBC, 0xF1, 0x64, 0x2B, 0xE3, 0x34, 0xA3, 0xF1,
+       0xAE, 0x06, 0xBD, 0xFC, 0x77, 0x01, 0x77, 0xFF, 0x21, 0x00, 0xFE,
+       0xFF, 0x02, 0x00, 0x03, 0x00, 0xCA, 0xFF, 0xD4, 0x00, 0xC8, 0xFD,
+       0x2A, 0x05, 0x7D, 0xF3, 0xCA, 0x3D, 0x22, 0x20, 0x76, 0xF3, 0xC8,
+       0x06, 0x41, 0xFC, 0xE6, 0x01, 0x36, 0xFF, 0x36, 0x00, 0xFD, 0xFF,
+       0x14, 0x00, 0xAC, 0xFF, 0xAC, 0x00, 0x08, 0xFF, 0xFD, 0x00, 0xB5,
+       0xFF, 0x4B, 0xFD, 0xF4, 0x47, 0x30, 0x0B, 0xBC, 0xF9, 0x17, 0x04,
+       0x6E, 0xFD, 0x6D, 0x01, 0x60, 0xFF, 0x29, 0x00, 0x00, 0x00, 0xFF,
+       0xFF, 0x2C, 0x00, 0x54, 0xFF, 0x8D, 0x01, 0x26, 0xFD, 0xAD, 0x04,
+       0x82, 0xF8, 0x87, 0x0E, 0xF9, 0x46, 0x0C, 0xFB, 0xD4, 0x00, 0x5D,
+       0x00, 0x5E, 0xFF, 0x82, 0x00, 0xBD, 0xFF, 0x10, 0x00, 0xFD, 0xFF,
+       0x36, 0x00, 0x38, 0xFF, 0xE5, 0x01, 0x33, 0xFC, 0x01, 0x07, 0xBE,
+       0xF2, 0xD6, 0x23, 0x1F, 0x3B, 0xA5, 0xF2, 0xC5, 0x05, 0x62, 0xFD,
+       0x10, 0x01, 0xAB, 0xFF, 0x0E, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x19,
+       0x00, 0x8E, 0xFF, 0x49, 0x01, 0x04, 0xFD, 0x4D, 0x06, 0x00, 0xF2,
+       0xFE, 0x37, 0xCB, 0x27, 0x21, 0xF2, 0x23, 0x07, 0x34, 0xFC, 0xDD,
+       0x01, 0x3F, 0xFF, 0x34, 0x00, 0xFD, 0xFF, 0x0C, 0x00, 0xCE, 0xFF,
+       0x56, 0x00, 0xB9, 0xFF, 0xB8, 0xFF, 0xF7, 0x01, 0xE2, 0xF8, 0x8D,
+       0x45, 0x46, 0x12, 0x3C, 0xF7, 0x43, 0x05, 0xDF, 0xFC, 0xAC, 0x01,
+       0x48, 0xFF, 0x30, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x24, 0x00, 0x70,
+       0xFF, 0x46, 0x01, 0xC3, 0xFD, 0x6D, 0x03, 0x14, 0xFB, 0xBE, 0x07,
+       0xA6, 0x48, 0xF8, 0xFF, 0x70, 0xFE, 0xAE, 0x01, 0xAA, 0xFE, 0xD9,
+       0x00, 0x9A, 0xFF, 0x19, 0x00, 0xFE, 0xFF, 0x36, 0x00, 0x37, 0xFF,
+       0xDE, 0x01, 0x5D, 0xFC, 0x74, 0x06, 0x63, 0xF4, 0x23, 0x1C, 0x66,
+       0x40, 0xAA, 0xF4, 0x65, 0x04, 0x44, 0xFE, 0x8B, 0x00, 0xEE, 0xFF,
+       0xF5, 0xFF, 0x04, 0x00, 0xFD, 0xFF, 0x29, 0x00, 0x61, 0xFF, 0x9F,
+       0x01, 0x80, 0xFC, 0xF7, 0x06, 0x7D, 0xF1, 0x5A, 0x31, 0x2C, 0x2F,
+       0x83, 0xF1, 0x13, 0x07, 0x64, 0xFC, 0xB3, 0x01, 0x57, 0xFF, 0x2C,
+       0x00, 0xFD, 0xFF, 0x06, 0x00, 0xED, 0xFF, 0x05, 0x00, 0x5D, 0x00,
+       0x95, 0xFE, 0xE2, 0x03, 0x7F, 0xF5, 0xCC, 0x41, 0xC7, 0x19, 0xFF,
+       0xF4, 0x37, 0x06, 0x75, 0xFC, 0xD6, 0x01, 0x39, 0xFF, 0x35, 0x00,
+       0xFE, 0xFF, 0x1B, 0x00, 0x90, 0xFF, 0xF4, 0x00, 0x72, 0xFE, 0x18,
+       0x02, 0xAA, 0xFD, 0xAB, 0x01, 0xDF, 0x48, 0xCA, 0x05, 0xE1, 0xFB,
+       0x05, 0x03, 0xF7, 0xFD, 0x2E, 0x01, 0x79, 0xFF, 0x21, 0x00, 0x00,
+       0x00, 0xFF, 0xFF, 0x32, 0x00, 0x43, 0xFF, 0xBB, 0x01, 0xBA, 0xFC,
+       0x95, 0x05, 0x83, 0xF6, 0x8C, 0x14, 0x87, 0x44, 0xBB, 0xF7, 0x98,
+       0x02, 0x5A, 0xFF, 0xEE, 0xFF, 0x3C, 0x00, 0xD8, 0xFF, 0x0A, 0x00,
+       0xFD, 0xFF, 0x32, 0x00, 0x44, 0xFF, 0xD3, 0x01, 0x3C, 0xFC, 0x2A,
+       0x07, 0xDC, 0xF1, 0x1A, 0x2A, 0x06, 0x36, 0xBE, 0xF1, 0x8E, 0x06,
+       0xD5, 0xFC, 0x67, 0x01, 0x7F, 0xFF, 0x1E, 0x00, 0xFE, 0xFF, 0x01,
+       0x00, 0x07, 0x00, 0xBE, 0xFF, 0xEA, 0x00, 0xA2, 0xFD, 0x65, 0x05,
+       0x28, 0xF3, 0xDB, 0x3C, 0x78, 0x21, 0x30, 0xF3, 0xDF, 0x06, 0x3A,
+       0xFC, 0xE6, 0x01, 0x37, 0xFF, 0x36, 0x00, 0xFD, 0xFF, 0x13, 0x00,
+       0xB2, 0xFF, 0x9D, 0x00, 0x27, 0xFF, 0xC3, 0x00, 0x1F, 0x00, 0x76,
+       0xFC, 0xA3, 0x47, 0x60, 0x0C, 0x4A, 0xF9, 0x4E, 0x04, 0x53, 0xFD,
+       0x79, 0x01, 0x5C, 0xFF, 0x2A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2B,
+       0x00, 0x58, 0xFF, 0x82, 0x01, 0x3F, 0xFD, 0x78, 0x04, 0xF2, 0xF8,
+       0x50, 0x0D, 0x5E, 0x47, 0xD5, 0xFB, 0x6F, 0x00, 0x96, 0x00, 0x40,
+       0xFF, 0x91, 0x00, 0xB7, 0xFF, 0x12, 0x00, 0xFD, 0xFF, 0x36, 0x00,
+       0x37, 0xFF, 0xE6, 0x01, 0x36, 0xFC, 0xEF, 0x06, 0xFC, 0xF2, 0x81,
+       0x22, 0x1C, 0x3C, 0xEC, 0xF2, 0x90, 0x05, 0x85, 0xFD, 0xFB, 0x00,
+       0xB6, 0xFF, 0x0A, 0x00, 0x01, 0x00, 0xFE, 0xFF, 0x1C, 0x00, 0x85,
+       0xFF, 0x5B, 0x01, 0xE9, 0xFC, 0x73, 0x06, 0xD8, 0xF1, 0xE5, 0x36,
+       0x19, 0x29, 0xF8, 0xF1, 0x29, 0x07, 0x37, 0xFC, 0xD8, 0x01, 0x42,
+       0xFF, 0x33, 0x00, 0xFD, 0xFF, 0x0B, 0x00, 0xD3, 0xFF, 0x47, 0x00,
+       0xD7, 0xFF, 0x82, 0xFF, 0x53, 0x02, 0x39, 0xF8, 0xFD, 0x44, 0x8D,
+       0x13, 0xD3, 0xF6, 0x72, 0x05, 0xCA, 0xFC, 0xB5, 0x01, 0x45, 0xFF,
+       0x31, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x23, 0x00, 0x75, 0xFF, 0x39,
+       0x01, 0xE0, 0xFD, 0x33, 0x03, 0x87, 0xFB, 0xA2, 0x06, 0xCB, 0x48,
+       0xEA, 0x00, 0x01, 0xFE, 0xE9, 0x01, 0x8A, 0xFE, 0xE8, 0x00, 0x95,
+       0xFF, 0x1A, 0x00, 0xFE, 0xFF, 0x35, 0x00, 0x38, 0xFF, 0xDA, 0x01,
+       0x6A, 0xFC, 0x53, 0x06, 0xBA, 0xF4, 0xCE, 0x1A, 0x32, 0x41, 0x1F,
+       0xF5, 0x1D, 0x04, 0x71, 0xFE, 0x71, 0x00, 0xFB, 0xFF, 0xF0, 0xFF,
+       0x05, 0x00, 0xFD, 0xFF, 0x2B, 0x00, 0x5B, 0xFF, 0xAB, 0x01, 0x6F,
+       0xFC, 0x08, 0x07, 0x7E, 0xF1, 0x21, 0x30, 0x67, 0x30, 0x7D, 0xF1,
+       0x05, 0x07, 0x73, 0xFC, 0xA8, 0x01, 0x5C, 0xFF, 0x2A, 0x00, 0xFD,
+       0xFF, 0x05, 0x00, 0xF2, 0xFF, 0xF8, 0xFF, 0x77, 0x00, 0x67, 0xFE,
+       0x2D, 0x04, 0x04, 0xF5, 0x07, 0x41, 0x1B, 0x1B, 0xA6, 0xF4, 0x5A,
+       0x06, 0x67, 0xFC, 0xDB, 0x01, 0x38, 0xFF, 0x36, 0x00, 0xFE, 0xFF,
+       0x1A, 0x00, 0x96, 0xFF, 0xE5, 0x00, 0x91, 0xFE, 0xDC, 0x01, 0x1A,
+       0xFE, 0xB3, 0x00, 0xC3, 0x48, 0xE1, 0x06, 0x6E, 0xFB, 0x40, 0x03,
+       0xDA, 0xFD, 0x3C, 0x01, 0x74, 0xFF, 0x23, 0x00, 0x00, 0x00, 0xFF,
+       0xFF, 0x31, 0x00, 0x46, 0xFF, 0xB3, 0x01, 0xCF, 0xFC, 0x67, 0x05,
+       0xEA, 0xF6, 0x44, 0x13, 0x1E, 0x45, 0x5E, 0xF8, 0x3F, 0x02, 0x8E,
+       0xFF, 0xD0, 0xFF, 0x4A, 0x00, 0xD2, 0xFF, 0x0B, 0x00, 0xFD, 0xFF,
+       0x33, 0x00, 0x41, 0xFF, 0xD9, 0x01, 0x36, 0xFC, 0x28, 0x07, 0x01,
+       0xF2, 0xCE, 0x28, 0x23, 0x37, 0xE0, 0xF1, 0x6B, 0x06, 0xEF, 0xFC,
+       0x57, 0x01, 0x87, 0xFF, 0x1B, 0x00, 0xFE, 0xFF, 0x01, 0x00, 0x0B,
+       0x00, 0xB4, 0xFF, 0x00, 0x01, 0x7E, 0xFD, 0x9C, 0x05, 0xDC, 0xF2,
+       0xE4, 0x3B, 0xCD, 0x22, 0xEE, 0xF2, 0xF3, 0x06, 0x35, 0xFC, 0xE6,
+       0x01, 0x37, 0xFF, 0x36, 0x00, 0xFD, 0xFF, 0x11, 0x00, 0xB8, 0xFF,
+       0x8E, 0x00, 0x46, 0xFF, 0x8A, 0x00, 0x86, 0x00, 0xA7, 0xFB, 0x48,
+       0x47, 0x95, 0x0D, 0xD9, 0xF8, 0x84, 0x04, 0x39, 0xFD, 0x85, 0x01,
+       0x57, 0xFF, 0x2B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x5D,
+       0xFF, 0x76, 0x01, 0x59, 0xFD, 0x42, 0x04, 0x63, 0xF9, 0x1C, 0x0C,
+       0xB6, 0x47, 0xA4, 0xFC, 0x07, 0x00, 0xD0, 0x00, 0x20, 0xFF, 0xA0,
+       0x00, 0xB1, 0xFF, 0x13, 0x00, 0xFD, 0xFF, 0x36, 0x00, 0x36, 0xFF,
+       0xE6, 0x01, 0x3B, 0xFC, 0xDA, 0x06, 0x3F, 0xF3, 0x2C, 0x21, 0x11,
+       0x3D, 0x3A, 0xF3, 0x58, 0x05, 0xAA, 0xFD, 0xE5, 0x00, 0xC1, 0xFF,
+       0x06, 0x00, 0x01, 0x00, 0xFE, 0xFF, 0x1F, 0x00, 0x7D, 0xFF, 0x6B,
+       0x01, 0xCF, 0xFC, 0x96, 0x06, 0xB7, 0xF1, 0xC6, 0x35, 0x64, 0x2A,
+       0xD4, 0xF1, 0x2B, 0x07, 0x3D, 0xFC, 0xD2, 0x01, 0x45, 0xFF, 0x32,
+       0x00, 0xFD, 0xFF, 0x0A, 0x00, 0xD9, 0xFF, 0x39, 0x00, 0xF4, 0xFF,
+       0x4E, 0xFF, 0xAC, 0x02, 0x98, 0xF7, 0x65, 0x44, 0xD6, 0x14, 0x6C,
+       0xF6, 0x9F, 0x05, 0xB6, 0xFC, 0xBD, 0x01, 0x42, 0xFF, 0x32, 0x00,
+       0xFF, 0xFF, 0x00, 0x00, 0x21, 0x00, 0x7A, 0xFF, 0x2B, 0x01, 0xFE,
+       0xFD, 0xF8, 0x02, 0xFB, 0xFB, 0x8D, 0x05, 0xE5, 0x48, 0xE3, 0x01,
+       0x91, 0xFD, 0x25, 0x02, 0x6B, 0xFE, 0xF7, 0x00, 0x8F, 0xFF, 0x1C,
+       0x00, 0xFE, 0xFF, 0x35, 0x00, 0x3A, 0xFF, 0xD5, 0x01, 0x78, 0xFC,
+       0x2F, 0x06, 0x13, 0xF5, 0x7C, 0x19, 0xF7, 0x41, 0x9B, 0xF5, 0xD1,
+       0x03, 0x9F, 0xFE, 0x57, 0x00, 0x08, 0x00, 0xEC, 0xFF, 0x06, 0x00,
+       0xFD, 0xFF, 0x2D, 0x00, 0x55, 0xFF, 0xB5, 0x01, 0x61, 0xFC, 0x16,
+       0x07, 0x85, 0xF1, 0xE6, 0x2E, 0x9E, 0x31, 0x7D, 0xF1, 0xF3, 0x06,
+       0x84, 0xFC, 0x9D, 0x01, 0x63, 0xFF, 0x28, 0x00, 0xFD, 0xFF, 0x04,
+       0x00, 0xF6, 0xFF, 0xEB, 0xFF, 0x91, 0x00, 0x3B, 0xFE, 0x75, 0x04,
+       0x92, 0xF4, 0x36, 0x40, 0x6E, 0x1C, 0x50, 0xF4, 0x7B, 0x06, 0x5B,
+       0xFC, 0xDF, 0x01, 0x37, 0xFF, 0x36, 0x00, 0xFE, 0xFF, 0x18, 0x00,
+       0x9C, 0xFF, 0xD6, 0x00, 0xB1, 0xFE, 0xA1, 0x01, 0x89, 0xFE, 0xC3,
+       0xFF, 0x9C, 0x48, 0xFD, 0x07, 0xFA, 0xFA, 0x7A, 0x03, 0xBC, 0xFD,
+       0x49, 0x01, 0x6E, 0xFF, 0x24, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x30,
+       0x00, 0x49, 0xFF, 0xAA, 0x01, 0xE4, 0xFC, 0x38, 0x05, 0x54, 0xF7,
+       0xFE, 0x11, 0xAA, 0x45, 0x09, 0xF9, 0xE2, 0x01, 0xC4, 0xFF, 0xB3,
+       0xFF, 0x59, 0x00, 0xCD, 0xFF, 0x0D, 0x00, 0xFD, 0xFF, 0x34, 0x00,
+       0x3E, 0xFF, 0xDE, 0x01, 0x33, 0xFC, 0x22, 0x07, 0x2B, 0xF2, 0x80,
+       0x27, 0x3B, 0x38, 0x0A, 0xF2, 0x44, 0x06, 0x0B, 0xFD, 0x45, 0x01,
+       0x90, 0xFF, 0x18, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x0F, 0x00, 0xA9,
+       0xFF, 0x15, 0x01, 0x5B, 0xFD, 0xD0, 0x05, 0x97, 0xF2, 0xE6, 0x3A,
+       0x21, 0x24, 0xB1, 0xF2, 0x04, 0x07, 0x33, 0xFC, 0xE5, 0x01, 0x39,
+       0xFF, 0x36, 0x00, 0xFD, 0xFF, 0x10, 0x00, 0xBE, 0xFF, 0x7F, 0x00,
+       0x65, 0xFF, 0x51, 0x00, 0xEB, 0x00, 0xE1, 0xFA, 0xE1, 0x46, 0xCD,
+       0x0E, 0x6A, 0xF8, 0xB8, 0x04, 0x20, 0xFD, 0x90, 0x01, 0x53, 0xFF,
+       0x2D, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x28, 0x00, 0x62, 0xFF, 0x6A,
+       0x01, 0x74, 0xFD, 0x0A, 0x04, 0xD5, 0xF9, 0xED, 0x0A, 0x03, 0x48,
+       0x7C, 0xFD, 0x9E, 0xFF, 0x0A, 0x01, 0x01, 0xFF, 0xAF, 0x00, 0xAB,
+       0xFF, 0x14, 0x00, 0xFD, 0xFF, 0x36, 0x00, 0x36, 0xFF, 0xE5, 0x01,
+       0x42, 0xFC, 0xC3, 0x06, 0x87, 0xF3, 0xD7, 0x1F, 0xFE, 0x3D, 0x91,
+       0xF3, 0x1D, 0x05, 0xD1, 0xFD, 0xCE, 0x00, 0xCC, 0xFF, 0x02, 0x00,
+       0x02, 0x00, 0xFE, 0xFF, 0x22, 0x00, 0x75, 0xFF, 0x7A, 0x01, 0xB8,
+       0xFC, 0xB4, 0x06, 0x9E, 0xF1, 0xA2, 0x34, 0xAD, 0x2B, 0xB6, 0xF1,
+       0x29, 0x07, 0x45, 0xFC, 0xCB, 0x01, 0x49, 0xFF, 0x31, 0x00, 0xFD,
+       0xFF, 0x09, 0x00, 0xDE, 0xFF, 0x2B, 0x00, 0x11, 0x00, 0x1B, 0xFF,
+       0x02, 0x03, 0xFE, 0xF6, 0xC3, 0x43, 0x22, 0x16, 0x07, 0xF6, 0xCA,
+       0x05, 0xA3, 0xFC, 0xC5, 0x01, 0x3F, 0xFF, 0x33, 0x00, 0xFF, 0xFF,
+       0x00, 0x00, 0x20, 0x00, 0x80, 0xFF, 0x1C, 0x01, 0x1C, 0xFE, 0xBD,
+       0x02, 0x6E, 0xFC, 0x7D, 0x04, 0xF3, 0x48, 0xE2, 0x02, 0x1F, 0xFD,
+       0x60, 0x02, 0x4C, 0xFE, 0x06, 0x01, 0x89, 0xFF, 0x1D, 0x00, 0xFE,
+       0xFF, 0x34, 0x00, 0x3C, 0xFF, 0xCF, 0x01, 0x88, 0xFC, 0x09, 0x06,
+       0x71, 0xF5, 0x2B, 0x18, 0xB2, 0x42, 0x20, 0xF6, 0x83, 0x03, 0xCF,
+       0xFE, 0x3C, 0x00, 0x15, 0x00, 0xE6, 0xFF, 0x07, 0x00, 0xFD, 0xFF,
+       0x2E, 0x00, 0x50, 0xFF, 0xBF, 0x01, 0x54, 0xFC, 0x20, 0x07, 0x94,
+       0xF1, 0xA6, 0x2D, 0xD0, 0x32, 0x85, 0xF1, 0xDD, 0x06, 0x96, 0xFC,
+       0x90, 0x01, 0x69, 0xFF, 0x26, 0x00, 0xFD, 0xFF, 0x03, 0x00, 0xFB,
+       0xFF, 0xDF, 0xFF, 0xA9, 0x00, 0x10, 0xFE, 0xB9, 0x04, 0x27, 0xF4,
+       0x5E, 0x3F, 0xC3, 0x1D, 0xFE, 0xF3, 0x99, 0x06, 0x50, 0xFC, 0xE2,
+       0x01, 0x36, 0xFF, 0x36, 0x00, 0xFE, 0xFF, 0x17, 0x00, 0xA2, 0xFF,
+       0xC7, 0x00, 0xD0, 0xFE, 0x65, 0x01, 0xF6, 0xFE, 0xD9, 0xFE, 0x6A,
+       0x48, 0x1F, 0x09, 0x87, 0xFA, 0xB3, 0x03, 0xA0, 0xFD, 0x56, 0x01,
+       0x69, 0xFF, 0x26, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x2F, 0x00, 0x4D,
+       0xFF, 0xA0, 0x01, 0xFB, 0xFC, 0x07, 0x05, 0xBF, 0xF7, 0xBB, 0x10,
+       0x2B, 0x46, 0xBB, 0xF9, 0x83, 0x01, 0xFA, 0xFF, 0x95, 0xFF, 0x68,
+       0x00, 0xC7, 0xFF, 0x0E, 0x00, 0xFD, 0xFF, 0x35, 0x00, 0x3C, 0xFF,
+       0xE1, 0x01, 0x31, 0xFC, 0x19, 0x07, 0x5B, 0xF2, 0x30, 0x26, 0x4B,
+       0x39, 0x3B, 0xF2, 0x1A, 0x06, 0x29, 0xFD, 0x33, 0x01, 0x99, 0xFF,
+       0x15, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x13, 0x00, 0x9F, 0xFF, 0x28,
+       0x01, 0x3A, 0xFD, 0x00, 0x06, 0x5A, 0xF2, 0xDF, 0x39, 0x73, 0x25,
+       0x79, 0xF2, 0x12, 0x07, 0x31, 0xFC, 0xE3, 0x01, 0x3B, 0xFF, 0x35,
+       0x00, 0xFD, 0xFF, 0x0F, 0x00, 0xC4, 0xFF, 0x70, 0x00, 0x84, 0xFF,
+       0x19, 0x00, 0x4D, 0x01, 0x22, 0xFA, 0x70, 0x46, 0x0A, 0x10, 0xFC,
+       0xF7, 0xEB, 0x04, 0x08, 0xFD, 0x9A, 0x01, 0x4F, 0xFF, 0x2E, 0x00,
+       0xFF, 0xFF, 0x00, 0x00, 0x27, 0x00, 0x66, 0xFF, 0x5E, 0x01, 0x90,
+       0xFD, 0xD2, 0x03, 0x47, 0xFA, 0xC3, 0x09, 0x48, 0x48, 0x5A, 0xFE,
+       0x33, 0xFF, 0x45, 0x01, 0xE2, 0xFE, 0xBE, 0x00, 0xA5, 0xFF, 0x16,
+       0x00, 0xFE, 0xFF, 0x36, 0x00, 0x36, 0xFF, 0xE3, 0x01, 0x4B, 0xFC,
+       0xA9, 0x06, 0xD2, 0xF3, 0x81, 0x1E, 0xE4, 0x3E, 0xEF, 0xF3, 0xDE,
+       0x04, 0xF9, 0xFD, 0xB7, 0x00, 0xD8, 0xFF, 0xFD, 0xFF, 0x03, 0x00,
+       0xFD, 0xFF, 0x24, 0x00, 0x6D, 0xFF, 0x88, 0x01, 0xA2, 0xFC, 0xD0,
+       0x06, 0x8C, 0xF1, 0x78, 0x33, 0xF2, 0x2C, 0x9E, 0xF1, 0x24, 0x07,
+       0x4E, 0xFC, 0xC3, 0x01, 0x4E, 0xFF, 0x2F, 0x00, 0xFD, 0xFF, 0x08,
+       0x00, 0xE4, 0xFF, 0x1D, 0x00, 0x2D, 0x00, 0xEA, 0xFE, 0x56, 0x03,
+       0x6D, 0xF6, 0x17, 0x43, 0x70, 0x17, 0xA6, 0xF5, 0xF3, 0x05, 0x91,
+       0xFC, 0xCC, 0x01, 0x3D, 0xFF, 0x34, 0x00, 0xFE, 0xFF, 0x1E, 0x00,
+       0x86, 0xFF, 0x0E, 0x01, 0x3B, 0xFE, 0x82, 0x02, 0xE0, 0xFC, 0x73,
+       0x03, 0xF6, 0x48, 0xE9, 0x03, 0xAD, 0xFC, 0x9C, 0x02, 0x2D, 0xFE,
+       0x14, 0x01, 0x83, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x33,
+       0x00, 0x3E, 0xFF, 0xC9, 0x01, 0x99, 0xFC, 0xE1, 0x05, 0xD1, 0xF5,
+       0xDC, 0x16, 0x65, 0x43, 0xAD, 0xF6, 0x31, 0x03, 0x00, 0xFF, 0x20,
+       0x00, 0x23, 0x00, 0xE1, 0xFF, 0x08, 0x00, 0xFD, 0xFF, 0x30, 0x00,
+       0x4C, 0xFF, 0xC7, 0x01, 0x4A, 0xFC, 0x27, 0x07, 0xA8, 0xF1, 0x62,
+       0x2C, 0xFD, 0x33, 0x93, 0xF1, 0xC4, 0x06, 0xAB, 0xFC, 0x82, 0x01,
+       0x71, 0xFF, 0x23, 0x00, 0xFE, 0xFF, 0x02, 0x00, 0xFF, 0xFF, 0xD3,
+       0xFF, 0xC1, 0x00, 0xE7, 0xFD, 0xFA, 0x04, 0xC4, 0xF3, 0x7E, 0x3E,
+       0x19, 0x1F, 0xB0, 0xF3, 0xB5, 0x06, 0x47, 0xFC, 0xE4, 0x01, 0x36,
+       0xFF, 0x36, 0x00, 0xFD, 0xFF, 0x15, 0x00, 0xA8, 0xFF, 0xB8, 0x00,
+       0xF0, 0xFE, 0x2B, 0x01, 0x63, 0xFF, 0xF6, 0xFD, 0x2C, 0x48, 0x47,
+       0x0A, 0x14, 0xFA, 0xEB, 0x03, 0x84, 0xFD, 0x63, 0x01, 0x64, 0xFF,
+       0x27, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x2D, 0x00, 0x51, 0xFF, 0x96,
+       0x01, 0x13, 0xFD, 0xD5, 0x04, 0x2C, 0xF8, 0x7D, 0x0F, 0xA3, 0x46,
+       0x76, 0xFA, 0x22, 0x01, 0x32, 0x00, 0x76, 0xFF, 0x76, 0x00, 0xC1,
+       0xFF, 0x0F, 0x00, 0xFD, 0xFF, 0x36, 0x00, 0x3A, 0xFF, 0xE4, 0x01,
+       0x32, 0xFC, 0x0C, 0x07, 0x91, 0xF2, 0xDD, 0x24, 0x54, 0x3A, 0x74,
+       0xF2, 0xEB, 0x05, 0x49, 0xFD, 0x20, 0x01, 0xA3, 0xFF, 0x11, 0x00,
+       0x00, 0x00, 0xFF, 0xFF, 0x16, 0x00, 0x95, 0xFF, 0x3B, 0x01, 0x1B,
+       0xFD, 0x2D, 0x06, 0x24, 0xF2, 0xD3, 0x38, 0xC6, 0x26, 0x45, 0xF2,
+       0x1D, 0x07, 0x32, 0xFC, 0xE0, 0x01, 0x3D, 0xFF, 0x35, 0x00, 0xFD,
+       0xFF, 0x0D, 0x00, 0xC9, 0xFF, 0x61, 0x00, 0xA2, 0xFF, 0xE2, 0xFF,
+       0xAE, 0x01, 0x6B, 0xF9, 0xF2, 0x45, 0x4A, 0x11, 0x8F, 0xF7, 0x1D,
+       0x05, 0xF1, 0xFC, 0xA4, 0x01, 0x4B, 0xFF, 0x2F, 0x00, 0xFF, 0xFF,
+       0x00, 0x00, 0x25, 0x00, 0x6C, 0xFF, 0x51, 0x01, 0xAC, 0xFD, 0x9A,
+       0x03, 0xBA, 0xFA, 0x9E, 0x08, 0x81, 0x48, 0x40, 0xFF, 0xC6, 0xFE,
+       0x80, 0x01, 0xC2, 0xFE, 0xCE, 0x00, 0x9F, 0xFF, 0x17, 0x00, 0xFE,
+       0xFF, 0x36, 0x00, 0x37, 0xFF, 0xE1, 0x01, 0x55, 0xFC, 0x8C, 0x06,
+       0x22, 0xF4, 0x2C, 0x1D, 0xC0, 0x3F, 0x55, 0xF4, 0x9B, 0x04, 0x23,
+       0xFE, 0x9F, 0x00, 0xE4, 0xFF, 0xF9, 0xFF, 0x04, 0x00, 0xFD, 0xFF,
+       0x27, 0x00, 0x66, 0xFF, 0x96, 0x01, 0x8E, 0xFC, 0xE7, 0x06, 0x81,
+       0xF1, 0x48, 0x32, 0x34, 0x2E, 0x8D, 0xF1, 0x1C, 0x07, 0x5A, 0xFC,
+       0xBB, 0x01, 0x53, 0xFF, 0x2E, 0x00, 0xFD, 0xFF, 0x07, 0x00, 0xE9,
+       0xFF, 0x0F, 0x00, 0x48, 0x00, 0xB9, 0xFE, 0xA6, 0x03, 0xE4, 0xF5,
+       0x60, 0x42, 0xC1, 0x18, 0x47, 0xF5, 0x1A, 0x06, 0x81, 0xFC, 0xD2,
+       0x01, 0x3B, 0xFF, 0x35, 0x00, 0xFE, 0xFF, 0x1C, 0x00, 0x8B, 0xFF,
+       0xFF, 0x00, 0x5A, 0xFE, 0x46, 0x02, 0x52, 0xFD, 0x70, 0x02, 0xED,
+       0x48, 0xF5, 0x04, 0x3B, 0xFC, 0xD7, 0x02, 0x0F, 0xFE, 0x23, 0x01,
+       0x7E, 0xFF, 0x20, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x33, 0x00, 0x40,
+       0xFF, 0xC1, 0x01, 0xAB, 0xFC, 0xB7, 0x05, 0x34, 0xF6, 0x8E, 0x15,
+       0x0B, 0x44, 0x42, 0xF7, 0xDC, 0x02, 0x32, 0xFF, 0x04, 0x00, 0x31,
+       0x00, 0xDC, 0xFF, 0x09, 0x00, 0xFD, 0xFF, 0x31, 0x00, 0x47, 0xFF,
+       0xCE, 0x01, 0x41, 0xFC, 0x2A, 0x07, 0xC2, 0xF1, 0x1B, 0x2B, 0x25,
+       0x35, 0xA8, 0xF1, 0xA7, 0x06, 0xC2, 0xFC, 0x74, 0x01, 0x78, 0xFF,
+       0x20, 0x00, 0xFE, 0xFF, 0x02, 0x00, 0x04, 0x00, 0xC7, 0xFF, 0xD9,
+       0x00, 0xBF, 0xFD, 0x38, 0x05, 0x69, 0xF3, 0x96, 0x3D, 0x6F, 0x20,
+       0x66, 0xF3, 0xCE, 0x06, 0x3F, 0xFC, 0xE6, 0x01, 0x36, 0xFF, 0x36,
+       0x00, 0xFD, 0xFF, 0x14, 0x00, 0xAE, 0xFF, 0xA9, 0x00, 0x0F, 0xFF,
+       0xF0, 0x00, 0xCD, 0xFF, 0x1B, 0xFD, 0xE4, 0x47, 0x73, 0x0B, 0xA2,
+       0xF9, 0x23, 0x04, 0x68, 0xFD, 0x70, 0x01, 0x5F, 0xFF, 0x29, 0x00,
+       0x00, 0x00, 0xFF, 0xFF, 0x2C, 0x00, 0x55, 0xFF, 0x8B, 0x01, 0x2B,
+       0xFD, 0xA1, 0x04, 0x9B, 0xF8, 0x42, 0x0E, 0x0F, 0x47, 0x38, 0xFB,
+       0xBE, 0x00, 0x6A, 0x00, 0x58, 0xFF, 0x85, 0x00, 0xBB, 0xFF, 0x10,
+       0x00, 0xFD, 0xFF, 0x36, 0x00, 0x38, 0xFF, 0xE6, 0x01, 0x34, 0xFC,
+       0xFD, 0x06, 0xCB, 0xF2, 0x8A, 0x23, 0x58, 0x3B, 0xB4, 0xF2, 0xBA,
+       0x05, 0x6A, 0xFD, 0x0B, 0x01, 0xAE, 0xFF, 0x0D, 0x00, 0x00, 0x00,
+       0xFF, 0xFF, 0x19, 0x00, 0x8C, 0xFF, 0x4D, 0x01, 0xFE, 0xFC, 0x56,
+       0x06, 0xF7, 0xF1, 0xBF, 0x37, 0x15, 0x28, 0x18, 0xF2, 0x25, 0x07,
+       0x34, 0xFC, 0xDC, 0x01, 0x3F, 0xFF, 0x34, 0x00, 0xFD, 0xFF, 0x0C,
+       0x00, 0xCF, 0xFF, 0x52, 0x00, 0xC0, 0xFF, 0xAC, 0xFF, 0x0C, 0x02,
+       0xBC, 0xF8, 0x6D, 0x45, 0x8E, 0x12, 0x24, 0xF7, 0x4D, 0x05, 0xDB,
+       0xFC, 0xAE, 0x01, 0x48, 0xFF, 0x30, 0x00, 0xFF, 0xFF, 0x00, 0x00,
+       0x24, 0x00, 0x71, 0xFF, 0x43, 0x01, 0xC9, 0xFD, 0x60, 0x03, 0x2E,
+       0xFB, 0x7E, 0x07, 0xAF, 0x48, 0x2D, 0x00, 0x58, 0xFE, 0xBB, 0x01,
+       0xA3, 0xFE, 0xDD, 0x00, 0x99, 0xFF, 0x19, 0x00, 0xFE, 0xFF, 0x36,
+       0x00, 0x37, 0xFF, 0xDD, 0x01, 0x60, 0xFC, 0x6D, 0x06, 0x76, 0xF4,
+       0xD8, 0x1B, 0x95, 0x40, 0xC3, 0xF4, 0x56, 0x04, 0x4E, 0xFE, 0x85,
+       0x00, 0xF1, 0xFF, 0xF4, 0xFF, 0x04, 0x00, 0xFD, 0xFF, 0x29, 0x00,
+       0x60, 0xFF, 0xA2, 0x01, 0x7C, 0xFC, 0xFB, 0x06, 0x7C, 0xF1, 0x15,
+       0x31, 0x73, 0x2F, 0x81, 0xF1, 0x10, 0x07, 0x67, 0xFC, 0xB1, 0x01,
+       0x58, 0xFF, 0x2C, 0x00, 0xFD, 0xFF, 0x06, 0x00, 0xEE, 0xFF, 0x02,
+       0x00, 0x63, 0x00, 0x8A, 0xFE, 0xF3, 0x03, 0x63, 0xF5, 0xA1, 0x41,
+       0x12, 0x1A, 0xEB, 0xF4, 0x3F, 0x06, 0x72, 0xFC, 0xD7, 0x01, 0x39,
+       0xFF, 0x35, 0x00, 0xFE, 0xFF, 0x1B, 0x00, 0x91, 0xFF, 0xF1, 0x00,
+       0x79, 0xFE, 0x0A, 0x02, 0xC3, 0xFD, 0x73, 0x01, 0xDB, 0x48, 0x07,
+       0x06, 0xC7, 0xFB, 0x12, 0x03, 0xF1, 0xFD, 0x31, 0x01, 0x78, 0xFF,
+       0x22, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x32, 0x00, 0x43, 0xFF, 0xBA,
+       0x01, 0xBF, 0xFC, 0x8B, 0x05, 0x99, 0xF6, 0x43, 0x14, 0xA9, 0x44,
+       0xDE, 0xF7, 0x85, 0x02, 0x65, 0xFF, 0xE7, 0xFF, 0x3F, 0x00, 0xD6,
+       0xFF, 0x0A, 0x00, 0xFD, 0xFF, 0x32, 0x00, 0x44, 0xFF, 0xD5, 0x01,
+       0x3A, 0xFC, 0x2A, 0x07, 0xE3, 0xF1, 0xD1, 0x29, 0x46, 0x36, 0xC5,
+       0xF1, 0x87, 0x06, 0xDA, 0xFC, 0x64, 0x01, 0x80, 0xFF, 0x1E, 0x00,
+       0xFE, 0xFF, 0x01, 0x00, 0x08, 0x00, 0xBC, 0xFF, 0xEF, 0x00, 0x9A,
+       0xFD, 0x72, 0x05, 0x16, 0xF3, 0xA5, 0x3C, 0xC4, 0x21, 0x21, 0xF3,
+       0xE4, 0x06, 0x39, 0xFC, 0xE6, 0x01, 0x37, 0xFF, 0x36, 0x00, 0xFD,
+       0xFF, 0x12, 0x00, 0xB3, 0xFF, 0x99, 0x00, 0x2E, 0xFF, 0xB6, 0x00,
+       0x36, 0x00, 0x47, 0xFC, 0x90, 0x47, 0xA4, 0x0C, 0x31, 0xF9, 0x5A,
+       0x04, 0x4E, 0xFD, 0x7C, 0x01, 0x5B, 0xFF, 0x2A, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x2B, 0x00, 0x59, 0xFF, 0x80, 0x01, 0x45, 0xFD, 0x6C,
+       0x04, 0x0B, 0xF9, 0x0B, 0x0D, 0x73, 0x47, 0x02, 0xFC, 0x58, 0x00,
+       0xA3, 0x00, 0x39, 0xFF, 0x94, 0x00, 0xB5, 0xFF, 0x12, 0x00, 0xFD,
+       0xFF, 0x36, 0x00, 0x37, 0xFF, 0xE6, 0x01, 0x37, 0xFC, 0xEB, 0x06,
+       0x0B, 0xF3, 0x35, 0x22, 0x52, 0x3C, 0xFD, 0xF2, 0x84, 0x05, 0x8D,
+       0xFD, 0xF6, 0x00, 0xB8, 0xFF, 0x09, 0x00, 0x01, 0x00, 0xFE, 0xFF,
+       0x1D, 0x00, 0x83, 0xFF, 0x5E, 0x01, 0xE3, 0xFC, 0x7B, 0x06, 0xD0,
+       0xF1, 0xA5, 0x36, 0x62, 0x29, 0xEF, 0xF1, 0x29, 0x07, 0x39, 0xFC,
+       0xD7, 0x01, 0x42, 0xFF, 0x33, 0x00, 0xFD, 0xFF, 0x0B, 0x00, 0xD5,
+       0xFF, 0x44, 0x00, 0xDD, 0xFF, 0x77, 0xFF, 0x67, 0x02, 0x14, 0xF8,
+       0xDC, 0x44, 0xD5, 0x13, 0xBC, 0xF6, 0x7C, 0x05, 0xC5, 0xFC, 0xB7,
+       0x01, 0x44, 0xFF, 0x31, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x22, 0x00,
+       0x76, 0xFF, 0x35, 0x01, 0xE7, 0xFD, 0x26, 0x03, 0xA1, 0xFB, 0x64,
+       0x06, 0xD2, 0x48, 0x21, 0x01, 0xE8, 0xFD, 0xF7, 0x01, 0x83, 0xFE,
+       0xEC, 0x00, 0x93, 0xFF, 0x1A, 0x00, 0xFE, 0xFF, 0x35, 0x00, 0x39,
+       0xFF, 0xD9, 0x01, 0x6D, 0xFC, 0x4B, 0x06, 0xCD, 0xF4, 0x83, 0x1A,
+       0x5F, 0x41, 0x3A, 0xF5, 0x0C, 0x04, 0x7B, 0xFE, 0x6C, 0x00, 0xFE,
+       0xFF, 0xEF, 0xFF, 0x05, 0x00, 0xFD, 0xFF, 0x2B, 0x00, 0x5A, 0xFF,
+       0xAD, 0x01, 0x6C, 0xFC, 0x0C, 0x07, 0x7F, 0xF1, 0xDC, 0x2F, 0xAD,
+       0x30, 0x7D, 0xF1, 0x01, 0x07, 0x76, 0xFC, 0xA6, 0x01, 0x5E, 0xFF,
+       0x2A, 0x00, 0xFD, 0xFF, 0x05, 0x00, 0xF3, 0xFF, 0xF5, 0xFF, 0x7D,
+       0x00, 0x5D, 0xFE, 0x3E, 0x04, 0xEA, 0xF4, 0xD9, 0x40, 0x66, 0x1B,
+       0x93, 0xF4, 0x62, 0x06, 0x64, 0xFC, 0xDC, 0x01, 0x38, 0xFF, 0x36,
+       0x00, 0xFE, 0xFF, 0x19, 0x00, 0x97, 0xFF, 0xE2, 0x00, 0x98, 0xFE,
+       0xCF, 0x01, 0x33, 0xFE, 0x7D, 0x00, 0xBB, 0x48, 0x1F, 0x07, 0x54,
+       0xFB, 0x4C, 0x03, 0xD3, 0xFD, 0x3F, 0x01, 0x73, 0xFF, 0x23, 0x00,
+       0x00, 0x00, 0xFF, 0xFF, 0x31, 0x00, 0x46, 0xFF, 0xB1, 0x01, 0xD3,
+       0xFC, 0x5D, 0x05, 0x01, 0xF7, 0xFB, 0x12, 0x3F, 0x45, 0x83, 0xF8,
+       0x2A, 0x02, 0x9A, 0xFF, 0xCA, 0xFF, 0x4E, 0x00, 0xD1, 0xFF, 0x0C,
+       0x00, 0xFD, 0xFF, 0x34, 0x00, 0x40, 0xFF, 0xDA, 0x01, 0x35, 0xFC,
+       0x27, 0x07, 0x09, 0xF2, 0x85, 0x28, 0x63, 0x37, 0xE9, 0xF1, 0x63,
+       0x06, 0xF5, 0xFC, 0x53, 0x01, 0x89, 0xFF, 0x1A, 0x00, 0xFE, 0xFF,
+       0x00, 0x00, 0x0C, 0x00, 0xB1, 0xFF, 0x04, 0x01, 0x76, 0xFD, 0xA8,
+       0x05, 0xCC, 0xF2, 0xAB, 0x3B, 0x18, 0x23, 0xE0, 0xF2, 0xF7, 0x06,
+       0x35, 0xFC, 0xE6, 0x01, 0x38, 0xFF, 0x36, 0x00, 0xFD, 0xFF, 0x11,
+       0x00, 0xB9, 0xFF, 0x8A, 0x00, 0x4D, 0xFF, 0x7D, 0x00, 0x9C, 0x00,
+       0x7B, 0xFB, 0x31, 0x47, 0xD9, 0x0D, 0xC0, 0xF8, 0x8F, 0x04, 0x34,
+       0xFD, 0x87, 0x01, 0x56, 0xFF, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x29, 0x00, 0x5E, 0xFF, 0x74, 0x01, 0x5F, 0xFD, 0x35, 0x04, 0x7C,
+       0xF9, 0xD8, 0x0B, 0xC9, 0x47, 0xD4, 0xFC, 0xF0, 0xFF, 0xDD, 0x00,
+       0x19, 0xFF, 0xA4, 0x00, 0xAF, 0xFF, 0x13, 0x00, 0xFD, 0xFF, 0x36,
+       0x00, 0x36, 0xFF, 0xE6, 0x01, 0x3D, 0xFC, 0xD5, 0x06, 0x4F, 0xF3,
+       0xE0, 0x20, 0x45, 0x3D, 0x4D, 0xF3, 0x4B, 0x05, 0xB3, 0xFD, 0xE0,
+       0x00, 0xC3, 0xFF, 0x05, 0x00, 0x02, 0x00, 0xFE, 0xFF, 0x20, 0x00,
+       0x7B, 0xFF, 0x6E, 0x01, 0xCA, 0xFC, 0x9D, 0x06, 0xB1, 0xF1, 0x86,
+       0x35, 0xAE, 0x2A, 0xCD, 0xF1, 0x2B, 0x07, 0x3F, 0xFC, 0xD1, 0x01,
+       0x46, 0xFF, 0x32, 0x00, 0xFD, 0xFF, 0x0A, 0x00, 0xDA, 0xFF, 0x36,
+       0x00, 0xFA, 0xFF, 0x43, 0xFF, 0xBF, 0x02, 0x75, 0xF7, 0x42, 0x44,
+       0x20, 0x15, 0x55, 0xF6, 0xA9, 0x05, 0xB2, 0xFC, 0xBF, 0x01, 0x41,
+       0xFF, 0x32, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x21, 0x00, 0x7C, 0xFF,
+       0x27, 0x01, 0x05, 0xFE, 0xEB, 0x02, 0x14, 0xFC, 0x50, 0x05, 0xEA,
+       0x48, 0x1B, 0x02, 0x78, 0xFD, 0x32, 0x02, 0x64, 0xFE, 0xFA, 0x00,
+       0x8D, 0xFF, 0x1C, 0x00, 0xFE, 0xFF, 0x35, 0x00, 0x3A, 0xFF, 0xD4,
+       0x01, 0x7C, 0xFC, 0x27, 0x06, 0x28, 0xF5, 0x31, 0x19, 0x21, 0x42,
+       0xB8, 0xF5, 0xC0, 0x03, 0xAA, 0xFE, 0x51, 0x00, 0x0B, 0x00, 0xEA,
+       0xFF, 0x06, 0x00, 0xFD, 0xFF, 0x2D, 0x00, 0x54, 0xFF, 0xB7, 0x01,
+       0x5E, 0xFC, 0x19, 0x07, 0x88, 0xF1, 0x9F, 0x2E, 0xE3, 0x31, 0x7E,
+       0xF1, 0xEE, 0x06, 0x88, 0xFC, 0x9A, 0x01, 0x64, 0xFF, 0x28, 0x00,
+       0xFD, 0xFF, 0x04, 0x00, 0xF7, 0xFF, 0xE8, 0xFF, 0x96, 0x00, 0x31,
+       0xFE, 0x84, 0x04, 0x79, 0xF4, 0x07, 0x40, 0xBA, 0x1C, 0x3E, 0xF4,
+       0x82, 0x06, 0x58, 0xFC, 0xE0, 0x01, 0x37, 0xFF, 0x36, 0x00, 0xFE,
+       0xFF, 0x18, 0x00, 0x9D, 0xFF, 0xD3, 0x00, 0xB8, 0xFE, 0x93, 0x01,
+       0xA1, 0xFE, 0x8E, 0xFF, 0x92, 0x48, 0x3D, 0x08, 0xE1, 0xFA, 0x86,
+       0x03, 0xB6, 0xFD, 0x4C, 0x01, 0x6D, 0xFF, 0x25, 0x00, 0x00, 0x00,
+       0xFF, 0xFF, 0x30, 0x00, 0x4A, 0xFF, 0xA8, 0x01, 0xE9, 0xFC, 0x2D,
+       0x05, 0x6B, 0xF7, 0xB6, 0x11, 0xC8, 0x45, 0x30, 0xF9, 0xCD, 0x01,
+       0xD0, 0xFF, 0xAC, 0xFF, 0x5C, 0x00, 0xCB, 0xFF, 0x0D, 0x00, 0xFD,
+       0xFF, 0x34, 0x00, 0x3E, 0xFF, 0xDF, 0x01, 0x33, 0xFC, 0x20, 0x07,
+       0x35, 0xF2, 0x36, 0x27, 0x78, 0x38, 0x14, 0xF2, 0x3B, 0x06, 0x11,
+       0xFD, 0x41, 0x01, 0x92, 0xFF, 0x17, 0x00, 0xFF, 0xFF, 0x00, 0x00,
+       0x10, 0x00, 0xA7, 0xFF, 0x19, 0x01, 0x53, 0xFD, 0xDB, 0x05, 0x88,
+       0xF2, 0xAD, 0x3A, 0x6D, 0x24, 0xA4, 0xF2, 0x08, 0x07, 0x32, 0xFC,
+       0xE5, 0x01, 0x39, 0xFF, 0x36, 0x00, 0xFD, 0xFF, 0x10, 0x00, 0xBF,
+       0xFF, 0x7B, 0x00, 0x6C, 0xFF, 0x44, 0x00, 0x01, 0x01, 0xB6, 0xFA,
+       0xC8, 0x46, 0x13, 0x0F, 0x51, 0xF8, 0xC4, 0x04, 0x1B, 0xFD, 0x92,
+       0x01, 0x52, 0xFF, 0x2D, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x28, 0x00,
+       0x63, 0xFF, 0x67, 0x01, 0x7A, 0xFD, 0xFE, 0x03, 0xEE, 0xF9, 0xAA,
+       0x0A, 0x16, 0x48, 0xAC, 0xFD, 0x86, 0xFF, 0x17, 0x01, 0xFA, 0xFE,
+       0xB3, 0x00, 0xAA, 0xFF, 0x15, 0x00, 0xFD, 0xFF, 0x36, 0x00, 0x36,
+       0xFF, 0xE5, 0x01, 0x44, 0xFC, 0xBD, 0x06, 0x97, 0xF3, 0x8A, 0x1F,
+       0x31, 0x3E, 0xA5, 0xF3, 0x0F, 0x05, 0xDA, 0xFD, 0xC9, 0x00, 0xCF,
+       0xFF, 0x01, 0x00, 0x02, 0x00, 0xFE, 0xFF, 0x22, 0x00, 0x73, 0xFF,
+       0x7D, 0x01, 0xB3, 0xFC, 0xBB, 0x06, 0x9A, 0xF1, 0x60, 0x34, 0xF5,
+       0x2B, 0xB0, 0xF1, 0x28, 0x07, 0x47, 0xFC, 0xCA, 0x01, 0x4A, 0xFF,
+       0x30, 0x00, 0xFD, 0xFF, 0x09, 0x00, 0xDF, 0xFF, 0x28, 0x00, 0x17,
+       0x00, 0x10, 0xFF, 0x15, 0x03, 0xDD, 0xF6, 0x9E, 0x43, 0x6C, 0x16,
+       0xF1, 0xF5, 0xD3, 0x05, 0x9F, 0xFC, 0xC6, 0x01, 0x3F, 0xFF, 0x33,
+       0x00, 0xFF, 0xFF, 0x00, 0x00, 0x1F, 0x00, 0x81, 0xFF, 0x19, 0x01,
+       0x23, 0xFE, 0xB0, 0x02, 0x87, 0xFC, 0x41, 0x04, 0xF4, 0x48, 0x1C,
+       0x03, 0x06, 0xFD, 0x6E, 0x02, 0x45, 0xFE, 0x09, 0x01, 0x88, 0xFF,
+       0x1D, 0x00, 0xFE, 0xFF, 0x34, 0x00, 0x3C, 0xFF, 0xCE, 0x01, 0x8C,
+       0xFC, 0x00, 0x06, 0x86, 0xF5, 0xE0, 0x17, 0xDB, 0x42, 0x3F, 0xF6,
+       0x71, 0x03, 0xD9, 0xFE, 0x36, 0x00, 0x18, 0x00, 0xE5, 0xFF, 0x07,
+       0x00, 0xFD, 0xFF, 0x2F, 0x00, 0x4F, 0xFF, 0xC1, 0x01, 0x52, 0xFC,
+       0x22, 0x07, 0x98, 0xF1, 0x5E, 0x2D, 0x13, 0x33, 0x87, 0xF1, 0xD8,
+       0x06, 0x9B, 0xFC, 0x8D, 0x01, 0x6B, 0xFF, 0x25, 0x00, 0xFD, 0xFF,
+       0x03, 0x00, 0xFC, 0xFF, 0xDC, 0xFF, 0xAF, 0x00, 0x07, 0xFE, 0xC8,
+       0x04, 0x10, 0xF4, 0x2D, 0x3F, 0x0F, 0x1E, 0xED, 0xF3, 0xA0, 0x06,
+       0x4E, 0xFC, 0xE3, 0x01, 0x36, 0xFF, 0x36, 0x00, 0xFE, 0xFF, 0x16,
+       0x00, 0xA3, 0xFF, 0xC3, 0x00, 0xD7, 0xFE, 0x58, 0x01, 0x0F, 0xFF,
+       0xA6, 0xFE, 0x5D, 0x48, 0x61, 0x09, 0x6E, 0xFA, 0xC0, 0x03, 0x99,
+       0xFD, 0x59, 0x01, 0x68, 0xFF, 0x26, 0x00, 0x00, 0x00, 0xFF, 0xFF,
+       0x2E, 0x00, 0x4E, 0xFF, 0x9E, 0x01, 0x00, 0xFD, 0xFC, 0x04, 0xD7,
+       0xF7, 0x75, 0x10, 0x48, 0x46, 0xE4, 0xF9, 0x6E, 0x01, 0x06, 0x00,
+       0x8E, 0xFF, 0x6B, 0x00, 0xC6, 0xFF, 0x0E, 0x00, 0xFD, 0xFF, 0x35,
+       0x00, 0x3B, 0xFF, 0xE2, 0x01, 0x31, 0xFC, 0x16, 0x07, 0x67, 0xF2,
+       0xE5, 0x25, 0x87, 0x39, 0x47, 0xF2, 0x10, 0x06, 0x30, 0xFD, 0x2F,
+       0x01, 0x9C, 0xFF, 0x14, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x13, 0x00,
+       0x9D, 0xFF, 0x2D, 0x01, 0x33, 0xFD, 0x0B, 0x06, 0x4D, 0xF2, 0xA5,
+       0x39, 0xBF, 0x25, 0x6D, 0xF2, 0x15, 0x07, 0x31, 0xFC, 0xE2, 0x01,
+       0x3B, 0xFF, 0x35, 0x00, 0xFD, 0xFF, 0x0E, 0x00, 0xC5, 0xFF, 0x6D,
+       0x00, 0x8B, 0xFF, 0x0D, 0x00, 0x63, 0x01, 0xF9, 0xF9, 0x55, 0x46,
+       0x51, 0x10, 0xE3, 0xF7, 0xF7, 0x04, 0x03, 0xFD, 0x9D, 0x01, 0x4E,
+       0xFF, 0x2E, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x26, 0x00, 0x68, 0xFF,
+       0x5B, 0x01, 0x96, 0xFD, 0xC6, 0x03, 0x61, 0xFA, 0x81, 0x09, 0x57,
+       0x48, 0x8D, 0xFE, 0x1B, 0xFF, 0x52, 0x01, 0xDB, 0xFE, 0xC2, 0x00,
+       0xA4, 0xFF, 0x16, 0x00, 0xFE, 0xFF, 0x36, 0x00, 0x36, 0xFF, 0xE3,
+       0x01, 0x4D, 0xFC, 0xA3, 0x06, 0xE4, 0xF3, 0x36, 0x1E, 0x16, 0x3F,
+       0x05, 0xF4, 0xCF, 0x04, 0x02, 0xFE, 0xB2, 0x00, 0xDB, 0xFF, 0xFC,
+       0xFF, 0x03, 0x00, 0xFD, 0xFF, 0x25, 0x00, 0x6C, 0xFF, 0x8B, 0x01,
+       0x9D, 0xFC, 0xD5, 0x06, 0x89, 0xF1, 0x35, 0x33, 0x3A, 0x2D, 0x9A,
+       0xF1, 0x23, 0x07, 0x51, 0xFC, 0xC2, 0x01, 0x4F, 0xFF, 0x2F, 0x00,
+       0xFD, 0xFF, 0x07, 0x00, 0xE5, 0xFF, 0x1A, 0x00, 0x33, 0x00, 0xDF,
+       0xFE, 0x68, 0x03, 0x4E, 0xF6, 0xEE, 0x42, 0xBB, 0x17, 0x90, 0xF5,
+       0xFC, 0x05, 0x8E, 0xFC, 0xCD, 0x01, 0x3C, 0xFF, 0x34, 0x00, 0xFE,
+       0xFF, 0x1E, 0x00, 0x87, 0xFF, 0x0B, 0x01, 0x42, 0xFE, 0x74, 0x02,
+       0xF9, 0xFC, 0x39, 0x03, 0xF5, 0x48, 0x24, 0x04, 0x94, 0xFC, 0xA9,
+       0x02, 0x27, 0xFE, 0x18, 0x01, 0x82, 0xFF, 0x1F, 0x00, 0x00, 0x00,
+       0xFF, 0xFF, 0x33, 0x00, 0x3E, 0xFF, 0xC7, 0x01, 0x9D, 0xFC, 0xD8,
+       0x05, 0xE7, 0xF5, 0x91, 0x16, 0x89, 0x43, 0xCD, 0xF6, 0x1E, 0x03,
+       0x0B, 0xFF, 0x1A, 0x00, 0x26, 0x00, 0xE0, 0xFF, 0x08, 0x00, 0xFD,
+       0xFF, 0x30, 0x00, 0x4B, 0xFF, 0xC9, 0x01, 0x48, 0xFC, 0x28, 0x07,
+       0xAD, 0xF1, 0x19, 0x2C, 0x3F, 0x34, 0x97, 0xF1, 0xBE, 0x06, 0xB0,
+       0xFC, 0x7F, 0x01, 0x72, 0xFF, 0x23, 0x00, 0xFE, 0xFF, 0x02, 0x00,
+       0x00, 0x00, 0xD0, 0xFF, 0xC7, 0x00, 0xDE, 0xFD, 0x08, 0x05, 0xB0,
+       0xF3, 0x4A, 0x3E, 0x64, 0x1F, 0xA0, 0xF3, 0xBB, 0x06, 0x45, 0xFC,
+       0xE5, 0x01, 0x36, 0xFF, 0x36, 0x00, 0xFD, 0xFF, 0x15, 0x00, 0xA9,
+       0xFF, 0xB4, 0x00, 0xF7, 0xFE, 0x1D, 0x01, 0x7A, 0xFF, 0xC5, 0xFD,
+       0x1D, 0x48, 0x89, 0x0A, 0xFB, 0xF9, 0xF8, 0x03, 0x7D, 0xFD, 0x66,
+       0x01, 0x63, 0xFF, 0x28, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x2D, 0x00,
+       0x52, 0xFF, 0x93, 0x01, 0x18, 0xFD, 0xC9, 0x04, 0x45, 0xF8, 0x36,
+       0x0F, 0xBB, 0x46, 0xA1, 0xFA, 0x0C, 0x01, 0x3E, 0x00, 0x70, 0xFF,
+       0x7A, 0x00, 0xC0, 0xFF, 0x0F, 0x00, 0xFD, 0xFF, 0x36, 0x00, 0x39,
+       0xFF, 0xE4, 0x01, 0x32, 0xFC, 0x09, 0x07, 0x9D, 0xF2, 0x92, 0x24,
+       0x8F, 0x3A, 0x82, 0xF2, 0xE1, 0x05, 0x50, 0xFD, 0x1B, 0x01, 0xA6,
+       0xFF, 0x10, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x17, 0x00, 0x93, 0xFF,
+       0x3F, 0x01, 0x15, 0xFD, 0x36, 0x06, 0x19, 0xF2, 0x97, 0x38, 0x11,
+       0x27, 0x3B, 0xF2, 0x1F, 0x07, 0x32, 0xFC, 0xDF, 0x01, 0x3D, 0xFF,
+       0x34, 0x00, 0xFD, 0xFF, 0x0D, 0x00, 0xCB, 0xFF, 0x5E, 0x00, 0xA9,
+       0xFF, 0xD6, 0xFF, 0xC3, 0x01, 0x43, 0xF9, 0xD7, 0x45, 0x92, 0x11,
+       0x77, 0xF7, 0x28, 0x05, 0xEC, 0xFC, 0xA7, 0x01, 0x4A, 0xFF, 0x2F,
+       0x00, 0xFF, 0xFF, 0x00, 0x00, 0x25, 0x00, 0x6D, 0xFF, 0x4E, 0x01,
+       0xB3, 0xFD, 0x8D, 0x03, 0xD4, 0xFA, 0x5D, 0x08, 0x8D, 0x48, 0x74,
+       0xFF, 0xAE, 0xFE, 0x8D, 0x01, 0xBB, 0xFE, 0xD1, 0x00, 0x9E, 0xFF,
+       0x18, 0x00, 0xFE, 0xFF, 0x36, 0x00, 0x37, 0xFF, 0xE0, 0x01, 0x57,
+       0xFC, 0x85, 0x06, 0x34, 0xF4, 0xE0, 0x1C, 0xF0, 0x3F, 0x6D, 0xF4,
+       0x8C, 0x04, 0x2C, 0xFE, 0x99, 0x00, 0xE7, 0xFF, 0xF8, 0xFF, 0x04,
+       0x00, 0xFD, 0xFF, 0x27, 0x00, 0x65, 0xFF, 0x98, 0x01, 0x8A, 0xFC,
+       0xEC, 0x06, 0x7F, 0xF1, 0x04, 0x32, 0x7B, 0x2E, 0x8A, 0xF1, 0x1A,
+       0x07, 0x5D, 0xFC, 0xB8, 0x01, 0x54, 0xFF, 0x2D, 0x00, 0xFD, 0xFF,
+       0x06, 0x00, 0xEA, 0xFF, 0x0C, 0x00, 0x4E, 0x00, 0xAF, 0xFE, 0xB8,
+       0x03, 0xC7, 0xF5, 0x38, 0x42, 0x0C, 0x19, 0x32, 0xF5, 0x23, 0x06,
+       0x7D, 0xFC, 0xD3, 0x01, 0x3A, 0xFF, 0x35, 0x00, 0xFE, 0xFF, 0x1C,
+       0x00, 0x8D, 0xFF, 0xFC, 0x00, 0x61, 0xFE, 0x39, 0x02, 0x6B, 0xFD,
+       0x37, 0x02, 0xEB, 0x48, 0x31, 0x05, 0x21, 0xFC, 0xE4, 0x02, 0x08,
+       0xFE, 0x26, 0x01, 0x7C, 0xFF, 0x21, 0x00, 0x00, 0x00, 0xFF, 0xFF,
+       0x32, 0x00, 0x41, 0xFF, 0xC0, 0x01, 0xAF, 0xFC, 0xAD, 0x05, 0x4A,
+       0xF6, 0x44, 0x15, 0x2F, 0x44, 0x64, 0xF7, 0xC9, 0x02, 0x3D, 0xFF,
+       0xFE, 0xFF, 0x34, 0x00, 0xDB, 0xFF, 0x09, 0x00, 0xFD, 0xFF, 0x32,
+       0x00, 0x47, 0xFF, 0xD0, 0x01, 0x40, 0xFC, 0x2A, 0x07, 0xCA, 0xF1,
+       0xD1, 0x2A, 0x65, 0x35, 0xAE, 0xF1, 0xA0, 0x06, 0xC7, 0xFC, 0x70,
+       0x01, 0x7A, 0xFF, 0x20, 0x00, 0xFE, 0xFF, 0x02, 0x00, 0x05, 0x00,
+       0xC5, 0xFF, 0xDE, 0x00, 0xB7, 0xFD, 0x45, 0x05, 0x56, 0xF3, 0x61,
+       0x3D, 0xBA, 0x20, 0x56, 0xF3, 0xD3, 0x06, 0x3E, 0xFC, 0xE6, 0x01,
+       0x36, 0xFF, 0x36, 0x00, 0xFD, 0xFF, 0x13, 0x00, 0xAF, 0xFF, 0xA5,
+       0x00, 0x16, 0xFF, 0xE3, 0x00, 0xE4, 0xFF, 0xEB, 0xFC, 0xD2, 0x47,
+       0xB6, 0x0B, 0x89, 0xF9, 0x2F, 0x04, 0x62, 0xFD, 0x72, 0x01, 0x5E,
+       0xFF, 0x29, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x2C, 0x00, 0x56, 0xFF,
+       0x88, 0x01, 0x31, 0xFD, 0x95, 0x04, 0xB4, 0xF8, 0xFC, 0x0D, 0x26,
+       0x47, 0x64, 0xFB, 0xA7, 0x00, 0x77, 0x00, 0x51, 0xFF, 0x89, 0x00,
+       0xBA, 0xFF, 0x11, 0x00, 0xFD, 0xFF, 0x36, 0x00, 0x38, 0xFF, 0xE6,
+       0x01, 0x34, 0xFC, 0xF9, 0x06, 0xD9, 0xF2, 0x3F, 0x23, 0x90, 0x3B,
+       0xC4, 0xF2, 0xAE, 0x05, 0x72, 0xFD, 0x07, 0x01, 0xB0, 0xFF, 0x0C,
+       0x00, 0x00, 0x00, 0xFF, 0xFF, 0x1A, 0x00, 0x8A, 0xFF, 0x51, 0x01,
+       0xF8, 0xFC, 0x5E, 0x06, 0xED, 0xF1, 0x82, 0x37, 0x60, 0x28, 0x0E,
+       0xF2, 0x26, 0x07, 0x35, 0xFC, 0xDB, 0x01, 0x40, 0xFF, 0x34, 0x00,
+       0xFD, 0xFF, 0x0C, 0x00, 0xD0, 0xFF, 0x4F, 0x00, 0xC7, 0xFF, 0xA0,
+       0xFF, 0x20, 0x02, 0x96, 0xF8, 0x4E, 0x45, 0xD7, 0x12, 0x0D, 0xF7,
+       0x58, 0x05, 0xD6, 0xFC, 0xB0, 0x01, 0x47, 0xFF, 0x30, 0x00, 0xFF,
+       0xFF, 0x00, 0x00, 0x23, 0x00, 0x72, 0xFF, 0x40, 0x01, 0xD0, 0xFD,
+       0x53, 0x03, 0x47, 0xFB, 0x3F, 0x07, 0xB8, 0x48, 0x62, 0x00, 0x3F,
+       0xFE, 0xC8, 0x01, 0x9C, 0xFE, 0xE0, 0x00, 0x98, 0xFF, 0x19, 0x00,
+       0xFE, 0xFF, 0x36, 0x00, 0x38, 0xFF, 0xDC, 0x01, 0x63, 0xFC, 0x66,
+       0x06, 0x89, 0xF4, 0x8C, 0x1B, 0xC3, 0x40, 0xDD, 0xF4, 0x46, 0x04,
+       0x58, 0xFE, 0x80, 0x00, 0xF4, 0xFF, 0xF3, 0xFF, 0x05, 0x00, 0xFD,
+       0xFF, 0x29, 0x00, 0x5F, 0xFF, 0xA5, 0x01, 0x78, 0xFC, 0xFF, 0x06,
+       0x7D, 0xF1, 0xCF, 0x30, 0xB8, 0x2F, 0x80, 0xF1, 0x0D, 0x07, 0x6A,
+       0xFC, 0xAE, 0x01, 0x59, 0xFF, 0x2B, 0x00, 0xFD, 0xFF, 0x05, 0x00,
+       0xEF, 0xFF, 0xFF, 0xFF, 0x69, 0x00, 0x80, 0xFE, 0x04, 0x04, 0x48,
+       0xF5, 0x74, 0x41, 0x5D, 0x1A, 0xD7, 0xF4, 0x47, 0x06, 0x6F, 0xFC,
+       0xD8, 0x01, 0x39, 0xFF, 0x35, 0x00, 0xFE, 0xFF, 0x1B, 0x00, 0x93,
+       0xFF, 0xED, 0x00, 0x80, 0xFE, 0xFD, 0x01, 0xDC, 0xFD, 0x3C, 0x01,
+       0xD5, 0x48, 0x45, 0x06, 0xAE, 0xFB, 0x1F, 0x03, 0xEA, 0xFD, 0x34,
+       0x01, 0x77, 0xFF, 0x22, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x31, 0x00,
+       0x44, 0xFF, 0xB8, 0x01, 0xC3, 0xFC, 0x81, 0x05, 0xB0, 0xF6, 0xFA,
+       0x13, 0xCC, 0x44, 0x02, 0xF8, 0x71, 0x02, 0x71, 0xFF, 0xE1, 0xFF,
+       0x42, 0x00, 0xD5, 0xFF, 0x0B, 0x00, 0xFD, 0xFF, 0x33, 0x00, 0x43,
+       0xFF, 0xD6, 0x01, 0x39, 0xFC, 0x2A, 0x07, 0xEB, 0xF1, 0x87, 0x29,
+       0x85, 0x36, 0xCC, 0xF1, 0x7F, 0x06, 0xE0, 0xFC, 0x60, 0x01, 0x82,
+       0xFF, 0x1D, 0x00, 0xFE, 0xFF, 0x01, 0x00, 0x09, 0x00, 0xBA, 0xFF,
+       0xF4, 0x00, 0x91, 0xFD, 0x7E, 0x05, 0x05, 0xF3, 0x6E, 0x3C, 0x10,
+       0x22, 0x12, 0xF3, 0xE9, 0x06, 0x38, 0xFC, 0xE6, 0x01, 0x37, 0xFF,
+       0x36, 0x00, 0xFD, 0xFF, 0x12, 0x00, 0xB5, 0xFF, 0x96, 0x00, 0x35,
+       0xFF, 0xA9, 0x00, 0x4D, 0x00, 0x19, 0xFC, 0x7C, 0x47, 0xE8, 0x0C,
+       0x18, 0xF9, 0x66, 0x04, 0x48, 0xFD, 0x7E, 0x01, 0x5A, 0xFF, 0x2B,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x5A, 0xFF, 0x7D, 0x01,
+       0x4B, 0xFD, 0x60, 0x04, 0x24, 0xF9, 0xC6, 0x0C, 0x86, 0x47, 0x30,
+       0xFC, 0x41, 0x00, 0xB0, 0x00, 0x32, 0xFF, 0x98, 0x00, 0xB4, 0xFF,
+       0x12, 0x00, 0xFD, 0xFF, 0x36, 0x00, 0x37, 0xFF, 0xE6, 0x01, 0x38,
+       0xFC, 0xE6, 0x06, 0x19, 0xF3, 0xEA, 0x21, 0x8A, 0x3C, 0x0E, 0xF3,
+       0x78, 0x05, 0x96, 0xFD, 0xF1, 0x00, 0xBB, 0xFF, 0x08, 0x00, 0x01,
+       0x00, 0xFE, 0xFF, 0x1D, 0x00, 0x81, 0xFF, 0x62, 0x01, 0xDD, 0xFC,
+       0x83, 0x06, 0xC9, 0xF1, 0x66, 0x36, 0xAC, 0x29, 0xE7, 0xF1, 0x2A,
+       0x07, 0x3A, 0xFC, 0xD5, 0x01, 0x43, 0xFF, 0x33, 0x00, 0xFD, 0xFF,
+       0x0B, 0x00, 0xD6, 0xFF, 0x41, 0x00, 0xE4, 0xFF, 0x6B, 0xFF, 0x7B,
+       0x02, 0xF0, 0xF7, 0xBA, 0x44, 0x1E, 0x14, 0xA5, 0xF6, 0x86, 0x05,
+       0xC1, 0xFC, 0xB9, 0x01, 0x44, 0xFF, 0x32, 0x00, 0xFF, 0xFF, 0x00,
+       0x00, 0x22, 0x00, 0x77, 0xFF, 0x32, 0x01, 0xED, 0xFD, 0x19, 0x03,
+       0xBB, 0xFB, 0x26, 0x06, 0xD7, 0x48, 0x58, 0x01, 0xCF, 0xFD, 0x04,
+       0x02, 0x7D, 0xFE, 0xEF, 0x00, 0x92, 0xFF, 0x1B, 0x00, 0xFE, 0xFF,
+       0x35, 0x00, 0x39, 0xFF, 0xD8, 0x01, 0x70, 0xFC, 0x43, 0x06, 0xE1,
+       0xF4, 0x38, 0x1A, 0x8C, 0x41, 0x55, 0xF5, 0xFC, 0x03, 0x85, 0xFE,
+       0x66, 0x00, 0x01, 0x00, 0xEE, 0xFF, 0x06, 0x00, 0xFD, 0xFF, 0x2B,
+       0x00, 0x59, 0xFF, 0xB0, 0x01, 0x69, 0xFC, 0x0F, 0x07, 0x80, 0xF1,
+       0x96, 0x2F, 0xF2, 0x30, 0x7C, 0xF1, 0xFD, 0x06, 0x7A, 0xFC, 0xA3,
+       0x01, 0x5F, 0xFF, 0x29, 0x00, 0xFD, 0xFF, 0x05, 0x00, 0xF4, 0xFF,
+       0xF2, 0xFF, 0x83, 0x00, 0x53, 0xFE, 0x4E, 0x04, 0xD0, 0xF4, 0xAB,
+       0x40, 0xB2, 0x1B, 0x7F, 0xF4, 0x69, 0x06, 0x62, 0xFC, 0xDD, 0x01,
+       0x38, 0xFF, 0x36, 0x00, 0xFE, 0xFF, 0x19, 0x00, 0x98, 0xFF, 0xDE,
+       0x00, 0x9F, 0xFE, 0xC2, 0x01, 0x4B, 0xFE, 0x48, 0x00, 0xB3, 0x48,
+       0x5E, 0x07, 0x3B, 0xFB, 0x59, 0x03, 0xCD, 0xFD, 0x42, 0x01, 0x71,
+       0xFF, 0x24, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x30, 0x00, 0x47, 0xFF,
+       0xAF, 0x01, 0xD8, 0xFC, 0x52, 0x05, 0x19, 0xF7, 0xB2, 0x12, 0x5C,
+       0x45, 0xA9, 0xF8, 0x16, 0x02, 0xA6, 0xFF, 0xC3, 0xFF, 0x51, 0x00,
+       0xD0, 0xFF, 0x0C, 0x00, 0xFD, 0xFF, 0x34, 0x00, 0x40, 0xFF, 0xDB,
+       0x01, 0x35, 0xFC, 0x25, 0x07, 0x13, 0xF2, 0x3A, 0x28, 0xA0, 0x37,
+       0xF2, 0xF1, 0x5A, 0x06, 0xFB, 0xFC, 0x4F, 0x01, 0x8B, 0xFF, 0x1A,
+       0x00, 0xFF, 0xFF, 0x00, 0x00, 0x0D, 0x00, 0xAF, 0xFF, 0x09, 0x01,
+       0x6E, 0xFD, 0xB4, 0x05, 0xBC, 0xF2, 0x73, 0x3B, 0x64, 0x23, 0xD2,
+       0xF2, 0xFB, 0x06, 0x34, 0xFC, 0xE6, 0x01, 0x38, 0xFF, 0x36, 0x00,
+       0xFD, 0xFF, 0x11, 0x00, 0xBB, 0xFF, 0x87, 0x00, 0x54, 0xFF, 0x70,
+       0x00, 0xB3, 0x00, 0x4E, 0xFB, 0x1A, 0x47, 0x1F, 0x0E, 0xA8, 0xF8,
+       0x9B, 0x04, 0x2E, 0xFD, 0x8A, 0x01, 0x55, 0xFF, 0x2C, 0x00, 0xFF,
+       0xFF, 0x00, 0x00, 0x29, 0x00, 0x5F, 0xFF, 0x71, 0x01, 0x65, 0xFD,
+       0x29, 0x04, 0x96, 0xF9, 0x95, 0x0B, 0xDC, 0x47, 0x03, 0xFD, 0xD9,
+       0xFF, 0xEA, 0x00, 0x12, 0xFF, 0xA7, 0x00, 0xAE, 0xFF, 0x14, 0x00,
+       0xFD, 0xFF, 0x36, 0x00, 0x36, 0xFF, 0xE6, 0x01, 0x3E, 0xFC, 0xD0,
+       0x06, 0x5E, 0xF3, 0x94, 0x20, 0x7B, 0x3D, 0x60, 0xF3, 0x3E, 0x05,
+       0xBB, 0xFD, 0xDB, 0x00, 0xC6, 0xFF, 0x04, 0x00, 0x02, 0x00, 0xFE,
+       0xFF, 0x20, 0x00, 0x79, 0xFF, 0x72, 0x01, 0xC4, 0xFC, 0xA4, 0x06,
+       0xAB, 0xF1, 0x46, 0x35, 0xF7, 0x2A, 0xC6, 0xF1, 0x2A, 0x07, 0x40,
+       0xFC, 0xCF, 0x01, 0x47, 0xFF, 0x31, 0x00, 0xFD, 0xFF, 0x09, 0x00,
+       0xDB, 0xFF, 0x33, 0x00, 0x01, 0x00, 0x38, 0xFF, 0xD3, 0x02, 0x53,
+       0xF7, 0x1F, 0x44, 0x69, 0x15, 0x3F, 0xF6, 0xB2, 0x05, 0xAD, 0xFC,
+       0xC1, 0x01, 0x41, 0xFF, 0x32, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x20,
+       0x00, 0x7D, 0xFF, 0x24, 0x01, 0x0C, 0xFE, 0xDE, 0x02, 0x2E, 0xFC,
+       0x13, 0x05, 0xEC, 0x48, 0x54, 0x02, 0x5E, 0xFD, 0x3F, 0x02, 0x5D,
+       0xFE, 0xFE, 0x00, 0x8C, 0xFF, 0x1C, 0x00, 0xFE, 0xFF, 0x35, 0x00,
+       0x3B, 0xFF, 0xD3, 0x01, 0x7F, 0xFC, 0x1F, 0x06, 0x3C, 0xF5, 0xE6,
+       0x18, 0x4D, 0x42, 0xD5, 0xF5, 0xAF, 0x03, 0xB4, 0xFE, 0x4B, 0x00,
+       0x0E, 0x00, 0xE9, 0xFF, 0x07, 0x00, 0xFD, 0xFF, 0x2D, 0x00, 0x53,
+       0xFF, 0xBA, 0x01, 0x5B, 0xFC, 0x1B, 0x07, 0x8B, 0xF1, 0x58, 0x2E,
+       0x26, 0x32, 0x80, 0xF1, 0xEA, 0x06, 0x8C, 0xFC, 0x97, 0x01, 0x66,
+       0xFF, 0x27, 0x00, 0xFD, 0xFF, 0x04, 0x00, 0xF8, 0xFF, 0xE6, 0xFF,
+       0x9C, 0x00, 0x27, 0xFE, 0x94, 0x04, 0x61, 0xF4, 0xD7, 0x3F, 0x06,
+       0x1D, 0x2B, 0xF4, 0x89, 0x06, 0x56, 0xFC, 0xE0, 0x01, 0x37, 0xFF,
+       0x36, 0x00, 0xFE, 0xFF, 0x17, 0x00, 0x9E, 0xFF, 0xCF, 0x00, 0xBF,
+       0xFE, 0x86, 0x01, 0xBA, 0xFE, 0x5A, 0xFF, 0x86, 0x48, 0x7D, 0x08,
+       0xC7, 0xFA, 0x93, 0x03, 0xB0, 0xFD, 0x4F, 0x01, 0x6C, 0xFF, 0x25,
+       0x00, 0x00, 0x00, 0xFF, 0xFF, 0x2F, 0x00, 0x4B, 0xFF, 0xA6, 0x01,
+       0xEE, 0xFC, 0x23, 0x05, 0x83, 0xF7, 0x6E, 0x11, 0xE5, 0x45, 0x57,
+       0xF9, 0xB8, 0x01, 0xDC, 0xFF, 0xA5, 0xFF, 0x5F, 0x00, 0xCA, 0xFF,
+       0x0D, 0x00, 0xFD, 0xFF, 0x35, 0x00, 0x3D, 0xFF, 0xDF, 0x01, 0x32,
+       0xFC, 0x1E, 0x07, 0x40, 0xF2, 0xEB, 0x26, 0xB5, 0x38, 0x1F, 0xF2,
+       0x32, 0x06, 0x18, 0xFD, 0x3D, 0x01, 0x94, 0xFF, 0x16, 0x00, 0xFF,
+       0xFF, 0x00, 0x00, 0x11, 0x00, 0xA4, 0xFF, 0x1D, 0x01, 0x4C, 0xFD,
+       0xE6, 0x05, 0x7B, 0xF2, 0x71, 0x3A, 0xB8, 0x24, 0x97, 0xF2, 0x0B,
+       0x07, 0x32, 0xFC, 0xE4, 0x01, 0x39, 0xFF, 0x36, 0x00, 0xFD, 0xFF,
+       0x0F, 0x00, 0xC0, 0xFF, 0x78, 0x00, 0x73, 0xFF, 0x38, 0x00, 0x17,
+       0x01, 0x8B, 0xFA, 0xAF, 0x46, 0x59, 0x0F, 0x39, 0xF8, 0xCF, 0x04,
+       0x15, 0xFD, 0x95, 0x01, 0x51, 0xFF, 0x2D, 0x00, 0xFF, 0xFF, 0x00,
+       0x00, 0x28, 0x00, 0x64, 0xFF, 0x65, 0x01, 0x81, 0xFD, 0xF2, 0x03,
+       0x08, 0xFA, 0x68, 0x0A, 0x25, 0x48, 0xDE, 0xFD, 0x6E, 0xFF, 0x24,
+       0x01, 0xF3, 0xFE, 0xB6, 0x00, 0xA8, 0xFF, 0x15, 0x00, 0xFD, 0xFF,
+       0x36, 0x00, 0x36, 0xFF, 0xE5, 0x01, 0x46, 0xFC, 0xB8, 0x06, 0xA8,
+       0xF3, 0x3F, 0x1F, 0x64, 0x3E, 0xBA, 0xF3, 0x01, 0x05, 0xE2, 0xFD,
+       0xC4, 0x00, 0xD2, 0xFF, 0x00, 0x00, 0x02, 0x00, 0xFE, 0xFF, 0x23,
+       0x00, 0x71, 0xFF, 0x81, 0x01, 0xAE, 0xFC, 0xC1, 0x06, 0x95, 0xF1,
+       0x1E, 0x34, 0x3E, 0x2C, 0xAB, 0xF1, 0x27, 0x07, 0x49, 0xFC, 0xC8,
+       0x01, 0x4B, 0xFF, 0x30, 0x00, 0xFD, 0xFF, 0x08, 0x00, 0xE1, 0xFF,
+       0x25, 0x00, 0x1D, 0x00, 0x05, 0xFF, 0x28, 0x03, 0xBD, 0xF6, 0x77,
+       0x43, 0xB6, 0x16, 0xDC, 0xF5, 0xDD, 0x05, 0x9B, 0xFC, 0xC8, 0x01,
+       0x3E, 0xFF, 0x33, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x1F, 0x00, 0x83,
+       0xFF, 0x16, 0x01, 0x2A, 0xFE, 0xA3, 0x02, 0xA1, 0xFC, 0x06, 0x04,
+       0xF5, 0x48, 0x56, 0x03, 0xED, 0xFC, 0x7B, 0x02, 0x3E, 0xFE, 0x0C,
+       0x01, 0x86, 0xFF, 0x1E, 0x00, 0xFE, 0xFF, 0x34, 0x00, 0x3D, 0xFF,
+       0xCC, 0x01, 0x8F, 0xFC, 0xF8, 0x05, 0x9B, 0xF5, 0x96, 0x17, 0x02,
+       0x43, 0x5E, 0xF6, 0x5F, 0x03, 0xE4, 0xFE, 0x30, 0x00, 0x1B, 0x00,
+       0xE4, 0xFF, 0x08, 0x00, 0xFD, 0xFF, 0x2F, 0x00, 0x4E, 0xFF, 0xC3,
+       0x01, 0x4F, 0xFC, 0x24, 0x07, 0x9C, 0xF1, 0x17, 0x2D, 0x57, 0x33,
+       0x8A, 0xF1, 0xD3, 0x06, 0x9F, 0xFC, 0x8A, 0x01, 0x6D, 0xFF, 0x25,
+       0x00, 0xFD, 0xFF, 0x03, 0x00, 0xFD, 0xFF, 0xD9, 0xFF, 0xB4, 0x00,
+       0xFD, 0xFD, 0xD7, 0x04, 0xFA, 0xF3, 0xFC, 0x3E, 0x5B, 0x1E, 0xDB,
+       0xF3, 0xA6, 0x06, 0x4C, 0xFC, 0xE3, 0x01, 0x36, 0xFF, 0x36, 0x00,
+       0xFE, 0xFF, 0x16, 0x00, 0xA4, 0xFF, 0xC0, 0x00, 0xDE, 0xFE, 0x4B,
+       0x01, 0x27, 0xFF, 0x73, 0xFE, 0x4F, 0x48, 0xA2, 0x09, 0x54, 0xFA,
+       0xCC, 0x03, 0x93, 0xFD, 0x5C, 0x01, 0x67, 0xFF, 0x27, 0x00, 0x00,
+       0x00, 0xFF, 0xFF, 0x2E, 0x00, 0x4E, 0xFF, 0x9C, 0x01, 0x05, 0xFD,
+       0xF1, 0x04, 0xF0, 0xF7, 0x2D, 0x10, 0x61, 0x46, 0x0D, 0xFA, 0x58,
+       0x01, 0x13, 0x00, 0x87, 0xFF, 0x6E, 0x00, 0xC4, 0xFF, 0x0E, 0x00,
+       0xFD, 0xFF, 0x35, 0x00, 0x3B, 0xFF, 0xE3, 0x01, 0x31, 0xFC, 0x14,
+       0x07, 0x73, 0xF2, 0x99, 0x25, 0xC2, 0x39, 0x54, 0xF2, 0x05, 0x06,
+       0x37, 0xFD, 0x2B, 0x01, 0x9E, 0xFF, 0x13, 0x00, 0xFF, 0xFF, 0xFF,
+       0xFF, 0x14, 0x00, 0x9B, 0xFF, 0x31, 0x01, 0x2C, 0xFD, 0x15, 0x06,
+       0x41, 0xF2, 0x6A, 0x39, 0x0A, 0x26, 0x61, 0xF2, 0x17, 0x07, 0x31,
+       0xFC, 0xE2, 0x01, 0x3B, 0xFF, 0x35, 0x00, 0xFD, 0xFF, 0x0E, 0x00,
+       0xC6, 0xFF, 0x69, 0x00, 0x91, 0xFF, 0x00, 0x00, 0x78, 0x01, 0xD0,
+       0xF9, 0x39, 0x46, 0x98, 0x10, 0xCB, 0xF7, 0x02, 0x05, 0xFE, 0xFC,
+       0x9F, 0x01, 0x4D, 0xFF, 0x2E, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x26,
+       0x00, 0x69, 0xFF, 0x58, 0x01, 0x9D, 0xFD, 0xB9, 0x03, 0x7B, 0xFA,
+       0x40, 0x09, 0x63, 0x48, 0xBF, 0xFE, 0x03, 0xFF, 0x5F, 0x01, 0xD4,
+       0xFE, 0xC5, 0x00, 0xA2, 0xFF, 0x16, 0x00, 0xFE, 0xFF, 0x36, 0x00,
+       0x36, 0xFF, 0xE2, 0x01, 0x4F, 0xFC, 0x9C, 0x06, 0xF5, 0xF3, 0xEA,
+       0x1D, 0x47, 0x3F, 0x1B, 0xF4, 0xC1, 0x04, 0x0B, 0xFE, 0xAC, 0x00,
+       0xDE, 0xFF, 0xFB, 0xFF, 0x03, 0x00, 0xFD, 0xFF, 0x25, 0x00, 0x6A,
+       0xFF, 0x8E, 0x01, 0x99, 0xFC, 0xDB, 0x06, 0x86, 0xF1, 0xF2, 0x32,
+       0x82, 0x2D, 0x96, 0xF1, 0x21, 0x07, 0x53, 0xFC, 0xC0, 0x01, 0x50,
+       0xFF, 0x2E, 0x00, 0xFD, 0xFF, 0x07, 0x00, 0xE6, 0xFF, 0x17, 0x00,
+       0x39, 0x00, 0xD4, 0xFE, 0x7A, 0x03, 0x2F, 0xF6, 0xC7, 0x42, 0x06,
+       0x18, 0x7B, 0xF5, 0x05, 0x06, 0x8A, 0xFC, 0xCF, 0x01, 0x3C, 0xFF,
+       0x34, 0x00, 0xFE, 0xFF, 0x1D, 0x00, 0x88, 0xFF, 0x07, 0x01, 0x49,
+       0xFE, 0x67, 0x02, 0x13, 0xFD, 0xFF, 0x02, 0xF4, 0x48, 0x5F, 0x04,
+       0x7A, 0xFC, 0xB6, 0x02, 0x20, 0xFE, 0x1B, 0x01, 0x81, 0xFF, 0x1F,
+       0x00, 0x00, 0x00, 0xFF, 0xFF, 0x33, 0x00, 0x3F, 0xFF, 0xC6, 0x01,
+       0xA1, 0xFC, 0xCF, 0x05, 0xFC, 0xF5, 0x47, 0x16, 0xB0, 0x43, 0xEE,
+       0xF6, 0x0C, 0x03, 0x16, 0xFF, 0x14, 0x00, 0x29, 0x00, 0xDF, 0xFF,
+       0x09, 0x00, 0xFD, 0xFF, 0x30, 0x00, 0x4A, 0xFF, 0xCA, 0x01, 0x46,
+       0xFC, 0x29, 0x07, 0xB3, 0xF1, 0xD1, 0x2B, 0x81, 0x34, 0x9C, 0xF1,
+       0xB8, 0x06, 0xB5, 0xFC, 0x7C, 0x01, 0x74, 0xFF, 0x22, 0x00, 0xFE,
+       0xFF, 0x02, 0x00, 0x01, 0x00, 0xCE, 0xFF, 0xCC, 0x00, 0xD5, 0xFD,
+       0x16, 0x05, 0x9B, 0xF3, 0x18, 0x3E, 0xB1, 0x1F, 0x8F, 0xF3, 0xC0,
+       0x06, 0x43, 0xFC, 0xE5, 0x01, 0x36, 0xFF, 0x36, 0x00, 0xFD, 0xFF,
+       0x15, 0x00, 0xAA, 0xFF, 0xB1, 0x00, 0xFE, 0xFE, 0x10, 0x01, 0x92,
+       0xFF, 0x94, 0xFD, 0x0D, 0x48, 0xCB, 0x0A, 0xE2, 0xF9, 0x04, 0x04,
+       0x77, 0xFD, 0x69, 0x01, 0x62, 0xFF, 0x28, 0x00, 0x00, 0x00, 0xFF,
+       0xFF, 0x2D, 0x00, 0x52, 0xFF, 0x91, 0x01, 0x1E, 0xFD, 0xBE, 0x04,
+       0x5E, 0xF8, 0xF0, 0x0E, 0xD3, 0x46, 0xCB, 0xFA, 0xF6, 0x00, 0x4B,
+       0x00, 0x69, 0xFF, 0x7D, 0x00, 0xBE, 0xFF, 0x10, 0x00, 0xFD, 0xFF,
+       0x36, 0x00, 0x39, 0xFF, 0xE5, 0x01, 0x32, 0xFC, 0x06, 0x07, 0xAA,
+       0xF2, 0x46, 0x24, 0xC8, 0x3A, 0x90, 0xF2, 0xD6, 0x05, 0x57, 0xFD,
+       0x17, 0x01, 0xA8, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x18,
+       0x00, 0x91, 0xFF, 0x43, 0x01, 0x0E, 0xFD, 0x40, 0x06, 0x0F, 0xF2,
+       0x5B, 0x38, 0x5C, 0x27, 0x30, 0xF2, 0x21, 0x07, 0x33, 0xFC, 0xDE,
+       0x01, 0x3E, 0xFF, 0x34, 0x00, 0xFD, 0xFF, 0x0D, 0x00, 0xCC, 0xFF,
+       0x5A, 0x00, 0xAF, 0xFF, 0xCA, 0xFF, 0xD8, 0x01, 0x1C, 0xF9, 0xB8,
+       0x45, 0xDA, 0x11, 0x60, 0xF7, 0x33, 0x05, 0xE7, 0xFC, 0xA9, 0x01,
+       0x4A, 0xFF, 0x30, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x25, 0x00, 0x6E,
+       0xFF, 0x4B, 0x01, 0xB9, 0xFD, 0x80, 0x03, 0xEE, 0xFA, 0x1D, 0x08,
+       0x98, 0x48, 0xA8, 0xFF, 0x95, 0xFE, 0x9A, 0x01, 0xB4, 0xFE, 0xD4,
+       0x00, 0x9C, 0xFF, 0x18, 0x00, 0xFE, 0xFF, 0x36, 0x00, 0x37, 0xFF,
+       0xDF, 0x01, 0x5A, 0xFC, 0x7E, 0x06, 0x47, 0xF4, 0x94, 0x1C, 0x1F,
+       0x40, 0x85, 0xF4, 0x7D, 0x04, 0x36, 0xFE, 0x93, 0x00, 0xEA, 0xFF,
+       0xF7, 0xFF, 0x04, 0x00, 0xFD, 0xFF, 0x28, 0x00, 0x63, 0xFF, 0x9B,
+       0x01, 0x86, 0xFC, 0xF1, 0x06, 0x7E, 0xF1, 0xC0, 0x31, 0xC2, 0x2E,
+       0x87, 0xF1, 0x17, 0x07, 0x5F, 0xFC, 0xB6, 0x01, 0x55, 0xFF, 0x2D,
+       0x00, 0xFD, 0xFF, 0x06, 0x00, 0xEB, 0xFF, 0x09, 0x00, 0x54, 0x00,
+       0xA4, 0xFE, 0xC9, 0x03, 0xAA, 0xF5, 0x0C, 0x42, 0x56, 0x19, 0x1E,
+       0xF5, 0x2B, 0x06, 0x7A, 0xFC, 0xD4, 0x01, 0x3A, 0xFF, 0x35, 0x00,
+       0xFE, 0xFF, 0x1C, 0x00, 0x8E, 0xFF, 0xF9, 0x00, 0x68, 0xFE, 0x2C,
+       0x02, 0x84, 0xFD, 0xFF, 0x01, 0xE6, 0x48, 0x6E, 0x05, 0x07, 0xFC,
+       0xF1, 0x02, 0x01, 0xFE, 0x29, 0x01, 0x7B, 0xFF, 0x21, 0x00, 0x00,
+       0x00, 0xFF, 0xFF, 0x32, 0x00, 0x42, 0xFF, 0xBE, 0x01, 0xB4, 0xFC,
+       0xA4, 0x05, 0x61, 0xF6, 0xFB, 0x14, 0x53, 0x44, 0x86, 0xF7, 0xB6,
+       0x02, 0x49, 0xFF, 0xF7, 0xFF, 0x37, 0x00, 0xD9, 0xFF, 0x0A, 0x00,
+       0xFD, 0xFF, 0x32, 0x00, 0x46, 0xFF, 0xD1, 0x01, 0x3E, 0xFC, 0x2B,
+       0x07, 0xD0, 0xF1, 0x89, 0x2A, 0xA6, 0x35, 0xB4, 0xF1, 0x99, 0x06,
+       0xCD, 0xFC, 0x6D, 0x01, 0x7C, 0xFF, 0x1F, 0x00, 0xFE, 0xFF, 0x01,
+       0x00, 0x06, 0x00, 0xC2, 0xFF, 0xE3, 0x00, 0xAE, 0xFD, 0x52, 0x05,
+       0x44, 0xF3, 0x2A, 0x3D, 0x06, 0x21, 0x47, 0xF3, 0xD8, 0x06, 0x3C,
+       0xFC, 0xE6, 0x01, 0x36, 0xFF, 0x36, 0x00, 0xFD, 0xFF, 0x13, 0x00,
+       0xB0, 0xFF, 0xA2, 0x00, 0x1D, 0xFF, 0xD6, 0x00, 0xFC, 0xFF, 0xBC,
+       0xFC, 0xC0, 0x47, 0xFA, 0x0B, 0x70, 0xF9, 0x3C, 0x04, 0x5C, 0xFD,
+       0x75, 0x01, 0x5D, 0xFF, 0x2A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2B,
+       0x00, 0x57, 0xFF, 0x86, 0x01, 0x36, 0xFD, 0x89, 0x04, 0xCD, 0xF8,
+       0xB7, 0x0D, 0x3D, 0x47, 0x91, 0xFB, 0x91, 0x00, 0x83, 0x00, 0x4A,
+       0xFF, 0x8C, 0x00, 0xB9, 0xFF, 0x11, 0x00, 0xFD, 0xFF, 0x36, 0x00,
+       0x38, 0xFF, 0xE6, 0x01, 0x35, 0xFC, 0xF5, 0x06, 0xE7, 0xF2, 0xF2,
+       0x22, 0xC7, 0x3B, 0xD4, 0xF2, 0xA2, 0x05, 0x7A, 0xFD, 0x02, 0x01,
+       0xB2, 0xFF, 0x0B, 0x00, 0x01, 0x00, 0xFE, 0xFF, 0x1B, 0x00, 0x88,
+       0xFF, 0x55, 0x01, 0xF2, 0xFC, 0x67, 0x06, 0xE4, 0xF1, 0x44, 0x37,
+       0xAA, 0x28, 0x05, 0xF2, 0x27, 0x07, 0x36, 0xFC, 0xDA, 0x01, 0x41,
+       0xFF, 0x33, 0x00, 0xFD, 0xFF, 0x0B, 0x00, 0xD2, 0xFF, 0x4C, 0x00,
+       0xCD, 0xFF, 0x94, 0xFF, 0x34, 0x02, 0x70, 0xF8, 0x2E, 0x45, 0x20,
+       0x13, 0xF6, 0xF6, 0x62, 0x05, 0xD1, 0xFC, 0xB2, 0x01, 0x46, 0xFF,
+       0x31, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x23, 0x00, 0x73, 0xFF, 0x3D,
+       0x01, 0xD6, 0xFD, 0x46, 0x03, 0x61, 0xFB, 0x00, 0x07, 0xBF, 0x48,
+       0x98, 0x00, 0x26, 0xFE, 0xD5, 0x01, 0x95, 0xFE, 0xE3, 0x00, 0x96,
+       0xFF, 0x1A, 0x00, 0xFE, 0xFF, 0x36, 0x00, 0x38, 0xFF, 0xDB, 0x01,
+       0x66, 0xFC, 0x5E, 0x06, 0x9C, 0xF4, 0x40, 0x1B, 0xEF, 0x40, 0xF7,
+       0xF4, 0x35, 0x04, 0x62, 0xFE, 0x7A, 0x00, 0xF7, 0xFF, 0xF2, 0xFF,
+       0x05, 0x00, 0xFD, 0xFF, 0x2A, 0x00, 0x5D, 0xFF, 0xA7, 0x01, 0x75,
+       0xFC, 0x03, 0x07, 0x7D, 0xF1, 0x8A, 0x30, 0xFF, 0x2F, 0x7E, 0xF1,
+       0x0A, 0x07, 0x6E, 0xFC, 0xAC, 0x01, 0x5A, 0xFF, 0x2B, 0x00, 0xFD,
+       0xFF, 0x05, 0x00, 0xF0, 0xFF, 0xFC, 0xFF, 0x6E, 0x00, 0x76, 0xFE,
+       0x15, 0x04, 0x2C, 0xF5, 0x49, 0x41, 0xA9, 0x1A, 0xC3, 0xF4, 0x4F,
+       0x06, 0x6C, 0xFC, 0xD9, 0x01, 0x38, 0xFF, 0x35, 0x00, 0xFE, 0xFF,
+       0x1A, 0x00, 0x94, 0xFF, 0xEA, 0x00, 0x87, 0xFE, 0xF0, 0x01, 0xF5,
+       0xFD, 0x05, 0x01, 0xCE, 0x48, 0x83, 0x06, 0x94, 0xFB, 0x2C, 0x03,
+       0xE4, 0xFD, 0x37, 0x01, 0x76, 0xFF, 0x22, 0x00, 0x00, 0x00, 0xFF,
+       0xFF, 0x31, 0x00, 0x45, 0xFF, 0xB6, 0x01, 0xC8, 0xFC, 0x77, 0x05,
+       0xC7, 0xF6, 0xB1, 0x13, 0xED, 0x44, 0x26, 0xF8, 0x5D, 0x02, 0x7D,
+       0xFF, 0xDA, 0xFF, 0x46, 0x00, 0xD4, 0xFF, 0x0B, 0x00, 0xFD, 0xFF,
+       0x33, 0x00, 0x42, 0xFF, 0xD7, 0x01, 0x38, 0xFC, 0x29, 0x07, 0xF3,
+       0xF1, 0x3E, 0x29, 0xC6, 0x36, 0xD4, 0xF1, 0x77, 0x06, 0xE6, 0xFC,
+       0x5C, 0x01, 0x84, 0xFF, 0x1C, 0x00, 0xFE, 0xFF, 0x01, 0x00, 0x0A,
+       0x00, 0xB7, 0xFF, 0xF9, 0x00, 0x89, 0xFD, 0x8A, 0x05, 0xF4, 0xF2,
+       0x37, 0x3C, 0x5B, 0x22, 0x03, 0xF3, 0xED, 0x06, 0x37, 0xFC, 0xE6,
+       0x01, 0x37, 0xFF, 0x36, 0x00, 0xFD, 0xFF, 0x12, 0x00, 0xB6, 0xFF,
+       0x93, 0x00, 0x3C, 0xFF, 0x9D, 0x00, 0x63, 0x00, 0xEB, 0xFB, 0x69,
+       0x47, 0x2D, 0x0D, 0xFF, 0xF8, 0x72, 0x04, 0x42, 0xFD, 0x81, 0x01,
+       0x59, 0xFF, 0x2B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x5B,
+       0xFF, 0x7A, 0x01, 0x50, 0xFD, 0x54, 0x04, 0x3D, 0xF9, 0x82, 0x0C,
+       0x9A, 0x47, 0x5E, 0xFC, 0x2A, 0x00, 0xBD, 0x00, 0x2B, 0xFF, 0x9B,
+       0x00, 0xB3, 0xFF, 0x12, 0x00, 0xFD, 0xFF, 0x36, 0x00, 0x37, 0xFF,
+       0xE6, 0x01, 0x3A, 0xFC, 0xE2, 0x06, 0x28, 0xF3, 0x9E, 0x21, 0xC0,
+       0x3C, 0x1F, 0xF3, 0x6C, 0x05, 0x9E, 0xFD, 0xED, 0x00, 0xBD, 0xFF,
+       0x07, 0x00, 0x01, 0x00, 0xFE, 0xFF, 0x1E, 0x00, 0x80, 0xFF, 0x66,
+       0x01, 0xD8, 0xFC, 0x8B, 0x06, 0xC1, 0xF1, 0x27, 0x36, 0xF6, 0x29,
+       0xDF, 0xF1, 0x2A, 0x07, 0x3B, 0xFC, 0xD4, 0x01, 0x44, 0xFF, 0x32,
+       0x00, 0xFD, 0xFF, 0x0A, 0x00, 0xD7, 0xFF, 0x3E, 0x00, 0xEA, 0xFF,
+       0x60, 0xFF, 0x8F, 0x02, 0xCD, 0xF7, 0x99, 0x44, 0x68, 0x14, 0x8E,
+       0xF6, 0x90, 0x05, 0xBC, 0xFC, 0xBA, 0x01, 0x43, 0xFF, 0x32, 0x00,
+       0xFF, 0xFF, 0x00, 0x00, 0x22, 0x00, 0x79, 0xFF, 0x2F, 0x01, 0xF4,
+       0xFD, 0x0C, 0x03, 0xD4, 0xFB, 0xE9, 0x05, 0xDE, 0x48, 0x8F, 0x01,
+       0xB6, 0xFD, 0x11, 0x02, 0x76, 0xFE, 0xF2, 0x00, 0x91, 0xFF, 0x1B,
+       0x00, 0xFE, 0xFF, 0x35, 0x00, 0x39, 0xFF, 0xD7, 0x01, 0x73, 0xFC,
+       0x3B, 0x06, 0xF5, 0xF4, 0xED, 0x19, 0xB7, 0x41, 0x71, 0xF5, 0xEB,
+       0x03, 0x90, 0xFE, 0x60, 0x00, 0x04, 0x00, 0xED, 0xFF, 0x06, 0x00,
+       0xFD, 0xFF, 0x2C, 0x00, 0x57, 0xFF, 0xB2, 0x01, 0x65, 0xFC, 0x12,
+       0x07, 0x82, 0xF1, 0x50, 0x2F, 0x38, 0x31, 0x7C, 0xF1, 0xF9, 0x06,
+       0x7E, 0xFC, 0xA1, 0x01, 0x61, 0xFF, 0x29, 0x00, 0xFD, 0xFF, 0x04,
+       0x00, 0xF5, 0xFF, 0xEF, 0xFF, 0x88, 0x00, 0x49, 0xFE, 0x5D, 0x04,
+       0xB7, 0xF4, 0x7D, 0x40, 0xFD, 0x1B, 0x6C, 0xF4, 0x70, 0x06, 0x5F,
+       0xFC, 0xDE, 0x01, 0x37, 0xFF, 0x36, 0x00, 0xFE, 0xFF, 0x19, 0x00,
+       0x9A, 0xFF, 0xDB, 0x00, 0xA6, 0xFE, 0xB4, 0x01, 0x64, 0xFE, 0x12,
+       0x00, 0xAA, 0x48, 0x9E, 0x07, 0x21, 0xFB, 0x66, 0x03, 0xC6, 0xFD,
+       0x45, 0x01, 0x70, 0xFF, 0x24, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x30,
+       0x00, 0x48, 0xFF, 0xAD, 0x01, 0xDD, 0xFC, 0x48, 0x05, 0x30, 0xF7,
+       0x6B, 0x12, 0x7D, 0x45, 0xCF, 0xF8, 0x01, 0x02, 0xB2, 0xFF, 0xBD,
+       0xFF, 0x54, 0x00, 0xCE, 0xFF, 0x0C, 0x00, 0xFD, 0xFF, 0x34, 0x00,
+       0x3F, 0xFF, 0xDC, 0x01, 0x34, 0xFC, 0x24, 0x07, 0x1C, 0xF2, 0xF0,
+       0x27, 0xDF, 0x37, 0xFB, 0xF1, 0x51, 0x06, 0x01, 0xFD, 0x4B, 0x01,
+       0x8D, 0xFF, 0x19, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x0E, 0x00, 0xAC,
+       0xFF, 0x0E, 0x01, 0x66, 0xFD, 0xBF, 0x05, 0xAD, 0xF2, 0x3B, 0x3B,
+       0xB0, 0x23, 0xC4, 0xF2, 0xFF, 0x06, 0x33, 0xFC, 0xE5, 0x01, 0x38,
+       0xFF, 0x36, 0x00, 0xFD, 0xFF, 0x10, 0x00, 0xBC, 0xFF, 0x84, 0x00,
+       0x5B, 0xFF, 0x64, 0x00, 0xC9, 0x00, 0x22, 0xFB, 0x02, 0x47, 0x64,
+       0x0E, 0x8F, 0xF8, 0xA7, 0x04, 0x29, 0xFD, 0x8C, 0x01, 0x54, 0xFF,
+       0x2C, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x29, 0x00, 0x60, 0xFF, 0x6E,
+       0x01, 0x6B, 0xFD, 0x1D, 0x04, 0xAF, 0xF9, 0x51, 0x0B, 0xEC, 0x47,
+       0x33, 0xFD, 0xC1, 0xFF, 0xF7, 0x00, 0x0C, 0xFF, 0xAA, 0x00, 0xAD,
+       0xFF, 0x14, 0x00, 0xFD, 0xFF, 0x36, 0x00, 0x36, 0xFF, 0xE6, 0x01,
+       0x40, 0xFC, 0xCB, 0x06, 0x6E, 0xF3, 0x49, 0x20, 0xB0, 0x3D, 0x73,
+       0xF3, 0x31, 0x05, 0xC4, 0xFD, 0xD6, 0x00, 0xC8, 0xFF, 0x03, 0x00,
+       0x02, 0x00, 0xFE, 0xFF, 0x21, 0x00, 0x77, 0xFF, 0x75, 0x01, 0xBF,
+       0xFC, 0xAB, 0x06, 0xA6, 0xF1, 0x05, 0x35, 0x40, 0x2B, 0xBF, 0xF1,
+       0x2A, 0x07, 0x42, 0xFC, 0xCE, 0x01, 0x48, 0xFF, 0x31, 0x00, 0xFD,
+       0xFF, 0x09, 0x00, 0xDC, 0xFF, 0x2F, 0x00, 0x07, 0x00, 0x2C, 0xFF,
+       0xE6, 0x02, 0x31, 0xF7, 0xFA, 0x43, 0xB3, 0x15, 0x29, 0xF6, 0xBC,
+       0x05, 0xA9, 0xFC, 0xC2, 0x01, 0x40, 0xFF, 0x33, 0x00, 0xFF, 0xFF,
+       0x00, 0x00, 0x20, 0x00, 0x7E, 0xFF, 0x21, 0x01, 0x12, 0xFE, 0xD1,
+       0x02, 0x47, 0xFC, 0xD7, 0x04, 0xF0, 0x48, 0x8D, 0x02, 0x45, 0xFD,
+       0x4D, 0x02, 0x56, 0xFE, 0x01, 0x01, 0x8B, 0xFF, 0x1D, 0x00, 0xFE,
+       0xFF, 0x34, 0x00, 0x3B, 0xFF, 0xD1, 0x01, 0x83, 0xFC, 0x16, 0x06,
+       0x51, 0xF5, 0x9B, 0x18, 0x75, 0x42, 0xF3, 0xF5, 0x9D, 0x03, 0xBF,
+       0xFE, 0x45, 0x00, 0x11, 0x00, 0xE8, 0xFF, 0x07, 0x00, 0xFD, 0xFF,
+       0x2E, 0x00, 0x52, 0xFF, 0xBC, 0x01, 0x58, 0xFC, 0x1D, 0x07, 0x8E,
+       0xF1, 0x11, 0x2E, 0x6B, 0x32, 0x81, 0xF1, 0xE5, 0x06, 0x90, 0xFC,
+       0x94, 0x01, 0x67, 0xFF, 0x26, 0x00, 0xFD, 0xFF, 0x04, 0x00, 0xF9,
+       0xFF, 0xE3, 0xFF, 0xA1, 0x00, 0x1E, 0xFE, 0xA3, 0x04, 0x49, 0xF4,
+       0xA8, 0x3F, 0x52, 0x1D, 0x19, 0xF4, 0x90, 0x06, 0x53, 0xFC, 0xE1,
+       0x01, 0x36, 0xFF, 0x36, 0x00, 0xFE, 0xFF, 0x17, 0x00, 0xA0, 0xFF,
+       0xCC, 0x00, 0xC6, 0xFE, 0x79, 0x01, 0xD2, 0xFE, 0x26, 0xFF, 0x7C,
+       0x48, 0xBE, 0x08, 0xAE, 0xFA, 0xA0, 0x03, 0xA9, 0xFD, 0x52, 0x01,
+       0x6B, 0xFF, 0x25, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x2F, 0x00, 0x4C,
+       0xFF, 0xA3, 0x01, 0xF3, 0xFC, 0x18, 0x05, 0x9B, 0xF7, 0x27, 0x11,
+       0x02, 0x46, 0x7F, 0xF9, 0xA3, 0x01, 0xE8, 0xFF, 0x9F, 0xFF, 0x63,
+       0x00, 0xC9, 0xFF, 0x0D, 0x00, 0xFD, 0xFF, 0x35, 0x00, 0x3C, 0xFF,
+       0xE0, 0x01, 0x32, 0xFC, 0x1C, 0x07, 0x4B, 0xF2, 0xA0, 0x26, 0xF2,
+       0x38, 0x2A, 0xF2, 0x28, 0x06, 0x1F, 0xFD, 0x39, 0x01, 0x96, 0xFF,
+       0x16, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x11, 0x00, 0xA2, 0xFF, 0x22,
+       0x01, 0x45, 0xFD, 0xF1, 0x05, 0x6D, 0xF2, 0x38, 0x3A, 0x03, 0x25,
+       0x8B, 0xF2, 0x0E, 0x07, 0x32, 0xFC, 0xE4, 0x01, 0x3A, 0xFF, 0x36,
+       0x00, 0xFD, 0xFF, 0x0F, 0x00, 0xC2, 0xFF, 0x75, 0x00, 0x7A, 0xFF,
+       0x2B, 0x00, 0x2D, 0x01, 0x61, 0xFA, 0x97, 0x46, 0xA0, 0x0F, 0x20,
+       0xF8, 0xDA, 0x04, 0x10, 0xFD, 0x97, 0x01, 0x50, 0xFF, 0x2E, 0x00,
+       0xFF, 0xFF, 0x00, 0x00, 0x27, 0x00, 0x65, 0xFF, 0x62, 0x01, 0x87,
+       0xFD, 0xE5, 0x03, 0x21, 0xFA, 0x25, 0x0A, 0x33, 0x48, 0x0F, 0xFE,
+       0x57, 0xFF, 0x31, 0x01, 0xEC, 0xFE, 0xB9, 0x00, 0xA7, 0xFF, 0x15,
+       0x00, 0xFE, 0xFF, 0x36, 0x00, 0x36, 0xFF, 0xE4, 0x01, 0x48, 0xFC,
+       0xB2, 0x06, 0xB9, 0xF3, 0xF3, 0x1E, 0x98, 0x3E, 0xCF, 0xF3, 0xF3,
+       0x04, 0xEB, 0xFD, 0xBF, 0x00, 0xD4, 0xFF, 0xFF, 0xFF, 0x03, 0x00,
+       0xFE, 0xFF, 0x23, 0x00, 0x70, 0xFF, 0x84, 0x01, 0xA9, 0xFC, 0xC7,
+       0x06, 0x91, 0xF1, 0xDC, 0x33, 0x87, 0x2C, 0xA5, 0xF1, 0x26, 0x07,
+       0x4B, 0xFC, 0xC6, 0x01, 0x4C, 0xFF, 0x30, 0x00, 0xFD, 0xFF, 0x08,
+       0x00, 0xE2, 0xFF, 0x21, 0x00, 0x23, 0x00, 0xFA, 0xFE, 0x3A, 0x03,
+       0x9D, 0xF6, 0x50, 0x43, 0x00, 0x17, 0xC6, 0xF5, 0xE6, 0x05, 0x97,
+       0xFC, 0xC9, 0x01, 0x3E, 0xFF, 0x34, 0x00, 0xFE, 0xFF, 0x00, 0x00,
+       0x1E, 0x00, 0x84, 0xFF, 0x13, 0x01, 0x31, 0xFE, 0x95, 0x02, 0xBA,
+       0xFC, 0xCB, 0x03, 0xF7, 0x48, 0x91, 0x03, 0xD3, 0xFC, 0x88, 0x02,
+       0x38, 0xFE, 0x10, 0x01, 0x85, 0xFF, 0x1E, 0x00, 0xFE, 0xFF, 0x34,
+       0x00, 0x3D, 0xFF, 0xCB, 0x01, 0x93, 0xFC, 0xEF, 0x05, 0xB0, 0xF5,
+       0x4B, 0x17, 0x2A, 0x43, 0x7D, 0xF6, 0x4D, 0x03, 0xEF, 0xFE, 0x2A,
+       0x00, 0x1E, 0x00, 0xE3, 0xFF, 0x08, 0x00, 0xFD, 0xFF, 0x2F, 0x00,
+       0x4D, 0xFF, 0xC4, 0x01, 0x4D, 0xFC, 0x25, 0x07, 0xA1, 0xF1, 0xCE,
+       0x2C, 0x99, 0x33, 0x8E, 0xF1, 0xCD, 0x06, 0xA4, 0xFC, 0x87, 0x01,
+       0x6E, 0xFF, 0x24, 0x00, 0xFD, 0xFF, 0x03, 0x00, 0xFE, 0xFF, 0xD7,
+       0xFF, 0xBA, 0x00, 0xF4, 0xFD, 0xE5, 0x04, 0xE4, 0xF3, 0xCA, 0x3E,
+       0xA7, 0x1E, 0xCA, 0xF3, 0xAC, 0x06, 0x4A, 0xFC, 0xE4, 0x01, 0x36,
+       0xFF, 0x36, 0x00, 0xFE, 0xFF, 0x16, 0x00, 0xA6, 0xFF, 0xBD, 0x00,
+       0xE5, 0xFE, 0x3E, 0x01, 0x3F, 0xFF, 0x41, 0xFE, 0x41, 0x48, 0xE4,
+       0x09, 0x3B, 0xFA, 0xD9, 0x03, 0x8D, 0xFD, 0x5F, 0x01, 0x66, 0xFF,
+       0x27, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x2E, 0x00, 0x4F, 0xFF, 0x99,
+       0x01, 0x0B, 0xFD, 0xE6, 0x04, 0x08, 0xF8, 0xE7, 0x0F, 0x7C, 0x46,
+       0x37, 0xFA, 0x42, 0x01, 0x1F, 0x00, 0x81, 0xFF, 0x71, 0x00, 0xC3,
+       0xFF, 0x0F, 0x00, 0xFD, 0xFF, 0x35, 0x00, 0x3A, 0xFF, 0xE3, 0x01,
+       0x31, 0xFC, 0x11, 0x07, 0x7F, 0xF2, 0x4E, 0x25, 0xFD, 0x39, 0x60,
+       0xF2, 0xFB, 0x05, 0x3E, 0xFD, 0x26, 0x01, 0xA0, 0xFF, 0x12, 0x00,
+       0x00, 0x00, 0xFF, 0xFF, 0x15, 0x00, 0x98, 0xFF, 0x35, 0x01, 0x25,
+       0xFD, 0x1E, 0x06, 0x35, 0xF2, 0x2E, 0x39, 0x55, 0x26, 0x56, 0xF2,
+       0x1A, 0x07, 0x31, 0xFC, 0xE1, 0x01, 0x3C, 0xFF, 0x35, 0x00, 0xFD,
+       0xFF, 0x0E, 0x00, 0xC7, 0xFF, 0x66, 0x00, 0x98, 0xFF, 0xF4, 0xFF,
+       0x8E, 0x01, 0xA7, 0xF9, 0x1D, 0x46, 0xDF, 0x10, 0xB3, 0xF7, 0x0D,
+       0x05, 0xF8, 0xFC, 0xA1, 0x01, 0x4C, 0xFF, 0x2F, 0x00, 0xFF, 0xFF,
+       0x00, 0x00, 0x26, 0x00, 0x6A, 0xFF, 0x55, 0x01, 0xA3, 0xFD, 0xAD,
+       0x03, 0x94, 0xFA, 0xFF, 0x08, 0x70, 0x48, 0xF3, 0xFE, 0xEA, 0xFE,
+       0x6C, 0x01, 0xCD, 0xFE, 0xC9, 0x00, 0xA1, 0xFF, 0x17, 0x00, 0xFE,
+       0xFF, 0x36, 0x00, 0x36, 0xFF, 0xE2, 0x01, 0x51, 0xFC, 0x96, 0x06,
+       0x07, 0xF4, 0x9E, 0x1D, 0x77, 0x3F, 0x32, 0xF4, 0xB2, 0x04, 0x15,
+       0xFE, 0xA7, 0x00, 0xE0, 0xFF, 0xFA, 0xFF, 0x03, 0x00, 0xFD, 0xFF,
+       0x26, 0x00, 0x69, 0xFF, 0x91, 0x01, 0x94, 0xFC, 0xE0, 0x06, 0x84,
+       0xF1, 0xAF, 0x32, 0xCA, 0x2D, 0x92, 0xF1, 0x1F, 0x07, 0x56, 0xFC,
+       0xBE, 0x01, 0x51, 0xFF, 0x2E, 0x00, 0xFD, 0xFF, 0x07, 0x00, 0xE7,
+       0xFF, 0x14, 0x00, 0x3F, 0x00, 0xC9, 0xFE, 0x8C, 0x03, 0x11, 0xF6,
+       0x9E, 0x42, 0x50, 0x18, 0x66, 0xF5, 0x0D, 0x06, 0x86, 0xFC, 0xD0,
+       0x01, 0x3B, 0xFF, 0x34, 0x00, 0xFE, 0xFF, 0x1D, 0x00, 0x8A, 0xFF,
+       0x04, 0x01, 0x50, 0xFE, 0x5A, 0x02, 0x2C, 0xFD, 0xC6, 0x02, 0xF2,
+       0x48, 0x9B, 0x04, 0x61, 0xFC, 0xC3, 0x02, 0x19, 0xFE, 0x1E, 0x01,
+       0x7F, 0xFF, 0x20, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x33, 0x00, 0x40,
+       0xFF, 0xC4, 0x01, 0xA5, 0xFC, 0xC5, 0x05, 0x13, 0xF6, 0xFD, 0x15,
+       0xD4, 0x43, 0x0F, 0xF7, 0xF9, 0x02, 0x21, 0xFF, 0x0D, 0x00, 0x2C,
+       0x00, 0xDE, 0xFF, 0x09, 0x00, 0xFD, 0xFF, 0x31, 0x00, 0x49, 0xFF,
+       0xCC, 0x01, 0x44, 0xFC, 0x29, 0x07, 0xB9, 0xF1, 0x89, 0x2B, 0xC3,
+       0x34, 0xA0, 0xF1, 0xB1, 0x06, 0xBA, 0xFC, 0x79, 0x01, 0x76, 0xFF,
+       0x21, 0x00, 0xFE, 0xFF, 0x02, 0x00, 0x02, 0x00, 0xCB, 0xFF, 0xD1,
+       0x00, 0xCC, 0xFD, 0x24, 0x05, 0x87, 0xF3, 0xE4, 0x3D, 0xFD, 0x1F,
+       0x7F, 0xF3, 0xC6, 0x06, 0x41, 0xFC, 0xE5, 0x01, 0x36, 0xFF, 0x36,
+       0x00, 0xFD, 0xFF, 0x14, 0x00, 0xAC, 0xFF, 0xAE, 0x00, 0x05, 0xFF,
+       0x03, 0x01, 0xAA, 0xFF, 0x63, 0xFD, 0xFD, 0x47, 0x0E, 0x0B, 0xC8,
+       0xF9, 0x11, 0x04, 0x71, 0xFD, 0x6C, 0x01, 0x61, 0xFF, 0x28, 0x00,
+       0x00, 0x00, 0xFF, 0xFF, 0x2D, 0x00, 0x53, 0xFF, 0x8F, 0x01, 0x23,
+       0xFD, 0xB2, 0x04, 0x76, 0xF8, 0xAA, 0x0E, 0xED, 0x46, 0xF7, 0xFA,
+       0xDF, 0x00, 0x57, 0x00, 0x62, 0xFF, 0x80, 0x00, 0xBD, 0xFF, 0x10,
+       0x00, 0xFD, 0xFF, 0x36, 0x00, 0x39, 0xFF, 0xE5, 0x01, 0x33, 0xFC,
+       0x03, 0x07, 0xB7, 0xF2, 0xFC, 0x23, 0x03, 0x3B, 0x9E, 0xF2, 0xCB,
+       0x05, 0x5F, 0xFD, 0x12, 0x01, 0xAA, 0xFF, 0x0E, 0x00, 0x00, 0x00,
+       0xFF, 0xFF, 0x18, 0x00, 0x8F, 0xFF, 0x47, 0x01, 0x08, 0xFD, 0x49,
+       0x06, 0x05, 0xF2, 0x1D, 0x38, 0xA6, 0x27, 0x26, 0xF2, 0x23, 0x07,
+       0x33, 0xFC, 0xDD, 0x01, 0x3E, 0xFF, 0x34, 0x00, 0xFD, 0xFF, 0x0C,
+       0x00, 0xCD, 0xFF, 0x57, 0x00, 0xB6, 0xFF, 0xBE, 0xFF, 0xED, 0x01,
+       0xF5, 0xF8, 0x9B, 0x45, 0x22, 0x12, 0x48, 0xF7, 0x3D, 0x05, 0xE2,
+       0xFC, 0xAB, 0x01, 0x49, 0xFF, 0x30, 0x00, 0xFF, 0xFF, 0x00, 0x00,
+       0x24, 0x00, 0x6F, 0xFF, 0x48, 0x01, 0xC0, 0xFD, 0x73, 0x03, 0x07,
+       0xFB, 0xDD, 0x07, 0xA1, 0x48, 0xDD, 0xFF, 0x7D, 0xFE, 0xA7, 0x01,
+       0xAD, 0xFE, 0xD8, 0x00, 0x9B, 0xFF, 0x18, 0x00, 0xFE, 0xFF, 0x36,
+       0x00, 0x37, 0xFF, 0xDF, 0x01, 0x5C, 0xFC, 0x78, 0x06, 0x5A, 0xF4,
+       0x49, 0x1C, 0x4E, 0x40, 0x9E, 0xF4, 0x6D, 0x04, 0x3F, 0xFE, 0x8E,
+       0x00, 0xED, 0xFF, 0xF6, 0xFF, 0x04, 0x00, 0xFD, 0xFF, 0x28, 0x00,
+       0x62, 0xFF, 0x9E, 0x01, 0x82, 0xFC, 0xF5, 0x06, 0x7D, 0xF1, 0x7B,
+       0x31, 0x09, 0x2F, 0x84, 0xF1, 0x15, 0x07, 0x62, 0xFC, 0xB4, 0x01,
+       0x56, 0xFF, 0x2C, 0x00, 0xFD, 0xFF, 0x06, 0x00, 0xEC, 0xFF, 0x06,
+       0x00, 0x5A, 0x00, 0x9A, 0xFE, 0xDA, 0x03, 0x8D, 0xF5, 0xE1, 0x41,
+       0xA1, 0x19, 0x09, 0xF5, 0x33, 0x06, 0x77, 0xFC, 0xD6, 0x01, 0x3A,
+       0xFF, 0x35, 0x00, 0xFE, 0xFF, 0x1B, 0x00, 0x8F, 0xFF, 0xF5, 0x00,
+       0x6F, 0xFE, 0x1E, 0x02, 0x9D, 0xFD, 0xC7, 0x01, 0xE1, 0x48, 0xAB,
+       0x05, 0xEE, 0xFB, 0xFE, 0x02, 0xFB, 0xFD, 0x2C, 0x01, 0x7A, 0xFF,
+       0x21, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x32, 0x00, 0x42, 0xFF, 0xBC,
+       0x01, 0xB8, 0xFC, 0x9A, 0x05, 0x77, 0xF6, 0xB1, 0x14, 0x77, 0x44,
+       0xA9, 0xF7, 0xA2, 0x02, 0x54, 0xFF, 0xF1, 0xFF, 0x3A, 0x00, 0xD8,
+       0xFF, 0x0A, 0x00, 0xFD, 0xFF, 0x32, 0x00, 0x45, 0xFF, 0xD3, 0x01,
+       0x3C, 0xFC, 0x2A, 0x07, 0xD8, 0xF1, 0x3F, 0x2A, 0xE6, 0x35, 0xBB,
+       0xF1, 0x92, 0x06, 0xD2, 0xFC, 0x69, 0x01, 0x7E, 0xFF, 0x1F, 0x00,
+       0xFE, 0xFF, 0x01, 0x00, 0x07, 0x00, 0xC0, 0xFF, 0xE8, 0x00, 0xA6,
+       0xFD, 0x5F, 0x05, 0x31, 0xF3, 0xF6, 0x3C, 0x52, 0x21, 0x37, 0xF3,
+       0xDD, 0x06, 0x3B, 0xFC, 0xE6, 0x01, 0x36, 0xFF, 0x36, 0x00, 0xFD,
+       0xFF, 0x13, 0x00, 0xB1, 0xFF, 0x9F, 0x00, 0x24, 0xFF, 0xC9, 0x00,
+       0x13, 0x00, 0x8D, 0xFC, 0xAE, 0x47, 0x3E, 0x0C, 0x56, 0xF9, 0x48,
+       0x04, 0x56, 0xFD, 0x78, 0x01, 0x5C, 0xFF, 0x2A, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x2B, 0x00, 0x58, 0xFF, 0x83, 0x01, 0x3C, 0xFD, 0x7E,
+       0x04, 0xE6, 0xF8, 0x72, 0x0D, 0x52, 0x47, 0xBE, 0xFB, 0x7A, 0x00,
+       0x90, 0x00, 0x43, 0xFF, 0x8F, 0x00, 0xB7, 0xFF, 0x11, 0x00, 0xFD,
+       0xFF, 0x36, 0x00, 0x37, 0xFF, 0xE6, 0x01, 0x36, 0xFC, 0xF1, 0x06,
+       0xF5, 0xF2, 0xA7, 0x22, 0xFF, 0x3B, 0xE4, 0xF2, 0x96, 0x05, 0x81,
+       0xFD, 0xFD, 0x00, 0xB5, 0xFF, 0x0B, 0x00, 0x01, 0x00, 0xFE, 0xFF,
+       0x1C, 0x00, 0x86, 0xFF, 0x59, 0x01, 0xEC, 0xFC, 0x6F, 0x06, 0xDC,
+       0xF1, 0x04, 0x37, 0xF3, 0x28, 0xFC, 0xF1, 0x28, 0x07, 0x37, 0xFC,
+       0xD8, 0x01, 0x41, 0xFF, 0x33, 0x00, 0xFD, 0xFF, 0x0B, 0x00, 0xD3,
+       0xFF, 0x49, 0x00, 0xD4, 0xFF, 0x88, 0xFF, 0x49, 0x02, 0x4B, 0xF8,
+       0x0D, 0x45, 0x68, 0x13, 0xDF, 0xF6, 0x6C, 0x05, 0xCC, 0xFC, 0xB4,
+       0x01, 0x45, 0xFF, 0x31, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x23, 0x00,
+       0x74, 0xFF, 0x3A, 0x01, 0xDD, 0xFD, 0x39, 0x03, 0x7B, 0xFB, 0xC1,
+       0x06, 0xC7, 0x48, 0xCF, 0x00, 0x0D, 0xFE, 0xE3, 0x01, 0x8E, 0xFE,
+       0xE7, 0x00, 0x95, 0xFF, 0x1A, 0x00, 0xFE, 0xFF, 0x36, 0x00, 0x38,
+       0xFF, 0xDA, 0x01, 0x69, 0xFC, 0x57, 0x06, 0xAF, 0xF4, 0xF5, 0x1A,
+       0x1D, 0x41, 0x11, 0xF5, 0x25, 0x04, 0x6C, 0xFE, 0x74, 0x00, 0xF9,
+       0xFF, 0xF1, 0xFF, 0x05, 0x00, 0xFD, 0xFF, 0x2A, 0x00, 0x5C, 0xFF,
+       0xAA, 0x01, 0x71, 0xFC, 0x07, 0x07, 0x7E, 0xF1, 0x44, 0x30, 0x44,
+       0x30, 0x7E, 0xF1, 0x07, 0x07, 0x71, 0xFC, 0xAA, 0x01, 0x5C, 0xFF,
+       0x2A, 0x00, 0xFD, 0xFF, 0x05, 0x00, 0xF1, 0xFF, 0xF9, 0xFF, 0x74,
+       0x00, 0x6C, 0xFE, 0x25, 0x04, 0x11, 0xF5, 0x1D, 0x41, 0xF5, 0x1A,
+       0xAF, 0xF4, 0x57, 0x06, 0x69, 0xFC, 0xDA, 0x01, 0x38, 0xFF, 0x36,
+       0x00, 0xFE, 0xFF, 0x1A, 0x00, 0x95, 0xFF, 0xE7, 0x00, 0x8E, 0xFE,
+       0xE3, 0x01, 0x0D, 0xFE, 0xCF, 0x00, 0xC7, 0x48, 0xC1, 0x06, 0x7B,
+       0xFB, 0x39, 0x03, 0xDD, 0xFD, 0x3A, 0x01, 0x74, 0xFF, 0x23, 0x00,
+       0x00, 0x00, 0xFF, 0xFF, 0x31, 0x00, 0x45, 0xFF, 0xB4, 0x01, 0xCC,
+       0xFC, 0x6C, 0x05, 0xDF, 0xF6, 0x68, 0x13, 0x0D, 0x45, 0x4B, 0xF8,
+       0x49, 0x02, 0x88, 0xFF, 0xD4, 0xFF, 0x49, 0x00, 0xD3, 0xFF, 0x0B,
+       0x00, 0xFD, 0xFF, 0x33, 0x00, 0x41, 0xFF, 0xD8, 0x01, 0x37, 0xFC,
+       0x28, 0x07, 0xFC, 0xF1, 0xF3, 0x28, 0x04, 0x37, 0xDC, 0xF1, 0x6F,
+       0x06, 0xEC, 0xFC, 0x59, 0x01, 0x86, 0xFF, 0x1C, 0x00, 0xFE, 0xFF,
+       0x01, 0x00, 0x0B, 0x00, 0xB5, 0xFF, 0xFD, 0x00, 0x81, 0xFD, 0x96,
+       0x05, 0xE4, 0xF2, 0xFF, 0x3B, 0xA7, 0x22, 0xF5, 0xF2, 0xF1, 0x06,
+       0x36, 0xFC, 0xE6, 0x01, 0x37, 0xFF, 0x36, 0x00, 0xFD, 0xFF, 0x11,
+       0x00, 0xB7, 0xFF, 0x8F, 0x00, 0x43, 0xFF, 0x90, 0x00, 0x7A, 0x00,
+       0xBE, 0xFB, 0x52, 0x47, 0x72, 0x0D, 0xE6, 0xF8, 0x7E, 0x04, 0x3C,
+       0xFD, 0x83, 0x01, 0x58, 0xFF, 0x2B, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x2A, 0x00, 0x5C, 0xFF, 0x78, 0x01, 0x56, 0xFD, 0x48, 0x04, 0x56,
+       0xF9, 0x3E, 0x0C, 0xAE, 0x47, 0x8D, 0xFC, 0x13, 0x00, 0xC9, 0x00,
+       0x24, 0xFF, 0x9F, 0x00, 0xB1, 0xFF, 0x13, 0x00, 0xFD, 0xFF, 0x36,
+       0x00, 0x36, 0xFF, 0xE6, 0x01, 0x3B, 0xFC, 0xDD, 0x06, 0x37, 0xF3,
+       0x52, 0x21, 0xF6, 0x3C, 0x31, 0xF3, 0x5F, 0x05, 0xA6, 0xFD, 0xE8,
+       0x00, 0xC0, 0xFF, 0x07, 0x00, 0x01, 0x00, 0xFE, 0xFF, 0x1F, 0x00,
+       0x7E, 0xFF, 0x69, 0x01, 0xD2, 0xFC, 0x92, 0x06, 0xBB, 0xF1, 0xE6,
+       0x35, 0x3F, 0x2A, 0xD8, 0xF1, 0x2A, 0x07, 0x3C, 0xFC, 0xD3, 0x01,
+       0x45, 0xFF, 0x32, 0x00, 0xFD, 0xFF, 0x0A, 0x00, 0xD8, 0xFF, 0x3A,
+       0x00, 0xF1, 0xFF, 0x54, 0xFF, 0xA2, 0x02, 0xA9, 0xF7, 0x77, 0x44,
+       0xB1, 0x14, 0x77, 0xF6, 0x9A, 0x05, 0xB8, 0xFC, 0xBC, 0x01, 0x42,
+       0xFF, 0x32, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x21, 0x00, 0x7A, 0xFF,
+       0x2C, 0x01, 0xFB, 0xFD, 0xFE, 0x02, 0xEE, 0xFB, 0xAB, 0x05, 0xE1,
+       0x48, 0xC7, 0x01, 0x9D, 0xFD, 0x1E, 0x02, 0x6F, 0xFE, 0xF5, 0x00,
+       0x8F, 0xFF, 0x1B, 0x00, 0xFE, 0xFF, 0x35, 0x00, 0x3A, 0xFF, 0xD6,
+       0x01, 0x77, 0xFC, 0x33, 0x06, 0x09, 0xF5, 0xA1, 0x19, 0xE1, 0x41,
+       0x8D, 0xF5, 0xDA, 0x03, 0x9A, 0xFE, 0x5A, 0x00, 0x06, 0x00, 0xEC,
+       0xFF, 0x06, 0x00, 0xFD, 0xFF, 0x2C, 0x00, 0x56, 0xFF, 0xB4, 0x01,
+       0x62, 0xFC, 0x15, 0x07, 0x84, 0xF1, 0x09, 0x2F, 0x7B, 0x31, 0x7D,
+       0xF1, 0xF5, 0x06, 0x82, 0xFC, 0x9E, 0x01, 0x62, 0xFF, 0x28, 0x00,
+       0xFD, 0xFF, 0x04, 0x00, 0xF6, 0xFF, 0xED, 0xFF, 0x8E, 0x00, 0x3F,
+       0xFE, 0x6D, 0x04, 0x9E, 0xF4, 0x4E, 0x40, 0x49, 0x1C, 0x5A, 0xF4,
+       0x78, 0x06, 0x5C, 0xFC, 0xDF, 0x01, 0x37, 0xFF, 0x36, 0x00, 0xFE,
+       0xFF, 0x18, 0x00, 0x9B, 0xFF, 0xD8, 0x00, 0xAD, 0xFE, 0xA7, 0x01,
+       0x7D, 0xFE, 0xDD, 0xFF, 0xA1, 0x48, 0xDD, 0x07, 0x07, 0xFB, 0x73,
+       0x03, 0xC0, 0xFD, 0x48, 0x01, 0x6F, 0xFF, 0x24, 0x00, 0x00, 0x00,
+       0xFF, 0xFF, 0x30, 0x00, 0x49, 0xFF, 0xAB, 0x01, 0xE2, 0xFC, 0x3D,
+       0x05, 0x48, 0xF7, 0x22, 0x12, 0x9B, 0x45, 0xF5, 0xF8, 0xED, 0x01,
+       0xBE, 0xFF, 0xB6, 0xFF, 0x57, 0x00, 0xCD, 0xFF, 0x0C, 0x00, 0xFD,
+       0xFF, 0x34, 0x00, 0x3E, 0xFF, 0xDD, 0x01, 0x33, 0xFC, 0x23, 0x07,
+       0x26, 0xF2, 0xA6, 0x27, 0x1D, 0x38, 0x05, 0xF2, 0x49, 0x06, 0x08,
+       0xFD, 0x47, 0x01, 0x8F, 0xFF, 0x18, 0x00, 0xFF, 0xFF, 0x00, 0x00,
+       0x0E, 0x00, 0xAA, 0xFF, 0x12, 0x01, 0x5F, 0xFD, 0xCB, 0x05, 0x9E,
+       0xF2, 0x03, 0x3B, 0xFC, 0x23, 0xB7, 0xF2, 0x03, 0x07, 0x33, 0xFC,
+       0xE5, 0x01, 0x39, 0xFF, 0x36, 0x00, 0xFD, 0xFF, 0x10, 0x00, 0xBD,
+       0xFF, 0x80, 0x00, 0x62, 0xFF, 0x57, 0x00, 0xDF, 0x00, 0xF7, 0xFA,
+       0xED, 0x46, 0xAA, 0x0E, 0x76, 0xF8, 0xB2, 0x04, 0x23, 0xFD, 0x8F,
+       0x01, 0x53, 0xFF, 0x2D, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x28, 0x00,
+       0x61, 0xFF, 0x6C, 0x01, 0x71, 0xFD, 0x11, 0x04, 0xC8, 0xF9, 0x0E,
+       0x0B, 0xFD, 0x47, 0x63, 0xFD, 0xAA, 0xFF, 0x03, 0x01, 0x05, 0xFF,
+       0xAE, 0x00, 0xAC, 0xFF, 0x14, 0x00, 0xFD, 0xFF, 0x36, 0x00, 0x36,
+       0xFF, 0xE5, 0x01, 0x41, 0xFC, 0xC6, 0x06, 0x7F, 0xF3, 0xFD, 0x1F,
+       0xE4, 0x3D, 0x87, 0xF3, 0x24, 0x05, 0xCC, 0xFD, 0xD1, 0x00, 0xCB,
+       0xFF, 0x02, 0x00, 0x02, 0x00, 0xFE, 0xFF, 0x21, 0x00, 0x76, 0xFF,
+       0x79, 0x01, 0xBA, 0xFC, 0xB1, 0x06, 0xA0, 0xF1, 0xC3, 0x34, 0x89,
+       0x2B, 0xB9, 0xF1, 0x29, 0x07, 0x44, 0xFC, 0xCC, 0x01, 0x49, 0xFF,
+       0x31, 0x00, 0xFD, 0xFF, 0x09, 0x00, 0xDE, 0xFF, 0x2C, 0x00, 0x0D,
+       0x00, 0x21, 0xFF, 0xF9, 0x02, 0x0F, 0xF7, 0xD4, 0x43, 0xFD, 0x15,
+       0x13, 0xF6, 0xC5, 0x05, 0xA5, 0xFC, 0xC4, 0x01, 0x40, 0xFF, 0x33,
+       0x00, 0xFF, 0xFF, 0x00, 0x00, 0x20, 0x00, 0x7F, 0xFF, 0x1E, 0x01,
+       0x19, 0xFE, 0xC3, 0x02, 0x61, 0xFC, 0x9B, 0x04, 0xF2, 0x48, 0xC6,
+       0x02, 0x2C, 0xFD, 0x5A, 0x02, 0x50, 0xFE, 0x04, 0x01, 0x8A, 0xFF,
+       0x1D, 0x00, 0xFE, 0xFF, 0x34, 0x00, 0x3B, 0xFF, 0xD0, 0x01, 0x86,
+       0xFC, 0x0D, 0x06, 0x66, 0xF5, 0x50, 0x18, 0x9E, 0x42, 0x11, 0xF6,
+       0x8C, 0x03, 0xC9, 0xFE, 0x3F, 0x00, 0x14, 0x00, 0xE7, 0xFF, 0x07,
+       0x00, 0xFD, 0xFF, 0x2E, 0x00, 0x51, 0xFF, 0xBE, 0x01, 0x56, 0xFC,
+       0x1F, 0x07, 0x92, 0xF1, 0xCA, 0x2D, 0xAF, 0x32, 0x84, 0xF1, 0xE0,
+       0x06, 0x94, 0xFC, 0x91, 0x01, 0x69, 0xFF, 0x26, 0x00, 0xFD, 0xFF,
+       0x03, 0x00, 0xFA, 0xFF, 0xE0, 0xFF, 0xA7, 0x00, 0x15, 0xFE, 0xB2,
+       0x04, 0x32, 0xF4, 0x77, 0x3F, 0x9E, 0x1D, 0x07, 0xF4, 0x96, 0x06,
+       0x51, 0xFC, 0xE2, 0x01, 0x36, 0xFF, 0x36, 0x00, 0xFE, 0xFF, 0x17,
+       0x00, 0xA1, 0xFF, 0xC9, 0x00, 0xCD, 0xFE, 0x6C, 0x01, 0xEA, 0xFE,
+       0xF3, 0xFE, 0x70, 0x48, 0xFF, 0x08, 0x94, 0xFA, 0xAD, 0x03, 0xA3,
+       0xFD, 0x55, 0x01, 0x6A, 0xFF, 0x26, 0x00, 0x00, 0x00, 0xFF, 0xFF,
+       0x2F, 0x00, 0x4C, 0xFF, 0xA1, 0x01, 0xF8, 0xFC, 0x0D, 0x05, 0xB3,
+       0xF7, 0xDF, 0x10, 0x1D, 0x46, 0xA7, 0xF9, 0x8E, 0x01, 0xF4, 0xFF,
+       0x98, 0xFF, 0x66, 0x00, 0xC7, 0xFF, 0x0E, 0x00, 0xFD, 0xFF, 0x35,
+       0x00, 0x3C, 0xFF, 0xE1, 0x01, 0x31, 0xFC, 0x1A, 0x07, 0x56, 0xF2,
+       0x55, 0x26, 0x2E, 0x39, 0x35, 0xF2, 0x1E, 0x06, 0x25, 0xFD, 0x35,
+       0x01, 0x98, 0xFF, 0x15, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x12, 0x00,
+       0xA0, 0xFF, 0x26, 0x01, 0x3E, 0xFD, 0xFB, 0x05, 0x60, 0xF2, 0xFD,
+       0x39, 0x4E, 0x25, 0x7F, 0xF2, 0x11, 0x07, 0x31, 0xFC, 0xE3, 0x01,
+       0x3A, 0xFF, 0x35, 0x00, 0xFD, 0xFF, 0x0F, 0x00, 0xC3, 0xFF, 0x71,
+       0x00, 0x81, 0xFF, 0x1F, 0x00, 0x42, 0x01, 0x37, 0xFA, 0x7C, 0x46,
+       0xE7, 0x0F, 0x08, 0xF8, 0xE6, 0x04, 0x0B, 0xFD, 0x99, 0x01, 0x4F,
+       0xFF, 0x2E, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x27, 0x00, 0x66, 0xFF,
+       0x5F, 0x01, 0x8D, 0xFD, 0xD9, 0x03, 0x3B, 0xFA, 0xE4, 0x09, 0x41,
+       0x48, 0x41, 0xFE, 0x3F, 0xFF, 0x3E, 0x01, 0xE5, 0xFE, 0xBD, 0x00,
+       0xA6, 0xFF, 0x16, 0x00, 0xFE, 0xFF, 0x36, 0x00, 0x36, 0xFF, 0xE4,
+       0x01, 0x4A, 0xFC, 0xAC, 0x06, 0xCA, 0xF3, 0xA7, 0x1E, 0xCA, 0x3E,
+       0xE4, 0xF3, 0xE5, 0x04, 0xF4, 0xFD, 0xBA, 0x00, 0xD7, 0xFF, 0xFE,
+       0xFF, 0x03, 0x00, 0xFD, 0xFF, 0x24, 0x00, 0x6E, 0xFF, 0x87, 0x01,
+       0xA4, 0xFC, 0xCD, 0x06, 0x8E, 0xF1, 0x99, 0x33, 0xCE, 0x2C, 0xA1,
+       0xF1, 0x25, 0x07, 0x4D, 0xFC, 0xC4, 0x01, 0x4D, 0xFF, 0x2F, 0x00,
+       0xFD, 0xFF, 0x08, 0x00, 0xE3, 0xFF, 0x1E, 0x00, 0x2A, 0x00, 0xEF,
+       0xFE, 0x4D, 0x03, 0x7D, 0xF6, 0x2A, 0x43, 0x4B, 0x17, 0xB0, 0xF5,
+       0xEF, 0x05, 0x93, 0xFC, 0xCB, 0x01, 0x3D, 0xFF, 0x34, 0x00, 0xFE,
+       0xFF, 0x1E, 0x00, 0x85, 0xFF, 0x10, 0x01, 0x38, 0xFE, 0x88, 0x02,
+       0xD3, 0xFC, 0x91, 0x03, 0xF7, 0x48, 0xCB, 0x03, 0xBA, 0xFC, 0x95,
+       0x02, 0x31, 0xFE, 0x13, 0x01, 0x84, 0xFF, 0x1E, 0x00, 0x00, 0x00,
+       0xFE, 0xFF, 0x34, 0x00, 0x3E, 0xFF, 0xC9, 0x01, 0x97, 0xFC, 0xE6,
+       0x05, 0xC6, 0xF5, 0x00, 0x17, 0x50, 0x43, 0x9D, 0xF6, 0x3A, 0x03,
+       0xFA, 0xFE, 0x23, 0x00, 0x21, 0x00, 0xE2, 0xFF, 0x08, 0x00, 0xFD,
+       0xFF, 0x30, 0x00, 0x4C, 0xFF, 0xC6, 0x01, 0x4B, 0xFC, 0x26, 0x07,
+       0xA5, 0xF1, 0x87, 0x2C, 0xDC, 0x33, 0x91, 0xF1, 0xC7, 0x06, 0xA9,
+       0xFC, 0x84, 0x01, 0x70, 0xFF, 0x23, 0x00, 0xFE, 0xFF, 0x03, 0x00,
+       0xFF, 0xFF, 0xD4, 0xFF, 0xBF, 0x00, 0xEB, 0xFD, 0xF3, 0x04, 0xCF,
+       0xF3, 0x98, 0x3E, 0xF3, 0x1E, 0xB9, 0xF3, 0xB2, 0x06, 0x48, 0xFC,
+       0xE4, 0x01, 0x36, 0xFF, 0x36, 0x00, 0xFE, 0xFF, 0x15, 0x00, 0xA7,
+       0xFF, 0xB9, 0x00, 0xEC, 0xFE, 0x31, 0x01, 0x57, 0xFF, 0x0F, 0xFE,
+       0x33, 0x48, 0x25, 0x0A, 0x21, 0xFA, 0xE5, 0x03, 0x87, 0xFD, 0x62,
+       0x01, 0x65, 0xFF, 0x27, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x2E, 0x00,
+       0x50, 0xFF, 0x97, 0x01, 0x10, 0xFD, 0xDA, 0x04, 0x20, 0xF8, 0xA0,
+       0x0F, 0x97, 0x46, 0x61, 0xFA, 0x2D, 0x01, 0x2B, 0x00, 0x7A, 0xFF,
+       0x75, 0x00, 0xC2, 0xFF, 0x0F, 0x00, 0xFD, 0xFF, 0x36, 0x00, 0x3A,
+       0xFF, 0xE4, 0x01, 0x32, 0xFC, 0x0E, 0x07, 0x8B, 0xF2, 0x03, 0x25,
+       0x38, 0x3A, 0x6D, 0xF2, 0xF1, 0x05, 0x45, 0xFD, 0x22, 0x01, 0xA2,
+       0xFF, 0x11, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x16, 0x00, 0x96, 0xFF,
+       0x39, 0x01, 0x1F, 0xFD, 0x28, 0x06, 0x2A, 0xF2, 0xF2, 0x38, 0xA0,
+       0x26, 0x4B, 0xF2, 0x1C, 0x07, 0x32, 0xFC, 0xE0, 0x01, 0x3C, 0xFF,
+       0x35, 0x00, 0xFD, 0xFF, 0x0D, 0x00, 0xC9, 0xFF, 0x63, 0x00, 0x9F,
+       0xFF, 0xE8, 0xFF, 0xA3, 0x01, 0x7F, 0xF9, 0x02, 0x46, 0x27, 0x11,
+       0x9B, 0xF7, 0x18, 0x05, 0xF3, 0xFC, 0xA3, 0x01, 0x4C, 0xFF, 0x2F,
+       0x00, 0xFF, 0xFF, 0x00, 0x00, 0x25, 0x00, 0x6B, 0xFF, 0x52, 0x01,
+       0xA9, 0xFD, 0xA0, 0x03, 0xAE, 0xFA, 0xBE, 0x08, 0x7C, 0x48, 0x26,
+       0xFF, 0xD2, 0xFE, 0x79, 0x01, 0xC6, 0xFE, 0xCC, 0x00, 0xA0, 0xFF,
+       0x17, 0x00, 0xFE, 0xFF, 0x36, 0x00, 0x36, 0xFF, 0xE1, 0x01, 0x53,
+       0xFC, 0x90, 0x06, 0x19, 0xF4, 0x52, 0x1D, 0xA8, 0x3F, 0x49, 0xF4,
+       0xA3, 0x04, 0x1E, 0xFE, 0xA1, 0x00, 0xE3, 0xFF, 0xF9, 0xFF, 0x04,
+       0x00, 0xFD, 0xFF, 0x26, 0x00, 0x67, 0xFF, 0x94, 0x01, 0x90, 0xFC,
+       0xE5, 0x06, 0x81, 0xF1, 0x6B, 0x32, 0x11, 0x2E, 0x8E, 0xF1, 0x1D,
+       0x07, 0x58, 0xFC, 0xBC, 0x01, 0x52, 0xFF, 0x2E, 0x00, 0xFD, 0xFF,
+       0x07, 0x00, 0xE8, 0xFF, 0x11, 0x00, 0x45, 0x00, 0xBF, 0xFE, 0x9D,
+       0x03, 0xF3, 0xF5, 0x75, 0x42, 0x9B, 0x18, 0x51, 0xF5, 0x16, 0x06,
+       0x83, 0xFC, 0xD1, 0x01, 0x3B, 0xFF, 0x34, 0x00, 0xFE, 0xFF, 0x1D,
+       0x00, 0x8B, 0xFF, 0x01, 0x01, 0x56, 0xFE, 0x4D, 0x02, 0x45, 0xFD,
+       0x8D, 0x02, 0xF0, 0x48, 0xD7, 0x04, 0x47, 0xFC, 0xD1, 0x02, 0x12,
+       0xFE, 0x21, 0x01, 0x7E, 0xFF, 0x20, 0x00, 0x00, 0x00, 0xFF, 0xFF,
+       0x33, 0x00, 0x40, 0xFF, 0xC2, 0x01, 0xA9, 0xFC, 0xBC, 0x05, 0x29,
+       0xF6, 0xB3, 0x15, 0xFA, 0x43, 0x31, 0xF7, 0xE6, 0x02, 0x2C, 0xFF,
+       0x07, 0x00, 0x2F, 0x00, 0xDC, 0xFF, 0x09, 0x00, 0xFD, 0xFF, 0x31,
+       0x00, 0x48, 0xFF, 0xCE, 0x01, 0x42, 0xFC, 0x2A, 0x07, 0xBF, 0xF1,
+       0x40, 0x2B, 0x05, 0x35, 0xA6, 0xF1, 0xAB, 0x06, 0xBF, 0xFC, 0x75,
+       0x01, 0x77, 0xFF, 0x21, 0x00, 0xFE, 0xFF, 0x02, 0x00, 0x03, 0x00,
+       0xC8, 0xFF, 0xD6, 0x00, 0xC4, 0xFD, 0x31, 0x05, 0x73, 0xF3, 0xB0,
+       0x3D, 0x49, 0x20, 0x6E, 0xF3, 0xCB, 0x06, 0x40, 0xFC, 0xE6, 0x01,
+       0x36, 0xFF, 0x36, 0x00, 0xFD, 0xFF, 0x14, 0x00, 0xAD, 0xFF, 0xAA,
+       0x00, 0x0C, 0xFF, 0xF7, 0x00, 0xC1, 0xFF, 0x33, 0xFD, 0xEC, 0x47,
+       0x51, 0x0B, 0xAF, 0xF9, 0x1D, 0x04, 0x6B, 0xFD, 0x6E, 0x01, 0x60,
+       0xFF, 0x29, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x2C, 0x00, 0x54, 0xFF,
+       0x8C, 0x01, 0x29, 0xFD, 0xA7, 0x04, 0x8F, 0xF8, 0x64, 0x0E, 0x02,
+       0x47, 0x22, 0xFB, 0xC9, 0x00, 0x64, 0x00, 0x5B, 0xFF, 0x84, 0x00,
+       0xBC, 0xFF, 0x10, 0x00, 0xFD, 0xFF, 0x36, 0x00, 0x38, 0xFF, 0xE5,
+       0x01, 0x33, 0xFC, 0xFF, 0x06, 0xC4, 0xF2, 0xB0, 0x23, 0x3B, 0x3B,
+       0xAD, 0xF2, 0xBF, 0x05, 0x66, 0xFD, 0x0E, 0x01, 0xAC, 0xFF, 0x0E,
+       0x00, 0x00, 0x00, 0xFF, 0xFF, 0x19, 0x00, 0x8D, 0xFF, 0x4B, 0x01,
+       0x01, 0xFD, 0x51, 0x06, 0xFB, 0xF1, 0xDF, 0x37, 0xF0, 0x27, 0x1C,
+       0xF2, 0x24, 0x07, 0x34, 0xFC, 0xDC, 0x01, 0x3F, 0xFF, 0x34, 0x00,
+       0xFD, 0xFF, 0x0C, 0x00, 0xCE, 0xFF, 0x54, 0x00, 0xBD, 0xFF, 0xB2,
+       0xFF, 0x01, 0x02, 0xCF, 0xF8, 0x7D, 0x45, 0x6B, 0x12, 0x30, 0xF7,
+       0x48, 0x05, 0xDD, 0xFC, 0xAD, 0x01, 0x48, 0xFF, 0x30, 0x00, 0xFF,
+       0xFF, 0x00, 0x00, 0x24, 0x00, 0x70, 0xFF, 0x45, 0x01, 0xC6, 0xFD,
+       0x66, 0x03, 0x21, 0xFB, 0x9E, 0x07, 0xAA, 0x48, 0x12, 0x00, 0x64,
+       0xFE, 0xB4, 0x01, 0xA6, 0xFE, 0xDB, 0x00, 0x9A, 0xFF, 0x19, 0x00,
+       0xFE, 0xFF, 0x36, 0x00, 0x37, 0xFF, 0xDE, 0x01, 0x5F, 0xFC, 0x70,
+       0x06, 0x6C, 0xF4, 0xFD, 0x1B, 0x7D, 0x40, 0xB7, 0xF4, 0x5D, 0x04,
+       0x49, 0xFE, 0x88, 0x00, 0xEF, 0xFF, 0xF5, 0xFF, 0x04, 0x00, 0xFD,
+       0xFF, 0x29, 0x00, 0x61, 0xFF, 0xA1, 0x01, 0x7E, 0xFC, 0xF9, 0x06,
+       0x7C, 0xF1, 0x38, 0x31, 0x50, 0x2F, 0x82, 0xF1, 0x12, 0x07, 0x65,
+       0xFC, 0xB2, 0x01, 0x57, 0xFF, 0x2C, 0x00, 0xFD, 0xFF, 0x06, 0x00,
+       0xED, 0xFF, 0x04, 0x00, 0x60, 0x00, 0x90, 0xFE, 0xEB, 0x03, 0x71,
+       0xF5, 0xB7, 0x41, 0xED, 0x19, 0xF5, 0xF4, 0x3B, 0x06, 0x73, 0xFC,
+       0xD7, 0x01, 0x39, 0xFF, 0x35, 0x00, 0xFE, 0xFF, 0x1B, 0x00, 0x91,
+       0xFF, 0xF2, 0x00, 0x76, 0xFE, 0x11, 0x02, 0xB6, 0xFD, 0x8F, 0x01,
+       0xDE, 0x48, 0xE9, 0x05, 0xD4, 0xFB, 0x0C, 0x03, 0xF4, 0xFD, 0x2F,
+       0x01, 0x79, 0xFF, 0x22, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x32, 0x00,
+       0x43, 0xFF, 0xBA, 0x01, 0xBC, 0xFC, 0x90, 0x05, 0x8E, 0xF6, 0x68,
+       0x14, 0x99, 0x44, 0xCD, 0xF7, 0x8F, 0x02, 0x60, 0xFF, 0xEA, 0xFF,
+       0x3E, 0x00, 0xD7, 0xFF, 0x0A, 0x00, 0xFD, 0xFF, 0x32, 0x00, 0x44,
+       0xFF, 0xD4, 0x01, 0x3B, 0xFC, 0x2A, 0x07, 0xDF, 0xF1, 0xF6, 0x29,
+       0x27, 0x36, 0xC1, 0xF1, 0x8B, 0x06, 0xD8, 0xFC, 0x66, 0x01, 0x80,
+       0xFF, 0x1E, 0x00, 0xFE, 0xFF, 0x01, 0x00, 0x07, 0x00, 0xBD, 0xFF,
+       0xED, 0x00, 0x9E, 0xFD, 0x6C, 0x05, 0x1F, 0xF3, 0xC0, 0x3C, 0x9E,
+       0x21, 0x28, 0xF3, 0xE2, 0x06, 0x3A, 0xFC, 0xE6, 0x01, 0x37, 0xFF,
+       0x36, 0x00, 0xFD, 0xFF, 0x12, 0x00, 0xB3, 0xFF, 0x9B, 0x00, 0x2B,
+       0xFF, 0xBD, 0x00, 0x2A, 0x00, 0x5E, 0xFC, 0x9A, 0x47, 0x82, 0x0C,
+       0x3D, 0xF9, 0x54, 0x04, 0x50, 0xFD, 0x7A, 0x01, 0x5B, 0xFF, 0x2A,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x59, 0xFF, 0x81, 0x01,
+       0x42, 0xFD, 0x72, 0x04, 0xFF, 0xF8, 0x2D, 0x0D, 0x69, 0x47, 0xEB,
+       0xFB, 0x63, 0x00, 0x9D, 0x00, 0x3C, 0xFF, 0x93, 0x00, 0xB6, 0xFF,
+       0x12, 0x00, 0xFD, 0xFF, 0x36, 0x00, 0x37, 0xFF, 0xE6, 0x01, 0x37,
+       0xFC, 0xED, 0x06, 0x03, 0xF3, 0x5B, 0x22, 0x37, 0x3C, 0xF4, 0xF2,
+       0x8A, 0x05, 0x89, 0xFD, 0xF9, 0x00, 0xB7, 0xFF, 0x0A, 0x00, 0x01,
+       0x00, 0xFE, 0xFF, 0x1C, 0x00, 0x84, 0xFF, 0x5C, 0x01, 0xE6, 0xFC,
+       0x77, 0x06, 0xD4, 0xF1, 0xC6, 0x36, 0x3E, 0x29, 0xF3, 0xF1, 0x29,
+       0x07, 0x38, 0xFC, 0xD7, 0x01, 0x42, 0xFF, 0x33, 0x00, 0xFD, 0xFF,
+       0x0B, 0x00, 0xD4, 0xFF, 0x46, 0x00, 0xDA, 0xFF, 0x7D, 0xFF, 0x5D,
+       0x02, 0x26, 0xF8, 0xED, 0x44, 0xB1, 0x13, 0xC7, 0xF6, 0x77, 0x05,
+       0xC8, 0xFC, 0xB6, 0x01, 0x45, 0xFF, 0x31, 0x00, 0xFF, 0xFF, 0x00,
+       0x00, 0x22, 0x00, 0x76, 0xFF, 0x37, 0x01, 0xE4, 0xFD, 0x2C, 0x03,
+       0x94, 0xFB, 0x83, 0x06, 0xCE, 0x48, 0x05, 0x01, 0xF5, 0xFD, 0xF0,
+       0x01, 0x87, 0xFE, 0xEA, 0x00, 0x94, 0xFF, 0x1A, 0x00, 0xFE, 0xFF,
+       0x35, 0x00, 0x38, 0xFF, 0xD9, 0x01, 0x6C, 0xFC, 0x4F, 0x06, 0xC3,
+       0xF4, 0xA9, 0x1A, 0x49, 0x41, 0x2C, 0xF5, 0x15, 0x04, 0x76, 0xFE,
+       0x6E, 0x00, 0xFC, 0xFF, 0xF0, 0xFF, 0x05, 0x00, 0xFD, 0xFF, 0x2B,
+       0x00, 0x5A, 0xFF, 0xAC, 0x01, 0x6E, 0xFC, 0x0A, 0x07, 0x7E, 0xF1,
+       0xFF, 0x2F, 0x8A, 0x30, 0x7D, 0xF1, 0x03, 0x07, 0x75, 0xFC, 0xA7,
+       0x01, 0x5D, 0xFF, 0x2A, 0x00, 0xFD, 0xFF, 0x05, 0x00, 0xF2, 0xFF,
+       0xF7, 0xFF, 0x7A, 0x00, 0x62, 0xFE, 0x35, 0x04, 0xF7, 0xF4, 0xEF,
+       0x40, 0x40, 0x1B, 0x9C, 0xF4, 0x5E, 0x06, 0x66, 0xFC, 0xDB, 0x01,
+       0x38, 0xFF, 0x36, 0x00, 0xFE, 0xFF, 0x1A, 0x00, 0x96, 0xFF, 0xE3,
+       0x00, 0x95, 0xFE, 0xD5, 0x01, 0x26, 0xFE, 0x98, 0x00, 0xBF, 0x48,
+       0x00, 0x07, 0x61, 0xFB, 0x46, 0x03, 0xD6, 0xFD, 0x3D, 0x01, 0x73,
+       0xFF, 0x23, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x31, 0x00, 0x46, 0xFF,
+       0xB2, 0x01, 0xD1, 0xFC, 0x62, 0x05, 0xF6, 0xF6, 0x20, 0x13, 0x2E,
+       0x45, 0x70, 0xF8, 0x34, 0x02, 0x94, 0xFF, 0xCD, 0xFF, 0x4C, 0x00,
+       0xD2, 0xFF, 0x0B, 0x00, 0xFD, 0xFF, 0x33, 0x00, 0x41, 0xFF, 0xDA,
+       0x01, 0x36, 0xFC, 0x27, 0x07, 0x05, 0xF2, 0xAA, 0x28, 0x44, 0x37,
+       0xE4, 0xF1, 0x67, 0x06, 0xF2, 0xFC, 0x55, 0x01, 0x88, 0xFF, 0x1B,
+       0x00, 0xFE, 0xFF, 0x01, 0x00, 0x0B, 0x00, 0xB2, 0xFF, 0x02, 0x01,
+       0x7A, 0xFD, 0xA2, 0x05, 0xD4, 0xF2, 0xC7, 0x3B, 0xF2, 0x22, 0xE7,
+       0xF2, 0xF5, 0x06, 0x35, 0xFC, 0xE6, 0x01, 0x38, 0xFF, 0x36, 0x00,
+       0xFD, 0xFF, 0x11, 0x00, 0xB9, 0xFF, 0x8C, 0x00, 0x4A, 0xFF, 0x83,
+       0x00, 0x91, 0x00, 0x91, 0xFB, 0x3D, 0x47, 0xB7, 0x0D, 0xCD, 0xF8,
+       0x89, 0x04, 0x36, 0xFD, 0x86, 0x01, 0x57, 0xFF, 0x2B, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x2A, 0x00, 0x5D, 0xFF, 0x75, 0x01, 0x5C, 0xFD,
+       0x3C, 0x04, 0x70, 0xF9, 0xFA, 0x0B, 0xC0, 0x47, 0xBC, 0xFC, 0xFC,
+       0xFF, 0xD6, 0x00, 0x1D, 0xFF, 0xA2, 0x00, 0xB0, 0xFF, 0x13, 0x00,
+       0xFD, 0xFF, 0x36, 0x00, 0x36, 0xFF, 0xE6, 0x01, 0x3C, 0xFC, 0xD8,
+       0x06, 0x47, 0xF3, 0x06, 0x21, 0x2A, 0x3D, 0x44, 0xF3, 0x52, 0x05,
+       0xAE, 0xFD, 0xE3, 0x00, 0xC2, 0xFF, 0x06, 0x00, 0x01, 0x00, 0xFE,
+       0xFF, 0x1F, 0x00, 0x7C, 0xFF, 0x6D, 0x01, 0xCD, 0xFC, 0x99, 0x06,
+       0xB4, 0xF1, 0xA6, 0x35, 0x89, 0x2A, 0xD0, 0xF1, 0x2B, 0x07, 0x3E,
+       0xFC, 0xD1, 0x01, 0x46, 0xFF, 0x32, 0x00, 0xFD, 0xFF, 0x0A, 0x00,
+       0xD9, 0xFF, 0x37, 0x00, 0xF7, 0xFF, 0x49, 0xFF, 0xB6, 0x02, 0x86,
+       0xF7, 0x53, 0x44, 0xFB, 0x14, 0x61, 0xF6, 0xA4, 0x05, 0xB4, 0xFC,
+       0xBE, 0x01, 0x42, 0xFF, 0x32, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x21,
+       0x00, 0x7B, 0xFF, 0x29, 0x01, 0x01, 0xFE, 0xF1, 0x02, 0x07, 0xFC,
+       0x6E, 0x05, 0xE6, 0x48, 0xFF, 0x01, 0x84, 0xFD, 0x2C, 0x02, 0x68,
+       0xFE, 0xF9, 0x00, 0x8E, 0xFF, 0x1C, 0x00, 0xFE, 0xFF, 0x35, 0x00,
+       0x3A, 0xFF, 0xD4, 0x01, 0x7A, 0xFC, 0x2B, 0x06, 0x1E, 0xF5, 0x56,
+       0x19, 0x0C, 0x42, 0xAA, 0xF5, 0xC9, 0x03, 0xA4, 0xFE, 0x54, 0x00,
+       0x09, 0x00, 0xEB, 0xFF, 0x06, 0x00, 0xFD, 0xFF, 0x2D, 0x00, 0x55,
+       0xFF, 0xB6, 0x01, 0x5F, 0xFC, 0x17, 0x07, 0x87, 0xF1, 0xC2, 0x2E,
+       0xC0, 0x31, 0x7E, 0xF1, 0xF1, 0x06, 0x86, 0xFC, 0x9B, 0x01, 0x63,
+       0xFF, 0x28, 0x00, 0xFD, 0xFF, 0x04, 0x00, 0xF7, 0xFF, 0xEA, 0xFF,
+       0x93, 0x00, 0x36, 0xFE, 0x7D, 0x04, 0x85, 0xF4, 0x1F, 0x40, 0x94,
+       0x1C, 0x47, 0xF4, 0x7E, 0x06, 0x5A, 0xFC, 0xDF, 0x01, 0x37, 0xFF,
+       0x36, 0x00, 0xFE, 0xFF, 0x18, 0x00, 0x9C, 0xFF, 0xD4, 0x00, 0xB4,
+       0xFE, 0x9A, 0x01, 0x95, 0xFE, 0xA8, 0xFF, 0x98, 0x48, 0x1D, 0x08,
+       0xEE, 0xFA, 0x80, 0x03, 0xB9, 0xFD, 0x4B, 0x01, 0x6E, 0xFF, 0x25,
+       0x00, 0x00, 0x00, 0xFF, 0xFF, 0x30, 0x00, 0x4A, 0xFF, 0xA9, 0x01,
+       0xE7, 0xFC, 0x33, 0x05, 0x60, 0xF7, 0xDA, 0x11, 0xB8, 0x45, 0x1C,
+       0xF9, 0xD8, 0x01, 0xCA, 0xFF, 0xAF, 0xFF, 0x5A, 0x00, 0xCC, 0xFF,
+       0x0D, 0x00, 0xFD, 0xFF, 0x34, 0x00, 0x3E, 0xFF, 0xDE, 0x01, 0x33,
+       0xFC, 0x21, 0x07, 0x30, 0xF2, 0x5C, 0x27, 0x5B, 0x38, 0x0F, 0xF2,
+       0x40, 0x06, 0x0E, 0xFD, 0x43, 0x01, 0x91, 0xFF, 0x18, 0x00, 0xFF,
+       0xFF, 0x00, 0x00, 0x0F, 0x00, 0xA8, 0xFF, 0x17, 0x01, 0x57, 0xFD,
+       0xD6, 0x05, 0x90, 0xF2, 0xC8, 0x3A, 0x46, 0x24, 0xAA, 0xF2, 0x06,
+       0x07, 0x32, 0xFC, 0xE5, 0x01, 0x39, 0xFF, 0x36, 0x00, 0xFD, 0xFF,
+       0x10, 0x00, 0xBE, 0xFF, 0x7D, 0x00, 0x69, 0xFF, 0x4B, 0x00, 0xF6,
+       0x00, 0xCB, 0xFA, 0xD3, 0x46, 0xF0, 0x0E, 0x5E, 0xF8, 0xBE, 0x04,
+       0x1E, 0xFD, 0x91, 0x01, 0x52, 0xFF, 0x2D, 0x00, 0xFF, 0xFF, 0x00,
+       0x00, 0x28, 0x00, 0x62, 0xFF, 0x69, 0x01, 0x77, 0xFD, 0x04, 0x04,
+       0xE2, 0xF9, 0xCB, 0x0A, 0x0D, 0x48, 0x94, 0xFD, 0x92, 0xFF, 0x10,
+       0x01, 0xFE, 0xFE, 0xB1, 0x00, 0xAA, 0xFF, 0x15, 0x00, 0xFD, 0xFF,
+       0x36, 0x00, 0x36, 0xFF, 0xE5, 0x01, 0x43, 0xFC, 0xC0, 0x06, 0x8F,
+       0xF3, 0xB1, 0x1F, 0x18, 0x3E, 0x9B, 0xF3, 0x16, 0x05, 0xD5, 0xFD,
+       0xCC, 0x00, 0xCE, 0xFF, 0x01, 0x00, 0x02, 0x00, 0xFE, 0xFF, 0x22,
+       0x00, 0x74, 0xFF, 0x7C, 0x01, 0xB5, 0xFC, 0xB8, 0x06, 0x9C, 0xF1,
+       0x81, 0x34, 0xD1, 0x2B, 0xB3, 0xF1, 0x29, 0x07, 0x46, 0xFC, 0xCA,
+       0x01, 0x4A, 0xFF, 0x30, 0x00, 0xFD, 0xFF, 0x09, 0x00, 0xDF, 0xFF,
+       0x29, 0x00, 0x14, 0x00, 0x16, 0xFF, 0x0C, 0x03, 0xEE, 0xF6, 0xB0,
+       0x43, 0x47, 0x16, 0xFC, 0xF5, 0xCF, 0x05, 0xA1, 0xFC, 0xC6, 0x01,
+       0x3F, 0xFF, 0x33, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x1F, 0x00, 0x81,
+       0xFF, 0x1B, 0x01, 0x20, 0xFE, 0xB6, 0x02, 0x7A, 0xFC, 0x5F, 0x04,
+       0xF4, 0x48, 0xFF, 0x02, 0x13, 0xFD, 0x67, 0x02, 0x49, 0xFE, 0x07,
+       0x01, 0x88, 0xFF, 0x1D, 0x00, 0xFE, 0xFF, 0x34, 0x00, 0x3C, 0xFF,
+       0xCF, 0x01, 0x8A, 0xFC, 0x05, 0x06, 0x7B, 0xF5, 0x06, 0x18, 0xC7,
+       0x42, 0x2F, 0xF6, 0x7A, 0x03, 0xD4, 0xFE, 0x39, 0x00, 0x17, 0x00,
+       0xE6, 0xFF, 0x07, 0x00, 0xFD, 0xFF, 0x2E, 0x00, 0x50, 0xFF, 0xC0,
+       0x01, 0x53, 0xFC, 0x21, 0x07, 0x96, 0xF1, 0x82, 0x2D, 0xF2, 0x32,
+       0x86, 0xF1, 0xDB, 0x06, 0x99, 0xFC, 0x8E, 0x01, 0x6A, 0xFF, 0x25,
+       0x00, 0xFD, 0xFF, 0x03, 0x00, 0xFB, 0xFF, 0xDE, 0xFF, 0xAC, 0x00,
+       0x0B, 0xFE, 0xC1, 0x04, 0x1B, 0xF4, 0x47, 0x3F, 0xEA, 0x1D, 0xF5,
+       0xF3, 0x9C, 0x06, 0x4F, 0xFC, 0xE2, 0x01, 0x36, 0xFF, 0x36, 0x00,
+       0xFE, 0xFF, 0x16, 0x00, 0xA2, 0xFF, 0xC5, 0x00, 0xD4, 0xFE, 0x5F,
+       0x01, 0x03, 0xFF, 0xBF, 0xFE, 0x63, 0x48, 0x40, 0x09, 0x7B, 0xFA,
+       0xB9, 0x03, 0x9D, 0xFD, 0x58, 0x01, 0x69, 0xFF, 0x26, 0x00, 0x00,
+       0x00, 0xFF, 0xFF, 0x2E, 0x00, 0x4D, 0xFF, 0x9F, 0x01, 0xFE, 0xFC,
+       0x02, 0x05, 0xCB, 0xF7, 0x98, 0x10, 0x39, 0x46, 0xD0, 0xF9, 0x78,
+       0x01, 0x00, 0x00, 0x91, 0xFF, 0x69, 0x00, 0xC6, 0xFF, 0x0E, 0x00,
+       0xFD, 0xFF, 0x35, 0x00, 0x3B, 0xFF, 0xE2, 0x01, 0x31, 0xFC, 0x17,
+       0x07, 0x61, 0xF2, 0x0A, 0x26, 0x6A, 0x39, 0x41, 0xF2, 0x15, 0x06,
+       0x2C, 0xFD, 0x31, 0x01, 0x9B, 0xFF, 0x14, 0x00, 0xFF, 0xFF, 0xFF,
+       0xFF, 0x13, 0x00, 0x9E, 0xFF, 0x2B, 0x01, 0x37, 0xFD, 0x05, 0x06,
+       0x54, 0xF2, 0xC2, 0x39, 0x99, 0x25, 0x73, 0xF2, 0x14, 0x07, 0x31,
+       0xFC, 0xE3, 0x01, 0x3B, 0xFF, 0x35, 0x00, 0xFD, 0xFF, 0x0E, 0x00,
+       0xC4, 0xFF, 0x6E, 0x00, 0x87, 0xFF, 0x13, 0x00, 0x58, 0x01, 0x0D,
+       0xFA, 0x61, 0x46, 0x2D, 0x10, 0xF0, 0xF7, 0xF1, 0x04, 0x05, 0xFD,
+       0x9C, 0x01, 0x4E, 0xFF, 0x2E, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x27,
+       0x00, 0x67, 0xFF, 0x5C, 0x01, 0x93, 0xFD, 0xCC, 0x03, 0x54, 0xFA,
+       0xA2, 0x09, 0x4F, 0x48, 0x73, 0xFE, 0x27, 0xFF, 0x4B, 0x01, 0xDE,
+       0xFE, 0xC0, 0x00, 0xA4, 0xFF, 0x16, 0x00, 0xFE, 0xFF, 0x36, 0x00,
+       0x36, 0xFF, 0xE3, 0x01, 0x4C, 0xFC, 0xA6, 0x06, 0xDB, 0xF3, 0x5B,
+       0x1E, 0xFC, 0x3E, 0xFA, 0xF3, 0xD7, 0x04, 0xFD, 0xFD, 0xB4, 0x00,
+       0xD9, 0xFF, 0xFD, 0xFF, 0x03, 0x00, 0xFD, 0xFF, 0x25, 0x00, 0x6D,
+       0xFF, 0x8A, 0x01, 0x9F, 0xFC, 0xD3, 0x06, 0x8A, 0xF1, 0x57, 0x33,
+       0x17, 0x2D, 0x9C, 0xF1, 0x24, 0x07, 0x4F, 0xFC, 0xC3, 0x01, 0x4E,
+       0xFF, 0x2F, 0x00, 0xFD, 0xFF, 0x08, 0x00, 0xE4, 0xFF, 0x1B, 0x00,
+       0x30, 0x00, 0xE4, 0xFE, 0x5F, 0x03, 0x5E, 0xF6, 0x02, 0x43, 0x96,
+       0x17, 0x9B, 0xF5, 0xF8, 0x05, 0x8F, 0xFC, 0xCC, 0x01, 0x3D, 0xFF,
+       0x34, 0x00, 0xFE, 0xFF, 0x1E, 0x00, 0x86, 0xFF, 0x0C, 0x01, 0x3E,
+       0xFE, 0x7B, 0x02, 0xED, 0xFC, 0x56, 0x03, 0xF5, 0x48, 0x06, 0x04,
+       0xA1, 0xFC, 0xA3, 0x02, 0x2A, 0xFE, 0x16, 0x01, 0x83, 0xFF, 0x1F,
+       0x00, 0x00, 0x00, 0xFF, 0xFF, 0x33, 0x00, 0x3E, 0xFF, 0xC8, 0x01,
+       0x9B, 0xFC, 0xDD, 0x05, 0xDC, 0xF5, 0xB6, 0x16, 0x77, 0x43, 0xBD,
+       0xF6, 0x28, 0x03, 0x05, 0xFF, 0x1D, 0x00, 0x25, 0x00, 0xE1, 0xFF,
+       0x08, 0x00, 0xFD, 0xFF, 0x30, 0x00, 0x4B, 0xFF, 0xC8, 0x01, 0x49,
+       0xFC, 0x27, 0x07, 0xAB, 0xF1, 0x3E, 0x2C, 0x1E, 0x34, 0x95, 0xF1,
+       0xC1, 0x06, 0xAE, 0xFC, 0x81, 0x01, 0x71, 0xFF, 0x23, 0x00, 0xFE,
+       0xFF, 0x02, 0x00, 0x00, 0x00, 0xD2, 0xFF, 0xC4, 0x00, 0xE2, 0xFD,
+       0x01, 0x05, 0xBA, 0xF3, 0x64, 0x3E, 0x3F, 0x1F, 0xA8, 0xF3, 0xB8,
+       0x06, 0x46, 0xFC, 0xE5, 0x01, 0x36, 0xFF, 0x36, 0x00, 0xFD, 0xFF,
+       0x15, 0x00, 0xA8, 0xFF, 0xB6, 0x00, 0xF3, 0xFE, 0x24, 0x01, 0x6E,
+       0xFF, 0xDE, 0xFD, 0x25, 0x48, 0x68, 0x0A, 0x08, 0xFA, 0xF2, 0x03,
+       0x81, 0xFD, 0x65, 0x01, 0x64, 0xFF, 0x28, 0x00, 0x00, 0x00, 0xFF,
+       0xFF, 0x2D, 0x00, 0x51, 0xFF, 0x95, 0x01, 0x15, 0xFD, 0xCF, 0x04,
+       0x39, 0xF8, 0x59, 0x0F, 0xAF, 0x46, 0x8B, 0xFA, 0x17, 0x01, 0x38,
+       0x00, 0x73, 0xFF, 0x78, 0x00, 0xC0, 0xFF, 0x0F, 0x00, 0xFD, 0xFF,
+       0x36, 0x00, 0x39, 0xFF, 0xE4, 0x01, 0x32, 0xFC, 0x0B, 0x07, 0x97,
+       0xF2, 0xB8, 0x24, 0x71, 0x3A, 0x7B, 0xF2, 0xE6, 0x05, 0x4C, 0xFD,
+       0x1D, 0x01, 0xA4, 0xFF, 0x11, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x16,
+       0x00, 0x94, 0xFF, 0x3D, 0x01, 0x18, 0xFD, 0x32, 0x06, 0x1F, 0xF2,
+       0xB5, 0x38, 0xEB, 0x26, 0x40, 0xF2, 0x1E, 0x07, 0x32, 0xFC, 0xDF,
+       0x01, 0x3D, 0xFF, 0x35, 0x00, 0xFD, 0xFF, 0x0D, 0x00, 0xCA, 0xFF,
+       0x5F, 0x00, 0xA5, 0xFF, 0xDC, 0xFF, 0xB8, 0x01, 0x57, 0xF9, 0xE5,
+       0x45, 0x6E, 0x11, 0x83, 0xF7, 0x23, 0x05, 0xEE, 0xFC, 0xA6, 0x01,
+       0x4B, 0xFF, 0x2F, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x25, 0x00, 0x6C,
+       0xFF, 0x4F, 0x01, 0xB0, 0xFD, 0x93, 0x03, 0xC7, 0xFA, 0x7D, 0x08,
+       0x86, 0x48, 0x5A, 0xFF, 0xBA, 0xFE, 0x86, 0x01, 0xBF, 0xFE, 0xCF,
+       0x00, 0x9E, 0xFF, 0x17, 0x00, 0xFE, 0xFF, 0x36, 0x00, 0x37, 0xFF,
+       0xE0, 0x01, 0x56, 0xFC, 0x89, 0x06, 0x2B, 0xF4, 0x06, 0x1D, 0xD7,
+       0x3F, 0x61, 0xF4, 0x94, 0x04, 0x27, 0xFE, 0x9C, 0x00, 0xE6, 0xFF,
+       0xF8, 0xFF, 0x04, 0x00, 0xFD, 0xFF, 0x27, 0x00, 0x66, 0xFF, 0x97,
+       0x01, 0x8C, 0xFC, 0xEA, 0x06, 0x80, 0xF1, 0x26, 0x32, 0x58, 0x2E,
+       0x8B, 0xF1, 0x1B, 0x07, 0x5B, 0xFC, 0xBA, 0x01, 0x53, 0xFF, 0x2D,
+       0x00, 0xFD, 0xFF, 0x07, 0x00, 0xE9, 0xFF, 0x0E, 0x00, 0x4B, 0x00,
+       0xB4, 0xFE, 0xAF, 0x03, 0xD5, 0xF5, 0x4D, 0x42, 0xE6, 0x18, 0x3C,
+       0xF5, 0x1F, 0x06, 0x7F, 0xFC, 0xD3, 0x01, 0x3B, 0xFF, 0x35, 0x00,
+       0xFE, 0xFF, 0x1C, 0x00, 0x8C, 0xFF, 0xFE, 0x00, 0x5D, 0xFE, 0x3F,
+       0x02, 0x5E, 0xFD, 0x54, 0x02, 0xEC, 0x48, 0x13, 0x05, 0x2E, 0xFC,
+       0xDE, 0x02, 0x0C, 0xFE, 0x24, 0x01, 0x7D, 0xFF, 0x20, 0x00, 0x00,
+       0x00, 0xFF, 0xFF, 0x32, 0x00, 0x41, 0xFF, 0xC1, 0x01, 0xAD, 0xFC,
+       0xB2, 0x05, 0x3F, 0xF6, 0x69, 0x15, 0x1F, 0x44, 0x53, 0xF7, 0xD3,
+       0x02, 0x38, 0xFF, 0x01, 0x00, 0x33, 0x00, 0xDB, 0xFF, 0x09, 0x00,
+       0xFD, 0xFF, 0x31, 0x00, 0x47, 0xFF, 0xCF, 0x01, 0x40, 0xFC, 0x2A,
+       0x07, 0xC6, 0xF1, 0xF7, 0x2A, 0x46, 0x35, 0xAB, 0xF1, 0xA4, 0x06,
+       0xC4, 0xFC, 0x72, 0x01, 0x79, 0xFF, 0x20, 0x00, 0xFE, 0xFF, 0x02,
+       0x00, 0x04, 0x00, 0xC6, 0xFF, 0xDB, 0x00, 0xBB, 0xFD, 0x3E, 0x05,
+       0x60, 0xF3, 0x7B, 0x3D, 0x94, 0x20, 0x5E, 0xF3, 0xD0, 0x06, 0x3E,
+       0xFC, 0xE6, 0x01, 0x36, 0xFF, 0x36, 0x00, 0xFD, 0xFF, 0x14, 0x00,
+       0xAE, 0xFF, 0xA7, 0x00, 0x12, 0xFF, 0xEA, 0x00, 0xD9, 0xFF, 0x03,
+       0xFD, 0xDC, 0x47, 0x95, 0x0B, 0x96, 0xF9, 0x29, 0x04, 0x65, 0xFD,
+       0x71, 0x01, 0x5F, 0xFF, 0x29, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x2C,
+       0x00, 0x55, 0xFF, 0x8A, 0x01, 0x2E, 0xFD, 0x9B, 0x04, 0xA8, 0xF8,
+       0x1F, 0x0E, 0x1A, 0x47, 0x4E, 0xFB, 0xB3, 0x00, 0x70, 0x00, 0x54,
+       0xFF, 0x87, 0x00, 0xBB, 0xFF, 0x11, 0x00, 0xFD, 0xFF, 0x36, 0x00,
+       0x38, 0xFF, 0xE6, 0x01, 0x34, 0xFC, 0xFB, 0x06, 0xD2, 0xF2, 0x64,
+       0x23, 0x73, 0x3B, 0xBC, 0xF2, 0xB4, 0x05, 0x6E, 0xFD, 0x09, 0x01,
+       0xAF, 0xFF, 0x0D, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x1A, 0x00, 0x8B,
+       0xFF, 0x4F, 0x01, 0xFB, 0xFC, 0x5A, 0x06, 0xF2, 0xF1, 0xA0, 0x37,
+       0x3A, 0x28, 0x13, 0xF2, 0x25, 0x07, 0x35, 0xFC, 0xDB, 0x01, 0x40,
+       0xFF, 0x34, 0x00, 0xFD, 0xFF, 0x0C, 0x00, 0xD0, 0xFF, 0x51, 0x00,
+       0xC3, 0xFF, 0xA6, 0xFF, 0x16, 0x02, 0xA9, 0xF8, 0x5C, 0x45, 0xB2,
+       0x12, 0x19, 0xF7, 0x52, 0x05, 0xD8, 0xFC, 0xAF, 0x01, 0x47, 0xFF,
+       0x30, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x24, 0x00, 0x71, 0xFF, 0x42,
+       0x01, 0xCD, 0xFD, 0x59, 0x03, 0x3B, 0xFB, 0x5E, 0x07, 0xB3, 0x48,
+       0x48, 0x00, 0x4B, 0xFE, 0xC2, 0x01, 0x9F, 0xFE, 0xDE, 0x00, 0x98,
+       0xFF, 0x19, 0x00, 0xFE, 0xFF, 0x36, 0x00, 0x38, 0xFF, 0xDD, 0x01,
+       0x62, 0xFC, 0x69, 0x06, 0x7F, 0xF4, 0xB2, 0x1B, 0xAB, 0x40, 0xD0,
+       0xF4, 0x4E, 0x04, 0x53, 0xFE, 0x83, 0x00, 0xF2, 0xFF, 0xF4, 0xFF,
+       0x05, 0x00, 0xFD, 0xFF, 0x29, 0x00, 0x5F, 0xFF, 0xA3, 0x01, 0x7A,
+       0xFC, 0xFD, 0x06, 0x7C, 0xF1, 0xF2, 0x30, 0x96, 0x2F, 0x80, 0xF1,
+       0x0F, 0x07, 0x69, 0xFC, 0xB0, 0x01, 0x59, 0xFF, 0x2B, 0x00, 0xFD,
+       0xFF, 0x06, 0x00, 0xEE, 0xFF, 0x01, 0x00, 0x66, 0x00, 0x85, 0xFE,
+       0xFC, 0x03, 0x55, 0xF5, 0x8C, 0x41, 0x38, 0x1A, 0xE1, 0xF4, 0x43,
+       0x06, 0x70, 0xFC, 0xD8, 0x01, 0x39, 0xFF, 0x35, 0x00, 0xFE, 0xFF,
+       0x1B, 0x00, 0x92, 0xFF, 0xEF, 0x00, 0x7D, 0xFE, 0x04, 0x02, 0xCF,
+       0xFD, 0x58, 0x01, 0xD7, 0x48, 0x26, 0x06, 0xBB, 0xFB, 0x19, 0x03,
+       0xED, 0xFD, 0x32, 0x01, 0x77, 0xFF, 0x22, 0x00, 0x00, 0x00, 0xFF,
+       0xFF, 0x32, 0x00, 0x44, 0xFF, 0xB9, 0x01, 0xC1, 0xFC, 0x86, 0x05,
+       0xA5, 0xF6, 0x1E, 0x14, 0xBA, 0x44, 0xF0, 0xF7, 0x7B, 0x02, 0x6B,
+       0xFF, 0xE4, 0xFF, 0x41, 0x00, 0xD6, 0xFF, 0x0B, 0x00, 0xFD, 0xFF,
+       0x33, 0x00, 0x43, 0xFF, 0xD5, 0x01, 0x3A, 0xFC, 0x2A, 0x07, 0xE7,
+       0xF1, 0xAC, 0x29, 0x66, 0x36, 0xC9, 0xF1, 0x83, 0x06, 0xDD, 0xFC,
+       0x62, 0x01, 0x81, 0xFF, 0x1D, 0x00, 0xFE, 0xFF, 0x01, 0x00, 0x08,
+       0x00, 0xBB, 0xFF, 0xF1, 0x00, 0x96, 0xFD, 0x78, 0x05, 0x0E, 0xF3,
+       0x8A, 0x3C, 0xEA, 0x21, 0x19, 0xF3, 0xE6, 0x06, 0x38, 0xFC, 0xE6,
+       0x01, 0x37, 0xFF, 0x36, 0x00, 0xFD, 0xFF, 0x12, 0x00, 0xB4, 0xFF,
+       0x98, 0x00, 0x32, 0xFF, 0xB0, 0x00, 0x41, 0x00, 0x30, 0xFC, 0x86,
+       0x47, 0xC6, 0x0C, 0x24, 0xF9, 0x60, 0x04, 0x4B, 0xFD, 0x7D, 0x01,
+       0x5A, 0xFF, 0x2A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x5A,
+       0xFF, 0x7E, 0x01, 0x48, 0xFD, 0x66, 0x04, 0x18, 0xF9, 0xE8, 0x0C,
+       0x7C, 0x47, 0x19, 0xFC, 0x4D, 0x00, 0xA9, 0x00, 0x35, 0xFF, 0x96,
+       0x00, 0xB5, 0xFF, 0x12, 0x00, 0xFD, 0xFF, 0x36, 0x00, 0x37, 0xFF,
+       0xE6, 0x01, 0x38, 0xFC, 0xE9, 0x06, 0x12, 0xF3, 0x10, 0x22, 0x6E,
+       0x3C, 0x05, 0xF3, 0x7E, 0x05, 0x91, 0xFD, 0xF4, 0x00, 0xBA, 0xFF,
+       0x09, 0x00, 0x01, 0x00, 0xFE, 0xFF, 0x1D, 0x00, 0x82, 0xFF, 0x60,
+       0x01, 0xE0, 0xFC, 0x7F, 0x06, 0xCC, 0xF1, 0x85, 0x36, 0x87, 0x29,
+       0xEB, 0xF1, 0x2A, 0x07, 0x39, 0xFC, 0xD6, 0x01, 0x43, 0xFF, 0x33,
+       0x00, 0xFD, 0xFF, 0x0B, 0x00, 0xD5, 0xFF, 0x42, 0x00, 0xE1, 0xFF,
+       0x71, 0xFF, 0x71, 0x02, 0x02, 0xF8, 0xCC, 0x44, 0xFA, 0x13, 0xB0,
+       0xF6, 0x81, 0x05, 0xC3, 0xFC, 0xB8, 0x01, 0x44, 0xFF, 0x31, 0x00,
+       0xFF, 0xFF, 0x00, 0x00, 0x22, 0x00, 0x77, 0xFF, 0x34, 0x01, 0xEA,
+       0xFD, 0x1F, 0x03, 0xAE, 0xFB, 0x45, 0x06, 0xD5, 0x48, 0x3C, 0x01,
+       0xDC, 0xFD, 0xFD, 0x01, 0x80, 0xFE, 0xED, 0x00, 0x93, 0xFF, 0x1B,
+       0x00, 0xFE, 0xFF, 0x35, 0x00, 0x39, 0xFF, 0xD8, 0x01, 0x6F, 0xFC,
+       0x47, 0x06, 0xD7, 0xF4, 0x5D, 0x1A, 0x74, 0x41, 0x48, 0xF5, 0x04,
+       0x04, 0x80, 0xFE, 0x69, 0x00, 0xFF, 0xFF, 0xEF, 0xFF, 0x05, 0x00,
+       0xFD, 0xFF, 0x2B, 0x00, 0x59, 0xFF, 0xAE, 0x01, 0x6A, 0xFC, 0x0D,
+       0x07, 0x80, 0xF1, 0xB8, 0x2F, 0xCF, 0x30, 0x7D, 0xF1, 0xFF, 0x06,
+       0x78, 0xFC, 0xA5, 0x01, 0x5F, 0xFF, 0x29, 0x00, 0xFD, 0xFF, 0x05,
+       0x00, 0xF3, 0xFF, 0xF4, 0xFF, 0x80, 0x00, 0x58, 0xFE, 0x46, 0x04,
+       0xDD, 0xF4, 0xC3, 0x40, 0x8C, 0x1B, 0x89, 0xF4, 0x66, 0x06, 0x63,
+       0xFC, 0xDC, 0x01, 0x38, 0xFF, 0x36, 0x00, 0xFE, 0xFF, 0x19, 0x00,
+       0x98, 0xFF, 0xE0, 0x00, 0x9C, 0xFE, 0xC8, 0x01, 0x3F, 0xFE, 0x62,
+       0x00, 0xB8, 0x48, 0x3F, 0x07, 0x47, 0xFB, 0x53, 0x03, 0xD0, 0xFD,
+       0x40, 0x01, 0x72, 0xFF, 0x23, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x30,
+       0x00, 0x47, 0xFF, 0xB0, 0x01, 0xD6, 0xFC, 0x58, 0x05, 0x0D, 0xF7,
+       0xD7, 0x12, 0x4E, 0x45, 0x96, 0xF8, 0x20, 0x02, 0xA0, 0xFF, 0xC7,
+       0xFF, 0x4F, 0x00, 0xD0, 0xFF, 0x0C, 0x00, 0xFD, 0xFF, 0x34, 0x00,
+       0x40, 0xFF, 0xDB, 0x01, 0x35, 0xFC, 0x26, 0x07, 0x0E, 0xF2, 0x60,
+       0x28, 0x82, 0x37, 0xED, 0xF1, 0x5E, 0x06, 0xF8, 0xFC, 0x51, 0x01,
+       0x8A, 0xFF, 0x1A, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x0C, 0x00, 0xB0,
+       0xFF, 0x07, 0x01, 0x72, 0xFD, 0xAE, 0x05, 0xC4, 0xF2, 0x90, 0x3B,
+       0x3F, 0x23, 0xD9, 0xF2, 0xF9, 0x06, 0x34, 0xFC, 0xE6, 0x01, 0x38,
+       0xFF, 0x36, 0x00, 0xFD, 0xFF, 0x11, 0x00, 0xBA, 0xFF, 0x89, 0x00,
+       0x51, 0xFF, 0x77, 0x00, 0xA7, 0x00, 0x64, 0xFB, 0x26, 0x47, 0xFC,
+       0x0D, 0xB4, 0xF8, 0x95, 0x04, 0x31, 0xFD, 0x88, 0x01, 0x56, 0xFF,
+       0x2C, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x29, 0x00, 0x5E, 0xFF, 0x72,
+       0x01, 0x62, 0xFD, 0x2F, 0x04, 0x89, 0xF9, 0xB6, 0x0B, 0xD2, 0x47,
+       0xEB, 0xFC, 0xE4, 0xFF, 0xE3, 0x00, 0x16, 0xFF, 0xA5, 0x00, 0xAF,
+       0xFF, 0x13, 0x00, 0xFD, 0xFF, 0x36, 0x00, 0x36, 0xFF, 0xE6, 0x01,
+       0x3E, 0xFC, 0xD3, 0x06, 0x56, 0xF3, 0xBA, 0x20, 0x61, 0x3D, 0x56,
+       0xF3, 0x45, 0x05, 0xB7, 0xFD, 0xDE, 0x00, 0xC5, 0xFF, 0x05, 0x00,
+       0x02, 0x00, 0xFE, 0xFF, 0x20, 0x00, 0x7A, 0xFF, 0x70, 0x01, 0xC7,
+       0xFC, 0xA0, 0x06, 0xAE, 0xF1, 0x65, 0x35, 0xD1, 0x2A, 0xCA, 0xF1,
+       0x2A, 0x07, 0x40, 0xFC, 0xD0, 0x01, 0x47, 0xFF, 0x32, 0x00, 0xFD,
+       0xFF, 0x09, 0x00, 0xDB, 0xFF, 0x34, 0x00, 0xFE, 0xFF, 0x3D, 0xFF,
+       0xC9, 0x02, 0x64, 0xF7, 0x2F, 0x44, 0x44, 0x15, 0x4A, 0xF6, 0xAD,
+       0x05, 0xAF, 0xFC, 0xC0, 0x01, 0x41, 0xFF, 0x32, 0x00, 0xFF, 0xFF,
+       0x00, 0x00, 0x21, 0x00, 0x7C, 0xFF, 0x26, 0x01, 0x08, 0xFE, 0xE4,
+       0x02, 0x21, 0xFC, 0x31, 0x05, 0xEB, 0x48, 0x37, 0x02, 0x6B, 0xFD,
+       0x39, 0x02, 0x61, 0xFE, 0xFC, 0x00, 0x8D, 0xFF, 0x1C, 0x00, 0xFE,
+       0xFF, 0x35, 0x00, 0x3A, 0xFF, 0xD3, 0x01, 0x7D, 0xFC, 0x23, 0x06,
+       0x32, 0xF5, 0x0C, 0x19, 0x38, 0x42, 0xC7, 0xF5, 0xB8, 0x03, 0xAF,
+       0xFE, 0x4E, 0x00, 0x0C, 0x00, 0xEA, 0xFF, 0x06, 0x00, 0xFD, 0xFF,
+       0x2D, 0x00, 0x54, 0xFF, 0xB8, 0x01, 0x5D, 0xFC, 0x1A, 0x07, 0x8A,
+       0xF1, 0x7B, 0x2E, 0x04, 0x32, 0x7F, 0xF1, 0xEC, 0x06, 0x8A, 0xFC,
+       0x98, 0x01, 0x65, 0xFF, 0x27, 0x00, 0xFD, 0xFF, 0x04, 0x00, 0xF8,
+       0xFF, 0xE7, 0xFF, 0x99, 0x00, 0x2C, 0xFE, 0x8C, 0x04, 0x6D, 0xF4,
+       0xF0, 0x3F, 0xE0, 0x1C, 0x34, 0xF4, 0x85, 0x06, 0x57, 0xFC, 0xE0,
+       0x01, 0x37, 0xFF, 0x36, 0x00, 0xFE, 0xFF, 0x18, 0x00, 0x9E, 0xFF,
+       0xD1, 0x00, 0xBB, 0xFE, 0x8D, 0x01, 0xAE, 0xFE, 0x74, 0xFF, 0x8D,
+       0x48, 0x5D, 0x08, 0xD4, 0xFA, 0x8D, 0x03, 0xB3, 0xFD, 0x4E, 0x01,
+       0x6D, 0xFF, 0x25, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x2F, 0x00, 0x4A,
+       0xFF, 0xA7, 0x01, 0xEC, 0xFC, 0x28, 0x05, 0x77, 0xF7, 0x92, 0x11,
+       0xD7, 0x45, 0x43, 0xF9, 0xC3, 0x01, 0xD6, 0xFF, 0xA9, 0xFF, 0x5E,
+       0x00, 0xCB, 0xFF, 0x0D, 0x00, 0xFD, 0xFF, 0x34, 0x00, 0x3D, 0xFF,
+       0xDF, 0x01, 0x32, 0xFC, 0x1F, 0x07, 0x3B, 0xF2, 0x11, 0x27, 0x97,
+       0x38, 0x19, 0xF2, 0x36, 0x06, 0x15, 0xFD, 0x3F, 0x01, 0x93, 0xFF,
+       0x17, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x10, 0x00, 0xA6, 0xFF, 0x1B,
+       0x01, 0x50, 0xFD, 0xE1, 0x05, 0x82, 0xF2, 0x8F, 0x3A, 0x92, 0x24,
+       0x9D, 0xF2, 0x09, 0x07, 0x32, 0xFC, 0xE4, 0x01, 0x39, 0xFF, 0x36,
+       0x00, 0xFD, 0xFF, 0x0F, 0x00, 0xC0, 0xFF, 0x7A, 0x00, 0x70, 0xFF,
+       0x3E, 0x00, 0x0C, 0x01, 0xA1, 0xFA, 0xBB, 0x46, 0x36, 0x0F, 0x45,
+       0xF8, 0xC9, 0x04, 0x18, 0xFD, 0x93, 0x01, 0x52, 0xFF, 0x2D, 0x00,
+       0xFF, 0xFF, 0x00, 0x00, 0x28, 0x00, 0x63, 0xFF, 0x66, 0x01, 0x7D,
+       0xFD, 0xF8, 0x03, 0xFB, 0xF9, 0x89, 0x0A, 0x1D, 0x48, 0xC5, 0xFD,
+       0x7A, 0xFF, 0x1D, 0x01, 0xF7, 0xFE, 0xB4, 0x00, 0xA9, 0xFF, 0x15,
+       0x00, 0xFD, 0xFF, 0x36, 0x00, 0x36, 0xFF, 0xE5, 0x01, 0x45, 0xFC,
+       0xBB, 0x06, 0xA0, 0xF3, 0x64, 0x1F, 0x4A, 0x3E, 0xB0, 0xF3, 0x08,
+       0x05, 0xDE, 0xFD, 0xC7, 0x00, 0xD0, 0xFF, 0x00, 0x00, 0x02, 0x00,
+       0xFE, 0xFF, 0x23, 0x00, 0x72, 0xFF, 0x7F, 0x01, 0xB0, 0xFC, 0xBE,
+       0x06, 0x97, 0xF1, 0x3F, 0x34, 0x19, 0x2C, 0xAD, 0xF1, 0x28, 0x07,
+       0x48, 0xFC, 0xC9, 0x01, 0x4B, 0xFF, 0x30, 0x00, 0xFD, 0xFF, 0x08,
+       0x00, 0xE0, 0xFF, 0x26, 0x00, 0x1A, 0x00, 0x0B, 0xFF, 0x1E, 0x03,
+       0xCD, 0xF6, 0x89, 0x43, 0x91, 0x16, 0xE7, 0xF5, 0xD8, 0x05, 0x9D,
+       0xFC, 0xC7, 0x01, 0x3E, 0xFF, 0x33, 0x00, 0xFF, 0xFF, 0x00, 0x00,
+       0x1F, 0x00, 0x82, 0xFF, 0x18, 0x01, 0x27, 0xFE, 0xA9, 0x02, 0x94,
+       0xFC, 0x24, 0x04, 0xF5, 0x48, 0x39, 0x03, 0xF9, 0xFC, 0x74, 0x02,
+       0x42, 0xFE, 0x0B, 0x01, 0x87, 0xFF, 0x1E, 0x00, 0xFE, 0xFF, 0x34,
+       0x00, 0x3C, 0xFF, 0xCD, 0x01, 0x8E, 0xFC, 0xFC, 0x05, 0x90, 0xF5,
+       0xBB, 0x17, 0xEE, 0x42, 0x4E, 0xF6, 0x68, 0x03, 0xDF, 0xFE, 0x33,
+       0x00, 0x1A, 0x00, 0xE5, 0xFF, 0x07, 0x00, 0xFD, 0xFF, 0x2F, 0x00,
+       0x4F, 0xFF, 0xC2, 0x01, 0x51, 0xFC, 0x23, 0x07, 0x9A, 0xF1, 0x3A,
+       0x2D, 0x35, 0x33, 0x89, 0xF1, 0xD5, 0x06, 0x9D, 0xFC, 0x8B, 0x01,
+       0x6C, 0xFF, 0x25, 0x00, 0xFD, 0xFF, 0x03, 0x00, 0xFC, 0xFF, 0xDB,
+       0xFF, 0xB2, 0x00, 0x02, 0xFE, 0xCF, 0x04, 0x05, 0xF4, 0x16, 0x3F,
+       0x36, 0x1E, 0xE4, 0xF3, 0xA3, 0x06, 0x4D, 0xFC, 0xE3, 0x01, 0x36,
+       0xFF, 0x36, 0x00, 0xFE, 0xFF, 0x16, 0x00, 0xA4, 0xFF, 0xC2, 0x00,
+       0xDB, 0xFE, 0x52, 0x01, 0x1B, 0xFF, 0x8D, 0xFE, 0x57, 0x48, 0x81,
+       0x09, 0x61, 0xFA, 0xC6, 0x03, 0x96, 0xFD, 0x5B, 0x01, 0x68, 0xFF,
+       0x26, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x2E, 0x00, 0x4E, 0xFF, 0x9D,
+       0x01, 0x03, 0xFD, 0xF7, 0x04, 0xE3, 0xF7, 0x51, 0x10, 0x55, 0x46,
+       0xF9, 0xF9, 0x63, 0x01, 0x0D, 0x00, 0x8B, 0xFF, 0x6D, 0x00, 0xC5,
+       0xFF, 0x0E, 0x00, 0xFD, 0xFF, 0x35, 0x00, 0x3B, 0xFF, 0xE2, 0x01,
+       0x31, 0xFC, 0x15, 0x07, 0x6D, 0xF2, 0xBF, 0x25, 0xA5, 0x39, 0x4D,
+       0xF2, 0x0B, 0x06, 0x33, 0xFD, 0x2D, 0x01, 0x9D, 0xFF, 0x13, 0x00,
+       0xFF, 0xFF, 0xFF, 0xFF, 0x14, 0x00, 0x9C, 0xFF, 0x2F, 0x01, 0x30,
+       0xFD, 0x10, 0x06, 0x47, 0xF2, 0x87, 0x39, 0xE5, 0x25, 0x67, 0xF2,
+       0x16, 0x07, 0x31, 0xFC, 0xE2, 0x01, 0x3B, 0xFF, 0x35, 0x00, 0xFD,
+       0xFF, 0x0E, 0x00, 0xC6, 0xFF, 0x6B, 0x00, 0x8E, 0xFF, 0x06, 0x00,
+       0x6E, 0x01, 0xE4, 0xF9, 0x48, 0x46, 0x75, 0x10, 0xD7, 0xF7, 0xFC,
+       0x04, 0x00, 0xFD, 0x9E, 0x01, 0x4E, 0xFF, 0x2E, 0x00, 0xFF, 0xFF,
+       0x00, 0x00, 0x26, 0x00, 0x68, 0xFF, 0x59, 0x01, 0x99, 0xFD, 0xC0,
+       0x03, 0x6E, 0xFA, 0x61, 0x09, 0x5D, 0x48, 0xA6, 0xFE, 0x0F, 0xFF,
+       0x58, 0x01, 0xD7, 0xFE, 0xC3, 0x00, 0xA3, 0xFF, 0x16, 0x00, 0xFE,
+       0xFF, 0x36, 0x00, 0x36, 0xFF, 0xE3, 0x01, 0x4E, 0xFC, 0xA0, 0x06,
+       0xED, 0xF3, 0x0F, 0x1E, 0x2D, 0x3F, 0x10, 0xF4, 0xC8, 0x04, 0x07,
+       0xFE, 0xAF, 0x00, 0xDC, 0xFF, 0xFC, 0xFF, 0x03, 0x00, 0xFD, 0xFF,
+       0x25, 0x00, 0x6B, 0xFF, 0x8D, 0x01, 0x9B, 0xFC, 0xD8, 0x06, 0x87,
+       0xF1, 0x13, 0x33, 0x5E, 0x2D, 0x98, 0xF1, 0x22, 0x07, 0x52, 0xFC,
+       0xC1, 0x01, 0x4F, 0xFF, 0x2F, 0x00, 0xFD, 0xFF, 0x07, 0x00, 0xE5,
+       0xFF, 0x18, 0x00, 0x36, 0x00, 0xD9, 0xFE, 0x71, 0x03, 0x3F, 0xF6,
+       0xDB, 0x42, 0xE0, 0x17, 0x86, 0xF5, 0x00, 0x06, 0x8C, 0xFC, 0xCE,
+       0x01, 0x3C, 0xFF, 0x34, 0x00, 0xFE, 0xFF, 0x1D, 0x00, 0x88, 0xFF,
+       0x09, 0x01, 0x45, 0xFE, 0x6E, 0x02, 0x06, 0xFD, 0x1C, 0x03, 0xF4,
+       0x48, 0x41, 0x04, 0x87, 0xFC, 0xB0, 0x02, 0x23, 0xFE, 0x19, 0x01,
+       0x81, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x33, 0x00, 0x3F,
+       0xFF, 0xC6, 0x01, 0x9F, 0xFC, 0xD3, 0x05, 0xF1, 0xF5, 0x6C, 0x16,
+       0x9E, 0x43, 0xDD, 0xF6, 0x15, 0x03, 0x10, 0xFF, 0x17, 0x00, 0x28,
+       0x00, 0xDF, 0xFF, 0x09, 0x00, 0xFD, 0xFF, 0x30, 0x00, 0x4A, 0xFF,
+       0xCA, 0x01, 0x47, 0xFC, 0x28, 0x07, 0xB0, 0xF1, 0xF5, 0x2B, 0x60,
+       0x34, 0x9A, 0xF1, 0xBB, 0x06, 0xB3, 0xFC, 0x7D, 0x01, 0x73, 0xFF,
+       0x22, 0x00, 0xFE, 0xFF, 0x02, 0x00, 0x01, 0x00, 0xCF, 0xFF, 0xC9,
+       0x00, 0xDA, 0xFD, 0x0F, 0x05, 0xA5, 0xF3, 0x31, 0x3E, 0x8A, 0x1F,
+       0x97, 0xF3, 0xBD, 0x06, 0x44, 0xFC, 0xE5, 0x01, 0x36, 0xFF, 0x36,
+       0x00, 0xFD, 0xFF, 0x15, 0x00, 0xAA, 0xFF, 0xB3, 0x00, 0xFA, 0xFE,
+       0x17, 0x01, 0x86, 0xFF, 0xAC, 0xFD, 0x16, 0x48, 0xAA, 0x0A, 0xEE,
+       0xF9, 0xFE, 0x03, 0x7A, 0xFD, 0x67, 0x01, 0x63, 0xFF, 0x28, 0x00,
+       0x00, 0x00, 0xFF, 0xFF, 0x2D, 0x00, 0x52, 0xFF, 0x92, 0x01, 0x1B,
+       0xFD, 0xC4, 0x04, 0x51, 0xF8, 0x13, 0x0F, 0xC8, 0x46, 0xB6, 0xFA,
+       0x01, 0x01, 0x44, 0x00, 0x6C, 0xFF, 0x7B, 0x00, 0xBF, 0xFF, 0x10,
+       0x00, 0xFD, 0xFF, 0x36, 0x00, 0x39, 0xFF, 0xE5, 0x01, 0x32, 0xFC,
+       0x08, 0x07, 0xA4, 0xF2, 0x6D, 0x24, 0xAD, 0x3A, 0x88, 0xF2, 0xDB,
+       0x05, 0x53, 0xFD, 0x19, 0x01, 0xA7, 0xFF, 0x10, 0x00, 0x00, 0x00,
+       0xFF, 0xFF, 0x17, 0x00, 0x92, 0xFF, 0x41, 0x01, 0x11, 0xFD, 0x3B,
+       0x06, 0x14, 0xF2, 0x78, 0x38, 0x36, 0x27, 0x35, 0xF2, 0x20, 0x07,
+       0x33, 0xFC, 0xDF, 0x01, 0x3E, 0xFF, 0x34, 0x00, 0xFD, 0xFF, 0x0D,
+       0x00, 0xCB, 0xFF, 0x5C, 0x00, 0xAC, 0xFF, 0xD0, 0xFF, 0xCD, 0x01,
+       0x30, 0xF9, 0xC8, 0x45, 0xB6, 0x11, 0x6B, 0xF7, 0x2D, 0x05, 0xE9,
+       0xFC, 0xA8, 0x01, 0x4A, 0xFF, 0x30, 0x00, 0xFF, 0xFF, 0x00, 0x00,
+       0x25, 0x00, 0x6D, 0xFF, 0x4C, 0x01, 0xB6, 0xFD, 0x86, 0x03, 0xE1,
+       0xFA, 0x3D, 0x08, 0x92, 0x48, 0x8E, 0xFF, 0xA1, 0xFE, 0x93, 0x01,
+       0xB8, 0xFE, 0xD3, 0x00, 0x9D, 0xFF, 0x18, 0x00, 0xFE, 0xFF, 0x36,
+       0x00, 0x37, 0xFF, 0xE0, 0x01, 0x58, 0xFC, 0x82, 0x06, 0x3E, 0xF4,
+       0xBA, 0x1C, 0x07, 0x40, 0x79, 0xF4, 0x84, 0x04, 0x31, 0xFE, 0x96,
+       0x00, 0xE8, 0xFF, 0xF7, 0xFF, 0x04, 0x00, 0xFD, 0xFF, 0x28, 0x00,
+       0x64, 0xFF, 0x9A, 0x01, 0x88, 0xFC, 0xEE, 0x06, 0x7E, 0xF1, 0xE3,
+       0x31, 0x9F, 0x2E, 0x88, 0xF1, 0x19, 0x07, 0x5E, 0xFC, 0xB7, 0x01,
+       0x54, 0xFF, 0x2D, 0x00, 0xFD, 0xFF, 0x06, 0x00, 0xEA, 0xFF, 0x0B,
+       0x00, 0x51, 0x00, 0xAA, 0xFE, 0xC0, 0x03, 0xB8, 0xF5, 0x21, 0x42,
+       0x31, 0x19, 0x28, 0xF5, 0x27, 0x06, 0x7C, 0xFC, 0xD4, 0x01, 0x3A,
+       0xFF, 0x35, 0x00, 0xFE, 0xFF, 0x1C, 0x00, 0x8D, 0xFF, 0xFA, 0x00,
+       0x64, 0xFE, 0x32, 0x02, 0x78, 0xFD, 0x1B, 0x02, 0xEA, 0x48, 0x50,
+       0x05, 0x14, 0xFC, 0xEB, 0x02, 0x05, 0xFE, 0x27, 0x01, 0x7C, 0xFF,
+       0x21, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x32, 0x00, 0x41, 0xFF, 0xBF,
+       0x01, 0xB2, 0xFC, 0xA9, 0x05, 0x55, 0xF6, 0x20, 0x15, 0x42, 0x44,
+       0x75, 0xF7, 0xBF, 0x02, 0x43, 0xFF, 0xFA, 0xFF, 0x36, 0x00, 0xDA,
+       0xFF, 0x0A, 0x00, 0xFD, 0xFF, 0x32, 0x00, 0x46, 0xFF, 0xD1, 0x01,
+       0x3F, 0xFC, 0x2B, 0x07, 0xCD, 0xF1, 0xAE, 0x2A, 0x86, 0x35, 0xB1,
+       0xF1, 0x9D, 0x06, 0xCA, 0xFC, 0x6E, 0x01, 0x7B, 0xFF, 0x20, 0x00,
+       0xFE, 0xFF, 0x02, 0x00, 0x05, 0x00, 0xC3, 0xFF, 0xE0, 0x00, 0xB3,
+       0xFD, 0x4B, 0x05, 0x4D, 0xF3, 0x45, 0x3D, 0xE0, 0x20, 0x4F, 0xF3,
+       0xD5, 0x06, 0x3D, 0xFC, 0xE6, 0x01, 0x36, 0xFF, 0x36, 0x00, 0xFD,
+       0xFF, 0x13, 0x00, 0xAF, 0xFF, 0xA4, 0x00, 0x19, 0xFF, 0xDD, 0x00,
+       0xF0, 0xFF, 0xD4, 0xFC, 0xC9, 0x47, 0xD8, 0x0B, 0x7C, 0xF9, 0x35,
+       0x04, 0x5F, 0xFD, 0x74, 0x01, 0x5E, 0xFF, 0x29, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x2C, 0x00, 0x56, 0xFF, 0x87, 0x01, 0x34, 0xFD, 0x8F,
+       0x04, 0xC0, 0xF8, 0xD9, 0x0D, 0x31, 0x47, 0x7B, 0xFB, 0x9C, 0x00,
+       0x7D, 0x00, 0x4D, 0xFF, 0x8A, 0x00, 0xB9, 0xFF, 0x11, 0x00, 0xFD,
+       0xFF, 0x36, 0x00, 0x38, 0xFF, 0xE6, 0x01, 0x35, 0xFC, 0xF7, 0x06,
+       0xE0, 0xF2, 0x18, 0x23, 0xAB, 0x3B, 0xCC, 0xF2, 0xA8, 0x05, 0x76,
+       0xFD, 0x04, 0x01, 0xB1, 0xFF, 0x0C, 0x00, 0x00, 0x00, 0xFE, 0xFF,
+       0x1A, 0x00, 0x89, 0xFF, 0x53, 0x01, 0xF5, 0xFC, 0x63, 0x06, 0xE9,
+       0xF1, 0x63, 0x37, 0x85, 0x28, 0x09, 0xF2, 0x27, 0x07, 0x35, 0xFC,
+       0xDA, 0x01, 0x40, 0xFF, 0x34, 0x00, 0xFD, 0xFF, 0x0C, 0x00, 0xD1,
+       0xFF, 0x4E, 0x00, 0xCA, 0xFF, 0x9A, 0xFF, 0x2A, 0x02, 0x83, 0xF8,
+       0x3F, 0x45, 0xFB, 0x12, 0x01, 0xF7, 0x5D, 0x05, 0xD3, 0xFC, 0xB1,
+       0x01, 0x46, 0xFF, 0x31, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x23, 0x00,
+       0x73, 0xFF, 0x3F, 0x01, 0xD3, 0xFD, 0x4C, 0x03, 0x54, 0xFB, 0x1F,
+       0x07, 0xBB, 0x48, 0x7D, 0x00, 0x33, 0xFE, 0xCF, 0x01, 0x98, 0xFE,
+       0xE2, 0x00, 0x97, 0xFF, 0x19, 0x00, 0xFE, 0xFF, 0x36, 0x00, 0x38,
+       0xFF, 0xDC, 0x01, 0x64, 0xFC, 0x62, 0x06, 0x93, 0xF4, 0x66, 0x1B,
+       0xD9, 0x40, 0xEA, 0xF4, 0x3E, 0x04, 0x5D, 0xFE, 0x7D, 0x00, 0xF5,
+       0xFF, 0xF3, 0xFF, 0x05, 0x00, 0xFD, 0xFF, 0x2A, 0x00, 0x5E, 0xFF,
+       0xA6, 0x01, 0x76, 0xFC, 0x01, 0x07, 0x7D, 0xF1, 0xAD, 0x30, 0xDC,
+       0x2F, 0x7F, 0xF1, 0x0C, 0x07, 0x6C, 0xFC, 0xAD, 0x01, 0x5A, 0xFF,
+       0x2B, 0x00, 0xFD, 0xFF, 0x05, 0x00, 0xEF, 0xFF, 0xFE, 0xFF, 0x6C,
+       0x00, 0x7B, 0xFE, 0x0C, 0x04, 0x3A, 0xF5, 0x5F, 0x41, 0x83, 0x1A,
+       0xCD, 0xF4, 0x4B, 0x06, 0x6D, 0xFC, 0xD9, 0x01, 0x39, 0xFF, 0x35,
+       0x00, 0xFE, 0xFF, 0x1A, 0x00, 0x93, 0xFF, 0xEC, 0x00, 0x83, 0xFE,
+       0xF7, 0x01, 0xE8, 0xFD, 0x21, 0x01, 0xD2, 0x48, 0x64, 0x06, 0xA1,
+       0xFB, 0x26, 0x03, 0xE7, 0xFD, 0x35, 0x01, 0x76, 0xFF, 0x22, 0x00,
+       0x00, 0x00, 0xFF, 0xFF, 0x31, 0x00, 0x44, 0xFF, 0xB7, 0x01, 0xC5,
+       0xFC, 0x7C, 0x05, 0xBC, 0xF6, 0xD5, 0x13, 0xDC, 0x44, 0x14, 0xF8,
+       0x67, 0x02, 0x77, 0xFF, 0xDD, 0xFF, 0x44, 0x00, 0xD5, 0xFF, 0x0B,
+       0x00, 0xFD, 0xFF, 0x33, 0x00, 0x42, 0xFF, 0xD7, 0x01, 0x39, 0xFC,
+       0x29, 0x07, 0xEF, 0xF1, 0x62, 0x29, 0xA5, 0x36, 0xD0, 0xF1, 0x7B,
+       0x06, 0xE3, 0xFC, 0x5E, 0x01, 0x83, 0xFF, 0x1D, 0x00, 0xFE, 0xFF,
+       0x01, 0x00, 0x09, 0x00, 0xB8, 0xFF, 0xF6, 0x00, 0x8D, 0xFD, 0x84,
+       0x05, 0xFD, 0xF2, 0x52, 0x3C, 0x35, 0x22, 0x0B, 0xF3, 0xEB, 0x06,
+       0x37, 0xFC, 0xE6, 0x01, 0x37, 0xFF, 0x36, 0x00, 0xFD, 0xFF, 0x12,
+       0x00, 0xB5, 0xFF, 0x94, 0x00, 0x39, 0xFF, 0xA3, 0x00, 0x58, 0x00,
+       0x02, 0xFC, 0x73, 0x47, 0x0B, 0x0D, 0x0B, 0xF9, 0x6C, 0x04, 0x45,
+       0xFD, 0x80, 0x01, 0x59, 0xFF, 0x2B, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x2A, 0x00, 0x5B, 0xFF, 0x7C, 0x01, 0x4E, 0xFD, 0x5A, 0x04, 0x31,
+       0xF9, 0xA4, 0x0C, 0x90, 0x47, 0x47, 0xFC, 0x36, 0x00, 0xB6, 0x00,
+       0x2E, 0xFF, 0x99, 0x00, 0xB3, 0xFF, 0x12, 0x00, 0xFD, 0xFF, 0x36,
+       0x00, 0x37, 0xFF, 0xE6, 0x01, 0x39, 0xFC, 0xE4, 0x06, 0x21, 0xF3,
+       0xC4, 0x21, 0xA5, 0x3C, 0x16, 0xF3, 0x72, 0x05, 0x9A, 0xFD, 0xEF,
+       0x00, 0xBC, 0xFF, 0x08, 0x00, 0x01, 0x00, 0xFE, 0xFF, 0x1E, 0x00,
+       0x80, 0xFF, 0x64, 0x01, 0xDA, 0xFC, 0x87, 0x06, 0xC5, 0xF1, 0x46,
+       0x36, 0xD1, 0x29, 0xE3, 0xF1, 0x2A, 0x07, 0x3A, 0xFC, 0xD5, 0x01,
+       0x44, 0xFF, 0x32, 0x00, 0xFD, 0xFF, 0x0A, 0x00, 0xD6, 0xFF, 0x3F,
+       0x00, 0xE7, 0xFF, 0x65, 0xFF, 0x85, 0x02, 0xDE, 0xF7, 0xA9, 0x44,
+       0x43, 0x14, 0x99, 0xF6, 0x8B, 0x05, 0xBF, 0xFC, 0xBA, 0x01, 0x43,
+       0xFF, 0x32, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x22, 0x00, 0x78, 0xFF,
+       0x31, 0x01, 0xF1, 0xFD, 0x12, 0x03, 0xC7, 0xFB, 0x07, 0x06, 0xDB,
+       0x48, 0x73, 0x01, 0xC3, 0xFD, 0x0A, 0x02, 0x79, 0xFE, 0xF1, 0x00,
+       0x91, 0xFF, 0x1B, 0x00, 0xFE, 0xFF, 0x35, 0x00, 0x39, 0xFF, 0xD7,
+       0x01, 0x72, 0xFC, 0x3F, 0x06, 0xEB, 0xF4, 0x12, 0x1A, 0xA1, 0x41,
+       0x63, 0xF5, 0xF3, 0x03, 0x8A, 0xFE, 0x63, 0x00, 0x02, 0x00, 0xEE,
+       0xFF, 0x06, 0x00, 0xFD, 0xFF, 0x2C, 0x00, 0x58, 0xFF, 0xB1, 0x01,
+       0x67, 0xFC, 0x10, 0x07, 0x81, 0xF1, 0x73, 0x2F, 0x15, 0x31, 0x7C,
+       0xF1, 0xFB, 0x06, 0x7C, 0xFC, 0xA2, 0x01, 0x60, 0xFF, 0x29, 0x00,
+       0xFD, 0xFF, 0x04, 0x00, 0xF4, 0xFF, 0xF1, 0xFF, 0x85, 0x00, 0x4E,
+       0xFE, 0x56, 0x04, 0xC3, 0xF4, 0x95, 0x40, 0xD8, 0x1B, 0x76, 0xF4,
+       0x6D, 0x06, 0x60, 0xFC, 0xDD, 0x01, 0x37, 0xFF, 0x36, 0x00, 0xFE,
+       0xFF, 0x19, 0x00, 0x99, 0xFF, 0xDD, 0x00, 0xA3, 0xFE, 0xBB, 0x01,
+       0x58, 0xFE, 0x2D, 0x00, 0xAF, 0x48, 0x7E, 0x07, 0x2E, 0xFB, 0x60,
+       0x03, 0xC9, 0xFD, 0x43, 0x01, 0x71, 0xFF, 0x24, 0x00, 0x00, 0x00,
+       0xFF, 0xFF, 0x30, 0x00, 0x48, 0xFF, 0xAE, 0x01, 0xDB, 0xFC, 0x4D,
+       0x05, 0x24, 0xF7, 0x8E, 0x12, 0x6D, 0x45, 0xBC, 0xF8, 0x0C, 0x02,
+       0xAC, 0xFF, 0xC0, 0xFF, 0x52, 0x00, 0xCF, 0xFF, 0x0C, 0x00, 0xFD,
+       0xFF, 0x34, 0x00, 0x3F, 0xFF, 0xDC, 0x01, 0x34, 0xFC, 0x25, 0x07,
+       0x18, 0xF2, 0x15, 0x28, 0xBF, 0x37, 0xF7, 0xF1, 0x56, 0x06, 0xFE,
+       0xFC, 0x4D, 0x01, 0x8C, 0xFF, 0x19, 0x00, 0xFF, 0xFF, 0x00, 0x00,
+       0x0D, 0x00, 0xAE, 0xFF, 0x0B, 0x01, 0x6A, 0xFD, 0xBA, 0x05, 0xB4,
+       0xF2, 0x58, 0x3B, 0x8A, 0x23, 0xCB, 0xF2, 0xFD, 0x06, 0x34, 0xFC,
+       0xE6, 0x01, 0x38, 0xFF, 0x36, 0x00, 0xFD, 0xFF, 0x10, 0x00, 0xBB,
+       0xFF, 0x85, 0x00, 0x58, 0xFF, 0x6A, 0x00, 0xBE, 0x00, 0x38, 0xFB,
+       0x0F, 0x47, 0x42, 0x0E, 0x9B, 0xF8, 0xA1, 0x04, 0x2B, 0xFD, 0x8B,
+       0x01, 0x55, 0xFF, 0x2C, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x29, 0x00,
+       0x5F, 0xFF, 0x70, 0x01, 0x68, 0xFD, 0x23, 0x04, 0xA2, 0xF9, 0x73,
+       0x0B, 0xE4, 0x47, 0x1B, 0xFD, 0xCD, 0xFF, 0xF0, 0x00, 0x0F, 0xFF,
+       0xA9, 0x00, 0xAE, 0xFF, 0x14, 0x00, 0xFD, 0xFF, 0x36, 0x00, 0x36,
+       0xFF, 0xE6, 0x01, 0x3F, 0xFC, 0xCE, 0x06, 0x66, 0xF3, 0x6F, 0x20,
+       0x96, 0x3D, 0x69, 0xF3, 0x38, 0x05, 0xBF, 0xFD, 0xD9, 0x00, 0xC7,
+       0xFF, 0x04, 0x00, 0x02, 0x00, 0xFE, 0xFF, 0x20, 0x00, 0x78, 0xFF,
+       0x74, 0x01, 0xC2, 0xFC, 0xA7, 0x06, 0xA8, 0xF1, 0x25, 0x35, 0x1B,
+       0x2B, 0xC2, 0xF1, 0x2A, 0x07, 0x41, 0xFC, 0xCE, 0x01, 0x47, 0xFF,
+       0x31, 0x00, 0xFD, 0xFF, 0x09, 0x00, 0xDC, 0xFF, 0x31, 0x00, 0x04,
+       0x00, 0x32, 0xFF, 0xDC, 0x02, 0x42, 0xF7, 0x0B, 0x44, 0x8E, 0x15,
+       0x34, 0xF6, 0xB7, 0x05, 0xAB, 0xFC, 0xC1, 0x01, 0x40, 0xFF, 0x33,
+       0x00, 0xFF, 0xFF, 0x00, 0x00, 0x20, 0x00, 0x7E, 0xFF, 0x23, 0x01,
+       0x0F, 0xFE, 0xD7, 0x02, 0x3B, 0xFC, 0xF5, 0x04, 0xED, 0x48, 0x70,
+       0x02, 0x52, 0xFD, 0x46, 0x02, 0x5A, 0xFE, 0xFF, 0x00, 0x8B, 0xFF,
+       0x1C, 0x00, 0xFE, 0xFF, 0x35, 0x00, 0x3B, 0xFF, 0xD2, 0x01, 0x81,
+       0xFC, 0x1A, 0x06, 0x47, 0xF5, 0xC1, 0x18, 0x60, 0x42, 0xE4, 0xF5,
+       0xA6, 0x03, 0xB9, 0xFE, 0x48, 0x00, 0x0F, 0x00, 0xE9, 0xFF, 0x07,
+       0x00, 0xFD, 0xFF, 0x2E, 0x00, 0x53, 0xFF, 0xBB, 0x01, 0x5A, 0xFC,
+       0x1C, 0x07, 0x8D, 0xF1, 0x34, 0x2E, 0x48, 0x32, 0x81, 0xF1, 0xE7,
+       0x06, 0x8E, 0xFC, 0x96, 0x01, 0x66, 0xFF, 0x27, 0x00, 0xFD, 0xFF,
+       0x04, 0x00, 0xF9, 0xFF, 0xE4, 0xFF, 0x9F, 0x00, 0x23, 0xFE, 0x9B,
+       0x04, 0x55, 0xF4, 0xC0, 0x3F, 0x2C, 0x1D, 0x22, 0xF4, 0x8C, 0x06,
+       0x55, 0xFC, 0xE1, 0x01, 0x37, 0xFF, 0x36, 0x00, 0xFE, 0xFF, 0x17,
+       0x00, 0x9F, 0xFF, 0xCE, 0x00, 0xC2, 0xFE, 0x80, 0x01, 0xC6, 0xFE,
+       0x40, 0xFF, 0x81, 0x48, 0x9E, 0x08, 0xBA, 0xFA, 0x9A, 0x03, 0xAC,
+       0xFD, 0x51, 0x01, 0x6C, 0xFF, 0x25, 0x00, 0x00, 0x00, 0xFF, 0xFF,
+       0x2F, 0x00, 0x4B, 0xFF, 0xA4, 0x01, 0xF1, 0xFC, 0x1D, 0x05, 0x8F,
+       0xF7, 0x4A, 0x11, 0xF2, 0x45, 0x6B, 0xF9, 0xAE, 0x01, 0xE2, 0xFF,
+       0xA2, 0xFF, 0x61, 0x00, 0xC9, 0xFF, 0x0D, 0x00, 0xFD, 0xFF, 0x35,
+       0x00, 0x3D, 0xFF, 0xE0, 0x01, 0x32, 0xFC, 0x1D, 0x07, 0x45, 0xF2,
+       0xC6, 0x26, 0xD3, 0x38, 0x24, 0xF2, 0x2D, 0x06, 0x1B, 0xFD, 0x3B,
+       0x01, 0x95, 0xFF, 0x16, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x11, 0x00,
+       0xA3, 0xFF, 0x20, 0x01, 0x49, 0xFD, 0xEB, 0x05, 0x74, 0xF2, 0x54,
+       0x3A, 0xDD, 0x24, 0x91, 0xF2, 0x0C, 0x07, 0x32, 0xFC, 0xE4, 0x01,
+       0x3A, 0xFF, 0x36, 0x00, 0xFD, 0xFF, 0x0F, 0x00, 0xC1, 0xFF, 0x76,
+       0x00, 0x76, 0xFF, 0x32, 0x00, 0x22, 0x01, 0x76, 0xFA, 0xA3, 0x46,
+       0x7D, 0x0F, 0x2C, 0xF8, 0xD5, 0x04, 0x13, 0xFD, 0x96, 0x01, 0x51,
+       0xFF, 0x2D, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x27, 0x00, 0x64, 0xFF,
+       0x63, 0x01, 0x84, 0xFD, 0xEB, 0x03, 0x14, 0xFA, 0x47, 0x0A, 0x2C,
+       0x48, 0xF6, 0xFD, 0x63, 0xFF, 0x2B, 0x01, 0xF0, 0xFE, 0xB8, 0x00,
+       0xA8, 0xFF, 0x15, 0x00, 0xFD, 0xFF, 0x36, 0x00, 0x36, 0xFF, 0xE4,
+       0x01, 0x47, 0xFC, 0xB5, 0x06, 0xB0, 0xF3, 0x19, 0x1F, 0x7E, 0x3E,
+       0xC4, 0xF3, 0xFA, 0x04, 0xE7, 0xFD, 0xC1, 0x00, 0xD3, 0xFF, 0xFF,
+       0xFF, 0x02, 0x00, 0xFE, 0xFF, 0x23, 0x00, 0x71, 0xFF, 0x82, 0x01,
+       0xAB, 0xFC, 0xC4, 0x06, 0x93, 0xF1, 0xFD, 0x33, 0x62, 0x2C, 0xA8,
+       0xF1, 0x27, 0x07, 0x4A, 0xFC, 0xC7, 0x01, 0x4C, 0xFF, 0x30, 0x00,
+       0xFD, 0xFF, 0x08, 0x00, 0xE1, 0xFF, 0x23, 0x00, 0x20, 0x00, 0x00,
+       0xFF, 0x31, 0x03, 0xAD, 0xF6, 0x65, 0x43, 0xDC, 0x16, 0xD1, 0xF5,
+       0xE1, 0x05, 0x99, 0xFC, 0xC9, 0x01, 0x3E, 0xFF, 0x33, 0x00, 0xFF,
+       0xFF, 0x00, 0x00, 0x1F, 0x00, 0x83, 0xFF, 0x14, 0x01, 0x2D, 0xFE,
+       0x9C, 0x02, 0xAD, 0xFC, 0xE9, 0x03, 0xF6, 0x48, 0x73, 0x03, 0xE0,
+       0xFC, 0x82, 0x02, 0x3B, 0xFE, 0x0E, 0x01, 0x86, 0xFF, 0x1E, 0x00,
+       0xFE, 0xFF, 0x34, 0x00, 0x3D, 0xFF, 0xCC, 0x01, 0x91, 0xFC, 0xF3,
+       0x05, 0xA6, 0xF5, 0x70, 0x17, 0x17, 0x43, 0x6D, 0xF6, 0x56, 0x03,
+       0xEA, 0xFE, 0x2D, 0x00, 0x1D, 0x00, 0xE4, 0xFF, 0x08, 0x00, 0xFD,
+       0xFF, 0x2F, 0x00, 0x4E, 0xFF, 0xC3, 0x01, 0x4E, 0xFC, 0x24, 0x07,
+       0x9E, 0xF1, 0xF2, 0x2C, 0x78, 0x33, 0x8C, 0xF1, 0xD0, 0x06, 0xA2,
+       0xFC, 0x88, 0x01, 0x6D, 0xFF, 0x24, 0x00, 0xFD, 0xFF, 0x03, 0x00,
+       0xFD, 0xFF, 0xD8, 0xFF, 0xB7, 0x00, 0xF9, 0xFD, 0xDE, 0x04, 0xEF,
+       0xF3, 0xE4, 0x3E, 0x81, 0x1E, 0xD2, 0xF3, 0xA9, 0x06, 0x4B, 0xFC,
+       0xE3, 0x01, 0x36, 0xFF, 0x36, 0x00, 0xFE, 0xFF, 0x16, 0x00, 0xA5,
+       0xFF, 0xBE, 0x00, 0xE2, 0xFE, 0x45, 0x01, 0x33, 0xFF, 0x5A, 0xFE,
+       0x48, 0x48, 0xC3, 0x09, 0x47, 0xFA, 0xD2, 0x03, 0x90, 0xFD, 0x5E,
+       0x01, 0x66, 0xFF, 0x27, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x2E, 0x00,
+       0x4F, 0xFF, 0x9A, 0x01, 0x08, 0xFD, 0xEB, 0x04, 0xFC, 0xF7, 0x0A,
+       0x10, 0x70, 0x46, 0x22, 0xFA, 0x4D, 0x01, 0x19, 0x00, 0x84, 0xFF,
+       0x70, 0x00, 0xC4, 0xFF, 0x0F, 0x00, 0xFD, 0xFF, 0x35, 0x00, 0x3B,
+       0xFF, 0xE3, 0x01, 0x31, 0xFC, 0x12, 0x07, 0x79, 0xF2, 0x73, 0x25,
+       0xDF, 0x39, 0x5A, 0xF2, 0x00, 0x06, 0x3A, 0xFD, 0x28, 0x01, 0x9F,
+       0xFF, 0x13, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x15, 0x00, 0x99, 0xFF,
+       0x33, 0x01, 0x29, 0xFD, 0x1A, 0x06, 0x3B, 0xF2, 0x4B, 0x39, 0x30,
+       0x26, 0x5B, 0xF2, 0x19, 0x07, 0x31, 0xFC, 0xE1, 0x01, 0x3C, 0xFF,
+       0x35, 0x00, 0xFD, 0xFF, 0x0E, 0x00, 0xC7, 0xFF, 0x68, 0x00, 0x95,
+       0xFF, 0xFA, 0xFF, 0x83, 0x01, 0xBB, 0xF9, 0x2B, 0x46, 0xBB, 0x10,
+       0xBF, 0xF7, 0x07, 0x05, 0xFB, 0xFC, 0xA0, 0x01, 0x4D, 0xFF, 0x2F,
+       0x00, 0xFF, 0xFF, 0x00, 0x00, 0x26, 0x00, 0x69, 0xFF, 0x56, 0x01,
+       0xA0, 0xFD, 0xB3, 0x03, 0x87, 0xFA, 0x1F, 0x09, 0x6A, 0x48, 0xD9,
+       0xFE, 0xF6, 0xFE, 0x65, 0x01, 0xD0, 0xFE, 0xC7, 0x00, 0xA2, 0xFF,
+       0x17, 0x00, 0xFE, 0xFF, 0x36, 0x00, 0x36, 0xFF, 0xE2, 0x01, 0x50,
+       0xFC, 0x99, 0x06, 0xFE, 0xF3, 0xC3, 0x1D, 0x5E, 0x3F, 0x27, 0xF4,
+       0xB9, 0x04, 0x10, 0xFE, 0xA9, 0x00, 0xDF, 0xFF, 0xFB, 0xFF, 0x03,
+       0x00, 0xFD, 0xFF, 0x26, 0x00, 0x69, 0xFF, 0x90, 0x01, 0x96, 0xFC,
+       0xDD, 0x06, 0x85, 0xF1, 0xD0, 0x32, 0xA6, 0x2D, 0x94, 0xF1, 0x20,
+       0x07, 0x54, 0xFC, 0xBF, 0x01, 0x50, 0xFF, 0x2E, 0x00, 0xFD, 0xFF,
+       0x07, 0x00, 0xE6, 0xFF, 0x15, 0x00, 0x3C, 0x00, 0xCF, 0xFE, 0x83,
+       0x03, 0x20, 0xF6, 0xB2, 0x42, 0x2B, 0x18, 0x71, 0xF5, 0x09, 0x06,
+       0x88, 0xFC, 0xCF, 0x01, 0x3C, 0xFF, 0x34, 0x00, 0xFE, 0xFF, 0x1D,
+       0x00, 0x89, 0xFF, 0x06, 0x01, 0x4C, 0xFE, 0x60, 0x02, 0x1F, 0xFD,
+       0xE2, 0x02, 0xF3, 0x48, 0x7D, 0x04, 0x6E, 0xFC, 0xBD, 0x02, 0x1C,
+       0xFE, 0x1C, 0x01, 0x80, 0xFF, 0x20, 0x00, 0x00, 0x00, 0xFF, 0xFF,
+       0x33, 0x00, 0x3F, 0xFF, 0xC5, 0x01, 0xA3, 0xFC, 0xCA, 0x05, 0x07,
+       0xF6, 0x22, 0x16, 0xC3, 0x43, 0xFE, 0xF6, 0x02, 0x03, 0x1B, 0xFF,
+       0x11, 0x00, 0x2B, 0x00, 0xDE, 0xFF, 0x09, 0x00, 0xFD, 0xFF, 0x31,
+       0x00, 0x49, 0xFF, 0xCB, 0x01, 0x45, 0xFC, 0x29, 0x07, 0xB6, 0xF1,
+       0xAD, 0x2B, 0xA2, 0x34, 0x9E, 0xF1, 0xB4, 0x06, 0xB8, 0xFC, 0x7A,
+       0x01, 0x75, 0xFF, 0x22, 0x00, 0xFE, 0xFF, 0x02, 0x00, 0x02, 0x00,
+       0xCC, 0xFF, 0xCE, 0x00, 0xD1, 0xFD, 0x1D, 0x05, 0x91, 0xF3, 0xFE,
+       0x3D, 0xD7, 0x1F, 0x87, 0xF3, 0xC3, 0x06, 0x42, 0xFC, 0xE5, 0x01,
+       0x36, 0xFF, 0x36, 0x00, 0xFD, 0xFF, 0x14, 0x00, 0xAB, 0xFF, 0xAF,
+       0x00, 0x01, 0xFF, 0x0A, 0x01, 0x9E, 0xFF, 0x7C, 0xFD, 0x03, 0x48,
+       0xED, 0x0A, 0xD5, 0xF9, 0x0A, 0x04, 0x74, 0xFD, 0x6A, 0x01, 0x62,
+       0xFF, 0x28, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x2D, 0x00, 0x53, 0xFF,
+       0x90, 0x01, 0x20, 0xFD, 0xB8, 0x04, 0x6A, 0xF8, 0xCD, 0x0E, 0xE1,
+       0x46, 0xE1, 0xFA, 0xEB, 0x00, 0x51, 0x00, 0x65, 0xFF, 0x7F, 0x00,
+       0xBE, 0xFF, 0x10, 0x00, 0xFD, 0xFF, 0x36, 0x00, 0x39, 0xFF, 0xE5,
+       0x01, 0x33, 0xFC, 0x04, 0x07, 0xB1, 0xF2, 0x21, 0x24, 0xE6, 0x3A,
+       0x97, 0xF2, 0xD0, 0x05, 0x5B, 0xFD, 0x15, 0x01, 0xA9, 0xFF, 0x0F,
+       0x00, 0x00, 0x00, 0xFF, 0xFF, 0x18, 0x00, 0x90, 0xFF, 0x45, 0x01,
+       0x0B, 0xFD, 0x44, 0x06, 0x0A, 0xF2, 0x3B, 0x38, 0x80, 0x27, 0x2B,
+       0xF2, 0x22, 0x07, 0x33, 0xFC, 0xDE, 0x01, 0x3E, 0xFF, 0x34, 0x00,
+       0xFD, 0xFF, 0x0D, 0x00, 0xCD, 0xFF, 0x59, 0x00, 0xB3, 0xFF, 0xC4,
+       0xFF, 0xE2, 0x01, 0x09, 0xF9, 0xAA, 0x45, 0xFE, 0x11, 0x54, 0xF7,
+       0x38, 0x05, 0xE4, 0xFC, 0xAA, 0x01, 0x49, 0xFF, 0x30, 0x00, 0xFF,
+       0xFF, 0x00, 0x00, 0x24, 0x00, 0x6E, 0xFF, 0x49, 0x01, 0xBC, 0xFD,
+       0x7A, 0x03, 0xFA, 0xFA, 0xFD, 0x07, 0x9C, 0x48, 0xC3, 0xFF, 0x89,
+       0xFE, 0xA1, 0x01, 0xB1, 0xFE, 0xD6, 0x00, 0x9C, 0xFF, 0x18, 0x00,
+       0xFE, 0xFF, 0x36, 0x00, 0x37, 0xFF, 0xDF, 0x01, 0x5B, 0xFC, 0x7B,
+       0x06, 0x50, 0xF4, 0x6E, 0x1C, 0x36, 0x40, 0x92, 0xF4, 0x75, 0x04,
+       0x3B, 0xFE, 0x91, 0x00, 0xEB, 0xFF, 0xF6, 0xFF, 0x04, 0x00, 0xFD,
+       0xFF, 0x28, 0x00, 0x63, 0xFF, 0x9D, 0x01, 0x84, 0xFC, 0xF3, 0x06,
+       0x7D, 0xF1, 0x9E, 0x31, 0xE6, 0x2E, 0x85, 0xF1, 0x16, 0x07, 0x61,
+       0xFC, 0xB5, 0x01, 0x55, 0xFF, 0x2D, 0x00, 0xFD, 0xFF, 0x06, 0x00,
+       0xEC, 0xFF, 0x08, 0x00, 0x57, 0x00, 0x9F, 0xFE, 0xD1, 0x03, 0x9B,
+       0xF5, 0xF7, 0x41, 0x7C, 0x19, 0x13, 0xF5, 0x2F, 0x06, 0x78, 0xFC,
+       0xD5, 0x01, 0x3A, 0xFF, 0x35, 0x00, 0xFE, 0xFF, 0x1C, 0x00, 0x8F,
+       0xFF, 0xF7, 0x00, 0x6B, 0xFE, 0x25, 0x02, 0x91, 0xFD, 0xE3, 0x01,
+       0xE5, 0x48, 0x8D, 0x05, 0xFB, 0xFB, 0xF8, 0x02, 0xFE, 0xFD, 0x2B,
+       0x01, 0x7A, 0xFF, 0x21, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x32, 0x00,
+       0x42, 0xFF, 0xBD, 0x01, 0xB6, 0xFC, 0x9F, 0x05, 0x6C, 0xF6, 0xD6,
+       0x14, 0x65, 0x44, 0x98, 0xF7, 0xAC, 0x02, 0x4E, 0xFF, 0xF4, 0xFF,
+       0x39, 0x00, 0xD9, 0xFF, 0x0A, 0x00, 0xFD, 0xFF, 0x32, 0x00, 0x45,
+       0xFF, 0xD2, 0x01, 0x3D, 0xFC, 0x2B, 0x07, 0xD4, 0xF1, 0x64, 0x2A,
+       0xC6, 0x35, 0xB7, 0xF1, 0x96, 0x06, 0xCF, 0xFC, 0x6B, 0x01, 0x7D,
+       0xFF, 0x1F, 0x00, 0xFE, 0xFF, 0x01, 0x00, 0x06, 0x00, 0xC1, 0xFF,
+       0xE5, 0x00, 0xAA, 0xFD, 0x58, 0x05, 0x3A, 0xF3, 0x11, 0x3D, 0x2C,
+       0x21, 0x3F, 0xF3, 0xDA, 0x06, 0x3B, 0xFC, 0xE6, 0x01, 0x36, 0xFF,
+       0x36, 0x00, 0xFD, 0xFF, 0x13, 0x00, 0xB1, 0xFF, 0xA0, 0x00, 0x20,
+       0xFF, 0xD0, 0x00, 0x07, 0x00, 0xA4, 0xFC, 0xB6, 0x47, 0x1C, 0x0C,
+       0x63, 0xF9, 0x42, 0x04, 0x59, 0xFD, 0x76, 0x01, 0x5D, 0xFF, 0x2A,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x57, 0xFF, 0x85, 0x01,
+       0x39, 0xFD, 0x84, 0x04, 0xD9, 0xF8, 0x95, 0x0D, 0x48, 0x47, 0xA7,
+       0xFB, 0x86, 0x00, 0x8A, 0x00, 0x46, 0xFF, 0x8E, 0x00, 0xB8, 0xFF,
+       0x11, 0x00, 0xFD, 0xFF, 0x36, 0x00, 0x37, 0xFF, 0xE6, 0x01, 0x35,
+       0xFC, 0xF3, 0x06, 0xEE, 0xF2, 0xCD, 0x22, 0xE4, 0x3B, 0xDC, 0xF2,
+       0x9C, 0x05, 0x7E, 0xFD, 0x00, 0x01, 0xB4, 0xFF, 0x0B, 0x00, 0x01,
+       0x00, 0xFE, 0xFF, 0x1B, 0x00, 0x87, 0xFF, 0x57, 0x01, 0xEF, 0xFC,
+       0x6B, 0x06, 0xE0, 0xF1, 0x23, 0x37, 0xCE, 0x28, 0x01, 0xF2, 0x28,
+       0x07, 0x36, 0xFC, 0xD9, 0x01, 0x41, 0xFF, 0x33, 0x00, 0xFD, 0xFF,
+       0x0B, 0x00, 0xD2, 0xFF, 0x4A, 0x00, 0xD0, 0xFF, 0x8E, 0xFF, 0x3F,
+       0x02, 0x5E, 0xF8, 0x1E, 0x45, 0x44, 0x13, 0xEA, 0xF6, 0x67, 0x05,
+       0xCF, 0xFC, 0xB3, 0x01, 0x46, 0xFF, 0x31, 0x00, 0xFF, 0xFF, 0x00,
+       0x00, 0x23, 0x00, 0x74, 0xFF, 0x3C, 0x01, 0xDA, 0xFD, 0x40, 0x03,
+       0x6E, 0xFB, 0xE1, 0x06, 0xC3, 0x48, 0xB3, 0x00, 0x1A, 0xFE, 0xDC,
+       0x01, 0x91, 0xFE, 0xE5, 0x00, 0x96, 0xFF, 0x1A, 0x00, 0xFE, 0xFF,
+       0x36, 0x00, 0x38, 0xFF, 0xDB, 0x01, 0x67, 0xFC, 0x5A, 0x06, 0xA6,
+       0xF4, 0x1B, 0x1B, 0x07, 0x41, 0x04, 0xF5, 0x2D, 0x04, 0x67, 0xFE,
+       0x77, 0x00, 0xF8, 0xFF, 0xF2, 0xFF, 0x05, 0x00, 0xFD, 0xFF, 0x2A,
+       0x00, 0x5C, 0xFF, 0xA8, 0x01, 0x73, 0xFC, 0x05, 0x07, 0x7D, 0xF1,
+       0x67, 0x30, 0x21, 0x30, 0x7E, 0xF1, 0x08, 0x07, 0x6F, 0xFC, 0xAB,
+       0x01, 0x5B, 0xFF, 0x2B, 0x00, 0xFD, 0xFF, 0x05, 0x00, 0xF0, 0xFF,
+       0xFB, 0xFF, 0x71, 0x00, 0x71, 0xFE, 0x1D, 0x04, 0x1F, 0xF5, 0x32,
+       0x41, 0xCE, 0x1A, 0xBA, 0xF4, 0x53, 0x06, 0x6A, 0xFC, 0xDA, 0x01,
+       0x38, 0xFF, 0x35, 0x00, 0xFE, 0xFF, 0x1A, 0x00, 0x95, 0xFF, 0xE8,
+       0x00, 0x8A, 0xFE, 0xE9, 0x01, 0x01, 0xFE, 0xEA, 0x00, 0xCB, 0x48,
+       0xA2, 0x06, 0x87, 0xFB, 0x33, 0x03, 0xE0, 0xFD, 0x39, 0x01, 0x75,
+       0xFF, 0x23, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x31, 0x00, 0x45, 0xFF,
+       0xB5, 0x01, 0xCA, 0xFC, 0x72, 0x05, 0xD3, 0xF6, 0x8D, 0x13, 0xFD,
+       0x44, 0x39, 0xF8, 0x53, 0x02, 0x82, 0xFF, 0xD7, 0xFF, 0x47, 0x00,
+       0xD3, 0xFF, 0x0B, 0x00, 0xFD, 0xFF, 0x33, 0x00, 0x42, 0xFF, 0xD8,
+       0x01, 0x37, 0xFC, 0x29, 0x07, 0xF8, 0xF1, 0x19, 0x29, 0xE5, 0x36,
+       0xD8, 0xF1, 0x73, 0x06, 0xE9, 0xFC, 0x5B, 0x01, 0x85, 0xFF, 0x1C,
+       0x00, 0xFE, 0xFF, 0x01, 0x00, 0x0A, 0x00, 0xB6, 0xFF, 0xFB, 0x00,
+       0x85, 0xFD, 0x90, 0x05, 0xEC, 0xF2, 0x1C, 0x3C, 0x81, 0x22, 0xFC,
+       0xF2, 0xEF, 0x06, 0x36, 0xFC, 0xE6, 0x01, 0x37, 0xFF, 0x36, 0x00,
+       0xFD, 0xFF, 0x12, 0x00, 0xB7, 0xFF, 0x91, 0x00, 0x40, 0xFF, 0x96,
+       0x00, 0x6F, 0x00, 0xD5, 0xFB, 0x5E, 0x47, 0x50, 0x0D, 0xF2, 0xF8,
+       0x78, 0x04, 0x3F, 0xFD, 0x82, 0x01, 0x58, 0xFF, 0x2B, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x2A, 0x00, 0x5C, 0xFF, 0x79, 0x01, 0x53, 0xFD,
+       0x4E, 0x04, 0x4A, 0xF9, 0x60, 0x0C, 0xA3, 0x47, 0x76, 0xFC, 0x1F,
+       0x00, 0xC3, 0x00, 0x27, 0xFF, 0x9D, 0x00, 0xB2, 0xFF, 0x13, 0x00,
+       0xFD, 0xFF, 0x36, 0x00, 0x37, 0xFF, 0xE6, 0x01, 0x3A, 0xFC, 0xDF,
+       0x06, 0x30, 0xF3, 0x78, 0x21, 0xDB, 0x3C, 0x28, 0xF3, 0x65, 0x05,
+       0xA2, 0xFD, 0xEA, 0x00, 0xBE, 0xFF, 0x07, 0x00, 0x01, 0x00, 0xFE,
+       0xFF, 0x1E, 0x00, 0x7F, 0xFF, 0x67, 0x01, 0xD5, 0xFC, 0x8E, 0x06,
+       0xBE, 0xF1, 0x06, 0x36, 0x1A, 0x2A, 0xDC, 0xF1, 0x2A, 0x07, 0x3C,
+       0xFC, 0xD3, 0x01, 0x44, 0xFF, 0x32, 0x00, 0xFD, 0xFF, 0x0A, 0x00,
+       0xD8, 0xFF, 0x3C, 0x00, 0xEE, 0xFF, 0x5A, 0xFF, 0x98, 0x02, 0xBB,
+       0xF7, 0x87, 0x44, 0x8C, 0x14, 0x83, 0xF6, 0x95, 0x05, 0xBA, 0xFC,
+       0xBB, 0x01, 0x43, 0xFF, 0x32, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x21,
+       0x00, 0x79, 0xFF, 0x2E, 0x01, 0xF7, 0xFD, 0x05, 0x03, 0xE1, 0xFB,
+       0xCA, 0x05, 0xDF, 0x48, 0xAB, 0x01, 0xAA, 0xFD, 0x18, 0x02, 0x72,
+       0xFE, 0xF4, 0x00, 0x90, 0xFF, 0x1B, 0x00, 0xFE, 0xFF, 0x35, 0x00,
+       0x39, 0xFF, 0xD6, 0x01, 0x75, 0xFC, 0x37, 0x06, 0xFF, 0xF4, 0xC7,
+       0x19, 0xCC, 0x41, 0x7F, 0xF5, 0xE2, 0x03, 0x95, 0xFE, 0x5D, 0x00,
+       0x05, 0x00, 0xED, 0xFF, 0x06, 0x00, 0xFD, 0xFF, 0x2C, 0x00, 0x57,
+       0xFF, 0xB3, 0x01, 0x64, 0xFC, 0x13, 0x07, 0x83, 0xF1, 0x2C, 0x2F,
+       0x5A, 0x31, 0x7D, 0xF1, 0xF7, 0x06, 0x80, 0xFC, 0x9F, 0x01, 0x61,
+       0xFF, 0x29, 0x00, 0xFD, 0xFF, 0x04, 0x00, 0xF5, 0xFF, 0xEE, 0xFF,
+       0x8B, 0x00, 0x44, 0xFE, 0x65, 0x04, 0xAA, 0xF4, 0x66, 0x40, 0x23,
+       0x1C, 0x63, 0xF4, 0x74, 0x06, 0x5D, 0xFC, 0xDE, 0x01, 0x37, 0xFF,
+       0x36, 0x00, 0xFE, 0xFF, 0x19, 0x00, 0x9A, 0xFF, 0xD9, 0x00, 0xAA,
+       0xFE, 0xAE, 0x01, 0x70, 0xFE, 0xF8, 0xFF, 0xA6, 0x48, 0xBE, 0x07,
+       0x14, 0xFB, 0x6D, 0x03, 0xC3, 0xFD, 0x46, 0x01, 0x70, 0xFF, 0x24,
+       0x00, 0x00, 0x00, 0xFF, 0xFF, 0x30, 0x00, 0x48, 0xFF, 0xAC, 0x01,
+       0xDF, 0xFC, 0x43, 0x05, 0x3C, 0xF7, 0x46, 0x12, 0x8D, 0x45, 0xE2,
+       0xF8, 0xF7, 0x01, 0xB8, 0xFF, 0xB9, 0xFF, 0x56, 0x00, 0xCE, 0xFF,
+       0x0C, 0x00, 0xFD, 0xFF, 0x34, 0x00, 0x3F, 0xFF, 0xDD, 0x01, 0x34,
+       0xFC, 0x23, 0x07, 0x21, 0xF2, 0xCB, 0x27, 0xFE, 0x37, 0x00, 0xF2,
+       0x4D, 0x06, 0x04, 0xFD, 0x49, 0x01, 0x8E, 0xFF, 0x19, 0x00, 0xFF,
+       0xFF, 0x00, 0x00, 0x0E, 0x00, 0xAB, 0xFF, 0x10, 0x01, 0x62, 0xFD,
+       0xC5, 0x05, 0xA5, 0xF2, 0x1F, 0x3B, 0xD6, 0x23, 0xBE, 0xF2, 0x01,
+       0x07, 0x33, 0xFC, 0xE5, 0x01, 0x38, 0xFF, 0x36, 0x00, 0xFD, 0xFF,
+       0x10, 0x00, 0xBD, 0xFF, 0x82, 0x00, 0x5E, 0xFF, 0x5D, 0x00, 0xD4,
+       0x00, 0x0C, 0xFB, 0xF9, 0x46, 0x87, 0x0E, 0x82, 0xF8, 0xAD, 0x04,
+       0x26, 0xFD, 0x8D, 0x01, 0x54, 0xFF, 0x2C, 0x00, 0xFF, 0xFF, 0x00,
+       0x00, 0x29, 0x00, 0x60, 0xFF, 0x6D, 0x01, 0x6E, 0xFD, 0x17, 0x04,
+       0xBC, 0xF9, 0x30, 0x0B, 0xF4, 0x47, 0x4B, 0xFD, 0xB5, 0xFF, 0xFD,
+       0x00, 0x08, 0xFF, 0xAC, 0x00, 0xAC, 0xFF, 0x14, 0x00, 0xFD, 0xFF,
+       0x36, 0x00, 0x36, 0xFF, 0xE6, 0x01, 0x41, 0xFC, 0xC8, 0x06, 0x76,
+       0xF3, 0x22, 0x20, 0xCA, 0x3D, 0x7D, 0xF3, 0x2A, 0x05, 0xC8, 0xFD,
+       0xD4, 0x00, 0xCA, 0xFF, 0x03, 0x00, 0x02, 0x00, 0xFE, 0xFF, 0x21,
+       0x00, 0x77, 0xFF, 0x77, 0x01, 0xBD, 0xFC, 0xAE, 0x06, 0xA3, 0xF1,
+       0xE3, 0x34, 0x64, 0x2B, 0xBC, 0xF1, 0x2A, 0x07, 0x43, 0xFC, 0xCD,
+       0x01, 0x48, 0xFF, 0x31, 0x00, 0xFD, 0xFF, 0x09, 0x00, 0xDD, 0xFF,
+       0x2E, 0x00, 0x0A, 0x00, 0x27, 0xFF, 0xEF, 0x02, 0x20, 0xF7, 0xE7,
+       0x43, 0xD8, 0x15, 0x1E, 0xF6, 0xC0, 0x05, 0xA7, 0xFC, 0xC3, 0x01,
+       0x40, 0xFF, 0x33, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x20, 0x00, 0x7F,
+       0xFF, 0x20, 0x01, 0x16, 0xFE, 0xCA, 0x02, 0x54, 0xFC, 0xB9, 0x04,
+       0xF2, 0x48, 0xA9, 0x02, 0x39, 0xFD, 0x53, 0x02, 0x53, 0xFE, 0x03,
+       0x01, 0x8A, 0xFF, 0x1D, 0x00, 0xFE, 0xFF, 0x34, 0x00, 0x3B, 0xFF,
+       0xD1, 0x01, 0x84, 0xFC, 0x12, 0x06, 0x5C, 0xF5, 0x76, 0x18, 0x89,
+       0x42, 0x02, 0xF6, 0x94, 0x03, 0xC4, 0xFE, 0x42, 0x00, 0x12, 0x00,
+       0xE8, 0xFF, 0x07, 0x00, 0xFD, 0xFF, 0x2E, 0x00, 0x51, 0xFF, 0xBD,
+       0x01, 0x57, 0xFC, 0x1E, 0x07, 0x90, 0xF1, 0xED, 0x2D, 0x8C, 0x32,
+       0x83, 0xF1, 0xE2, 0x06, 0x92, 0xFC, 0x93, 0x01, 0x68, 0xFF, 0x26,
+       0x00, 0xFD, 0xFF, 0x03, 0x00, 0xFA, 0xFF, 0xE2, 0xFF, 0xA4, 0x00,
+       0x19, 0xFE, 0xAA, 0x04, 0x3E, 0xF4, 0x90, 0x3F, 0x78, 0x1D, 0x10,
+       0xF4, 0x93, 0x06, 0x52, 0xFC, 0xE1, 0x01, 0x36, 0xFF, 0x36, 0x00,
+       0xFE, 0xFF, 0x17, 0x00, 0xA0, 0xFF, 0xCA, 0x00, 0xC9, 0xFE, 0x73,
+       0x01, 0xDE, 0xFE, 0x0C, 0xFF, 0x76, 0x48, 0xDE, 0x08, 0xA1, 0xFA,
+       0xA6, 0x03, 0xA6, 0xFD, 0x53, 0x01, 0x6A, 0xFF, 0x26, 0x00, 0x00,
+       0x00, 0xFF, 0xFF, 0x2F, 0x00, 0x4C, 0xFF, 0xA2, 0x01, 0xF6, 0xFC,
+       0x12, 0x05, 0xA7, 0xF7, 0x03, 0x11, 0x10, 0x46, 0x93, 0xF9, 0x98,
+       0x01, 0xEE, 0xFF, 0x9B, 0xFF, 0x64, 0x00, 0xC8, 0xFF, 0x0E, 0x00,
+       0xFD, 0xFF, 0x35, 0x00, 0x3C, 0xFF, 0xE1, 0x01, 0x32, 0xFC, 0x1B,
+       0x07, 0x50, 0xF2, 0x7B, 0x26, 0x11, 0x39, 0x2F, 0xF2, 0x23, 0x06,
+       0x22, 0xFD, 0x37, 0x01, 0x97, 0xFF, 0x15, 0x00, 0xFF, 0xFF, 0x00,
+       0x00, 0x12, 0x00, 0xA1, 0xFF, 0x24, 0x01, 0x41, 0xFD, 0xF6, 0x05,
+       0x67, 0xF2, 0x1A, 0x3A, 0x29, 0x25, 0x84, 0xF2, 0x0F, 0x07, 0x31,
+       0xFC, 0xE3, 0x01, 0x3A, 0xFF, 0x35, 0x00, 0xFD, 0xFF, 0x0F, 0x00,
+       0xC2, 0xFF, 0x73, 0x00, 0x7D, 0xFF, 0x25, 0x00, 0x38, 0x01, 0x4C,
+       0xFA, 0x89, 0x46, 0xC3, 0x0F, 0x14, 0xF8, 0xE0, 0x04, 0x0D, 0xFD,
+       0x98, 0x01, 0x50, 0xFF, 0x2E, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x27,
+       0x00, 0x65, 0xFF, 0x60, 0x01, 0x8A, 0xFD, 0xDF, 0x03, 0x2E, 0xFA,
+       0x04, 0x0A, 0x3A, 0x48, 0x28, 0xFE, 0x4B, 0xFF, 0x38, 0x01, 0xE9,
+       0xFE, 0xBB, 0x00, 0xA6, 0xFF, 0x16, 0x00, 0xFE, 0xFF, 0x36, 0x00,
+       0x36, 0xFF, 0xE4, 0x01, 0x49, 0xFC, 0xAF, 0x06, 0xC1, 0xF3, 0xCD,
+       0x1E, 0xB1, 0x3E, 0xD9, 0xF3, 0xEC, 0x04, 0xF0, 0xFD, 0xBC, 0x00,
+       0xD5, 0xFF, 0xFE, 0xFF, 0x03, 0x00, 0xFD, 0xFF, 0x24, 0x00, 0x6F,
+       0xFF, 0x85, 0x01, 0xA6, 0xFC, 0xCA, 0x06, 0x8F, 0xF1, 0xBB, 0x33,
+       0xAB, 0x2C, 0xA3, 0xF1, 0x26, 0x07, 0x4C, 0xFC, 0xC5, 0x01, 0x4D,
+       0xFF, 0x30, 0x00, 0xFD, 0xFF, 0x08, 0x00, 0xE2, 0xFF, 0x20, 0x00,
+       0x26, 0x00, 0xF5, 0xFE, 0x43, 0x03, 0x8D, 0xF6, 0x3C, 0x43, 0x25,
+       0x17, 0xBB, 0xF5, 0xEA, 0x05, 0x95, 0xFC, 0xCA, 0x01, 0x3D, 0xFF,
+       0x34, 0x00, 0xFE, 0xFF, 0x00, 0x00, 0x1E, 0x00, 0x84, 0xFF, 0x11,
+       0x01, 0x34, 0xFE, 0x8F, 0x02, 0xC7, 0xFC, 0xAE, 0x03, 0xF7, 0x48,
+       0xAE, 0x03, 0xC7, 0xFC, 0x8F, 0x02, 0x34, 0xFE, 0x11, 0x01, 0x84,
+       0xFF, 0x1E, 0x00, 0xFD, 0xFF, 0x36, 0x00, 0x36, 0xFF, 0xE6, 0x01,
+       0x3D, 0xFC, 0xD6, 0x06, 0x4C, 0xF3, 0xED, 0x20, 0x3D, 0x3D, 0x4A,
+       0xF3, 0x4E, 0x05, 0xB1, 0xFD, 0xE1, 0x00, 0xC3, 0xFF, 0x05, 0x00,
+       0x02, 0x00, 0x02, 0x00, 0x05, 0x00, 0xC3, 0xFF, 0xE1, 0x00, 0xB1,
+       0xFD, 0x4E, 0x05, 0x4A, 0xF3, 0x3D, 0x3D, 0xED, 0x20, 0x4C, 0xF3,
+       0xD6, 0x06, 0x3D, 0xFC, 0xE6, 0x01, 0x36, 0xFF, 0x36, 0x00, 0xFD,
+       0xFF, 0x00, 0x00, 0x1E, 0x00, 0x84, 0xFF, 0x11, 0x01, 0x34, 0xFE,
+       0x8F, 0x02, 0xC7, 0xFC, 0xAE, 0x03, 0xF7, 0x48, 0xAE, 0x03, 0xC7,
+       0xFC, 0x8F, 0x02, 0x34, 0xFE, 0x11, 0x01, 0x84, 0xFF, 0x1E, 0x00,
+       0xFD, 0xFF, 0x30, 0x00, 0x4D, 0xFF, 0xC5, 0x01, 0x4C, 0xFC, 0x26,
+       0x07, 0xA3, 0xF1, 0xAB, 0x2C, 0xBB, 0x33, 0x8F, 0xF1, 0xCA, 0x06,
+       0xA6, 0xFC, 0x85, 0x01, 0x6F, 0xFF, 0x24, 0x00, 0xFD, 0xFF, 0x16,
+       0x00, 0xA6, 0xFF, 0xBB, 0x00, 0xE9, 0xFE, 0x38, 0x01, 0x4B, 0xFF,
+       0x28, 0xFE, 0x3A, 0x48, 0x04, 0x0A, 0x2E, 0xFA, 0xDF, 0x03, 0x8A,
+       0xFD, 0x60, 0x01, 0x65, 0xFF, 0x27, 0x00, 0x00, 0x00, 0xFD, 0xFF,
+       0x35, 0x00, 0x3A, 0xFF, 0xE3, 0x01, 0x31, 0xFC, 0x0F, 0x07, 0x84,
+       0xF2, 0x29, 0x25, 0x1A, 0x3A, 0x67, 0xF2, 0xF6, 0x05, 0x41, 0xFD,
+       0x24, 0x01, 0xA1, 0xFF, 0x12, 0x00, 0x00, 0x00, 0x0E, 0x00, 0xC8,
+       0xFF, 0x64, 0x00, 0x9B, 0xFF, 0xEE, 0xFF, 0x98, 0x01, 0x93, 0xF9,
+       0x10, 0x46, 0x03, 0x11, 0xA7, 0xF7, 0x12, 0x05, 0xF6, 0xFC, 0xA2,
+       0x01, 0x4C, 0xFF, 0x2F, 0x00, 0xFF, 0xFF, 0xFE, 0xFF, 0x36, 0x00,
+       0x36, 0xFF, 0xE1, 0x01, 0x52, 0xFC, 0x93, 0x06, 0x10, 0xF4, 0x78,
+       0x1D, 0x90, 0x3F, 0x3E, 0xF4, 0xAA, 0x04, 0x19, 0xFE, 0xA4, 0x00,
+       0xE2, 0xFF, 0xFA, 0xFF, 0x03, 0x00, 0x07, 0x00, 0xE8, 0xFF, 0x12,
+       0x00, 0x42, 0x00, 0xC4, 0xFE, 0x94, 0x03, 0x02, 0xF6, 0x89, 0x42,
+       0x76, 0x18, 0x5C, 0xF5, 0x12, 0x06, 0x84, 0xFC, 0xD1, 0x01, 0x3B,
+       0xFF, 0x34, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x33, 0x00, 0x40, 0xFF,
+       0xC3, 0x01, 0xA7, 0xFC, 0xC0, 0x05, 0x1E, 0xF6, 0xD8, 0x15, 0xE7,
+       0x43, 0x20, 0xF7, 0xEF, 0x02, 0x27, 0xFF, 0x0A, 0x00, 0x2E, 0x00,
+       0xDD, 0xFF, 0x09, 0x00, 0x02, 0x00, 0x03, 0x00, 0xCA, 0xFF, 0xD4,
+       0x00, 0xC8, 0xFD, 0x2A, 0x05, 0x7D, 0xF3, 0xCA, 0x3D, 0x22, 0x20,
+       0x76, 0xF3, 0xC8, 0x06, 0x41, 0xFC, 0xE6, 0x01, 0x36, 0xFF, 0x36,
+       0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0x2C, 0x00, 0x54, 0xFF, 0x8D, 0x01,
+       0x26, 0xFD, 0xAD, 0x04, 0x82, 0xF8, 0x87, 0x0E, 0xF9, 0x46, 0x0C,
+       0xFB, 0xD4, 0x00, 0x5D, 0x00, 0x5E, 0xFF, 0x82, 0x00, 0xBD, 0xFF,
+       0x10, 0x00, 0xFF, 0xFF, 0x19, 0x00, 0x8E, 0xFF, 0x49, 0x01, 0x04,
+       0xFD, 0x4D, 0x06, 0x00, 0xF2, 0xFE, 0x37, 0xCB, 0x27, 0x21, 0xF2,
+       0x23, 0x07, 0x34, 0xFC, 0xDD, 0x01, 0x3F, 0xFF, 0x34, 0x00, 0xFD,
+       0xFF, 0x00, 0x00, 0x24, 0x00, 0x70, 0xFF, 0x46, 0x01, 0xC3, 0xFD,
+       0x6D, 0x03, 0x14, 0xFB, 0xBE, 0x07, 0xA6, 0x48, 0xF8, 0xFF, 0x70,
+       0xFE, 0xAE, 0x01, 0xAA, 0xFE, 0xD9, 0x00, 0x9A, 0xFF, 0x19, 0x00,
+       0xFD, 0xFF, 0x29, 0x00, 0x61, 0xFF, 0x9F, 0x01, 0x80, 0xFC, 0xF7,
+       0x06, 0x7D, 0xF1, 0x5A, 0x31, 0x2C, 0x2F, 0x83, 0xF1, 0x13, 0x07,
+       0x64, 0xFC, 0xB3, 0x01, 0x57, 0xFF, 0x2C, 0x00, 0xFD, 0xFF, 0x1B,
+       0x00, 0x90, 0xFF, 0xF4, 0x00, 0x72, 0xFE, 0x18, 0x02, 0xAA, 0xFD,
+       0xAB, 0x01, 0xDF, 0x48, 0xCA, 0x05, 0xE1, 0xFB, 0x05, 0x03, 0xF7,
+       0xFD, 0x2E, 0x01, 0x79, 0xFF, 0x21, 0x00, 0x00, 0x00, 0xFD, 0xFF,
+       0x32, 0x00, 0x44, 0xFF, 0xD3, 0x01, 0x3C, 0xFC, 0x2A, 0x07, 0xDC,
+       0xF1, 0x1A, 0x2A, 0x06, 0x36, 0xBE, 0xF1, 0x8E, 0x06, 0xD5, 0xFC,
+       0x67, 0x01, 0x7F, 0xFF, 0x1E, 0x00, 0xFE, 0xFF, 0x13, 0x00, 0xB2,
+       0xFF, 0x9D, 0x00, 0x27, 0xFF, 0xC3, 0x00, 0x1F, 0x00, 0x76, 0xFC,
+       0xA3, 0x47, 0x60, 0x0C, 0x4A, 0xF9, 0x4E, 0x04, 0x53, 0xFD, 0x79,
+       0x01, 0x5C, 0xFF, 0x2A, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x36, 0x00,
+       0x37, 0xFF, 0xE6, 0x01, 0x36, 0xFC, 0xEF, 0x06, 0xFC, 0xF2, 0x81,
+       0x22, 0x1C, 0x3C, 0xEC, 0xF2, 0x90, 0x05, 0x85, 0xFD, 0xFB, 0x00,
+       0xB6, 0xFF, 0x0A, 0x00, 0x01, 0x00, 0x0B, 0x00, 0xD3, 0xFF, 0x47,
+       0x00, 0xD7, 0xFF, 0x82, 0xFF, 0x53, 0x02, 0x39, 0xF8, 0xFD, 0x44,
+       0x8D, 0x13, 0xD3, 0xF6, 0x72, 0x05, 0xCA, 0xFC, 0xB5, 0x01, 0x45,
+       0xFF, 0x31, 0x00, 0xFF, 0xFF, 0xFE, 0xFF, 0x35, 0x00, 0x38, 0xFF,
+       0xDA, 0x01, 0x6A, 0xFC, 0x53, 0x06, 0xBA, 0xF4, 0xCE, 0x1A, 0x32,
+       0x41, 0x1F, 0xF5, 0x1D, 0x04, 0x71, 0xFE, 0x71, 0x00, 0xFB, 0xFF,
+       0xF0, 0xFF, 0x05, 0x00, 0x05, 0x00, 0xF2, 0xFF, 0xF8, 0xFF, 0x77,
+       0x00, 0x67, 0xFE, 0x2D, 0x04, 0x04, 0xF5, 0x07, 0x41, 0x1B, 0x1B,
+       0xA6, 0xF4, 0x5A, 0x06, 0x67, 0xFC, 0xDB, 0x01, 0x38, 0xFF, 0x36,
+       0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x31, 0x00, 0x46, 0xFF, 0xB3, 0x01,
+       0xCF, 0xFC, 0x67, 0x05, 0xEA, 0xF6, 0x44, 0x13, 0x1E, 0x45, 0x5E,
+       0xF8, 0x3F, 0x02, 0x8E, 0xFF, 0xD0, 0xFF, 0x4A, 0x00, 0xD2, 0xFF,
+       0x0B, 0x00, 0x01, 0x00, 0x0B, 0x00, 0xB4, 0xFF, 0x00, 0x01, 0x7E,
+       0xFD, 0x9C, 0x05, 0xDC, 0xF2, 0xE4, 0x3B, 0xCD, 0x22, 0xEE, 0xF2,
+       0xF3, 0x06, 0x35, 0xFC, 0xE6, 0x01, 0x37, 0xFF, 0x36, 0x00, 0xFD,
+       0xFF, 0x00, 0x00, 0x2A, 0x00, 0x5D, 0xFF, 0x76, 0x01, 0x59, 0xFD,
+       0x42, 0x04, 0x63, 0xF9, 0x1C, 0x0C, 0xB6, 0x47, 0xA4, 0xFC, 0x07,
+       0x00, 0xD0, 0x00, 0x20, 0xFF, 0xA0, 0x00, 0xB1, 0xFF, 0x13, 0x00,
+       0xFE, 0xFF, 0x1F, 0x00, 0x7D, 0xFF, 0x6B, 0x01, 0xCF, 0xFC, 0x96,
+       0x06, 0xB7, 0xF1, 0xC6, 0x35, 0x64, 0x2A, 0xD4, 0xF1, 0x2B, 0x07,
+       0x3D, 0xFC, 0xD2, 0x01, 0x45, 0xFF, 0x32, 0x00, 0xFD, 0xFF, 0x00,
+       0x00, 0x21, 0x00, 0x7A, 0xFF, 0x2B, 0x01, 0xFE, 0xFD, 0xF8, 0x02,
+       0xFB, 0xFB, 0x8D, 0x05, 0xE5, 0x48, 0xE3, 0x01, 0x91, 0xFD, 0x25,
+       0x02, 0x6B, 0xFE, 0xF7, 0x00, 0x8F, 0xFF, 0x1C, 0x00, 0xFD, 0xFF,
+       0x2D, 0x00, 0x55, 0xFF, 0xB5, 0x01, 0x61, 0xFC, 0x16, 0x07, 0x85,
+       0xF1, 0xE6, 0x2E, 0x9E, 0x31, 0x7D, 0xF1, 0xF3, 0x06, 0x84, 0xFC,
+       0x9D, 0x01, 0x63, 0xFF, 0x28, 0x00, 0xFD, 0xFF, 0x18, 0x00, 0x9C,
+       0xFF, 0xD6, 0x00, 0xB1, 0xFE, 0xA1, 0x01, 0x89, 0xFE, 0xC3, 0xFF,
+       0x9C, 0x48, 0xFD, 0x07, 0xFA, 0xFA, 0x7A, 0x03, 0xBC, 0xFD, 0x49,
+       0x01, 0x6E, 0xFF, 0x24, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x34, 0x00,
+       0x3E, 0xFF, 0xDE, 0x01, 0x33, 0xFC, 0x22, 0x07, 0x2B, 0xF2, 0x80,
+       0x27, 0x3B, 0x38, 0x0A, 0xF2, 0x44, 0x06, 0x0B, 0xFD, 0x45, 0x01,
+       0x90, 0xFF, 0x18, 0x00, 0xFF, 0xFF, 0x10, 0x00, 0xBE, 0xFF, 0x7F,
+       0x00, 0x65, 0xFF, 0x51, 0x00, 0xEB, 0x00, 0xE1, 0xFA, 0xE1, 0x46,
+       0xCD, 0x0E, 0x6A, 0xF8, 0xB8, 0x04, 0x20, 0xFD, 0x90, 0x01, 0x53,
+       0xFF, 0x2D, 0x00, 0xFF, 0xFF, 0xFD, 0xFF, 0x36, 0x00, 0x36, 0xFF,
+       0xE5, 0x01, 0x42, 0xFC, 0xC3, 0x06, 0x87, 0xF3, 0xD7, 0x1F, 0xFE,
+       0x3D, 0x91, 0xF3, 0x1D, 0x05, 0xD1, 0xFD, 0xCE, 0x00, 0xCC, 0xFF,
+       0x02, 0x00, 0x02, 0x00, 0x09, 0x00, 0xDE, 0xFF, 0x2B, 0x00, 0x11,
+       0x00, 0x1B, 0xFF, 0x02, 0x03, 0xFE, 0xF6, 0xC3, 0x43, 0x22, 0x16,
+       0x07, 0xF6, 0xCA, 0x05, 0xA3, 0xFC, 0xC5, 0x01, 0x3F, 0xFF, 0x33,
+       0x00, 0xFF, 0xFF, 0xFE, 0xFF, 0x34, 0x00, 0x3C, 0xFF, 0xCF, 0x01,
+       0x88, 0xFC, 0x09, 0x06, 0x71, 0xF5, 0x2B, 0x18, 0xB2, 0x42, 0x20,
+       0xF6, 0x83, 0x03, 0xCF, 0xFE, 0x3C, 0x00, 0x15, 0x00, 0xE6, 0xFF,
+       0x07, 0x00, 0x03, 0x00, 0xFB, 0xFF, 0xDF, 0xFF, 0xA9, 0x00, 0x10,
+       0xFE, 0xB9, 0x04, 0x27, 0xF4, 0x5E, 0x3F, 0xC3, 0x1D, 0xFE, 0xF3,
+       0x99, 0x06, 0x50, 0xFC, 0xE2, 0x01, 0x36, 0xFF, 0x36, 0x00, 0xFE,
+       0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0x4D, 0xFF, 0xA0, 0x01, 0xFB, 0xFC,
+       0x07, 0x05, 0xBF, 0xF7, 0xBB, 0x10, 0x2B, 0x46, 0xBB, 0xF9, 0x83,
+       0x01, 0xFA, 0xFF, 0x95, 0xFF, 0x68, 0x00, 0xC7, 0xFF, 0x0E, 0x00,
+       0x00, 0x00, 0x13, 0x00, 0x9F, 0xFF, 0x28, 0x01, 0x3A, 0xFD, 0x00,
+       0x06, 0x5A, 0xF2, 0xDF, 0x39, 0x73, 0x25, 0x79, 0xF2, 0x12, 0x07,
+       0x31, 0xFC, 0xE3, 0x01, 0x3B, 0xFF, 0x35, 0x00, 0xFD, 0xFF, 0x00,
+       0x00, 0x27, 0x00, 0x66, 0xFF, 0x5E, 0x01, 0x90, 0xFD, 0xD2, 0x03,
+       0x47, 0xFA, 0xC3, 0x09, 0x48, 0x48, 0x5A, 0xFE, 0x33, 0xFF, 0x45,
+       0x01, 0xE2, 0xFE, 0xBE, 0x00, 0xA5, 0xFF, 0x16, 0x00, 0xFD, 0xFF,
+       0x24, 0x00, 0x6D, 0xFF, 0x88, 0x01, 0xA2, 0xFC, 0xD0, 0x06, 0x8C,
+       0xF1, 0x78, 0x33, 0xF2, 0x2C, 0x9E, 0xF1, 0x24, 0x07, 0x4E, 0xFC,
+       0xC3, 0x01, 0x4E, 0xFF, 0x2F, 0x00, 0xFD, 0xFF, 0x1E, 0x00, 0x86,
+       0xFF, 0x0E, 0x01, 0x3B, 0xFE, 0x82, 0x02, 0xE0, 0xFC, 0x73, 0x03,
+       0xF6, 0x48, 0xE9, 0x03, 0xAD, 0xFC, 0x9C, 0x02, 0x2D, 0xFE, 0x14,
+       0x01, 0x83, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x30, 0x00,
+       0x4C, 0xFF, 0xC7, 0x01, 0x4A, 0xFC, 0x27, 0x07, 0xA8, 0xF1, 0x62,
+       0x2C, 0xFD, 0x33, 0x93, 0xF1, 0xC4, 0x06, 0xAB, 0xFC, 0x82, 0x01,
+       0x71, 0xFF, 0x23, 0x00, 0xFE, 0xFF, 0x15, 0x00, 0xA8, 0xFF, 0xB8,
+       0x00, 0xF0, 0xFE, 0x2B, 0x01, 0x63, 0xFF, 0xF6, 0xFD, 0x2C, 0x48,
+       0x47, 0x0A, 0x14, 0xFA, 0xEB, 0x03, 0x84, 0xFD, 0x63, 0x01, 0x64,
+       0xFF, 0x27, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x36, 0x00, 0x3A, 0xFF,
+       0xE4, 0x01, 0x32, 0xFC, 0x0C, 0x07, 0x91, 0xF2, 0xDD, 0x24, 0x54,
+       0x3A, 0x74, 0xF2, 0xEB, 0x05, 0x49, 0xFD, 0x20, 0x01, 0xA3, 0xFF,
+       0x11, 0x00, 0x00, 0x00, 0x0D, 0x00, 0xC9, 0xFF, 0x61, 0x00, 0xA2,
+       0xFF, 0xE2, 0xFF, 0xAE, 0x01, 0x6B, 0xF9, 0xF2, 0x45, 0x4A, 0x11,
+       0x8F, 0xF7, 0x1D, 0x05, 0xF1, 0xFC, 0xA4, 0x01, 0x4B, 0xFF, 0x2F,
+       0x00, 0xFF, 0xFF, 0xFE, 0xFF, 0x36, 0x00, 0x37, 0xFF, 0xE1, 0x01,
+       0x55, 0xFC, 0x8C, 0x06, 0x22, 0xF4, 0x2C, 0x1D, 0xC0, 0x3F, 0x55,
+       0xF4, 0x9B, 0x04, 0x23, 0xFE, 0x9F, 0x00, 0xE4, 0xFF, 0xF9, 0xFF,
+       0x04, 0x00, 0x07, 0x00, 0xE9, 0xFF, 0x0F, 0x00, 0x48, 0x00, 0xB9,
+       0xFE, 0xA6, 0x03, 0xE4, 0xF5, 0x60, 0x42, 0xC1, 0x18, 0x47, 0xF5,
+       0x1A, 0x06, 0x81, 0xFC, 0xD2, 0x01, 0x3B, 0xFF, 0x35, 0x00, 0xFE,
+       0xFF, 0xFF, 0xFF, 0x33, 0x00, 0x40, 0xFF, 0xC1, 0x01, 0xAB, 0xFC,
+       0xB7, 0x05, 0x34, 0xF6, 0x8E, 0x15, 0x0B, 0x44, 0x42, 0xF7, 0xDC,
+       0x02, 0x32, 0xFF, 0x04, 0x00, 0x31, 0x00, 0xDC, 0xFF, 0x09, 0x00,
+       0x02, 0x00, 0x04, 0x00, 0xC7, 0xFF, 0xD9, 0x00, 0xBF, 0xFD, 0x38,
+       0x05, 0x69, 0xF3, 0x96, 0x3D, 0x6F, 0x20, 0x66, 0xF3, 0xCE, 0x06,
+       0x3F, 0xFC, 0xE6, 0x01, 0x36, 0xFF, 0x36, 0x00, 0xFD, 0xFF, 0xFF,
+       0xFF, 0x2C, 0x00, 0x55, 0xFF, 0x8B, 0x01, 0x2B, 0xFD, 0xA1, 0x04,
+       0x9B, 0xF8, 0x42, 0x0E, 0x0F, 0x47, 0x38, 0xFB, 0xBE, 0x00, 0x6A,
+       0x00, 0x58, 0xFF, 0x85, 0x00, 0xBB, 0xFF, 0x10, 0x00, 0xFF, 0xFF,
+       0x19, 0x00, 0x8C, 0xFF, 0x4D, 0x01, 0xFE, 0xFC, 0x56, 0x06, 0xF7,
+       0xF1, 0xBF, 0x37, 0x15, 0x28, 0x18, 0xF2, 0x25, 0x07, 0x34, 0xFC,
+       0xDC, 0x01, 0x3F, 0xFF, 0x34, 0x00, 0xFD, 0xFF, 0x00, 0x00, 0x24,
+       0x00, 0x71, 0xFF, 0x43, 0x01, 0xC9, 0xFD, 0x60, 0x03, 0x2E, 0xFB,
+       0x7E, 0x07, 0xAF, 0x48, 0x2D, 0x00, 0x58, 0xFE, 0xBB, 0x01, 0xA3,
+       0xFE, 0xDD, 0x00, 0x99, 0xFF, 0x19, 0x00, 0xFD, 0xFF, 0x29, 0x00,
+       0x60, 0xFF, 0xA2, 0x01, 0x7C, 0xFC, 0xFB, 0x06, 0x7C, 0xF1, 0x15,
+       0x31, 0x73, 0x2F, 0x81, 0xF1, 0x10, 0x07, 0x67, 0xFC, 0xB1, 0x01,
+       0x58, 0xFF, 0x2C, 0x00, 0xFD, 0xFF, 0x1B, 0x00, 0x91, 0xFF, 0xF1,
+       0x00, 0x79, 0xFE, 0x0A, 0x02, 0xC3, 0xFD, 0x73, 0x01, 0xDB, 0x48,
+       0x07, 0x06, 0xC7, 0xFB, 0x12, 0x03, 0xF1, 0xFD, 0x31, 0x01, 0x78,
+       0xFF, 0x22, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x32, 0x00, 0x44, 0xFF,
+       0xD5, 0x01, 0x3A, 0xFC, 0x2A, 0x07, 0xE3, 0xF1, 0xD1, 0x29, 0x46,
+       0x36, 0xC5, 0xF1, 0x87, 0x06, 0xDA, 0xFC, 0x64, 0x01, 0x80, 0xFF,
+       0x1E, 0x00, 0xFE, 0xFF, 0x12, 0x00, 0xB3, 0xFF, 0x99, 0x00, 0x2E,
+       0xFF, 0xB6, 0x00, 0x36, 0x00, 0x47, 0xFC, 0x90, 0x47, 0xA4, 0x0C,
+       0x31, 0xF9, 0x5A, 0x04, 0x4E, 0xFD, 0x7C, 0x01, 0x5B, 0xFF, 0x2A,
+       0x00, 0x00, 0x00, 0xFD, 0xFF, 0x36, 0x00, 0x37, 0xFF, 0xE6, 0x01,
+       0x37, 0xFC, 0xEB, 0x06, 0x0B, 0xF3, 0x35, 0x22, 0x52, 0x3C, 0xFD,
+       0xF2, 0x84, 0x05, 0x8D, 0xFD, 0xF6, 0x00, 0xB8, 0xFF, 0x09, 0x00,
+       0x01, 0x00, 0x0B, 0x00, 0xD5, 0xFF, 0x44, 0x00, 0xDD, 0xFF, 0x77,
+       0xFF, 0x67, 0x02, 0x14, 0xF8, 0xDC, 0x44, 0xD5, 0x13, 0xBC, 0xF6,
+       0x7C, 0x05, 0xC5, 0xFC, 0xB7, 0x01, 0x44, 0xFF, 0x31, 0x00, 0xFF,
+       0xFF, 0xFE, 0xFF, 0x35, 0x00, 0x39, 0xFF, 0xD9, 0x01, 0x6D, 0xFC,
+       0x4B, 0x06, 0xCD, 0xF4, 0x83, 0x1A, 0x5F, 0x41, 0x3A, 0xF5, 0x0C,
+       0x04, 0x7B, 0xFE, 0x6C, 0x00, 0xFE, 0xFF, 0xEF, 0xFF, 0x05, 0x00,
+       0x05, 0x00, 0xF3, 0xFF, 0xF5, 0xFF, 0x7D, 0x00, 0x5D, 0xFE, 0x3E,
+       0x04, 0xEA, 0xF4, 0xD9, 0x40, 0x66, 0x1B, 0x93, 0xF4, 0x62, 0x06,
+       0x64, 0xFC, 0xDC, 0x01, 0x38, 0xFF, 0x36, 0x00, 0xFE, 0xFF, 0xFF,
+       0xFF, 0x31, 0x00, 0x46, 0xFF, 0xB1, 0x01, 0xD3, 0xFC, 0x5D, 0x05,
+       0x01, 0xF7, 0xFB, 0x12, 0x3F, 0x45, 0x83, 0xF8, 0x2A, 0x02, 0x9A,
+       0xFF, 0xCA, 0xFF, 0x4E, 0x00, 0xD1, 0xFF, 0x0C, 0x00, 0x00, 0x00,
+       0x0C, 0x00, 0xB1, 0xFF, 0x04, 0x01, 0x76, 0xFD, 0xA8, 0x05, 0xCC,
+       0xF2, 0xAB, 0x3B, 0x18, 0x23, 0xE0, 0xF2, 0xF7, 0x06, 0x35, 0xFC,
+       0xE6, 0x01, 0x38, 0xFF, 0x36, 0x00, 0xFD, 0xFF, 0x00, 0x00, 0x29,
+       0x00, 0x5E, 0xFF, 0x74, 0x01, 0x5F, 0xFD, 0x35, 0x04, 0x7C, 0xF9,
+       0xD8, 0x0B, 0xC9, 0x47, 0xD4, 0xFC, 0xF0, 0xFF, 0xDD, 0x00, 0x19,
+       0xFF, 0xA4, 0x00, 0xAF, 0xFF, 0x13, 0x00, 0xFE, 0xFF, 0x20, 0x00,
+       0x7B, 0xFF, 0x6E, 0x01, 0xCA, 0xFC, 0x9D, 0x06, 0xB1, 0xF1, 0x86,
+       0x35, 0xAE, 0x2A, 0xCD, 0xF1, 0x2B, 0x07, 0x3F, 0xFC, 0xD1, 0x01,
+       0x46, 0xFF, 0x32, 0x00, 0xFD, 0xFF, 0x00, 0x00, 0x21, 0x00, 0x7C,
+       0xFF, 0x27, 0x01, 0x05, 0xFE, 0xEB, 0x02, 0x14, 0xFC, 0x50, 0x05,
+       0xEA, 0x48, 0x1B, 0x02, 0x78, 0xFD, 0x32, 0x02, 0x64, 0xFE, 0xFA,
+       0x00, 0x8D, 0xFF, 0x1C, 0x00, 0xFD, 0xFF, 0x2D, 0x00, 0x54, 0xFF,
+       0xB7, 0x01, 0x5E, 0xFC, 0x19, 0x07, 0x88, 0xF1, 0x9F, 0x2E, 0xE3,
+       0x31, 0x7E, 0xF1, 0xEE, 0x06, 0x88, 0xFC, 0x9A, 0x01, 0x64, 0xFF,
+       0x28, 0x00, 0xFD, 0xFF, 0x18, 0x00, 0x9D, 0xFF, 0xD3, 0x00, 0xB8,
+       0xFE, 0x93, 0x01, 0xA1, 0xFE, 0x8E, 0xFF, 0x92, 0x48, 0x3D, 0x08,
+       0xE1, 0xFA, 0x86, 0x03, 0xB6, 0xFD, 0x4C, 0x01, 0x6D, 0xFF, 0x25,
+       0x00, 0x00, 0x00, 0xFD, 0xFF, 0x34, 0x00, 0x3E, 0xFF, 0xDF, 0x01,
+       0x33, 0xFC, 0x20, 0x07, 0x35, 0xF2, 0x36, 0x27, 0x78, 0x38, 0x14,
+       0xF2, 0x3B, 0x06, 0x11, 0xFD, 0x41, 0x01, 0x92, 0xFF, 0x17, 0x00,
+       0xFF, 0xFF, 0x10, 0x00, 0xBF, 0xFF, 0x7B, 0x00, 0x6C, 0xFF, 0x44,
+       0x00, 0x01, 0x01, 0xB6, 0xFA, 0xC8, 0x46, 0x13, 0x0F, 0x51, 0xF8,
+       0xC4, 0x04, 0x1B, 0xFD, 0x92, 0x01, 0x52, 0xFF, 0x2D, 0x00, 0xFF,
+       0xFF, 0xFD, 0xFF, 0x36, 0x00, 0x36, 0xFF, 0xE5, 0x01, 0x44, 0xFC,
+       0xBD, 0x06, 0x97, 0xF3, 0x8A, 0x1F, 0x31, 0x3E, 0xA5, 0xF3, 0x0F,
+       0x05, 0xDA, 0xFD, 0xC9, 0x00, 0xCF, 0xFF, 0x01, 0x00, 0x02, 0x00,
+       0x09, 0x00, 0xDF, 0xFF, 0x28, 0x00, 0x17, 0x00, 0x10, 0xFF, 0x15,
+       0x03, 0xDD, 0xF6, 0x9E, 0x43, 0x6C, 0x16, 0xF1, 0xF5, 0xD3, 0x05,
+       0x9F, 0xFC, 0xC6, 0x01, 0x3F, 0xFF, 0x33, 0x00, 0xFF, 0xFF, 0xFE,
+       0xFF, 0x34, 0x00, 0x3C, 0xFF, 0xCE, 0x01, 0x8C, 0xFC, 0x00, 0x06,
+       0x86, 0xF5, 0xE0, 0x17, 0xDB, 0x42, 0x3F, 0xF6, 0x71, 0x03, 0xD9,
+       0xFE, 0x36, 0x00, 0x18, 0x00, 0xE5, 0xFF, 0x07, 0x00, 0x03, 0x00,
+       0xFC, 0xFF, 0xDC, 0xFF, 0xAF, 0x00, 0x07, 0xFE, 0xC8, 0x04, 0x10,
+       0xF4, 0x2D, 0x3F, 0x0F, 0x1E, 0xED, 0xF3, 0xA0, 0x06, 0x4E, 0xFC,
+       0xE3, 0x01, 0x36, 0xFF, 0x36, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x2E,
+       0x00, 0x4E, 0xFF, 0x9E, 0x01, 0x00, 0xFD, 0xFC, 0x04, 0xD7, 0xF7,
+       0x75, 0x10, 0x48, 0x46, 0xE4, 0xF9, 0x6E, 0x01, 0x06, 0x00, 0x8E,
+       0xFF, 0x6B, 0x00, 0xC6, 0xFF, 0x0E, 0x00, 0xFF, 0xFF, 0x13, 0x00,
+       0x9D, 0xFF, 0x2D, 0x01, 0x33, 0xFD, 0x0B, 0x06, 0x4D, 0xF2, 0xA5,
+       0x39, 0xBF, 0x25, 0x6D, 0xF2, 0x15, 0x07, 0x31, 0xFC, 0xE2, 0x01,
+       0x3B, 0xFF, 0x35, 0x00, 0xFD, 0xFF, 0x00, 0x00, 0x26, 0x00, 0x68,
+       0xFF, 0x5B, 0x01, 0x96, 0xFD, 0xC6, 0x03, 0x61, 0xFA, 0x81, 0x09,
+       0x57, 0x48, 0x8D, 0xFE, 0x1B, 0xFF, 0x52, 0x01, 0xDB, 0xFE, 0xC2,
+       0x00, 0xA4, 0xFF, 0x16, 0x00, 0xFD, 0xFF, 0x25, 0x00, 0x6C, 0xFF,
+       0x8B, 0x01, 0x9D, 0xFC, 0xD5, 0x06, 0x89, 0xF1, 0x35, 0x33, 0x3A,
+       0x2D, 0x9A, 0xF1, 0x23, 0x07, 0x51, 0xFC, 0xC2, 0x01, 0x4F, 0xFF,
+       0x2F, 0x00, 0xFD, 0xFF, 0x1E, 0x00, 0x87, 0xFF, 0x0B, 0x01, 0x42,
+       0xFE, 0x74, 0x02, 0xF9, 0xFC, 0x39, 0x03, 0xF5, 0x48, 0x24, 0x04,
+       0x94, 0xFC, 0xA9, 0x02, 0x27, 0xFE, 0x18, 0x01, 0x82, 0xFF, 0x1F,
+       0x00, 0x00, 0x00, 0xFD, 0xFF, 0x30, 0x00, 0x4B, 0xFF, 0xC9, 0x01,
+       0x48, 0xFC, 0x28, 0x07, 0xAD, 0xF1, 0x19, 0x2C, 0x3F, 0x34, 0x97,
+       0xF1, 0xBE, 0x06, 0xB0, 0xFC, 0x7F, 0x01, 0x72, 0xFF, 0x23, 0x00,
+       0xFE, 0xFF, 0x15, 0x00, 0xA9, 0xFF, 0xB4, 0x00, 0xF7, 0xFE, 0x1D,
+       0x01, 0x7A, 0xFF, 0xC5, 0xFD, 0x1D, 0x48, 0x89, 0x0A, 0xFB, 0xF9,
+       0xF8, 0x03, 0x7D, 0xFD, 0x66, 0x01, 0x63, 0xFF, 0x28, 0x00, 0x00,
+       0x00, 0xFD, 0xFF, 0x36, 0x00, 0x39, 0xFF, 0xE4, 0x01, 0x32, 0xFC,
+       0x09, 0x07, 0x9D, 0xF2, 0x92, 0x24, 0x8F, 0x3A, 0x82, 0xF2, 0xE1,
+       0x05, 0x50, 0xFD, 0x1B, 0x01, 0xA6, 0xFF, 0x10, 0x00, 0x00, 0x00,
+       0x0D, 0x00, 0xCB, 0xFF, 0x5E, 0x00, 0xA9, 0xFF, 0xD6, 0xFF, 0xC3,
+       0x01, 0x43, 0xF9, 0xD7, 0x45, 0x92, 0x11, 0x77, 0xF7, 0x28, 0x05,
+       0xEC, 0xFC, 0xA7, 0x01, 0x4A, 0xFF, 0x2F, 0x00, 0xFF, 0xFF, 0xFE,
+       0xFF, 0x36, 0x00, 0x37, 0xFF, 0xE0, 0x01, 0x57, 0xFC, 0x85, 0x06,
+       0x34, 0xF4, 0xE0, 0x1C, 0xF0, 0x3F, 0x6D, 0xF4, 0x8C, 0x04, 0x2C,
+       0xFE, 0x99, 0x00, 0xE7, 0xFF, 0xF8, 0xFF, 0x04, 0x00, 0x06, 0x00,
+       0xEA, 0xFF, 0x0C, 0x00, 0x4E, 0x00, 0xAF, 0xFE, 0xB8, 0x03, 0xC7,
+       0xF5, 0x38, 0x42, 0x0C, 0x19, 0x32, 0xF5, 0x23, 0x06, 0x7D, 0xFC,
+       0xD3, 0x01, 0x3A, 0xFF, 0x35, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x32,
+       0x00, 0x41, 0xFF, 0xC0, 0x01, 0xAF, 0xFC, 0xAD, 0x05, 0x4A, 0xF6,
+       0x44, 0x15, 0x2F, 0x44, 0x64, 0xF7, 0xC9, 0x02, 0x3D, 0xFF, 0xFE,
+       0xFF, 0x34, 0x00, 0xDB, 0xFF, 0x09, 0x00, 0x02, 0x00, 0x05, 0x00,
+       0xC5, 0xFF, 0xDE, 0x00, 0xB7, 0xFD, 0x45, 0x05, 0x56, 0xF3, 0x61,
+       0x3D, 0xBA, 0x20, 0x56, 0xF3, 0xD3, 0x06, 0x3E, 0xFC, 0xE6, 0x01,
+       0x36, 0xFF, 0x36, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0x2C, 0x00, 0x56,
+       0xFF, 0x88, 0x01, 0x31, 0xFD, 0x95, 0x04, 0xB4, 0xF8, 0xFC, 0x0D,
+       0x26, 0x47, 0x64, 0xFB, 0xA7, 0x00, 0x77, 0x00, 0x51, 0xFF, 0x89,
+       0x00, 0xBA, 0xFF, 0x11, 0x00, 0xFF, 0xFF, 0x1A, 0x00, 0x8A, 0xFF,
+       0x51, 0x01, 0xF8, 0xFC, 0x5E, 0x06, 0xED, 0xF1, 0x82, 0x37, 0x60,
+       0x28, 0x0E, 0xF2, 0x26, 0x07, 0x35, 0xFC, 0xDB, 0x01, 0x40, 0xFF,
+       0x34, 0x00, 0xFD, 0xFF, 0x00, 0x00, 0x23, 0x00, 0x72, 0xFF, 0x40,
+       0x01, 0xD0, 0xFD, 0x53, 0x03, 0x47, 0xFB, 0x3F, 0x07, 0xB8, 0x48,
+       0x62, 0x00, 0x3F, 0xFE, 0xC8, 0x01, 0x9C, 0xFE, 0xE0, 0x00, 0x98,
+       0xFF, 0x19, 0x00, 0xFD, 0xFF, 0x29, 0x00, 0x5F, 0xFF, 0xA5, 0x01,
+       0x78, 0xFC, 0xFF, 0x06, 0x7D, 0xF1, 0xCF, 0x30, 0xB8, 0x2F, 0x80,
+       0xF1, 0x0D, 0x07, 0x6A, 0xFC, 0xAE, 0x01, 0x59, 0xFF, 0x2B, 0x00,
+       0xFD, 0xFF, 0x1B, 0x00, 0x93, 0xFF, 0xED, 0x00, 0x80, 0xFE, 0xFD,
+       0x01, 0xDC, 0xFD, 0x3C, 0x01, 0xD5, 0x48, 0x45, 0x06, 0xAE, 0xFB,
+       0x1F, 0x03, 0xEA, 0xFD, 0x34, 0x01, 0x77, 0xFF, 0x22, 0x00, 0x00,
+       0x00, 0xFD, 0xFF, 0x33, 0x00, 0x43, 0xFF, 0xD6, 0x01, 0x39, 0xFC,
+       0x2A, 0x07, 0xEB, 0xF1, 0x87, 0x29, 0x85, 0x36, 0xCC, 0xF1, 0x7F,
+       0x06, 0xE0, 0xFC, 0x60, 0x01, 0x82, 0xFF, 0x1D, 0x00, 0xFE, 0xFF,
+       0x12, 0x00, 0xB5, 0xFF, 0x96, 0x00, 0x35, 0xFF, 0xA9, 0x00, 0x4D,
+       0x00, 0x19, 0xFC, 0x7C, 0x47, 0xE8, 0x0C, 0x18, 0xF9, 0x66, 0x04,
+       0x48, 0xFD, 0x7E, 0x01, 0x5A, 0xFF, 0x2B, 0x00, 0x00, 0x00, 0xFD,
+       0xFF, 0x36, 0x00, 0x37, 0xFF, 0xE6, 0x01, 0x38, 0xFC, 0xE6, 0x06,
+       0x19, 0xF3, 0xEA, 0x21, 0x8A, 0x3C, 0x0E, 0xF3, 0x78, 0x05, 0x96,
+       0xFD, 0xF1, 0x00, 0xBB, 0xFF, 0x08, 0x00, 0x01, 0x00, 0x0B, 0x00,
+       0xD6, 0xFF, 0x41, 0x00, 0xE4, 0xFF, 0x6B, 0xFF, 0x7B, 0x02, 0xF0,
+       0xF7, 0xBA, 0x44, 0x1E, 0x14, 0xA5, 0xF6, 0x86, 0x05, 0xC1, 0xFC,
+       0xB9, 0x01, 0x44, 0xFF, 0x32, 0x00, 0xFF, 0xFF, 0xFE, 0xFF, 0x35,
+       0x00, 0x39, 0xFF, 0xD8, 0x01, 0x70, 0xFC, 0x43, 0x06, 0xE1, 0xF4,
+       0x38, 0x1A, 0x8C, 0x41, 0x55, 0xF5, 0xFC, 0x03, 0x85, 0xFE, 0x66,
+       0x00, 0x01, 0x00, 0xEE, 0xFF, 0x06, 0x00, 0x05, 0x00, 0xF4, 0xFF,
+       0xF2, 0xFF, 0x83, 0x00, 0x53, 0xFE, 0x4E, 0x04, 0xD0, 0xF4, 0xAB,
+       0x40, 0xB2, 0x1B, 0x7F, 0xF4, 0x69, 0x06, 0x62, 0xFC, 0xDD, 0x01,
+       0x38, 0xFF, 0x36, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x30, 0x00, 0x47,
+       0xFF, 0xAF, 0x01, 0xD8, 0xFC, 0x52, 0x05, 0x19, 0xF7, 0xB2, 0x12,
+       0x5C, 0x45, 0xA9, 0xF8, 0x16, 0x02, 0xA6, 0xFF, 0xC3, 0xFF, 0x51,
+       0x00, 0xD0, 0xFF, 0x0C, 0x00, 0x00, 0x00, 0x0D, 0x00, 0xAF, 0xFF,
+       0x09, 0x01, 0x6E, 0xFD, 0xB4, 0x05, 0xBC, 0xF2, 0x73, 0x3B, 0x64,
+       0x23, 0xD2, 0xF2, 0xFB, 0x06, 0x34, 0xFC, 0xE6, 0x01, 0x38, 0xFF,
+       0x36, 0x00, 0xFD, 0xFF, 0x00, 0x00, 0x29, 0x00, 0x5F, 0xFF, 0x71,
+       0x01, 0x65, 0xFD, 0x29, 0x04, 0x96, 0xF9, 0x95, 0x0B, 0xDC, 0x47,
+       0x03, 0xFD, 0xD9, 0xFF, 0xEA, 0x00, 0x12, 0xFF, 0xA7, 0x00, 0xAE,
+       0xFF, 0x14, 0x00, 0xFE, 0xFF, 0x20, 0x00, 0x79, 0xFF, 0x72, 0x01,
+       0xC4, 0xFC, 0xA4, 0x06, 0xAB, 0xF1, 0x46, 0x35, 0xF7, 0x2A, 0xC6,
+       0xF1, 0x2A, 0x07, 0x40, 0xFC, 0xCF, 0x01, 0x47, 0xFF, 0x31, 0x00,
+       0xFD, 0xFF, 0x00, 0x00, 0x20, 0x00, 0x7D, 0xFF, 0x24, 0x01, 0x0C,
+       0xFE, 0xDE, 0x02, 0x2E, 0xFC, 0x13, 0x05, 0xEC, 0x48, 0x54, 0x02,
+       0x5E, 0xFD, 0x3F, 0x02, 0x5D, 0xFE, 0xFE, 0x00, 0x8C, 0xFF, 0x1C,
+       0x00, 0xFD, 0xFF, 0x2D, 0x00, 0x53, 0xFF, 0xBA, 0x01, 0x5B, 0xFC,
+       0x1B, 0x07, 0x8B, 0xF1, 0x58, 0x2E, 0x26, 0x32, 0x80, 0xF1, 0xEA,
+       0x06, 0x8C, 0xFC, 0x97, 0x01, 0x66, 0xFF, 0x27, 0x00, 0xFD, 0xFF,
+       0x17, 0x00, 0x9E, 0xFF, 0xCF, 0x00, 0xBF, 0xFE, 0x86, 0x01, 0xBA,
+       0xFE, 0x5A, 0xFF, 0x86, 0x48, 0x7D, 0x08, 0xC7, 0xFA, 0x93, 0x03,
+       0xB0, 0xFD, 0x4F, 0x01, 0x6C, 0xFF, 0x25, 0x00, 0x00, 0x00, 0xFD,
+       0xFF, 0x35, 0x00, 0x3D, 0xFF, 0xDF, 0x01, 0x32, 0xFC, 0x1E, 0x07,
+       0x40, 0xF2, 0xEB, 0x26, 0xB5, 0x38, 0x1F, 0xF2, 0x32, 0x06, 0x18,
+       0xFD, 0x3D, 0x01, 0x94, 0xFF, 0x16, 0x00, 0xFF, 0xFF, 0x0F, 0x00,
+       0xC0, 0xFF, 0x78, 0x00, 0x73, 0xFF, 0x38, 0x00, 0x17, 0x01, 0x8B,
+       0xFA, 0xAF, 0x46, 0x59, 0x0F, 0x39, 0xF8, 0xCF, 0x04, 0x15, 0xFD,
+       0x95, 0x01, 0x51, 0xFF, 0x2D, 0x00, 0xFF, 0xFF, 0xFD, 0xFF, 0x36,
+       0x00, 0x36, 0xFF, 0xE5, 0x01, 0x46, 0xFC, 0xB8, 0x06, 0xA8, 0xF3,
+       0x3F, 0x1F, 0x64, 0x3E, 0xBA, 0xF3, 0x01, 0x05, 0xE2, 0xFD, 0xC4,
+       0x00, 0xD2, 0xFF, 0x00, 0x00, 0x02, 0x00, 0x08, 0x00, 0xE1, 0xFF,
+       0x25, 0x00, 0x1D, 0x00, 0x05, 0xFF, 0x28, 0x03, 0xBD, 0xF6, 0x77,
+       0x43, 0xB6, 0x16, 0xDC, 0xF5, 0xDD, 0x05, 0x9B, 0xFC, 0xC8, 0x01,
+       0x3E, 0xFF, 0x33, 0x00, 0xFF, 0xFF, 0xFE, 0xFF, 0x34, 0x00, 0x3D,
+       0xFF, 0xCC, 0x01, 0x8F, 0xFC, 0xF8, 0x05, 0x9B, 0xF5, 0x96, 0x17,
+       0x02, 0x43, 0x5E, 0xF6, 0x5F, 0x03, 0xE4, 0xFE, 0x30, 0x00, 0x1B,
+       0x00, 0xE4, 0xFF, 0x08, 0x00, 0x03, 0x00, 0xFD, 0xFF, 0xD9, 0xFF,
+       0xB4, 0x00, 0xFD, 0xFD, 0xD7, 0x04, 0xFA, 0xF3, 0xFC, 0x3E, 0x5B,
+       0x1E, 0xDB, 0xF3, 0xA6, 0x06, 0x4C, 0xFC, 0xE3, 0x01, 0x36, 0xFF,
+       0x36, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x2E, 0x00, 0x4E, 0xFF, 0x9C,
+       0x01, 0x05, 0xFD, 0xF1, 0x04, 0xF0, 0xF7, 0x2D, 0x10, 0x61, 0x46,
+       0x0D, 0xFA, 0x58, 0x01, 0x13, 0x00, 0x87, 0xFF, 0x6E, 0x00, 0xC4,
+       0xFF, 0x0E, 0x00, 0xFF, 0xFF, 0x14, 0x00, 0x9B, 0xFF, 0x31, 0x01,
+       0x2C, 0xFD, 0x15, 0x06, 0x41, 0xF2, 0x6A, 0x39, 0x0A, 0x26, 0x61,
+       0xF2, 0x17, 0x07, 0x31, 0xFC, 0xE2, 0x01, 0x3B, 0xFF, 0x35, 0x00,
+       0xFD, 0xFF, 0x00, 0x00, 0x26, 0x00, 0x69, 0xFF, 0x58, 0x01, 0x9D,
+       0xFD, 0xB9, 0x03, 0x7B, 0xFA, 0x40, 0x09, 0x63, 0x48, 0xBF, 0xFE,
+       0x03, 0xFF, 0x5F, 0x01, 0xD4, 0xFE, 0xC5, 0x00, 0xA2, 0xFF, 0x16,
+       0x00, 0xFD, 0xFF, 0x25, 0x00, 0x6A, 0xFF, 0x8E, 0x01, 0x99, 0xFC,
+       0xDB, 0x06, 0x86, 0xF1, 0xF2, 0x32, 0x82, 0x2D, 0x96, 0xF1, 0x21,
+       0x07, 0x53, 0xFC, 0xC0, 0x01, 0x50, 0xFF, 0x2E, 0x00, 0xFD, 0xFF,
+       0x1D, 0x00, 0x88, 0xFF, 0x07, 0x01, 0x49, 0xFE, 0x67, 0x02, 0x13,
+       0xFD, 0xFF, 0x02, 0xF4, 0x48, 0x5F, 0x04, 0x7A, 0xFC, 0xB6, 0x02,
+       0x20, 0xFE, 0x1B, 0x01, 0x81, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xFD,
+       0xFF, 0x30, 0x00, 0x4A, 0xFF, 0xCA, 0x01, 0x46, 0xFC, 0x29, 0x07,
+       0xB3, 0xF1, 0xD1, 0x2B, 0x81, 0x34, 0x9C, 0xF1, 0xB8, 0x06, 0xB5,
+       0xFC, 0x7C, 0x01, 0x74, 0xFF, 0x22, 0x00, 0xFE, 0xFF, 0x15, 0x00,
+       0xAA, 0xFF, 0xB1, 0x00, 0xFE, 0xFE, 0x10, 0x01, 0x92, 0xFF, 0x94,
+       0xFD, 0x0D, 0x48, 0xCB, 0x0A, 0xE2, 0xF9, 0x04, 0x04, 0x77, 0xFD,
+       0x69, 0x01, 0x62, 0xFF, 0x28, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x36,
+       0x00, 0x39, 0xFF, 0xE5, 0x01, 0x32, 0xFC, 0x06, 0x07, 0xAA, 0xF2,
+       0x46, 0x24, 0xC8, 0x3A, 0x90, 0xF2, 0xD6, 0x05, 0x57, 0xFD, 0x17,
+       0x01, 0xA8, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x0D, 0x00, 0xCC, 0xFF,
+       0x5A, 0x00, 0xAF, 0xFF, 0xCA, 0xFF, 0xD8, 0x01, 0x1C, 0xF9, 0xB8,
+       0x45, 0xDA, 0x11, 0x60, 0xF7, 0x33, 0x05, 0xE7, 0xFC, 0xA9, 0x01,
+       0x4A, 0xFF, 0x30, 0x00, 0xFF, 0xFF, 0xFE, 0xFF, 0x36, 0x00, 0x37,
+       0xFF, 0xDF, 0x01, 0x5A, 0xFC, 0x7E, 0x06, 0x47, 0xF4, 0x94, 0x1C,
+       0x1F, 0x40, 0x85, 0xF4, 0x7D, 0x04, 0x36, 0xFE, 0x93, 0x00, 0xEA,
+       0xFF, 0xF7, 0xFF, 0x04, 0x00, 0x06, 0x00, 0xEB, 0xFF, 0x09, 0x00,
+       0x54, 0x00, 0xA4, 0xFE, 0xC9, 0x03, 0xAA, 0xF5, 0x0C, 0x42, 0x56,
+       0x19, 0x1E, 0xF5, 0x2B, 0x06, 0x7A, 0xFC, 0xD4, 0x01, 0x3A, 0xFF,
+       0x35, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x32, 0x00, 0x42, 0xFF, 0xBE,
+       0x01, 0xB4, 0xFC, 0xA4, 0x05, 0x61, 0xF6, 0xFB, 0x14, 0x53, 0x44,
+       0x86, 0xF7, 0xB6, 0x02, 0x49, 0xFF, 0xF7, 0xFF, 0x37, 0x00, 0xD9,
+       0xFF, 0x0A, 0x00, 0x01, 0x00, 0x06, 0x00, 0xC2, 0xFF, 0xE3, 0x00,
+       0xAE, 0xFD, 0x52, 0x05, 0x44, 0xF3, 0x2A, 0x3D, 0x06, 0x21, 0x47,
+       0xF3, 0xD8, 0x06, 0x3C, 0xFC, 0xE6, 0x01, 0x36, 0xFF, 0x36, 0x00,
+       0xFD, 0xFF, 0x00, 0x00, 0x2B, 0x00, 0x57, 0xFF, 0x86, 0x01, 0x36,
+       0xFD, 0x89, 0x04, 0xCD, 0xF8, 0xB7, 0x0D, 0x3D, 0x47, 0x91, 0xFB,
+       0x91, 0x00, 0x83, 0x00, 0x4A, 0xFF, 0x8C, 0x00, 0xB9, 0xFF, 0x11,
+       0x00, 0xFE, 0xFF, 0x1B, 0x00, 0x88, 0xFF, 0x55, 0x01, 0xF2, 0xFC,
+       0x67, 0x06, 0xE4, 0xF1, 0x44, 0x37, 0xAA, 0x28, 0x05, 0xF2, 0x27,
+       0x07, 0x36, 0xFC, 0xDA, 0x01, 0x41, 0xFF, 0x33, 0x00, 0xFD, 0xFF,
+       0x00, 0x00, 0x23, 0x00, 0x73, 0xFF, 0x3D, 0x01, 0xD6, 0xFD, 0x46,
+       0x03, 0x61, 0xFB, 0x00, 0x07, 0xBF, 0x48, 0x98, 0x00, 0x26, 0xFE,
+       0xD5, 0x01, 0x95, 0xFE, 0xE3, 0x00, 0x96, 0xFF, 0x1A, 0x00, 0xFD,
+       0xFF, 0x2A, 0x00, 0x5D, 0xFF, 0xA7, 0x01, 0x75, 0xFC, 0x03, 0x07,
+       0x7D, 0xF1, 0x8A, 0x30, 0xFF, 0x2F, 0x7E, 0xF1, 0x0A, 0x07, 0x6E,
+       0xFC, 0xAC, 0x01, 0x5A, 0xFF, 0x2B, 0x00, 0xFD, 0xFF, 0x1A, 0x00,
+       0x94, 0xFF, 0xEA, 0x00, 0x87, 0xFE, 0xF0, 0x01, 0xF5, 0xFD, 0x05,
+       0x01, 0xCE, 0x48, 0x83, 0x06, 0x94, 0xFB, 0x2C, 0x03, 0xE4, 0xFD,
+       0x37, 0x01, 0x76, 0xFF, 0x22, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x33,
+       0x00, 0x42, 0xFF, 0xD7, 0x01, 0x38, 0xFC, 0x29, 0x07, 0xF3, 0xF1,
+       0x3E, 0x29, 0xC6, 0x36, 0xD4, 0xF1, 0x77, 0x06, 0xE6, 0xFC, 0x5C,
+       0x01, 0x84, 0xFF, 0x1C, 0x00, 0xFE, 0xFF, 0x12, 0x00, 0xB6, 0xFF,
+       0x93, 0x00, 0x3C, 0xFF, 0x9D, 0x00, 0x63, 0x00, 0xEB, 0xFB, 0x69,
+       0x47, 0x2D, 0x0D, 0xFF, 0xF8, 0x72, 0x04, 0x42, 0xFD, 0x81, 0x01,
+       0x59, 0xFF, 0x2B, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x36, 0x00, 0x37,
+       0xFF, 0xE6, 0x01, 0x3A, 0xFC, 0xE2, 0x06, 0x28, 0xF3, 0x9E, 0x21,
+       0xC0, 0x3C, 0x1F, 0xF3, 0x6C, 0x05, 0x9E, 0xFD, 0xED, 0x00, 0xBD,
+       0xFF, 0x07, 0x00, 0x01, 0x00, 0x0A, 0x00, 0xD7, 0xFF, 0x3E, 0x00,
+       0xEA, 0xFF, 0x60, 0xFF, 0x8F, 0x02, 0xCD, 0xF7, 0x99, 0x44, 0x68,
+       0x14, 0x8E, 0xF6, 0x90, 0x05, 0xBC, 0xFC, 0xBA, 0x01, 0x43, 0xFF,
+       0x32, 0x00, 0xFF, 0xFF, 0xFE, 0xFF, 0x35, 0x00, 0x39, 0xFF, 0xD7,
+       0x01, 0x73, 0xFC, 0x3B, 0x06, 0xF5, 0xF4, 0xED, 0x19, 0xB7, 0x41,
+       0x71, 0xF5, 0xEB, 0x03, 0x90, 0xFE, 0x60, 0x00, 0x04, 0x00, 0xED,
+       0xFF, 0x06, 0x00, 0x04, 0x00, 0xF5, 0xFF, 0xEF, 0xFF, 0x88, 0x00,
+       0x49, 0xFE, 0x5D, 0x04, 0xB7, 0xF4, 0x7D, 0x40, 0xFD, 0x1B, 0x6C,
+       0xF4, 0x70, 0x06, 0x5F, 0xFC, 0xDE, 0x01, 0x37, 0xFF, 0x36, 0x00,
+       0xFE, 0xFF, 0xFF, 0xFF, 0x30, 0x00, 0x48, 0xFF, 0xAD, 0x01, 0xDD,
+       0xFC, 0x48, 0x05, 0x30, 0xF7, 0x6B, 0x12, 0x7D, 0x45, 0xCF, 0xF8,
+       0x01, 0x02, 0xB2, 0xFF, 0xBD, 0xFF, 0x54, 0x00, 0xCE, 0xFF, 0x0C,
+       0x00, 0x00, 0x00, 0x0E, 0x00, 0xAC, 0xFF, 0x0E, 0x01, 0x66, 0xFD,
+       0xBF, 0x05, 0xAD, 0xF2, 0x3B, 0x3B, 0xB0, 0x23, 0xC4, 0xF2, 0xFF,
+       0x06, 0x33, 0xFC, 0xE5, 0x01, 0x38, 0xFF, 0x36, 0x00, 0xFD, 0xFF,
+       0x00, 0x00, 0x29, 0x00, 0x60, 0xFF, 0x6E, 0x01, 0x6B, 0xFD, 0x1D,
+       0x04, 0xAF, 0xF9, 0x51, 0x0B, 0xEC, 0x47, 0x33, 0xFD, 0xC1, 0xFF,
+       0xF7, 0x00, 0x0C, 0xFF, 0xAA, 0x00, 0xAD, 0xFF, 0x14, 0x00, 0xFE,
+       0xFF, 0x21, 0x00, 0x77, 0xFF, 0x75, 0x01, 0xBF, 0xFC, 0xAB, 0x06,
+       0xA6, 0xF1, 0x05, 0x35, 0x40, 0x2B, 0xBF, 0xF1, 0x2A, 0x07, 0x42,
+       0xFC, 0xCE, 0x01, 0x48, 0xFF, 0x31, 0x00, 0xFD, 0xFF, 0x00, 0x00,
+       0x20, 0x00, 0x7E, 0xFF, 0x21, 0x01, 0x12, 0xFE, 0xD1, 0x02, 0x47,
+       0xFC, 0xD7, 0x04, 0xF0, 0x48, 0x8D, 0x02, 0x45, 0xFD, 0x4D, 0x02,
+       0x56, 0xFE, 0x01, 0x01, 0x8B, 0xFF, 0x1D, 0x00, 0xFD, 0xFF, 0x2E,
+       0x00, 0x52, 0xFF, 0xBC, 0x01, 0x58, 0xFC, 0x1D, 0x07, 0x8E, 0xF1,
+       0x11, 0x2E, 0x6B, 0x32, 0x81, 0xF1, 0xE5, 0x06, 0x90, 0xFC, 0x94,
+       0x01, 0x67, 0xFF, 0x26, 0x00, 0xFD, 0xFF, 0x17, 0x00, 0xA0, 0xFF,
+       0xCC, 0x00, 0xC6, 0xFE, 0x79, 0x01, 0xD2, 0xFE, 0x26, 0xFF, 0x7C,
+       0x48, 0xBE, 0x08, 0xAE, 0xFA, 0xA0, 0x03, 0xA9, 0xFD, 0x52, 0x01,
+       0x6B, 0xFF, 0x25, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x35, 0x00, 0x3C,
+       0xFF, 0xE0, 0x01, 0x32, 0xFC, 0x1C, 0x07, 0x4B, 0xF2, 0xA0, 0x26,
+       0xF2, 0x38, 0x2A, 0xF2, 0x28, 0x06, 0x1F, 0xFD, 0x39, 0x01, 0x96,
+       0xFF, 0x16, 0x00, 0xFF, 0xFF, 0x0F, 0x00, 0xC2, 0xFF, 0x75, 0x00,
+       0x7A, 0xFF, 0x2B, 0x00, 0x2D, 0x01, 0x61, 0xFA, 0x97, 0x46, 0xA0,
+       0x0F, 0x20, 0xF8, 0xDA, 0x04, 0x10, 0xFD, 0x97, 0x01, 0x50, 0xFF,
+       0x2E, 0x00, 0xFF, 0xFF, 0xFE, 0xFF, 0x36, 0x00, 0x36, 0xFF, 0xE4,
+       0x01, 0x48, 0xFC, 0xB2, 0x06, 0xB9, 0xF3, 0xF3, 0x1E, 0x98, 0x3E,
+       0xCF, 0xF3, 0xF3, 0x04, 0xEB, 0xFD, 0xBF, 0x00, 0xD4, 0xFF, 0xFF,
+       0xFF, 0x03, 0x00, 0x08, 0x00, 0xE2, 0xFF, 0x21, 0x00, 0x23, 0x00,
+       0xFA, 0xFE, 0x3A, 0x03, 0x9D, 0xF6, 0x50, 0x43, 0x00, 0x17, 0xC6,
+       0xF5, 0xE6, 0x05, 0x97, 0xFC, 0xC9, 0x01, 0x3E, 0xFF, 0x34, 0x00,
+       0xFE, 0xFF, 0xFE, 0xFF, 0x34, 0x00, 0x3D, 0xFF, 0xCB, 0x01, 0x93,
+       0xFC, 0xEF, 0x05, 0xB0, 0xF5, 0x4B, 0x17, 0x2A, 0x43, 0x7D, 0xF6,
+       0x4D, 0x03, 0xEF, 0xFE, 0x2A, 0x00, 0x1E, 0x00, 0xE3, 0xFF, 0x08,
+       0x00, 0x03, 0x00, 0xFE, 0xFF, 0xD7, 0xFF, 0xBA, 0x00, 0xF4, 0xFD,
+       0xE5, 0x04, 0xE4, 0xF3, 0xCA, 0x3E, 0xA7, 0x1E, 0xCA, 0xF3, 0xAC,
+       0x06, 0x4A, 0xFC, 0xE4, 0x01, 0x36, 0xFF, 0x36, 0x00, 0xFE, 0xFF,
+       0xFF, 0xFF, 0x2E, 0x00, 0x4F, 0xFF, 0x99, 0x01, 0x0B, 0xFD, 0xE6,
+       0x04, 0x08, 0xF8, 0xE7, 0x0F, 0x7C, 0x46, 0x37, 0xFA, 0x42, 0x01,
+       0x1F, 0x00, 0x81, 0xFF, 0x71, 0x00, 0xC3, 0xFF, 0x0F, 0x00, 0xFF,
+       0xFF, 0x15, 0x00, 0x98, 0xFF, 0x35, 0x01, 0x25, 0xFD, 0x1E, 0x06,
+       0x35, 0xF2, 0x2E, 0x39, 0x55, 0x26, 0x56, 0xF2, 0x1A, 0x07, 0x31,
+       0xFC, 0xE1, 0x01, 0x3C, 0xFF, 0x35, 0x00, 0xFD, 0xFF, 0x00, 0x00,
+       0x26, 0x00, 0x6A, 0xFF, 0x55, 0x01, 0xA3, 0xFD, 0xAD, 0x03, 0x94,
+       0xFA, 0xFF, 0x08, 0x70, 0x48, 0xF3, 0xFE, 0xEA, 0xFE, 0x6C, 0x01,
+       0xCD, 0xFE, 0xC9, 0x00, 0xA1, 0xFF, 0x17, 0x00, 0xFD, 0xFF, 0x26,
+       0x00, 0x69, 0xFF, 0x91, 0x01, 0x94, 0xFC, 0xE0, 0x06, 0x84, 0xF1,
+       0xAF, 0x32, 0xCA, 0x2D, 0x92, 0xF1, 0x1F, 0x07, 0x56, 0xFC, 0xBE,
+       0x01, 0x51, 0xFF, 0x2E, 0x00, 0xFD, 0xFF, 0x1D, 0x00, 0x8A, 0xFF,
+       0x04, 0x01, 0x50, 0xFE, 0x5A, 0x02, 0x2C, 0xFD, 0xC6, 0x02, 0xF2,
+       0x48, 0x9B, 0x04, 0x61, 0xFC, 0xC3, 0x02, 0x19, 0xFE, 0x1E, 0x01,
+       0x7F, 0xFF, 0x20, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x31, 0x00, 0x49,
+       0xFF, 0xCC, 0x01, 0x44, 0xFC, 0x29, 0x07, 0xB9, 0xF1, 0x89, 0x2B,
+       0xC3, 0x34, 0xA0, 0xF1, 0xB1, 0x06, 0xBA, 0xFC, 0x79, 0x01, 0x76,
+       0xFF, 0x21, 0x00, 0xFE, 0xFF, 0x14, 0x00, 0xAC, 0xFF, 0xAE, 0x00,
+       0x05, 0xFF, 0x03, 0x01, 0xAA, 0xFF, 0x63, 0xFD, 0xFD, 0x47, 0x0E,
+       0x0B, 0xC8, 0xF9, 0x11, 0x04, 0x71, 0xFD, 0x6C, 0x01, 0x61, 0xFF,
+       0x28, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x36, 0x00, 0x39, 0xFF, 0xE5,
+       0x01, 0x33, 0xFC, 0x03, 0x07, 0xB7, 0xF2, 0xFC, 0x23, 0x03, 0x3B,
+       0x9E, 0xF2, 0xCB, 0x05, 0x5F, 0xFD, 0x12, 0x01, 0xAA, 0xFF, 0x0E,
+       0x00, 0x00, 0x00, 0x0C, 0x00, 0xCD, 0xFF, 0x57, 0x00, 0xB6, 0xFF,
+       0xBE, 0xFF, 0xED, 0x01, 0xF5, 0xF8, 0x9B, 0x45, 0x22, 0x12, 0x48,
+       0xF7, 0x3D, 0x05, 0xE2, 0xFC, 0xAB, 0x01, 0x49, 0xFF, 0x30, 0x00,
+       0xFF, 0xFF, 0xFE, 0xFF, 0x36, 0x00, 0x37, 0xFF, 0xDF, 0x01, 0x5C,
+       0xFC, 0x78, 0x06, 0x5A, 0xF4, 0x49, 0x1C, 0x4E, 0x40, 0x9E, 0xF4,
+       0x6D, 0x04, 0x3F, 0xFE, 0x8E, 0x00, 0xED, 0xFF, 0xF6, 0xFF, 0x04,
+       0x00, 0x06, 0x00, 0xEC, 0xFF, 0x06, 0x00, 0x5A, 0x00, 0x9A, 0xFE,
+       0xDA, 0x03, 0x8D, 0xF5, 0xE1, 0x41, 0xA1, 0x19, 0x09, 0xF5, 0x33,
+       0x06, 0x77, 0xFC, 0xD6, 0x01, 0x3A, 0xFF, 0x35, 0x00, 0xFE, 0xFF,
+       0xFF, 0xFF, 0x32, 0x00, 0x42, 0xFF, 0xBC, 0x01, 0xB8, 0xFC, 0x9A,
+       0x05, 0x77, 0xF6, 0xB1, 0x14, 0x77, 0x44, 0xA9, 0xF7, 0xA2, 0x02,
+       0x54, 0xFF, 0xF1, 0xFF, 0x3A, 0x00, 0xD8, 0xFF, 0x0A, 0x00, 0x01,
+       0x00, 0x07, 0x00, 0xC0, 0xFF, 0xE8, 0x00, 0xA6, 0xFD, 0x5F, 0x05,
+       0x31, 0xF3, 0xF6, 0x3C, 0x52, 0x21, 0x37, 0xF3, 0xDD, 0x06, 0x3B,
+       0xFC, 0xE6, 0x01, 0x36, 0xFF, 0x36, 0x00, 0xFD, 0xFF, 0x00, 0x00,
+       0x2B, 0x00, 0x58, 0xFF, 0x83, 0x01, 0x3C, 0xFD, 0x7E, 0x04, 0xE6,
+       0xF8, 0x72, 0x0D, 0x52, 0x47, 0xBE, 0xFB, 0x7A, 0x00, 0x90, 0x00,
+       0x43, 0xFF, 0x8F, 0x00, 0xB7, 0xFF, 0x11, 0x00, 0xFE, 0xFF, 0x1C,
+       0x00, 0x86, 0xFF, 0x59, 0x01, 0xEC, 0xFC, 0x6F, 0x06, 0xDC, 0xF1,
+       0x04, 0x37, 0xF3, 0x28, 0xFC, 0xF1, 0x28, 0x07, 0x37, 0xFC, 0xD8,
+       0x01, 0x41, 0xFF, 0x33, 0x00, 0xFD, 0xFF, 0x00, 0x00, 0x23, 0x00,
+       0x74, 0xFF, 0x3A, 0x01, 0xDD, 0xFD, 0x39, 0x03, 0x7B, 0xFB, 0xC1,
+       0x06, 0xC7, 0x48, 0xCF, 0x00, 0x0D, 0xFE, 0xE3, 0x01, 0x8E, 0xFE,
+       0xE7, 0x00, 0x95, 0xFF, 0x1A, 0x00, 0xFD, 0xFF, 0x2A, 0x00, 0x5C,
+       0xFF, 0xAA, 0x01, 0x71, 0xFC, 0x07, 0x07, 0x7E, 0xF1, 0x44, 0x30,
+       0x44, 0x30, 0x7E, 0xF1, 0x07, 0x07, 0x71, 0xFC, 0xAA, 0x01, 0x5C,
+       0xFF, 0x2A, 0x00, 0xFD, 0xFF, 0x1A, 0x00, 0x95, 0xFF, 0xE7, 0x00,
+       0x8E, 0xFE, 0xE3, 0x01, 0x0D, 0xFE, 0xCF, 0x00, 0xC7, 0x48, 0xC1,
+       0x06, 0x7B, 0xFB, 0x39, 0x03, 0xDD, 0xFD, 0x3A, 0x01, 0x74, 0xFF,
+       0x23, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x33, 0x00, 0x41, 0xFF, 0xD8,
+       0x01, 0x37, 0xFC, 0x28, 0x07, 0xFC, 0xF1, 0xF3, 0x28, 0x04, 0x37,
+       0xDC, 0xF1, 0x6F, 0x06, 0xEC, 0xFC, 0x59, 0x01, 0x86, 0xFF, 0x1C,
+       0x00, 0xFE, 0xFF, 0x11, 0x00, 0xB7, 0xFF, 0x8F, 0x00, 0x43, 0xFF,
+       0x90, 0x00, 0x7A, 0x00, 0xBE, 0xFB, 0x52, 0x47, 0x72, 0x0D, 0xE6,
+       0xF8, 0x7E, 0x04, 0x3C, 0xFD, 0x83, 0x01, 0x58, 0xFF, 0x2B, 0x00,
+       0x00, 0x00, 0xFD, 0xFF, 0x36, 0x00, 0x36, 0xFF, 0xE6, 0x01, 0x3B,
+       0xFC, 0xDD, 0x06, 0x37, 0xF3, 0x52, 0x21, 0xF6, 0x3C, 0x31, 0xF3,
+       0x5F, 0x05, 0xA6, 0xFD, 0xE8, 0x00, 0xC0, 0xFF, 0x07, 0x00, 0x01,
+       0x00, 0x0A, 0x00, 0xD8, 0xFF, 0x3A, 0x00, 0xF1, 0xFF, 0x54, 0xFF,
+       0xA2, 0x02, 0xA9, 0xF7, 0x77, 0x44, 0xB1, 0x14, 0x77, 0xF6, 0x9A,
+       0x05, 0xB8, 0xFC, 0xBC, 0x01, 0x42, 0xFF, 0x32, 0x00, 0xFF, 0xFF,
+       0xFE, 0xFF, 0x35, 0x00, 0x3A, 0xFF, 0xD6, 0x01, 0x77, 0xFC, 0x33,
+       0x06, 0x09, 0xF5, 0xA1, 0x19, 0xE1, 0x41, 0x8D, 0xF5, 0xDA, 0x03,
+       0x9A, 0xFE, 0x5A, 0x00, 0x06, 0x00, 0xEC, 0xFF, 0x06, 0x00, 0x04,
+       0x00, 0xF6, 0xFF, 0xED, 0xFF, 0x8E, 0x00, 0x3F, 0xFE, 0x6D, 0x04,
+       0x9E, 0xF4, 0x4E, 0x40, 0x49, 0x1C, 0x5A, 0xF4, 0x78, 0x06, 0x5C,
+       0xFC, 0xDF, 0x01, 0x37, 0xFF, 0x36, 0x00, 0xFE, 0xFF, 0xFF, 0xFF,
+       0x30, 0x00, 0x49, 0xFF, 0xAB, 0x01, 0xE2, 0xFC, 0x3D, 0x05, 0x48,
+       0xF7, 0x22, 0x12, 0x9B, 0x45, 0xF5, 0xF8, 0xED, 0x01, 0xBE, 0xFF,
+       0xB6, 0xFF, 0x57, 0x00, 0xCD, 0xFF, 0x0C, 0x00, 0x00, 0x00, 0x0E,
+       0x00, 0xAA, 0xFF, 0x12, 0x01, 0x5F, 0xFD, 0xCB, 0x05, 0x9E, 0xF2,
+       0x03, 0x3B, 0xFC, 0x23, 0xB7, 0xF2, 0x03, 0x07, 0x33, 0xFC, 0xE5,
+       0x01, 0x39, 0xFF, 0x36, 0x00, 0xFD, 0xFF, 0x00, 0x00, 0x28, 0x00,
+       0x61, 0xFF, 0x6C, 0x01, 0x71, 0xFD, 0x11, 0x04, 0xC8, 0xF9, 0x0E,
+       0x0B, 0xFD, 0x47, 0x63, 0xFD, 0xAA, 0xFF, 0x03, 0x01, 0x05, 0xFF,
+       0xAE, 0x00, 0xAC, 0xFF, 0x14, 0x00, 0xFE, 0xFF, 0x21, 0x00, 0x76,
+       0xFF, 0x79, 0x01, 0xBA, 0xFC, 0xB1, 0x06, 0xA0, 0xF1, 0xC3, 0x34,
+       0x89, 0x2B, 0xB9, 0xF1, 0x29, 0x07, 0x44, 0xFC, 0xCC, 0x01, 0x49,
+       0xFF, 0x31, 0x00, 0xFD, 0xFF, 0x00, 0x00, 0x20, 0x00, 0x7F, 0xFF,
+       0x1E, 0x01, 0x19, 0xFE, 0xC3, 0x02, 0x61, 0xFC, 0x9B, 0x04, 0xF2,
+       0x48, 0xC6, 0x02, 0x2C, 0xFD, 0x5A, 0x02, 0x50, 0xFE, 0x04, 0x01,
+       0x8A, 0xFF, 0x1D, 0x00, 0xFD, 0xFF, 0x2E, 0x00, 0x51, 0xFF, 0xBE,
+       0x01, 0x56, 0xFC, 0x1F, 0x07, 0x92, 0xF1, 0xCA, 0x2D, 0xAF, 0x32,
+       0x84, 0xF1, 0xE0, 0x06, 0x94, 0xFC, 0x91, 0x01, 0x69, 0xFF, 0x26,
+       0x00, 0xFD, 0xFF, 0x17, 0x00, 0xA1, 0xFF, 0xC9, 0x00, 0xCD, 0xFE,
+       0x6C, 0x01, 0xEA, 0xFE, 0xF3, 0xFE, 0x70, 0x48, 0xFF, 0x08, 0x94,
+       0xFA, 0xAD, 0x03, 0xA3, 0xFD, 0x55, 0x01, 0x6A, 0xFF, 0x26, 0x00,
+       0x00, 0x00, 0xFD, 0xFF, 0x35, 0x00, 0x3C, 0xFF, 0xE1, 0x01, 0x31,
+       0xFC, 0x1A, 0x07, 0x56, 0xF2, 0x55, 0x26, 0x2E, 0x39, 0x35, 0xF2,
+       0x1E, 0x06, 0x25, 0xFD, 0x35, 0x01, 0x98, 0xFF, 0x15, 0x00, 0xFF,
+       0xFF, 0x0F, 0x00, 0xC3, 0xFF, 0x71, 0x00, 0x81, 0xFF, 0x1F, 0x00,
+       0x42, 0x01, 0x37, 0xFA, 0x7C, 0x46, 0xE7, 0x0F, 0x08, 0xF8, 0xE6,
+       0x04, 0x0B, 0xFD, 0x99, 0x01, 0x4F, 0xFF, 0x2E, 0x00, 0xFF, 0xFF,
+       0xFE, 0xFF, 0x36, 0x00, 0x36, 0xFF, 0xE4, 0x01, 0x4A, 0xFC, 0xAC,
+       0x06, 0xCA, 0xF3, 0xA7, 0x1E, 0xCA, 0x3E, 0xE4, 0xF3, 0xE5, 0x04,
+       0xF4, 0xFD, 0xBA, 0x00, 0xD7, 0xFF, 0xFE, 0xFF, 0x03, 0x00, 0x08,
+       0x00, 0xE3, 0xFF, 0x1E, 0x00, 0x2A, 0x00, 0xEF, 0xFE, 0x4D, 0x03,
+       0x7D, 0xF6, 0x2A, 0x43, 0x4B, 0x17, 0xB0, 0xF5, 0xEF, 0x05, 0x93,
+       0xFC, 0xCB, 0x01, 0x3D, 0xFF, 0x34, 0x00, 0xFE, 0xFF, 0xFE, 0xFF,
+       0x34, 0x00, 0x3E, 0xFF, 0xC9, 0x01, 0x97, 0xFC, 0xE6, 0x05, 0xC6,
+       0xF5, 0x00, 0x17, 0x50, 0x43, 0x9D, 0xF6, 0x3A, 0x03, 0xFA, 0xFE,
+       0x23, 0x00, 0x21, 0x00, 0xE2, 0xFF, 0x08, 0x00, 0x03, 0x00, 0xFF,
+       0xFF, 0xD4, 0xFF, 0xBF, 0x00, 0xEB, 0xFD, 0xF3, 0x04, 0xCF, 0xF3,
+       0x98, 0x3E, 0xF3, 0x1E, 0xB9, 0xF3, 0xB2, 0x06, 0x48, 0xFC, 0xE4,
+       0x01, 0x36, 0xFF, 0x36, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x2E, 0x00,
+       0x50, 0xFF, 0x97, 0x01, 0x10, 0xFD, 0xDA, 0x04, 0x20, 0xF8, 0xA0,
+       0x0F, 0x97, 0x46, 0x61, 0xFA, 0x2D, 0x01, 0x2B, 0x00, 0x7A, 0xFF,
+       0x75, 0x00, 0xC2, 0xFF, 0x0F, 0x00, 0xFF, 0xFF, 0x16, 0x00, 0x96,
+       0xFF, 0x39, 0x01, 0x1F, 0xFD, 0x28, 0x06, 0x2A, 0xF2, 0xF2, 0x38,
+       0xA0, 0x26, 0x4B, 0xF2, 0x1C, 0x07, 0x32, 0xFC, 0xE0, 0x01, 0x3C,
+       0xFF, 0x35, 0x00, 0xFD, 0xFF, 0x00, 0x00, 0x25, 0x00, 0x6B, 0xFF,
+       0x52, 0x01, 0xA9, 0xFD, 0xA0, 0x03, 0xAE, 0xFA, 0xBE, 0x08, 0x7C,
+       0x48, 0x26, 0xFF, 0xD2, 0xFE, 0x79, 0x01, 0xC6, 0xFE, 0xCC, 0x00,
+       0xA0, 0xFF, 0x17, 0x00, 0xFD, 0xFF, 0x26, 0x00, 0x67, 0xFF, 0x94,
+       0x01, 0x90, 0xFC, 0xE5, 0x06, 0x81, 0xF1, 0x6B, 0x32, 0x11, 0x2E,
+       0x8E, 0xF1, 0x1D, 0x07, 0x58, 0xFC, 0xBC, 0x01, 0x52, 0xFF, 0x2E,
+       0x00, 0xFD, 0xFF, 0x1D, 0x00, 0x8B, 0xFF, 0x01, 0x01, 0x56, 0xFE,
+       0x4D, 0x02, 0x45, 0xFD, 0x8D, 0x02, 0xF0, 0x48, 0xD7, 0x04, 0x47,
+       0xFC, 0xD1, 0x02, 0x12, 0xFE, 0x21, 0x01, 0x7E, 0xFF, 0x20, 0x00,
+       0x00, 0x00, 0xFD, 0xFF, 0x31, 0x00, 0x48, 0xFF, 0xCE, 0x01, 0x42,
+       0xFC, 0x2A, 0x07, 0xBF, 0xF1, 0x40, 0x2B, 0x05, 0x35, 0xA6, 0xF1,
+       0xAB, 0x06, 0xBF, 0xFC, 0x75, 0x01, 0x77, 0xFF, 0x21, 0x00, 0xFE,
+       0xFF, 0x14, 0x00, 0xAD, 0xFF, 0xAA, 0x00, 0x0C, 0xFF, 0xF7, 0x00,
+       0xC1, 0xFF, 0x33, 0xFD, 0xEC, 0x47, 0x51, 0x0B, 0xAF, 0xF9, 0x1D,
+       0x04, 0x6B, 0xFD, 0x6E, 0x01, 0x60, 0xFF, 0x29, 0x00, 0x00, 0x00,
+       0xFD, 0xFF, 0x36, 0x00, 0x38, 0xFF, 0xE5, 0x01, 0x33, 0xFC, 0xFF,
+       0x06, 0xC4, 0xF2, 0xB0, 0x23, 0x3B, 0x3B, 0xAD, 0xF2, 0xBF, 0x05,
+       0x66, 0xFD, 0x0E, 0x01, 0xAC, 0xFF, 0x0E, 0x00, 0x00, 0x00, 0x0C,
+       0x00, 0xCE, 0xFF, 0x54, 0x00, 0xBD, 0xFF, 0xB2, 0xFF, 0x01, 0x02,
+       0xCF, 0xF8, 0x7D, 0x45, 0x6B, 0x12, 0x30, 0xF7, 0x48, 0x05, 0xDD,
+       0xFC, 0xAD, 0x01, 0x48, 0xFF, 0x30, 0x00, 0xFF, 0xFF, 0xFE, 0xFF,
+       0x36, 0x00, 0x37, 0xFF, 0xDE, 0x01, 0x5F, 0xFC, 0x70, 0x06, 0x6C,
+       0xF4, 0xFD, 0x1B, 0x7D, 0x40, 0xB7, 0xF4, 0x5D, 0x04, 0x49, 0xFE,
+       0x88, 0x00, 0xEF, 0xFF, 0xF5, 0xFF, 0x04, 0x00, 0x06, 0x00, 0xED,
+       0xFF, 0x04, 0x00, 0x60, 0x00, 0x90, 0xFE, 0xEB, 0x03, 0x71, 0xF5,
+       0xB7, 0x41, 0xED, 0x19, 0xF5, 0xF4, 0x3B, 0x06, 0x73, 0xFC, 0xD7,
+       0x01, 0x39, 0xFF, 0x35, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x32, 0x00,
+       0x43, 0xFF, 0xBA, 0x01, 0xBC, 0xFC, 0x90, 0x05, 0x8E, 0xF6, 0x68,
+       0x14, 0x99, 0x44, 0xCD, 0xF7, 0x8F, 0x02, 0x60, 0xFF, 0xEA, 0xFF,
+       0x3E, 0x00, 0xD7, 0xFF, 0x0A, 0x00, 0x01, 0x00, 0x07, 0x00, 0xBD,
+       0xFF, 0xED, 0x00, 0x9E, 0xFD, 0x6C, 0x05, 0x1F, 0xF3, 0xC0, 0x3C,
+       0x9E, 0x21, 0x28, 0xF3, 0xE2, 0x06, 0x3A, 0xFC, 0xE6, 0x01, 0x37,
+       0xFF, 0x36, 0x00, 0xFD, 0xFF, 0x00, 0x00, 0x2B, 0x00, 0x59, 0xFF,
+       0x81, 0x01, 0x42, 0xFD, 0x72, 0x04, 0xFF, 0xF8, 0x2D, 0x0D, 0x69,
+       0x47, 0xEB, 0xFB, 0x63, 0x00, 0x9D, 0x00, 0x3C, 0xFF, 0x93, 0x00,
+       0xB6, 0xFF, 0x12, 0x00, 0xFE, 0xFF, 0x1C, 0x00, 0x84, 0xFF, 0x5C,
+       0x01, 0xE6, 0xFC, 0x77, 0x06, 0xD4, 0xF1, 0xC6, 0x36, 0x3E, 0x29,
+       0xF3, 0xF1, 0x29, 0x07, 0x38, 0xFC, 0xD7, 0x01, 0x42, 0xFF, 0x33,
+       0x00, 0xFD, 0xFF, 0x00, 0x00, 0x22, 0x00, 0x76, 0xFF, 0x37, 0x01,
+       0xE4, 0xFD, 0x2C, 0x03, 0x94, 0xFB, 0x83, 0x06, 0xCE, 0x48, 0x05,
+       0x01, 0xF5, 0xFD, 0xF0, 0x01, 0x87, 0xFE, 0xEA, 0x00, 0x94, 0xFF,
+       0x1A, 0x00, 0xFD, 0xFF, 0x2B, 0x00, 0x5A, 0xFF, 0xAC, 0x01, 0x6E,
+       0xFC, 0x0A, 0x07, 0x7E, 0xF1, 0xFF, 0x2F, 0x8A, 0x30, 0x7D, 0xF1,
+       0x03, 0x07, 0x75, 0xFC, 0xA7, 0x01, 0x5D, 0xFF, 0x2A, 0x00, 0xFD,
+       0xFF, 0x1A, 0x00, 0x96, 0xFF, 0xE3, 0x00, 0x95, 0xFE, 0xD5, 0x01,
+       0x26, 0xFE, 0x98, 0x00, 0xBF, 0x48, 0x00, 0x07, 0x61, 0xFB, 0x46,
+       0x03, 0xD6, 0xFD, 0x3D, 0x01, 0x73, 0xFF, 0x23, 0x00, 0x00, 0x00,
+       0xFD, 0xFF, 0x33, 0x00, 0x41, 0xFF, 0xDA, 0x01, 0x36, 0xFC, 0x27,
+       0x07, 0x05, 0xF2, 0xAA, 0x28, 0x44, 0x37, 0xE4, 0xF1, 0x67, 0x06,
+       0xF2, 0xFC, 0x55, 0x01, 0x88, 0xFF, 0x1B, 0x00, 0xFE, 0xFF, 0x11,
+       0x00, 0xB9, 0xFF, 0x8C, 0x00, 0x4A, 0xFF, 0x83, 0x00, 0x91, 0x00,
+       0x91, 0xFB, 0x3D, 0x47, 0xB7, 0x0D, 0xCD, 0xF8, 0x89, 0x04, 0x36,
+       0xFD, 0x86, 0x01, 0x57, 0xFF, 0x2B, 0x00, 0x00, 0x00, 0xFD, 0xFF,
+       0x36, 0x00, 0x36, 0xFF, 0xE6, 0x01, 0x3C, 0xFC, 0xD8, 0x06, 0x47,
+       0xF3, 0x06, 0x21, 0x2A, 0x3D, 0x44, 0xF3, 0x52, 0x05, 0xAE, 0xFD,
+       0xE3, 0x00, 0xC2, 0xFF, 0x06, 0x00, 0x01, 0x00, 0x0A, 0x00, 0xD9,
+       0xFF, 0x37, 0x00, 0xF7, 0xFF, 0x49, 0xFF, 0xB6, 0x02, 0x86, 0xF7,
+       0x53, 0x44, 0xFB, 0x14, 0x61, 0xF6, 0xA4, 0x05, 0xB4, 0xFC, 0xBE,
+       0x01, 0x42, 0xFF, 0x32, 0x00, 0xFF, 0xFF, 0xFE, 0xFF, 0x35, 0x00,
+       0x3A, 0xFF, 0xD4, 0x01, 0x7A, 0xFC, 0x2B, 0x06, 0x1E, 0xF5, 0x56,
+       0x19, 0x0C, 0x42, 0xAA, 0xF5, 0xC9, 0x03, 0xA4, 0xFE, 0x54, 0x00,
+       0x09, 0x00, 0xEB, 0xFF, 0x06, 0x00, 0x04, 0x00, 0xF7, 0xFF, 0xEA,
+       0xFF, 0x93, 0x00, 0x36, 0xFE, 0x7D, 0x04, 0x85, 0xF4, 0x1F, 0x40,
+       0x94, 0x1C, 0x47, 0xF4, 0x7E, 0x06, 0x5A, 0xFC, 0xDF, 0x01, 0x37,
+       0xFF, 0x36, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x30, 0x00, 0x4A, 0xFF,
+       0xA9, 0x01, 0xE7, 0xFC, 0x33, 0x05, 0x60, 0xF7, 0xDA, 0x11, 0xB8,
+       0x45, 0x1C, 0xF9, 0xD8, 0x01, 0xCA, 0xFF, 0xAF, 0xFF, 0x5A, 0x00,
+       0xCC, 0xFF, 0x0D, 0x00, 0x00, 0x00, 0x0F, 0x00, 0xA8, 0xFF, 0x17,
+       0x01, 0x57, 0xFD, 0xD6, 0x05, 0x90, 0xF2, 0xC8, 0x3A, 0x46, 0x24,
+       0xAA, 0xF2, 0x06, 0x07, 0x32, 0xFC, 0xE5, 0x01, 0x39, 0xFF, 0x36,
+       0x00, 0xFD, 0xFF, 0x00, 0x00, 0x28, 0x00, 0x62, 0xFF, 0x69, 0x01,
+       0x77, 0xFD, 0x04, 0x04, 0xE2, 0xF9, 0xCB, 0x0A, 0x0D, 0x48, 0x94,
+       0xFD, 0x92, 0xFF, 0x10, 0x01, 0xFE, 0xFE, 0xB1, 0x00, 0xAA, 0xFF,
+       0x15, 0x00, 0xFE, 0xFF, 0x22, 0x00, 0x74, 0xFF, 0x7C, 0x01, 0xB5,
+       0xFC, 0xB8, 0x06, 0x9C, 0xF1, 0x81, 0x34, 0xD1, 0x2B, 0xB3, 0xF1,
+       0x29, 0x07, 0x46, 0xFC, 0xCA, 0x01, 0x4A, 0xFF, 0x30, 0x00, 0xFD,
+       0xFF, 0x00, 0x00, 0x1F, 0x00, 0x81, 0xFF, 0x1B, 0x01, 0x20, 0xFE,
+       0xB6, 0x02, 0x7A, 0xFC, 0x5F, 0x04, 0xF4, 0x48, 0xFF, 0x02, 0x13,
+       0xFD, 0x67, 0x02, 0x49, 0xFE, 0x07, 0x01, 0x88, 0xFF, 0x1D, 0x00,
+       0xFD, 0xFF, 0x2E, 0x00, 0x50, 0xFF, 0xC0, 0x01, 0x53, 0xFC, 0x21,
+       0x07, 0x96, 0xF1, 0x82, 0x2D, 0xF2, 0x32, 0x86, 0xF1, 0xDB, 0x06,
+       0x99, 0xFC, 0x8E, 0x01, 0x6A, 0xFF, 0x25, 0x00, 0xFD, 0xFF, 0x16,
+       0x00, 0xA2, 0xFF, 0xC5, 0x00, 0xD4, 0xFE, 0x5F, 0x01, 0x03, 0xFF,
+       0xBF, 0xFE, 0x63, 0x48, 0x40, 0x09, 0x7B, 0xFA, 0xB9, 0x03, 0x9D,
+       0xFD, 0x58, 0x01, 0x69, 0xFF, 0x26, 0x00, 0x00, 0x00, 0xFD, 0xFF,
+       0x35, 0x00, 0x3B, 0xFF, 0xE2, 0x01, 0x31, 0xFC, 0x17, 0x07, 0x61,
+       0xF2, 0x0A, 0x26, 0x6A, 0x39, 0x41, 0xF2, 0x15, 0x06, 0x2C, 0xFD,
+       0x31, 0x01, 0x9B, 0xFF, 0x14, 0x00, 0xFF, 0xFF, 0x0E, 0x00, 0xC4,
+       0xFF, 0x6E, 0x00, 0x87, 0xFF, 0x13, 0x00, 0x58, 0x01, 0x0D, 0xFA,
+       0x61, 0x46, 0x2D, 0x10, 0xF0, 0xF7, 0xF1, 0x04, 0x05, 0xFD, 0x9C,
+       0x01, 0x4E, 0xFF, 0x2E, 0x00, 0xFF, 0xFF, 0xFE, 0xFF, 0x36, 0x00,
+       0x36, 0xFF, 0xE3, 0x01, 0x4C, 0xFC, 0xA6, 0x06, 0xDB, 0xF3, 0x5B,
+       0x1E, 0xFC, 0x3E, 0xFA, 0xF3, 0xD7, 0x04, 0xFD, 0xFD, 0xB4, 0x00,
+       0xD9, 0xFF, 0xFD, 0xFF, 0x03, 0x00, 0x08, 0x00, 0xE4, 0xFF, 0x1B,
+       0x00, 0x30, 0x00, 0xE4, 0xFE, 0x5F, 0x03, 0x5E, 0xF6, 0x02, 0x43,
+       0x96, 0x17, 0x9B, 0xF5, 0xF8, 0x05, 0x8F, 0xFC, 0xCC, 0x01, 0x3D,
+       0xFF, 0x34, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x33, 0x00, 0x3E, 0xFF,
+       0xC8, 0x01, 0x9B, 0xFC, 0xDD, 0x05, 0xDC, 0xF5, 0xB6, 0x16, 0x77,
+       0x43, 0xBD, 0xF6, 0x28, 0x03, 0x05, 0xFF, 0x1D, 0x00, 0x25, 0x00,
+       0xE1, 0xFF, 0x08, 0x00, 0x02, 0x00, 0x00, 0x00, 0xD2, 0xFF, 0xC4,
+       0x00, 0xE2, 0xFD, 0x01, 0x05, 0xBA, 0xF3, 0x64, 0x3E, 0x3F, 0x1F,
+       0xA8, 0xF3, 0xB8, 0x06, 0x46, 0xFC, 0xE5, 0x01, 0x36, 0xFF, 0x36,
+       0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0x2D, 0x00, 0x51, 0xFF, 0x95, 0x01,
+       0x15, 0xFD, 0xCF, 0x04, 0x39, 0xF8, 0x59, 0x0F, 0xAF, 0x46, 0x8B,
+       0xFA, 0x17, 0x01, 0x38, 0x00, 0x73, 0xFF, 0x78, 0x00, 0xC0, 0xFF,
+       0x0F, 0x00, 0xFF, 0xFF, 0x16, 0x00, 0x94, 0xFF, 0x3D, 0x01, 0x18,
+       0xFD, 0x32, 0x06, 0x1F, 0xF2, 0xB5, 0x38, 0xEB, 0x26, 0x40, 0xF2,
+       0x1E, 0x07, 0x32, 0xFC, 0xDF, 0x01, 0x3D, 0xFF, 0x35, 0x00, 0xFD,
+       0xFF, 0x00, 0x00, 0x25, 0x00, 0x6C, 0xFF, 0x4F, 0x01, 0xB0, 0xFD,
+       0x93, 0x03, 0xC7, 0xFA, 0x7D, 0x08, 0x86, 0x48, 0x5A, 0xFF, 0xBA,
+       0xFE, 0x86, 0x01, 0xBF, 0xFE, 0xCF, 0x00, 0x9E, 0xFF, 0x17, 0x00,
+       0xFD, 0xFF, 0x27, 0x00, 0x66, 0xFF, 0x97, 0x01, 0x8C, 0xFC, 0xEA,
+       0x06, 0x80, 0xF1, 0x26, 0x32, 0x58, 0x2E, 0x8B, 0xF1, 0x1B, 0x07,
+       0x5B, 0xFC, 0xBA, 0x01, 0x53, 0xFF, 0x2D, 0x00, 0xFD, 0xFF, 0x1C,
+       0x00, 0x8C, 0xFF, 0xFE, 0x00, 0x5D, 0xFE, 0x3F, 0x02, 0x5E, 0xFD,
+       0x54, 0x02, 0xEC, 0x48, 0x13, 0x05, 0x2E, 0xFC, 0xDE, 0x02, 0x0C,
+       0xFE, 0x24, 0x01, 0x7D, 0xFF, 0x20, 0x00, 0x00, 0x00, 0xFD, 0xFF,
+       0x31, 0x00, 0x47, 0xFF, 0xCF, 0x01, 0x40, 0xFC, 0x2A, 0x07, 0xC6,
+       0xF1, 0xF7, 0x2A, 0x46, 0x35, 0xAB, 0xF1, 0xA4, 0x06, 0xC4, 0xFC,
+       0x72, 0x01, 0x79, 0xFF, 0x20, 0x00, 0xFE, 0xFF, 0x14, 0x00, 0xAE,
+       0xFF, 0xA7, 0x00, 0x12, 0xFF, 0xEA, 0x00, 0xD9, 0xFF, 0x03, 0xFD,
+       0xDC, 0x47, 0x95, 0x0B, 0x96, 0xF9, 0x29, 0x04, 0x65, 0xFD, 0x71,
+       0x01, 0x5F, 0xFF, 0x29, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x36, 0x00,
+       0x38, 0xFF, 0xE6, 0x01, 0x34, 0xFC, 0xFB, 0x06, 0xD2, 0xF2, 0x64,
+       0x23, 0x73, 0x3B, 0xBC, 0xF2, 0xB4, 0x05, 0x6E, 0xFD, 0x09, 0x01,
+       0xAF, 0xFF, 0x0D, 0x00, 0x00, 0x00, 0x0C, 0x00, 0xD0, 0xFF, 0x51,
+       0x00, 0xC3, 0xFF, 0xA6, 0xFF, 0x16, 0x02, 0xA9, 0xF8, 0x5C, 0x45,
+       0xB2, 0x12, 0x19, 0xF7, 0x52, 0x05, 0xD8, 0xFC, 0xAF, 0x01, 0x47,
+       0xFF, 0x30, 0x00, 0xFF, 0xFF, 0xFE, 0xFF, 0x36, 0x00, 0x38, 0xFF,
+       0xDD, 0x01, 0x62, 0xFC, 0x69, 0x06, 0x7F, 0xF4, 0xB2, 0x1B, 0xAB,
+       0x40, 0xD0, 0xF4, 0x4E, 0x04, 0x53, 0xFE, 0x83, 0x00, 0xF2, 0xFF,
+       0xF4, 0xFF, 0x05, 0x00, 0x06, 0x00, 0xEE, 0xFF, 0x01, 0x00, 0x66,
+       0x00, 0x85, 0xFE, 0xFC, 0x03, 0x55, 0xF5, 0x8C, 0x41, 0x38, 0x1A,
+       0xE1, 0xF4, 0x43, 0x06, 0x70, 0xFC, 0xD8, 0x01, 0x39, 0xFF, 0x35,
+       0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x32, 0x00, 0x44, 0xFF, 0xB9, 0x01,
+       0xC1, 0xFC, 0x86, 0x05, 0xA5, 0xF6, 0x1E, 0x14, 0xBA, 0x44, 0xF0,
+       0xF7, 0x7B, 0x02, 0x6B, 0xFF, 0xE4, 0xFF, 0x41, 0x00, 0xD6, 0xFF,
+       0x0B, 0x00, 0x01, 0x00, 0x08, 0x00, 0xBB, 0xFF, 0xF1, 0x00, 0x96,
+       0xFD, 0x78, 0x05, 0x0E, 0xF3, 0x8A, 0x3C, 0xEA, 0x21, 0x19, 0xF3,
+       0xE6, 0x06, 0x38, 0xFC, 0xE6, 0x01, 0x37, 0xFF, 0x36, 0x00, 0xFD,
+       0xFF, 0x00, 0x00, 0x2B, 0x00, 0x5A, 0xFF, 0x7E, 0x01, 0x48, 0xFD,
+       0x66, 0x04, 0x18, 0xF9, 0xE8, 0x0C, 0x7C, 0x47, 0x19, 0xFC, 0x4D,
+       0x00, 0xA9, 0x00, 0x35, 0xFF, 0x96, 0x00, 0xB5, 0xFF, 0x12, 0x00,
+       0xFE, 0xFF, 0x1D, 0x00, 0x82, 0xFF, 0x60, 0x01, 0xE0, 0xFC, 0x7F,
+       0x06, 0xCC, 0xF1, 0x85, 0x36, 0x87, 0x29, 0xEB, 0xF1, 0x2A, 0x07,
+       0x39, 0xFC, 0xD6, 0x01, 0x43, 0xFF, 0x33, 0x00, 0xFD, 0xFF, 0x00,
+       0x00, 0x22, 0x00, 0x77, 0xFF, 0x34, 0x01, 0xEA, 0xFD, 0x1F, 0x03,
+       0xAE, 0xFB, 0x45, 0x06, 0xD5, 0x48, 0x3C, 0x01, 0xDC, 0xFD, 0xFD,
+       0x01, 0x80, 0xFE, 0xED, 0x00, 0x93, 0xFF, 0x1B, 0x00, 0xFD, 0xFF,
+       0x2B, 0x00, 0x59, 0xFF, 0xAE, 0x01, 0x6A, 0xFC, 0x0D, 0x07, 0x80,
+       0xF1, 0xB8, 0x2F, 0xCF, 0x30, 0x7D, 0xF1, 0xFF, 0x06, 0x78, 0xFC,
+       0xA5, 0x01, 0x5F, 0xFF, 0x29, 0x00, 0xFD, 0xFF, 0x19, 0x00, 0x98,
+       0xFF, 0xE0, 0x00, 0x9C, 0xFE, 0xC8, 0x01, 0x3F, 0xFE, 0x62, 0x00,
+       0xB8, 0x48, 0x3F, 0x07, 0x47, 0xFB, 0x53, 0x03, 0xD0, 0xFD, 0x40,
+       0x01, 0x72, 0xFF, 0x23, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x34, 0x00,
+       0x40, 0xFF, 0xDB, 0x01, 0x35, 0xFC, 0x26, 0x07, 0x0E, 0xF2, 0x60,
+       0x28, 0x82, 0x37, 0xED, 0xF1, 0x5E, 0x06, 0xF8, 0xFC, 0x51, 0x01,
+       0x8A, 0xFF, 0x1A, 0x00, 0xFF, 0xFF, 0x11, 0x00, 0xBA, 0xFF, 0x89,
+       0x00, 0x51, 0xFF, 0x77, 0x00, 0xA7, 0x00, 0x64, 0xFB, 0x26, 0x47,
+       0xFC, 0x0D, 0xB4, 0xF8, 0x95, 0x04, 0x31, 0xFD, 0x88, 0x01, 0x56,
+       0xFF, 0x2C, 0x00, 0xFF, 0xFF, 0xFD, 0xFF, 0x36, 0x00, 0x36, 0xFF,
+       0xE6, 0x01, 0x3E, 0xFC, 0xD3, 0x06, 0x56, 0xF3, 0xBA, 0x20, 0x61,
+       0x3D, 0x56, 0xF3, 0x45, 0x05, 0xB7, 0xFD, 0xDE, 0x00, 0xC5, 0xFF,
+       0x05, 0x00, 0x02, 0x00, 0x09, 0x00, 0xDB, 0xFF, 0x34, 0x00, 0xFE,
+       0xFF, 0x3D, 0xFF, 0xC9, 0x02, 0x64, 0xF7, 0x2F, 0x44, 0x44, 0x15,
+       0x4A, 0xF6, 0xAD, 0x05, 0xAF, 0xFC, 0xC0, 0x01, 0x41, 0xFF, 0x32,
+       0x00, 0xFF, 0xFF, 0xFE, 0xFF, 0x35, 0x00, 0x3A, 0xFF, 0xD3, 0x01,
+       0x7D, 0xFC, 0x23, 0x06, 0x32, 0xF5, 0x0C, 0x19, 0x38, 0x42, 0xC7,
+       0xF5, 0xB8, 0x03, 0xAF, 0xFE, 0x4E, 0x00, 0x0C, 0x00, 0xEA, 0xFF,
+       0x06, 0x00, 0x04, 0x00, 0xF8, 0xFF, 0xE7, 0xFF, 0x99, 0x00, 0x2C,
+       0xFE, 0x8C, 0x04, 0x6D, 0xF4, 0xF0, 0x3F, 0xE0, 0x1C, 0x34, 0xF4,
+       0x85, 0x06, 0x57, 0xFC, 0xE0, 0x01, 0x37, 0xFF, 0x36, 0x00, 0xFE,
+       0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0x4A, 0xFF, 0xA7, 0x01, 0xEC, 0xFC,
+       0x28, 0x05, 0x77, 0xF7, 0x92, 0x11, 0xD7, 0x45, 0x43, 0xF9, 0xC3,
+       0x01, 0xD6, 0xFF, 0xA9, 0xFF, 0x5E, 0x00, 0xCB, 0xFF, 0x0D, 0x00,
+       0x00, 0x00, 0x10, 0x00, 0xA6, 0xFF, 0x1B, 0x01, 0x50, 0xFD, 0xE1,
+       0x05, 0x82, 0xF2, 0x8F, 0x3A, 0x92, 0x24, 0x9D, 0xF2, 0x09, 0x07,
+       0x32, 0xFC, 0xE4, 0x01, 0x39, 0xFF, 0x36, 0x00, 0xFD, 0xFF, 0x00,
+       0x00, 0x28, 0x00, 0x63, 0xFF, 0x66, 0x01, 0x7D, 0xFD, 0xF8, 0x03,
+       0xFB, 0xF9, 0x89, 0x0A, 0x1D, 0x48, 0xC5, 0xFD, 0x7A, 0xFF, 0x1D,
+       0x01, 0xF7, 0xFE, 0xB4, 0x00, 0xA9, 0xFF, 0x15, 0x00, 0xFE, 0xFF,
+       0x23, 0x00, 0x72, 0xFF, 0x7F, 0x01, 0xB0, 0xFC, 0xBE, 0x06, 0x97,
+       0xF1, 0x3F, 0x34, 0x19, 0x2C, 0xAD, 0xF1, 0x28, 0x07, 0x48, 0xFC,
+       0xC9, 0x01, 0x4B, 0xFF, 0x30, 0x00, 0xFD, 0xFF, 0x00, 0x00, 0x1F,
+       0x00, 0x82, 0xFF, 0x18, 0x01, 0x27, 0xFE, 0xA9, 0x02, 0x94, 0xFC,
+       0x24, 0x04, 0xF5, 0x48, 0x39, 0x03, 0xF9, 0xFC, 0x74, 0x02, 0x42,
+       0xFE, 0x0B, 0x01, 0x87, 0xFF, 0x1E, 0x00, 0xFD, 0xFF, 0x2F, 0x00,
+       0x4F, 0xFF, 0xC2, 0x01, 0x51, 0xFC, 0x23, 0x07, 0x9A, 0xF1, 0x3A,
+       0x2D, 0x35, 0x33, 0x89, 0xF1, 0xD5, 0x06, 0x9D, 0xFC, 0x8B, 0x01,
+       0x6C, 0xFF, 0x25, 0x00, 0xFD, 0xFF, 0x16, 0x00, 0xA4, 0xFF, 0xC2,
+       0x00, 0xDB, 0xFE, 0x52, 0x01, 0x1B, 0xFF, 0x8D, 0xFE, 0x57, 0x48,
+       0x81, 0x09, 0x61, 0xFA, 0xC6, 0x03, 0x96, 0xFD, 0x5B, 0x01, 0x68,
+       0xFF, 0x26, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x35, 0x00, 0x3B, 0xFF,
+       0xE2, 0x01, 0x31, 0xFC, 0x15, 0x07, 0x6D, 0xF2, 0xBF, 0x25, 0xA5,
+       0x39, 0x4D, 0xF2, 0x0B, 0x06, 0x33, 0xFD, 0x2D, 0x01, 0x9D, 0xFF,
+       0x13, 0x00, 0xFF, 0xFF, 0x0E, 0x00, 0xC6, 0xFF, 0x6B, 0x00, 0x8E,
+       0xFF, 0x06, 0x00, 0x6E, 0x01, 0xE4, 0xF9, 0x48, 0x46, 0x75, 0x10,
+       0xD7, 0xF7, 0xFC, 0x04, 0x00, 0xFD, 0x9E, 0x01, 0x4E, 0xFF, 0x2E,
+       0x00, 0xFF, 0xFF, 0xFE, 0xFF, 0x36, 0x00, 0x36, 0xFF, 0xE3, 0x01,
+       0x4E, 0xFC, 0xA0, 0x06, 0xED, 0xF3, 0x0F, 0x1E, 0x2D, 0x3F, 0x10,
+       0xF4, 0xC8, 0x04, 0x07, 0xFE, 0xAF, 0x00, 0xDC, 0xFF, 0xFC, 0xFF,
+       0x03, 0x00, 0x07, 0x00, 0xE5, 0xFF, 0x18, 0x00, 0x36, 0x00, 0xD9,
+       0xFE, 0x71, 0x03, 0x3F, 0xF6, 0xDB, 0x42, 0xE0, 0x17, 0x86, 0xF5,
+       0x00, 0x06, 0x8C, 0xFC, 0xCE, 0x01, 0x3C, 0xFF, 0x34, 0x00, 0xFE,
+       0xFF, 0xFF, 0xFF, 0x33, 0x00, 0x3F, 0xFF, 0xC6, 0x01, 0x9F, 0xFC,
+       0xD3, 0x05, 0xF1, 0xF5, 0x6C, 0x16, 0x9E, 0x43, 0xDD, 0xF6, 0x15,
+       0x03, 0x10, 0xFF, 0x17, 0x00, 0x28, 0x00, 0xDF, 0xFF, 0x09, 0x00,
+       0x02, 0x00, 0x01, 0x00, 0xCF, 0xFF, 0xC9, 0x00, 0xDA, 0xFD, 0x0F,
+       0x05, 0xA5, 0xF3, 0x31, 0x3E, 0x8A, 0x1F, 0x97, 0xF3, 0xBD, 0x06,
+       0x44, 0xFC, 0xE5, 0x01, 0x36, 0xFF, 0x36, 0x00, 0xFD, 0xFF, 0xFF,
+       0xFF, 0x2D, 0x00, 0x52, 0xFF, 0x92, 0x01, 0x1B, 0xFD, 0xC4, 0x04,
+       0x51, 0xF8, 0x13, 0x0F, 0xC8, 0x46, 0xB6, 0xFA, 0x01, 0x01, 0x44,
+       0x00, 0x6C, 0xFF, 0x7B, 0x00, 0xBF, 0xFF, 0x10, 0x00, 0xFF, 0xFF,
+       0x17, 0x00, 0x92, 0xFF, 0x41, 0x01, 0x11, 0xFD, 0x3B, 0x06, 0x14,
+       0xF2, 0x78, 0x38, 0x36, 0x27, 0x35, 0xF2, 0x20, 0x07, 0x33, 0xFC,
+       0xDF, 0x01, 0x3E, 0xFF, 0x34, 0x00, 0xFD, 0xFF, 0x00, 0x00, 0x25,
+       0x00, 0x6D, 0xFF, 0x4C, 0x01, 0xB6, 0xFD, 0x86, 0x03, 0xE1, 0xFA,
+       0x3D, 0x08, 0x92, 0x48, 0x8E, 0xFF, 0xA1, 0xFE, 0x93, 0x01, 0xB8,
+       0xFE, 0xD3, 0x00, 0x9D, 0xFF, 0x18, 0x00, 0xFD, 0xFF, 0x28, 0x00,
+       0x64, 0xFF, 0x9A, 0x01, 0x88, 0xFC, 0xEE, 0x06, 0x7E, 0xF1, 0xE3,
+       0x31, 0x9F, 0x2E, 0x88, 0xF1, 0x19, 0x07, 0x5E, 0xFC, 0xB7, 0x01,
+       0x54, 0xFF, 0x2D, 0x00, 0xFD, 0xFF, 0x1C, 0x00, 0x8D, 0xFF, 0xFA,
+       0x00, 0x64, 0xFE, 0x32, 0x02, 0x78, 0xFD, 0x1B, 0x02, 0xEA, 0x48,
+       0x50, 0x05, 0x14, 0xFC, 0xEB, 0x02, 0x05, 0xFE, 0x27, 0x01, 0x7C,
+       0xFF, 0x21, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x32, 0x00, 0x46, 0xFF,
+       0xD1, 0x01, 0x3F, 0xFC, 0x2B, 0x07, 0xCD, 0xF1, 0xAE, 0x2A, 0x86,
+       0x35, 0xB1, 0xF1, 0x9D, 0x06, 0xCA, 0xFC, 0x6E, 0x01, 0x7B, 0xFF,
+       0x20, 0x00, 0xFE, 0xFF, 0x13, 0x00, 0xAF, 0xFF, 0xA4, 0x00, 0x19,
+       0xFF, 0xDD, 0x00, 0xF0, 0xFF, 0xD4, 0xFC, 0xC9, 0x47, 0xD8, 0x0B,
+       0x7C, 0xF9, 0x35, 0x04, 0x5F, 0xFD, 0x74, 0x01, 0x5E, 0xFF, 0x29,
+       0x00, 0x00, 0x00, 0xFD, 0xFF, 0x36, 0x00, 0x38, 0xFF, 0xE6, 0x01,
+       0x35, 0xFC, 0xF7, 0x06, 0xE0, 0xF2, 0x18, 0x23, 0xAB, 0x3B, 0xCC,
+       0xF2, 0xA8, 0x05, 0x76, 0xFD, 0x04, 0x01, 0xB1, 0xFF, 0x0C, 0x00,
+       0x00, 0x00, 0x0C, 0x00, 0xD1, 0xFF, 0x4E, 0x00, 0xCA, 0xFF, 0x9A,
+       0xFF, 0x2A, 0x02, 0x83, 0xF8, 0x3F, 0x45, 0xFB, 0x12, 0x01, 0xF7,
+       0x5D, 0x05, 0xD3, 0xFC, 0xB1, 0x01, 0x46, 0xFF, 0x31, 0x00, 0xFF,
+       0xFF, 0xFE, 0xFF, 0x36, 0x00, 0x38, 0xFF, 0xDC, 0x01, 0x64, 0xFC,
+       0x62, 0x06, 0x93, 0xF4, 0x66, 0x1B, 0xD9, 0x40, 0xEA, 0xF4, 0x3E,
+       0x04, 0x5D, 0xFE, 0x7D, 0x00, 0xF5, 0xFF, 0xF3, 0xFF, 0x05, 0x00,
+       0x05, 0x00, 0xEF, 0xFF, 0xFE, 0xFF, 0x6C, 0x00, 0x7B, 0xFE, 0x0C,
+       0x04, 0x3A, 0xF5, 0x5F, 0x41, 0x83, 0x1A, 0xCD, 0xF4, 0x4B, 0x06,
+       0x6D, 0xFC, 0xD9, 0x01, 0x39, 0xFF, 0x35, 0x00, 0xFE, 0xFF, 0xFF,
+       0xFF, 0x31, 0x00, 0x44, 0xFF, 0xB7, 0x01, 0xC5, 0xFC, 0x7C, 0x05,
+       0xBC, 0xF6, 0xD5, 0x13, 0xDC, 0x44, 0x14, 0xF8, 0x67, 0x02, 0x77,
+       0xFF, 0xDD, 0xFF, 0x44, 0x00, 0xD5, 0xFF, 0x0B, 0x00, 0x01, 0x00,
+       0x09, 0x00, 0xB8, 0xFF, 0xF6, 0x00, 0x8D, 0xFD, 0x84, 0x05, 0xFD,
+       0xF2, 0x52, 0x3C, 0x35, 0x22, 0x0B, 0xF3, 0xEB, 0x06, 0x37, 0xFC,
+       0xE6, 0x01, 0x37, 0xFF, 0x36, 0x00, 0xFD, 0xFF, 0x00, 0x00, 0x2A,
+       0x00, 0x5B, 0xFF, 0x7C, 0x01, 0x4E, 0xFD, 0x5A, 0x04, 0x31, 0xF9,
+       0xA4, 0x0C, 0x90, 0x47, 0x47, 0xFC, 0x36, 0x00, 0xB6, 0x00, 0x2E,
+       0xFF, 0x99, 0x00, 0xB3, 0xFF, 0x12, 0x00, 0xFE, 0xFF, 0x1E, 0x00,
+       0x80, 0xFF, 0x64, 0x01, 0xDA, 0xFC, 0x87, 0x06, 0xC5, 0xF1, 0x46,
+       0x36, 0xD1, 0x29, 0xE3, 0xF1, 0x2A, 0x07, 0x3A, 0xFC, 0xD5, 0x01,
+       0x44, 0xFF, 0x32, 0x00, 0xFD, 0xFF, 0x00, 0x00, 0x22, 0x00, 0x78,
+       0xFF, 0x31, 0x01, 0xF1, 0xFD, 0x12, 0x03, 0xC7, 0xFB, 0x07, 0x06,
+       0xDB, 0x48, 0x73, 0x01, 0xC3, 0xFD, 0x0A, 0x02, 0x79, 0xFE, 0xF1,
+       0x00, 0x91, 0xFF, 0x1B, 0x00, 0xFD, 0xFF, 0x2C, 0x00, 0x58, 0xFF,
+       0xB1, 0x01, 0x67, 0xFC, 0x10, 0x07, 0x81, 0xF1, 0x73, 0x2F, 0x15,
+       0x31, 0x7C, 0xF1, 0xFB, 0x06, 0x7C, 0xFC, 0xA2, 0x01, 0x60, 0xFF,
+       0x29, 0x00, 0xFD, 0xFF, 0x19, 0x00, 0x99, 0xFF, 0xDD, 0x00, 0xA3,
+       0xFE, 0xBB, 0x01, 0x58, 0xFE, 0x2D, 0x00, 0xAF, 0x48, 0x7E, 0x07,
+       0x2E, 0xFB, 0x60, 0x03, 0xC9, 0xFD, 0x43, 0x01, 0x71, 0xFF, 0x24,
+       0x00, 0x00, 0x00, 0xFD, 0xFF, 0x34, 0x00, 0x3F, 0xFF, 0xDC, 0x01,
+       0x34, 0xFC, 0x25, 0x07, 0x18, 0xF2, 0x15, 0x28, 0xBF, 0x37, 0xF7,
+       0xF1, 0x56, 0x06, 0xFE, 0xFC, 0x4D, 0x01, 0x8C, 0xFF, 0x19, 0x00,
+       0xFF, 0xFF, 0x10, 0x00, 0xBB, 0xFF, 0x85, 0x00, 0x58, 0xFF, 0x6A,
+       0x00, 0xBE, 0x00, 0x38, 0xFB, 0x0F, 0x47, 0x42, 0x0E, 0x9B, 0xF8,
+       0xA1, 0x04, 0x2B, 0xFD, 0x8B, 0x01, 0x55, 0xFF, 0x2C, 0x00, 0xFF,
+       0xFF, 0xFD, 0xFF, 0x36, 0x00, 0x36, 0xFF, 0xE6, 0x01, 0x3F, 0xFC,
+       0xCE, 0x06, 0x66, 0xF3, 0x6F, 0x20, 0x96, 0x3D, 0x69, 0xF3, 0x38,
+       0x05, 0xBF, 0xFD, 0xD9, 0x00, 0xC7, 0xFF, 0x04, 0x00, 0x02, 0x00,
+       0x09, 0x00, 0xDC, 0xFF, 0x31, 0x00, 0x04, 0x00, 0x32, 0xFF, 0xDC,
+       0x02, 0x42, 0xF7, 0x0B, 0x44, 0x8E, 0x15, 0x34, 0xF6, 0xB7, 0x05,
+       0xAB, 0xFC, 0xC1, 0x01, 0x40, 0xFF, 0x33, 0x00, 0xFF, 0xFF, 0xFE,
+       0xFF, 0x35, 0x00, 0x3B, 0xFF, 0xD2, 0x01, 0x81, 0xFC, 0x1A, 0x06,
+       0x47, 0xF5, 0xC1, 0x18, 0x60, 0x42, 0xE4, 0xF5, 0xA6, 0x03, 0xB9,
+       0xFE, 0x48, 0x00, 0x0F, 0x00, 0xE9, 0xFF, 0x07, 0x00, 0x04, 0x00,
+       0xF9, 0xFF, 0xE4, 0xFF, 0x9F, 0x00, 0x23, 0xFE, 0x9B, 0x04, 0x55,
+       0xF4, 0xC0, 0x3F, 0x2C, 0x1D, 0x22, 0xF4, 0x8C, 0x06, 0x55, 0xFC,
+       0xE1, 0x01, 0x37, 0xFF, 0x36, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x2F,
+       0x00, 0x4B, 0xFF, 0xA4, 0x01, 0xF1, 0xFC, 0x1D, 0x05, 0x8F, 0xF7,
+       0x4A, 0x11, 0xF2, 0x45, 0x6B, 0xF9, 0xAE, 0x01, 0xE2, 0xFF, 0xA2,
+       0xFF, 0x61, 0x00, 0xC9, 0xFF, 0x0D, 0x00, 0x00, 0x00, 0x11, 0x00,
+       0xA3, 0xFF, 0x20, 0x01, 0x49, 0xFD, 0xEB, 0x05, 0x74, 0xF2, 0x54,
+       0x3A, 0xDD, 0x24, 0x91, 0xF2, 0x0C, 0x07, 0x32, 0xFC, 0xE4, 0x01,
+       0x3A, 0xFF, 0x36, 0x00, 0xFD, 0xFF, 0x00, 0x00, 0x27, 0x00, 0x64,
+       0xFF, 0x63, 0x01, 0x84, 0xFD, 0xEB, 0x03, 0x14, 0xFA, 0x47, 0x0A,
+       0x2C, 0x48, 0xF6, 0xFD, 0x63, 0xFF, 0x2B, 0x01, 0xF0, 0xFE, 0xB8,
+       0x00, 0xA8, 0xFF, 0x15, 0x00, 0xFE, 0xFF, 0x23, 0x00, 0x71, 0xFF,
+       0x82, 0x01, 0xAB, 0xFC, 0xC4, 0x06, 0x93, 0xF1, 0xFD, 0x33, 0x62,
+       0x2C, 0xA8, 0xF1, 0x27, 0x07, 0x4A, 0xFC, 0xC7, 0x01, 0x4C, 0xFF,
+       0x30, 0x00, 0xFD, 0xFF, 0x00, 0x00, 0x1F, 0x00, 0x83, 0xFF, 0x14,
+       0x01, 0x2D, 0xFE, 0x9C, 0x02, 0xAD, 0xFC, 0xE9, 0x03, 0xF6, 0x48,
+       0x73, 0x03, 0xE0, 0xFC, 0x82, 0x02, 0x3B, 0xFE, 0x0E, 0x01, 0x86,
+       0xFF, 0x1E, 0x00, 0xFD, 0xFF, 0x2F, 0x00, 0x4E, 0xFF, 0xC3, 0x01,
+       0x4E, 0xFC, 0x24, 0x07, 0x9E, 0xF1, 0xF2, 0x2C, 0x78, 0x33, 0x8C,
+       0xF1, 0xD0, 0x06, 0xA2, 0xFC, 0x88, 0x01, 0x6D, 0xFF, 0x24, 0x00,
+       0xFD, 0xFF, 0x16, 0x00, 0xA5, 0xFF, 0xBE, 0x00, 0xE2, 0xFE, 0x45,
+       0x01, 0x33, 0xFF, 0x5A, 0xFE, 0x48, 0x48, 0xC3, 0x09, 0x47, 0xFA,
+       0xD2, 0x03, 0x90, 0xFD, 0x5E, 0x01, 0x66, 0xFF, 0x27, 0x00, 0x00,
+       0x00, 0xFD, 0xFF, 0x35, 0x00, 0x3B, 0xFF, 0xE3, 0x01, 0x31, 0xFC,
+       0x12, 0x07, 0x79, 0xF2, 0x73, 0x25, 0xDF, 0x39, 0x5A, 0xF2, 0x00,
+       0x06, 0x3A, 0xFD, 0x28, 0x01, 0x9F, 0xFF, 0x13, 0x00, 0x00, 0x00,
+       0x0E, 0x00, 0xC7, 0xFF, 0x68, 0x00, 0x95, 0xFF, 0xFA, 0xFF, 0x83,
+       0x01, 0xBB, 0xF9, 0x2B, 0x46, 0xBB, 0x10, 0xBF, 0xF7, 0x07, 0x05,
+       0xFB, 0xFC, 0xA0, 0x01, 0x4D, 0xFF, 0x2F, 0x00, 0xFF, 0xFF, 0xFE,
+       0xFF, 0x36, 0x00, 0x36, 0xFF, 0xE2, 0x01, 0x50, 0xFC, 0x99, 0x06,
+       0xFE, 0xF3, 0xC3, 0x1D, 0x5E, 0x3F, 0x27, 0xF4, 0xB9, 0x04, 0x10,
+       0xFE, 0xA9, 0x00, 0xDF, 0xFF, 0xFB, 0xFF, 0x03, 0x00, 0x07, 0x00,
+       0xE6, 0xFF, 0x15, 0x00, 0x3C, 0x00, 0xCF, 0xFE, 0x83, 0x03, 0x20,
+       0xF6, 0xB2, 0x42, 0x2B, 0x18, 0x71, 0xF5, 0x09, 0x06, 0x88, 0xFC,
+       0xCF, 0x01, 0x3C, 0xFF, 0x34, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x33,
+       0x00, 0x3F, 0xFF, 0xC5, 0x01, 0xA3, 0xFC, 0xCA, 0x05, 0x07, 0xF6,
+       0x22, 0x16, 0xC3, 0x43, 0xFE, 0xF6, 0x02, 0x03, 0x1B, 0xFF, 0x11,
+       0x00, 0x2B, 0x00, 0xDE, 0xFF, 0x09, 0x00, 0x02, 0x00, 0x02, 0x00,
+       0xCC, 0xFF, 0xCE, 0x00, 0xD1, 0xFD, 0x1D, 0x05, 0x91, 0xF3, 0xFE,
+       0x3D, 0xD7, 0x1F, 0x87, 0xF3, 0xC3, 0x06, 0x42, 0xFC, 0xE5, 0x01,
+       0x36, 0xFF, 0x36, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0x2D, 0x00, 0x53,
+       0xFF, 0x90, 0x01, 0x20, 0xFD, 0xB8, 0x04, 0x6A, 0xF8, 0xCD, 0x0E,
+       0xE1, 0x46, 0xE1, 0xFA, 0xEB, 0x00, 0x51, 0x00, 0x65, 0xFF, 0x7F,
+       0x00, 0xBE, 0xFF, 0x10, 0x00, 0xFF, 0xFF, 0x18, 0x00, 0x90, 0xFF,
+       0x45, 0x01, 0x0B, 0xFD, 0x44, 0x06, 0x0A, 0xF2, 0x3B, 0x38, 0x80,
+       0x27, 0x2B, 0xF2, 0x22, 0x07, 0x33, 0xFC, 0xDE, 0x01, 0x3E, 0xFF,
+       0x34, 0x00, 0xFD, 0xFF, 0x00, 0x00, 0x24, 0x00, 0x6E, 0xFF, 0x49,
+       0x01, 0xBC, 0xFD, 0x7A, 0x03, 0xFA, 0xFA, 0xFD, 0x07, 0x9C, 0x48,
+       0xC3, 0xFF, 0x89, 0xFE, 0xA1, 0x01, 0xB1, 0xFE, 0xD6, 0x00, 0x9C,
+       0xFF, 0x18, 0x00, 0xFD, 0xFF, 0x28, 0x00, 0x63, 0xFF, 0x9D, 0x01,
+       0x84, 0xFC, 0xF3, 0x06, 0x7D, 0xF1, 0x9E, 0x31, 0xE6, 0x2E, 0x85,
+       0xF1, 0x16, 0x07, 0x61, 0xFC, 0xB5, 0x01, 0x55, 0xFF, 0x2D, 0x00,
+       0xFD, 0xFF, 0x1C, 0x00, 0x8F, 0xFF, 0xF7, 0x00, 0x6B, 0xFE, 0x25,
+       0x02, 0x91, 0xFD, 0xE3, 0x01, 0xE5, 0x48, 0x8D, 0x05, 0xFB, 0xFB,
+       0xF8, 0x02, 0xFE, 0xFD, 0x2B, 0x01, 0x7A, 0xFF, 0x21, 0x00, 0x00,
+       0x00, 0xFD, 0xFF, 0x32, 0x00, 0x45, 0xFF, 0xD2, 0x01, 0x3D, 0xFC,
+       0x2B, 0x07, 0xD4, 0xF1, 0x64, 0x2A, 0xC6, 0x35, 0xB7, 0xF1, 0x96,
+       0x06, 0xCF, 0xFC, 0x6B, 0x01, 0x7D, 0xFF, 0x1F, 0x00, 0xFE, 0xFF,
+       0x13, 0x00, 0xB1, 0xFF, 0xA0, 0x00, 0x20, 0xFF, 0xD0, 0x00, 0x07,
+       0x00, 0xA4, 0xFC, 0xB6, 0x47, 0x1C, 0x0C, 0x63, 0xF9, 0x42, 0x04,
+       0x59, 0xFD, 0x76, 0x01, 0x5D, 0xFF, 0x2A, 0x00, 0x00, 0x00, 0xFD,
+       0xFF, 0x36, 0x00, 0x37, 0xFF, 0xE6, 0x01, 0x35, 0xFC, 0xF3, 0x06,
+       0xEE, 0xF2, 0xCD, 0x22, 0xE4, 0x3B, 0xDC, 0xF2, 0x9C, 0x05, 0x7E,
+       0xFD, 0x00, 0x01, 0xB4, 0xFF, 0x0B, 0x00, 0x01, 0x00, 0x0B, 0x00,
+       0xD2, 0xFF, 0x4A, 0x00, 0xD0, 0xFF, 0x8E, 0xFF, 0x3F, 0x02, 0x5E,
+       0xF8, 0x1E, 0x45, 0x44, 0x13, 0xEA, 0xF6, 0x67, 0x05, 0xCF, 0xFC,
+       0xB3, 0x01, 0x46, 0xFF, 0x31, 0x00, 0xFF, 0xFF, 0xFE, 0xFF, 0x36,
+       0x00, 0x38, 0xFF, 0xDB, 0x01, 0x67, 0xFC, 0x5A, 0x06, 0xA6, 0xF4,
+       0x1B, 0x1B, 0x07, 0x41, 0x04, 0xF5, 0x2D, 0x04, 0x67, 0xFE, 0x77,
+       0x00, 0xF8, 0xFF, 0xF2, 0xFF, 0x05, 0x00, 0x05, 0x00, 0xF0, 0xFF,
+       0xFB, 0xFF, 0x71, 0x00, 0x71, 0xFE, 0x1D, 0x04, 0x1F, 0xF5, 0x32,
+       0x41, 0xCE, 0x1A, 0xBA, 0xF4, 0x53, 0x06, 0x6A, 0xFC, 0xDA, 0x01,
+       0x38, 0xFF, 0x35, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x31, 0x00, 0x45,
+       0xFF, 0xB5, 0x01, 0xCA, 0xFC, 0x72, 0x05, 0xD3, 0xF6, 0x8D, 0x13,
+       0xFD, 0x44, 0x39, 0xF8, 0x53, 0x02, 0x82, 0xFF, 0xD7, 0xFF, 0x47,
+       0x00, 0xD3, 0xFF, 0x0B, 0x00, 0x01, 0x00, 0x0A, 0x00, 0xB6, 0xFF,
+       0xFB, 0x00, 0x85, 0xFD, 0x90, 0x05, 0xEC, 0xF2, 0x1C, 0x3C, 0x81,
+       0x22, 0xFC, 0xF2, 0xEF, 0x06, 0x36, 0xFC, 0xE6, 0x01, 0x37, 0xFF,
+       0x36, 0x00, 0xFD, 0xFF, 0x00, 0x00, 0x2A, 0x00, 0x5C, 0xFF, 0x79,
+       0x01, 0x53, 0xFD, 0x4E, 0x04, 0x4A, 0xF9, 0x60, 0x0C, 0xA3, 0x47,
+       0x76, 0xFC, 0x1F, 0x00, 0xC3, 0x00, 0x27, 0xFF, 0x9D, 0x00, 0xB2,
+       0xFF, 0x13, 0x00, 0xFE, 0xFF, 0x1E, 0x00, 0x7F, 0xFF, 0x67, 0x01,
+       0xD5, 0xFC, 0x8E, 0x06, 0xBE, 0xF1, 0x06, 0x36, 0x1A, 0x2A, 0xDC,
+       0xF1, 0x2A, 0x07, 0x3C, 0xFC, 0xD3, 0x01, 0x44, 0xFF, 0x32, 0x00,
+       0xFD, 0xFF, 0x00, 0x00, 0x21, 0x00, 0x79, 0xFF, 0x2E, 0x01, 0xF7,
+       0xFD, 0x05, 0x03, 0xE1, 0xFB, 0xCA, 0x05, 0xDF, 0x48, 0xAB, 0x01,
+       0xAA, 0xFD, 0x18, 0x02, 0x72, 0xFE, 0xF4, 0x00, 0x90, 0xFF, 0x1B,
+       0x00, 0xFD, 0xFF, 0x2C, 0x00, 0x57, 0xFF, 0xB3, 0x01, 0x64, 0xFC,
+       0x13, 0x07, 0x83, 0xF1, 0x2C, 0x2F, 0x5A, 0x31, 0x7D, 0xF1, 0xF7,
+       0x06, 0x80, 0xFC, 0x9F, 0x01, 0x61, 0xFF, 0x29, 0x00, 0xFD, 0xFF,
+       0x19, 0x00, 0x9A, 0xFF, 0xD9, 0x00, 0xAA, 0xFE, 0xAE, 0x01, 0x70,
+       0xFE, 0xF8, 0xFF, 0xA6, 0x48, 0xBE, 0x07, 0x14, 0xFB, 0x6D, 0x03,
+       0xC3, 0xFD, 0x46, 0x01, 0x70, 0xFF, 0x24, 0x00, 0x00, 0x00, 0xFD,
+       0xFF, 0x34, 0x00, 0x3F, 0xFF, 0xDD, 0x01, 0x34, 0xFC, 0x23, 0x07,
+       0x21, 0xF2, 0xCB, 0x27, 0xFE, 0x37, 0x00, 0xF2, 0x4D, 0x06, 0x04,
+       0xFD, 0x49, 0x01, 0x8E, 0xFF, 0x19, 0x00, 0xFF, 0xFF, 0x10, 0x00,
+       0xBD, 0xFF, 0x82, 0x00, 0x5E, 0xFF, 0x5D, 0x00, 0xD4, 0x00, 0x0C,
+       0xFB, 0xF9, 0x46, 0x87, 0x0E, 0x82, 0xF8, 0xAD, 0x04, 0x26, 0xFD,
+       0x8D, 0x01, 0x54, 0xFF, 0x2C, 0x00, 0xFF, 0xFF, 0xFD, 0xFF, 0x36,
+       0x00, 0x36, 0xFF, 0xE6, 0x01, 0x41, 0xFC, 0xC8, 0x06, 0x76, 0xF3,
+       0x22, 0x20, 0xCA, 0x3D, 0x7D, 0xF3, 0x2A, 0x05, 0xC8, 0xFD, 0xD4,
+       0x00, 0xCA, 0xFF, 0x03, 0x00, 0x02, 0x00, 0x09, 0x00, 0xDD, 0xFF,
+       0x2E, 0x00, 0x0A, 0x00, 0x27, 0xFF, 0xEF, 0x02, 0x20, 0xF7, 0xE7,
+       0x43, 0xD8, 0x15, 0x1E, 0xF6, 0xC0, 0x05, 0xA7, 0xFC, 0xC3, 0x01,
+       0x40, 0xFF, 0x33, 0x00, 0xFF, 0xFF, 0xFE, 0xFF, 0x34, 0x00, 0x3B,
+       0xFF, 0xD1, 0x01, 0x84, 0xFC, 0x12, 0x06, 0x5C, 0xF5, 0x76, 0x18,
+       0x89, 0x42, 0x02, 0xF6, 0x94, 0x03, 0xC4, 0xFE, 0x42, 0x00, 0x12,
+       0x00, 0xE8, 0xFF, 0x07, 0x00, 0x03, 0x00, 0xFA, 0xFF, 0xE2, 0xFF,
+       0xA4, 0x00, 0x19, 0xFE, 0xAA, 0x04, 0x3E, 0xF4, 0x90, 0x3F, 0x78,
+       0x1D, 0x10, 0xF4, 0x93, 0x06, 0x52, 0xFC, 0xE1, 0x01, 0x36, 0xFF,
+       0x36, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0x4C, 0xFF, 0xA2,
+       0x01, 0xF6, 0xFC, 0x12, 0x05, 0xA7, 0xF7, 0x03, 0x11, 0x10, 0x46,
+       0x93, 0xF9, 0x98, 0x01, 0xEE, 0xFF, 0x9B, 0xFF, 0x64, 0x00, 0xC8,
+       0xFF, 0x0E, 0x00, 0x00, 0x00, 0x12, 0x00, 0xA1, 0xFF, 0x24, 0x01,
+       0x41, 0xFD, 0xF6, 0x05, 0x67, 0xF2, 0x1A, 0x3A, 0x29, 0x25, 0x84,
+       0xF2, 0x0F, 0x07, 0x31, 0xFC, 0xE3, 0x01, 0x3A, 0xFF, 0x35, 0x00,
+       0xFD, 0xFF, 0x00, 0x00, 0x27, 0x00, 0x65, 0xFF, 0x60, 0x01, 0x8A,
+       0xFD, 0xDF, 0x03, 0x2E, 0xFA, 0x04, 0x0A, 0x3A, 0x48, 0x28, 0xFE,
+       0x4B, 0xFF, 0x38, 0x01, 0xE9, 0xFE, 0xBB, 0x00, 0xA6, 0xFF, 0x16,
+       0x00, 0xFD, 0xFF, 0x24, 0x00, 0x6F, 0xFF, 0x85, 0x01, 0xA6, 0xFC,
+       0xCA, 0x06, 0x8F, 0xF1, 0xBB, 0x33, 0xAB, 0x2C, 0xA3, 0xF1, 0x26,
+       0x07, 0x4C, 0xFC, 0xC5, 0x01, 0x4D, 0xFF, 0x30, 0x00, 0xFD, 0xFF,
+       0x00, 0x00, 0x1E, 0x00, 0x84, 0xFF, 0x11, 0x01, 0x34, 0xFE, 0x8F,
+       0x02, 0xC7, 0xFC, 0xAE, 0x03, 0xF7, 0x48, 0xAE, 0x03, 0xC7, 0xFC,
+       0x8F, 0x02, 0x34, 0xFE, 0x11, 0x01, 0x84, 0xFF, 0x1E, 0x00, 0xFD,
+       0xFF, 0x2A, 0x00, 0x5C, 0xFF, 0xAA, 0x01, 0x71, 0xFC, 0x07, 0x07,
+       0x7E, 0xF1, 0x44, 0x30, 0x44, 0x30, 0x7E, 0xF1, 0x07, 0x07, 0x71,
+       0xFC, 0xAA, 0x01, 0x5C, 0xFF, 0x2A, 0x00, 0xFD, 0xFF, 0x00, 0x00,
+       0x1E, 0x00, 0x84, 0xFF, 0x11, 0x01, 0x34, 0xFE, 0x8F, 0x02, 0xC7,
+       0xFC, 0xAE, 0x03, 0xF7, 0x48, 0xAE, 0x03, 0xC7, 0xFC, 0x8F, 0x02,
+       0x34, 0xFE, 0x11, 0x01, 0x84, 0xFF, 0x1E, 0x00, 0x02, 0x00, 0x05,
+       0x00, 0xC3, 0xFF, 0xE1, 0x00, 0xB1, 0xFD, 0x4E, 0x05, 0x4A, 0xF3,
+       0x3D, 0x3D, 0xED, 0x20, 0x4C, 0xF3, 0xD6, 0x06, 0x3D, 0xFC, 0xE6,
+       0x01, 0x36, 0xFF, 0x36, 0x00, 0xFD, 0xFF, 0xFD, 0xFF, 0x36, 0x00,
+       0x36, 0xFF, 0xE6, 0x01, 0x3D, 0xFC, 0xD6, 0x06, 0x4C, 0xF3, 0xED,
+       0x20, 0x3D, 0x3D, 0x4A, 0xF3, 0x4E, 0x05, 0xB1, 0xFD, 0xE1, 0x00,
+       0xC3, 0xFF, 0x05, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x84,
+       0xFF, 0x11, 0x01, 0x34, 0xFE, 0x8F, 0x02, 0xC7, 0xFC, 0xAE, 0x03,
+       0xF7, 0x48, 0xAE, 0x03, 0xC7, 0xFC, 0x8F, 0x02, 0x34, 0xFE, 0x11,
+       0x01, 0x84, 0xFF, 0x1E, 0x00, 0x16, 0x00, 0xA6, 0xFF, 0xBB, 0x00,
+       0xE9, 0xFE, 0x38, 0x01, 0x4B, 0xFF, 0x28, 0xFE, 0x3A, 0x48, 0x04,
+       0x0A, 0x2E, 0xFA, 0xDF, 0x03, 0x8A, 0xFD, 0x60, 0x01, 0x65, 0xFF,
+       0x27, 0x00, 0x00, 0x00, 0x0E, 0x00, 0xC8, 0xFF, 0x64, 0x00, 0x9B,
+       0xFF, 0xEE, 0xFF, 0x98, 0x01, 0x93, 0xF9, 0x10, 0x46, 0x03, 0x11,
+       0xA7, 0xF7, 0x12, 0x05, 0xF6, 0xFC, 0xA2, 0x01, 0x4C, 0xFF, 0x2F,
+       0x00, 0xFF, 0xFF, 0x07, 0x00, 0xE8, 0xFF, 0x12, 0x00, 0x42, 0x00,
+       0xC4, 0xFE, 0x94, 0x03, 0x02, 0xF6, 0x89, 0x42, 0x76, 0x18, 0x5C,
+       0xF5, 0x12, 0x06, 0x84, 0xFC, 0xD1, 0x01, 0x3B, 0xFF, 0x34, 0x00,
+       0xFE, 0xFF, 0x02, 0x00, 0x03, 0x00, 0xCA, 0xFF, 0xD4, 0x00, 0xC8,
+       0xFD, 0x2A, 0x05, 0x7D, 0xF3, 0xCA, 0x3D, 0x22, 0x20, 0x76, 0xF3,
+       0xC8, 0x06, 0x41, 0xFC, 0xE6, 0x01, 0x36, 0xFF, 0x36, 0x00, 0xFD,
+       0xFF, 0xFF, 0xFF, 0x19, 0x00, 0x8E, 0xFF, 0x49, 0x01, 0x04, 0xFD,
+       0x4D, 0x06, 0x00, 0xF2, 0xFE, 0x37, 0xCB, 0x27, 0x21, 0xF2, 0x23,
+       0x07, 0x34, 0xFC, 0xDD, 0x01, 0x3F, 0xFF, 0x34, 0x00, 0xFD, 0xFF,
+       0xFD, 0xFF, 0x29, 0x00, 0x61, 0xFF, 0x9F, 0x01, 0x80, 0xFC, 0xF7,
+       0x06, 0x7D, 0xF1, 0x5A, 0x31, 0x2C, 0x2F, 0x83, 0xF1, 0x13, 0x07,
+       0x64, 0xFC, 0xB3, 0x01, 0x57, 0xFF, 0x2C, 0x00, 0xFD, 0xFF, 0xFD,
+       0xFF, 0x32, 0x00, 0x44, 0xFF, 0xD3, 0x01, 0x3C, 0xFC, 0x2A, 0x07,
+       0xDC, 0xF1, 0x1A, 0x2A, 0x06, 0x36, 0xBE, 0xF1, 0x8E, 0x06, 0xD5,
+       0xFC, 0x67, 0x01, 0x7F, 0xFF, 0x1E, 0x00, 0xFE, 0xFF, 0xFD, 0xFF,
+       0x36, 0x00, 0x37, 0xFF, 0xE6, 0x01, 0x36, 0xFC, 0xEF, 0x06, 0xFC,
+       0xF2, 0x81, 0x22, 0x1C, 0x3C, 0xEC, 0xF2, 0x90, 0x05, 0x85, 0xFD,
+       0xFB, 0x00, 0xB6, 0xFF, 0x0A, 0x00, 0x01, 0x00, 0xFE, 0xFF, 0x35,
+       0x00, 0x38, 0xFF, 0xDA, 0x01, 0x6A, 0xFC, 0x53, 0x06, 0xBA, 0xF4,
+       0xCE, 0x1A, 0x32, 0x41, 0x1F, 0xF5, 0x1D, 0x04, 0x71, 0xFE, 0x71,
+       0x00, 0xFB, 0xFF, 0xF0, 0xFF, 0x05, 0x00, 0xFF, 0xFF, 0x31, 0x00,
+       0x46, 0xFF, 0xB3, 0x01, 0xCF, 0xFC, 0x67, 0x05, 0xEA, 0xF6, 0x44,
+       0x13, 0x1E, 0x45, 0x5E, 0xF8, 0x3F, 0x02, 0x8E, 0xFF, 0xD0, 0xFF,
+       0x4A, 0x00, 0xD2, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x5D,
+       0xFF, 0x76, 0x01, 0x59, 0xFD, 0x42, 0x04, 0x63, 0xF9, 0x1C, 0x0C,
+       0xB6, 0x47, 0xA4, 0xFC, 0x07, 0x00, 0xD0, 0x00, 0x20, 0xFF, 0xA0,
+       0x00, 0xB1, 0xFF, 0x13, 0x00, 0x00, 0x00, 0x21, 0x00, 0x7A, 0xFF,
+       0x2B, 0x01, 0xFE, 0xFD, 0xF8, 0x02, 0xFB, 0xFB, 0x8D, 0x05, 0xE5,
+       0x48, 0xE3, 0x01, 0x91, 0xFD, 0x25, 0x02, 0x6B, 0xFE, 0xF7, 0x00,
+       0x8F, 0xFF, 0x1C, 0x00, 0x18, 0x00, 0x9C, 0xFF, 0xD6, 0x00, 0xB1,
+       0xFE, 0xA1, 0x01, 0x89, 0xFE, 0xC3, 0xFF, 0x9C, 0x48, 0xFD, 0x07,
+       0xFA, 0xFA, 0x7A, 0x03, 0xBC, 0xFD, 0x49, 0x01, 0x6E, 0xFF, 0x24,
+       0x00, 0x00, 0x00, 0x10, 0x00, 0xBE, 0xFF, 0x7F, 0x00, 0x65, 0xFF,
+       0x51, 0x00, 0xEB, 0x00, 0xE1, 0xFA, 0xE1, 0x46, 0xCD, 0x0E, 0x6A,
+       0xF8, 0xB8, 0x04, 0x20, 0xFD, 0x90, 0x01, 0x53, 0xFF, 0x2D, 0x00,
+       0xFF, 0xFF, 0x09, 0x00, 0xDE, 0xFF, 0x2B, 0x00, 0x11, 0x00, 0x1B,
+       0xFF, 0x02, 0x03, 0xFE, 0xF6, 0xC3, 0x43, 0x22, 0x16, 0x07, 0xF6,
+       0xCA, 0x05, 0xA3, 0xFC, 0xC5, 0x01, 0x3F, 0xFF, 0x33, 0x00, 0xFF,
+       0xFF, 0x03, 0x00, 0xFB, 0xFF, 0xDF, 0xFF, 0xA9, 0x00, 0x10, 0xFE,
+       0xB9, 0x04, 0x27, 0xF4, 0x5E, 0x3F, 0xC3, 0x1D, 0xFE, 0xF3, 0x99,
+       0x06, 0x50, 0xFC, 0xE2, 0x01, 0x36, 0xFF, 0x36, 0x00, 0xFE, 0xFF,
+       0x00, 0x00, 0x13, 0x00, 0x9F, 0xFF, 0x28, 0x01, 0x3A, 0xFD, 0x00,
+       0x06, 0x5A, 0xF2, 0xDF, 0x39, 0x73, 0x25, 0x79, 0xF2, 0x12, 0x07,
+       0x31, 0xFC, 0xE3, 0x01, 0x3B, 0xFF, 0x35, 0x00, 0xFD, 0xFF, 0xFD,
+       0xFF, 0x24, 0x00, 0x6D, 0xFF, 0x88, 0x01, 0xA2, 0xFC, 0xD0, 0x06,
+       0x8C, 0xF1, 0x78, 0x33, 0xF2, 0x2C, 0x9E, 0xF1, 0x24, 0x07, 0x4E,
+       0xFC, 0xC3, 0x01, 0x4E, 0xFF, 0x2F, 0x00, 0xFD, 0xFF, 0xFD, 0xFF,
+       0x30, 0x00, 0x4C, 0xFF, 0xC7, 0x01, 0x4A, 0xFC, 0x27, 0x07, 0xA8,
+       0xF1, 0x62, 0x2C, 0xFD, 0x33, 0x93, 0xF1, 0xC4, 0x06, 0xAB, 0xFC,
+       0x82, 0x01, 0x71, 0xFF, 0x23, 0x00, 0xFE, 0xFF, 0xFD, 0xFF, 0x36,
+       0x00, 0x3A, 0xFF, 0xE4, 0x01, 0x32, 0xFC, 0x0C, 0x07, 0x91, 0xF2,
+       0xDD, 0x24, 0x54, 0x3A, 0x74, 0xF2, 0xEB, 0x05, 0x49, 0xFD, 0x20,
+       0x01, 0xA3, 0xFF, 0x11, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x36, 0x00,
+       0x37, 0xFF, 0xE1, 0x01, 0x55, 0xFC, 0x8C, 0x06, 0x22, 0xF4, 0x2C,
+       0x1D, 0xC0, 0x3F, 0x55, 0xF4, 0x9B, 0x04, 0x23, 0xFE, 0x9F, 0x00,
+       0xE4, 0xFF, 0xF9, 0xFF, 0x04, 0x00, 0xFF, 0xFF, 0x33, 0x00, 0x40,
+       0xFF, 0xC1, 0x01, 0xAB, 0xFC, 0xB7, 0x05, 0x34, 0xF6, 0x8E, 0x15,
+       0x0B, 0x44, 0x42, 0xF7, 0xDC, 0x02, 0x32, 0xFF, 0x04, 0x00, 0x31,
+       0x00, 0xDC, 0xFF, 0x09, 0x00, 0xFF, 0xFF, 0x2C, 0x00, 0x55, 0xFF,
+       0x8B, 0x01, 0x2B, 0xFD, 0xA1, 0x04, 0x9B, 0xF8, 0x42, 0x0E, 0x0F,
+       0x47, 0x38, 0xFB, 0xBE, 0x00, 0x6A, 0x00, 0x58, 0xFF, 0x85, 0x00,
+       0xBB, 0xFF, 0x10, 0x00, 0x00, 0x00, 0x24, 0x00, 0x71, 0xFF, 0x43,
+       0x01, 0xC9, 0xFD, 0x60, 0x03, 0x2E, 0xFB, 0x7E, 0x07, 0xAF, 0x48,
+       0x2D, 0x00, 0x58, 0xFE, 0xBB, 0x01, 0xA3, 0xFE, 0xDD, 0x00, 0x99,
+       0xFF, 0x19, 0x00, 0x1B, 0x00, 0x91, 0xFF, 0xF1, 0x00, 0x79, 0xFE,
+       0x0A, 0x02, 0xC3, 0xFD, 0x73, 0x01, 0xDB, 0x48, 0x07, 0x06, 0xC7,
+       0xFB, 0x12, 0x03, 0xF1, 0xFD, 0x31, 0x01, 0x78, 0xFF, 0x22, 0x00,
+       0x00, 0x00, 0x12, 0x00, 0xB3, 0xFF, 0x99, 0x00, 0x2E, 0xFF, 0xB6,
+       0x00, 0x36, 0x00, 0x47, 0xFC, 0x90, 0x47, 0xA4, 0x0C, 0x31, 0xF9,
+       0x5A, 0x04, 0x4E, 0xFD, 0x7C, 0x01, 0x5B, 0xFF, 0x2A, 0x00, 0x00,
+       0x00, 0x0B, 0x00, 0xD5, 0xFF, 0x44, 0x00, 0xDD, 0xFF, 0x77, 0xFF,
+       0x67, 0x02, 0x14, 0xF8, 0xDC, 0x44, 0xD5, 0x13, 0xBC, 0xF6, 0x7C,
+       0x05, 0xC5, 0xFC, 0xB7, 0x01, 0x44, 0xFF, 0x31, 0x00, 0xFF, 0xFF,
+       0x05, 0x00, 0xF3, 0xFF, 0xF5, 0xFF, 0x7D, 0x00, 0x5D, 0xFE, 0x3E,
+       0x04, 0xEA, 0xF4, 0xD9, 0x40, 0x66, 0x1B, 0x93, 0xF4, 0x62, 0x06,
+       0x64, 0xFC, 0xDC, 0x01, 0x38, 0xFF, 0x36, 0x00, 0xFE, 0xFF, 0x00,
+       0x00, 0x0C, 0x00, 0xB1, 0xFF, 0x04, 0x01, 0x76, 0xFD, 0xA8, 0x05,
+       0xCC, 0xF2, 0xAB, 0x3B, 0x18, 0x23, 0xE0, 0xF2, 0xF7, 0x06, 0x35,
+       0xFC, 0xE6, 0x01, 0x38, 0xFF, 0x36, 0x00, 0xFD, 0xFF, 0xFE, 0xFF,
+       0x20, 0x00, 0x7B, 0xFF, 0x6E, 0x01, 0xCA, 0xFC, 0x9D, 0x06, 0xB1,
+       0xF1, 0x86, 0x35, 0xAE, 0x2A, 0xCD, 0xF1, 0x2B, 0x07, 0x3F, 0xFC,
+       0xD1, 0x01, 0x46, 0xFF, 0x32, 0x00, 0xFD, 0xFF, 0xFD, 0xFF, 0x2D,
+       0x00, 0x54, 0xFF, 0xB7, 0x01, 0x5E, 0xFC, 0x19, 0x07, 0x88, 0xF1,
+       0x9F, 0x2E, 0xE3, 0x31, 0x7E, 0xF1, 0xEE, 0x06, 0x88, 0xFC, 0x9A,
+       0x01, 0x64, 0xFF, 0x28, 0x00, 0xFD, 0xFF, 0xFD, 0xFF, 0x34, 0x00,
+       0x3E, 0xFF, 0xDF, 0x01, 0x33, 0xFC, 0x20, 0x07, 0x35, 0xF2, 0x36,
+       0x27, 0x78, 0x38, 0x14, 0xF2, 0x3B, 0x06, 0x11, 0xFD, 0x41, 0x01,
+       0x92, 0xFF, 0x17, 0x00, 0xFF, 0xFF, 0xFD, 0xFF, 0x36, 0x00, 0x36,
+       0xFF, 0xE5, 0x01, 0x44, 0xFC, 0xBD, 0x06, 0x97, 0xF3, 0x8A, 0x1F,
+       0x31, 0x3E, 0xA5, 0xF3, 0x0F, 0x05, 0xDA, 0xFD, 0xC9, 0x00, 0xCF,
+       0xFF, 0x01, 0x00, 0x02, 0x00, 0xFE, 0xFF, 0x34, 0x00, 0x3C, 0xFF,
+       0xCE, 0x01, 0x8C, 0xFC, 0x00, 0x06, 0x86, 0xF5, 0xE0, 0x17, 0xDB,
+       0x42, 0x3F, 0xF6, 0x71, 0x03, 0xD9, 0xFE, 0x36, 0x00, 0x18, 0x00,
+       0xE5, 0xFF, 0x07, 0x00, 0xFF, 0xFF, 0x2E, 0x00, 0x4E, 0xFF, 0x9E,
+       0x01, 0x00, 0xFD, 0xFC, 0x04, 0xD7, 0xF7, 0x75, 0x10, 0x48, 0x46,
+       0xE4, 0xF9, 0x6E, 0x01, 0x06, 0x00, 0x8E, 0xFF, 0x6B, 0x00, 0xC6,
+       0xFF, 0x0E, 0x00, 0x00, 0x00, 0x26, 0x00, 0x68, 0xFF, 0x5B, 0x01,
+       0x96, 0xFD, 0xC6, 0x03, 0x61, 0xFA, 0x81, 0x09, 0x57, 0x48, 0x8D,
+       0xFE, 0x1B, 0xFF, 0x52, 0x01, 0xDB, 0xFE, 0xC2, 0x00, 0xA4, 0xFF,
+       0x16, 0x00, 0x1E, 0x00, 0x87, 0xFF, 0x0B, 0x01, 0x42, 0xFE, 0x74,
+       0x02, 0xF9, 0xFC, 0x39, 0x03, 0xF5, 0x48, 0x24, 0x04, 0x94, 0xFC,
+       0xA9, 0x02, 0x27, 0xFE, 0x18, 0x01, 0x82, 0xFF, 0x1F, 0x00, 0x00,
+       0x00, 0x15, 0x00, 0xA9, 0xFF, 0xB4, 0x00, 0xF7, 0xFE, 0x1D, 0x01,
+       0x7A, 0xFF, 0xC5, 0xFD, 0x1D, 0x48, 0x89, 0x0A, 0xFB, 0xF9, 0xF8,
+       0x03, 0x7D, 0xFD, 0x66, 0x01, 0x63, 0xFF, 0x28, 0x00, 0x00, 0x00,
+       0x0D, 0x00, 0xCB, 0xFF, 0x5E, 0x00, 0xA9, 0xFF, 0xD6, 0xFF, 0xC3,
+       0x01, 0x43, 0xF9, 0xD7, 0x45, 0x92, 0x11, 0x77, 0xF7, 0x28, 0x05,
+       0xEC, 0xFC, 0xA7, 0x01, 0x4A, 0xFF, 0x2F, 0x00, 0xFF, 0xFF, 0x06,
+       0x00, 0xEA, 0xFF, 0x0C, 0x00, 0x4E, 0x00, 0xAF, 0xFE, 0xB8, 0x03,
+       0xC7, 0xF5, 0x38, 0x42, 0x0C, 0x19, 0x32, 0xF5, 0x23, 0x06, 0x7D,
+       0xFC, 0xD3, 0x01, 0x3A, 0xFF, 0x35, 0x00, 0xFE, 0xFF, 0x02, 0x00,
+       0x05, 0x00, 0xC5, 0xFF, 0xDE, 0x00, 0xB7, 0xFD, 0x45, 0x05, 0x56,
+       0xF3, 0x61, 0x3D, 0xBA, 0x20, 0x56, 0xF3, 0xD3, 0x06, 0x3E, 0xFC,
+       0xE6, 0x01, 0x36, 0xFF, 0x36, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0x1A,
+       0x00, 0x8A, 0xFF, 0x51, 0x01, 0xF8, 0xFC, 0x5E, 0x06, 0xED, 0xF1,
+       0x82, 0x37, 0x60, 0x28, 0x0E, 0xF2, 0x26, 0x07, 0x35, 0xFC, 0xDB,
+       0x01, 0x40, 0xFF, 0x34, 0x00, 0xFD, 0xFF, 0xFD, 0xFF, 0x29, 0x00,
+       0x5F, 0xFF, 0xA5, 0x01, 0x78, 0xFC, 0xFF, 0x06, 0x7D, 0xF1, 0xCF,
+       0x30, 0xB8, 0x2F, 0x80, 0xF1, 0x0D, 0x07, 0x6A, 0xFC, 0xAE, 0x01,
+       0x59, 0xFF, 0x2B, 0x00, 0xFD, 0xFF, 0xFD, 0xFF, 0x33, 0x00, 0x43,
+       0xFF, 0xD6, 0x01, 0x39, 0xFC, 0x2A, 0x07, 0xEB, 0xF1, 0x87, 0x29,
+       0x85, 0x36, 0xCC, 0xF1, 0x7F, 0x06, 0xE0, 0xFC, 0x60, 0x01, 0x82,
+       0xFF, 0x1D, 0x00, 0xFE, 0xFF, 0xFD, 0xFF, 0x36, 0x00, 0x37, 0xFF,
+       0xE6, 0x01, 0x38, 0xFC, 0xE6, 0x06, 0x19, 0xF3, 0xEA, 0x21, 0x8A,
+       0x3C, 0x0E, 0xF3, 0x78, 0x05, 0x96, 0xFD, 0xF1, 0x00, 0xBB, 0xFF,
+       0x08, 0x00, 0x01, 0x00, 0xFE, 0xFF, 0x35, 0x00, 0x39, 0xFF, 0xD8,
+       0x01, 0x70, 0xFC, 0x43, 0x06, 0xE1, 0xF4, 0x38, 0x1A, 0x8C, 0x41,
+       0x55, 0xF5, 0xFC, 0x03, 0x85, 0xFE, 0x66, 0x00, 0x01, 0x00, 0xEE,
+       0xFF, 0x06, 0x00, 0xFF, 0xFF, 0x30, 0x00, 0x47, 0xFF, 0xAF, 0x01,
+       0xD8, 0xFC, 0x52, 0x05, 0x19, 0xF7, 0xB2, 0x12, 0x5C, 0x45, 0xA9,
+       0xF8, 0x16, 0x02, 0xA6, 0xFF, 0xC3, 0xFF, 0x51, 0x00, 0xD0, 0xFF,
+       0x0C, 0x00, 0x00, 0x00, 0x29, 0x00, 0x5F, 0xFF, 0x71, 0x01, 0x65,
+       0xFD, 0x29, 0x04, 0x96, 0xF9, 0x95, 0x0B, 0xDC, 0x47, 0x03, 0xFD,
+       0xD9, 0xFF, 0xEA, 0x00, 0x12, 0xFF, 0xA7, 0x00, 0xAE, 0xFF, 0x14,
+       0x00, 0x00, 0x00, 0x20, 0x00, 0x7D, 0xFF, 0x24, 0x01, 0x0C, 0xFE,
+       0xDE, 0x02, 0x2E, 0xFC, 0x13, 0x05, 0xEC, 0x48, 0x54, 0x02, 0x5E,
+       0xFD, 0x3F, 0x02, 0x5D, 0xFE, 0xFE, 0x00, 0x8C, 0xFF, 0x1C, 0x00,
+       0x17, 0x00, 0x9E, 0xFF, 0xCF, 0x00, 0xBF, 0xFE, 0x86, 0x01, 0xBA,
+       0xFE, 0x5A, 0xFF, 0x86, 0x48, 0x7D, 0x08, 0xC7, 0xFA, 0x93, 0x03,
+       0xB0, 0xFD, 0x4F, 0x01, 0x6C, 0xFF, 0x25, 0x00, 0x00, 0x00, 0x0F,
+       0x00, 0xC0, 0xFF, 0x78, 0x00, 0x73, 0xFF, 0x38, 0x00, 0x17, 0x01,
+       0x8B, 0xFA, 0xAF, 0x46, 0x59, 0x0F, 0x39, 0xF8, 0xCF, 0x04, 0x15,
+       0xFD, 0x95, 0x01, 0x51, 0xFF, 0x2D, 0x00, 0xFF, 0xFF, 0x08, 0x00,
+       0xE1, 0xFF, 0x25, 0x00, 0x1D, 0x00, 0x05, 0xFF, 0x28, 0x03, 0xBD,
+       0xF6, 0x77, 0x43, 0xB6, 0x16, 0xDC, 0xF5, 0xDD, 0x05, 0x9B, 0xFC,
+       0xC8, 0x01, 0x3E, 0xFF, 0x33, 0x00, 0xFF, 0xFF, 0x03, 0x00, 0xFD,
+       0xFF, 0xD9, 0xFF, 0xB4, 0x00, 0xFD, 0xFD, 0xD7, 0x04, 0xFA, 0xF3,
+       0xFC, 0x3E, 0x5B, 0x1E, 0xDB, 0xF3, 0xA6, 0x06, 0x4C, 0xFC, 0xE3,
+       0x01, 0x36, 0xFF, 0x36, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x14, 0x00,
+       0x9B, 0xFF, 0x31, 0x01, 0x2C, 0xFD, 0x15, 0x06, 0x41, 0xF2, 0x6A,
+       0x39, 0x0A, 0x26, 0x61, 0xF2, 0x17, 0x07, 0x31, 0xFC, 0xE2, 0x01,
+       0x3B, 0xFF, 0x35, 0x00, 0xFD, 0xFF, 0xFD, 0xFF, 0x25, 0x00, 0x6A,
+       0xFF, 0x8E, 0x01, 0x99, 0xFC, 0xDB, 0x06, 0x86, 0xF1, 0xF2, 0x32,
+       0x82, 0x2D, 0x96, 0xF1, 0x21, 0x07, 0x53, 0xFC, 0xC0, 0x01, 0x50,
+       0xFF, 0x2E, 0x00, 0xFD, 0xFF, 0xFD, 0xFF, 0x30, 0x00, 0x4A, 0xFF,
+       0xCA, 0x01, 0x46, 0xFC, 0x29, 0x07, 0xB3, 0xF1, 0xD1, 0x2B, 0x81,
+       0x34, 0x9C, 0xF1, 0xB8, 0x06, 0xB5, 0xFC, 0x7C, 0x01, 0x74, 0xFF,
+       0x22, 0x00, 0xFE, 0xFF, 0xFD, 0xFF, 0x36, 0x00, 0x39, 0xFF, 0xE5,
+       0x01, 0x32, 0xFC, 0x06, 0x07, 0xAA, 0xF2, 0x46, 0x24, 0xC8, 0x3A,
+       0x90, 0xF2, 0xD6, 0x05, 0x57, 0xFD, 0x17, 0x01, 0xA8, 0xFF, 0x0F,
+       0x00, 0x00, 0x00, 0xFE, 0xFF, 0x36, 0x00, 0x37, 0xFF, 0xDF, 0x01,
+       0x5A, 0xFC, 0x7E, 0x06, 0x47, 0xF4, 0x94, 0x1C, 0x1F, 0x40, 0x85,
+       0xF4, 0x7D, 0x04, 0x36, 0xFE, 0x93, 0x00, 0xEA, 0xFF, 0xF7, 0xFF,
+       0x04, 0x00, 0xFF, 0xFF, 0x32, 0x00, 0x42, 0xFF, 0xBE, 0x01, 0xB4,
+       0xFC, 0xA4, 0x05, 0x61, 0xF6, 0xFB, 0x14, 0x53, 0x44, 0x86, 0xF7,
+       0xB6, 0x02, 0x49, 0xFF, 0xF7, 0xFF, 0x37, 0x00, 0xD9, 0xFF, 0x0A,
+       0x00, 0x00, 0x00, 0x2B, 0x00, 0x57, 0xFF, 0x86, 0x01, 0x36, 0xFD,
+       0x89, 0x04, 0xCD, 0xF8, 0xB7, 0x0D, 0x3D, 0x47, 0x91, 0xFB, 0x91,
+       0x00, 0x83, 0x00, 0x4A, 0xFF, 0x8C, 0x00, 0xB9, 0xFF, 0x11, 0x00,
+       0x00, 0x00, 0x23, 0x00, 0x73, 0xFF, 0x3D, 0x01, 0xD6, 0xFD, 0x46,
+       0x03, 0x61, 0xFB, 0x00, 0x07, 0xBF, 0x48, 0x98, 0x00, 0x26, 0xFE,
+       0xD5, 0x01, 0x95, 0xFE, 0xE3, 0x00, 0x96, 0xFF, 0x1A, 0x00, 0x1A,
+       0x00, 0x94, 0xFF, 0xEA, 0x00, 0x87, 0xFE, 0xF0, 0x01, 0xF5, 0xFD,
+       0x05, 0x01, 0xCE, 0x48, 0x83, 0x06, 0x94, 0xFB, 0x2C, 0x03, 0xE4,
+       0xFD, 0x37, 0x01, 0x76, 0xFF, 0x22, 0x00, 0x00, 0x00, 0x12, 0x00,
+       0xB6, 0xFF, 0x93, 0x00, 0x3C, 0xFF, 0x9D, 0x00, 0x63, 0x00, 0xEB,
+       0xFB, 0x69, 0x47, 0x2D, 0x0D, 0xFF, 0xF8, 0x72, 0x04, 0x42, 0xFD,
+       0x81, 0x01, 0x59, 0xFF, 0x2B, 0x00, 0x00, 0x00, 0x0A, 0x00, 0xD7,
+       0xFF, 0x3E, 0x00, 0xEA, 0xFF, 0x60, 0xFF, 0x8F, 0x02, 0xCD, 0xF7,
+       0x99, 0x44, 0x68, 0x14, 0x8E, 0xF6, 0x90, 0x05, 0xBC, 0xFC, 0xBA,
+       0x01, 0x43, 0xFF, 0x32, 0x00, 0xFF, 0xFF, 0x04, 0x00, 0xF5, 0xFF,
+       0xEF, 0xFF, 0x88, 0x00, 0x49, 0xFE, 0x5D, 0x04, 0xB7, 0xF4, 0x7D,
+       0x40, 0xFD, 0x1B, 0x6C, 0xF4, 0x70, 0x06, 0x5F, 0xFC, 0xDE, 0x01,
+       0x37, 0xFF, 0x36, 0x00, 0xFE, 0xFF, 0x00, 0x00, 0x0E, 0x00, 0xAC,
+       0xFF, 0x0E, 0x01, 0x66, 0xFD, 0xBF, 0x05, 0xAD, 0xF2, 0x3B, 0x3B,
+       0xB0, 0x23, 0xC4, 0xF2, 0xFF, 0x06, 0x33, 0xFC, 0xE5, 0x01, 0x38,
+       0xFF, 0x36, 0x00, 0xFD, 0xFF, 0xFE, 0xFF, 0x21, 0x00, 0x77, 0xFF,
+       0x75, 0x01, 0xBF, 0xFC, 0xAB, 0x06, 0xA6, 0xF1, 0x05, 0x35, 0x40,
+       0x2B, 0xBF, 0xF1, 0x2A, 0x07, 0x42, 0xFC, 0xCE, 0x01, 0x48, 0xFF,
+       0x31, 0x00, 0xFD, 0xFF, 0xFD, 0xFF, 0x2E, 0x00, 0x52, 0xFF, 0xBC,
+       0x01, 0x58, 0xFC, 0x1D, 0x07, 0x8E, 0xF1, 0x11, 0x2E, 0x6B, 0x32,
+       0x81, 0xF1, 0xE5, 0x06, 0x90, 0xFC, 0x94, 0x01, 0x67, 0xFF, 0x26,
+       0x00, 0xFD, 0xFF, 0xFD, 0xFF, 0x35, 0x00, 0x3C, 0xFF, 0xE0, 0x01,
+       0x32, 0xFC, 0x1C, 0x07, 0x4B, 0xF2, 0xA0, 0x26, 0xF2, 0x38, 0x2A,
+       0xF2, 0x28, 0x06, 0x1F, 0xFD, 0x39, 0x01, 0x96, 0xFF, 0x16, 0x00,
+       0xFF, 0xFF, 0xFE, 0xFF, 0x36, 0x00, 0x36, 0xFF, 0xE4, 0x01, 0x48,
+       0xFC, 0xB2, 0x06, 0xB9, 0xF3, 0xF3, 0x1E, 0x98, 0x3E, 0xCF, 0xF3,
+       0xF3, 0x04, 0xEB, 0xFD, 0xBF, 0x00, 0xD4, 0xFF, 0xFF, 0xFF, 0x03,
+       0x00, 0xFE, 0xFF, 0x34, 0x00, 0x3D, 0xFF, 0xCB, 0x01, 0x93, 0xFC,
+       0xEF, 0x05, 0xB0, 0xF5, 0x4B, 0x17, 0x2A, 0x43, 0x7D, 0xF6, 0x4D,
+       0x03, 0xEF, 0xFE, 0x2A, 0x00, 0x1E, 0x00, 0xE3, 0xFF, 0x08, 0x00,
+       0xFF, 0xFF, 0x2E, 0x00, 0x4F, 0xFF, 0x99, 0x01, 0x0B, 0xFD, 0xE6,
+       0x04, 0x08, 0xF8, 0xE7, 0x0F, 0x7C, 0x46, 0x37, 0xFA, 0x42, 0x01,
+       0x1F, 0x00, 0x81, 0xFF, 0x71, 0x00, 0xC3, 0xFF, 0x0F, 0x00, 0x00,
+       0x00, 0x26, 0x00, 0x6A, 0xFF, 0x55, 0x01, 0xA3, 0xFD, 0xAD, 0x03,
+       0x94, 0xFA, 0xFF, 0x08, 0x70, 0x48, 0xF3, 0xFE, 0xEA, 0xFE, 0x6C,
+       0x01, 0xCD, 0xFE, 0xC9, 0x00, 0xA1, 0xFF, 0x17, 0x00, 0x1D, 0x00,
+       0x8A, 0xFF, 0x04, 0x01, 0x50, 0xFE, 0x5A, 0x02, 0x2C, 0xFD, 0xC6,
+       0x02, 0xF2, 0x48, 0x9B, 0x04, 0x61, 0xFC, 0xC3, 0x02, 0x19, 0xFE,
+       0x1E, 0x01, 0x7F, 0xFF, 0x20, 0x00, 0x00, 0x00, 0x14, 0x00, 0xAC,
+       0xFF, 0xAE, 0x00, 0x05, 0xFF, 0x03, 0x01, 0xAA, 0xFF, 0x63, 0xFD,
+       0xFD, 0x47, 0x0E, 0x0B, 0xC8, 0xF9, 0x11, 0x04, 0x71, 0xFD, 0x6C,
+       0x01, 0x61, 0xFF, 0x28, 0x00, 0x00, 0x00, 0x0C, 0x00, 0xCD, 0xFF,
+       0x57, 0x00, 0xB6, 0xFF, 0xBE, 0xFF, 0xED, 0x01, 0xF5, 0xF8, 0x9B,
+       0x45, 0x22, 0x12, 0x48, 0xF7, 0x3D, 0x05, 0xE2, 0xFC, 0xAB, 0x01,
+       0x49, 0xFF, 0x30, 0x00, 0xFF, 0xFF, 0x06, 0x00, 0xEC, 0xFF, 0x06,
+       0x00, 0x5A, 0x00, 0x9A, 0xFE, 0xDA, 0x03, 0x8D, 0xF5, 0xE1, 0x41,
+       0xA1, 0x19, 0x09, 0xF5, 0x33, 0x06, 0x77, 0xFC, 0xD6, 0x01, 0x3A,
+       0xFF, 0x35, 0x00, 0xFE, 0xFF, 0x01, 0x00, 0x07, 0x00, 0xC0, 0xFF,
+       0xE8, 0x00, 0xA6, 0xFD, 0x5F, 0x05, 0x31, 0xF3, 0xF6, 0x3C, 0x52,
+       0x21, 0x37, 0xF3, 0xDD, 0x06, 0x3B, 0xFC, 0xE6, 0x01, 0x36, 0xFF,
+       0x36, 0x00, 0xFD, 0xFF, 0xFE, 0xFF, 0x1C, 0x00, 0x86, 0xFF, 0x59,
+       0x01, 0xEC, 0xFC, 0x6F, 0x06, 0xDC, 0xF1, 0x04, 0x37, 0xF3, 0x28,
+       0xFC, 0xF1, 0x28, 0x07, 0x37, 0xFC, 0xD8, 0x01, 0x41, 0xFF, 0x33,
+       0x00, 0xFD, 0xFF, 0xFD, 0xFF, 0x2A, 0x00, 0x5C, 0xFF, 0xAA, 0x01,
+       0x71, 0xFC, 0x07, 0x07, 0x7E, 0xF1, 0x44, 0x30, 0x44, 0x30, 0x7E,
+       0xF1, 0x07, 0x07, 0x71, 0xFC, 0xAA, 0x01, 0x5C, 0xFF, 0x2A, 0x00,
+       0xFD, 0xFF, 0xFD, 0xFF, 0x33, 0x00, 0x41, 0xFF, 0xD8, 0x01, 0x37,
+       0xFC, 0x28, 0x07, 0xFC, 0xF1, 0xF3, 0x28, 0x04, 0x37, 0xDC, 0xF1,
+       0x6F, 0x06, 0xEC, 0xFC, 0x59, 0x01, 0x86, 0xFF, 0x1C, 0x00, 0xFE,
+       0xFF, 0xFD, 0xFF, 0x36, 0x00, 0x36, 0xFF, 0xE6, 0x01, 0x3B, 0xFC,
+       0xDD, 0x06, 0x37, 0xF3, 0x52, 0x21, 0xF6, 0x3C, 0x31, 0xF3, 0x5F,
+       0x05, 0xA6, 0xFD, 0xE8, 0x00, 0xC0, 0xFF, 0x07, 0x00, 0x01, 0x00,
+       0xFE, 0xFF, 0x35, 0x00, 0x3A, 0xFF, 0xD6, 0x01, 0x77, 0xFC, 0x33,
+       0x06, 0x09, 0xF5, 0xA1, 0x19, 0xE1, 0x41, 0x8D, 0xF5, 0xDA, 0x03,
+       0x9A, 0xFE, 0x5A, 0x00, 0x06, 0x00, 0xEC, 0xFF, 0x06, 0x00, 0xFF,
+       0xFF, 0x30, 0x00, 0x49, 0xFF, 0xAB, 0x01, 0xE2, 0xFC, 0x3D, 0x05,
+       0x48, 0xF7, 0x22, 0x12, 0x9B, 0x45, 0xF5, 0xF8, 0xED, 0x01, 0xBE,
+       0xFF, 0xB6, 0xFF, 0x57, 0x00, 0xCD, 0xFF, 0x0C, 0x00, 0x00, 0x00,
+       0x28, 0x00, 0x61, 0xFF, 0x6C, 0x01, 0x71, 0xFD, 0x11, 0x04, 0xC8,
+       0xF9, 0x0E, 0x0B, 0xFD, 0x47, 0x63, 0xFD, 0xAA, 0xFF, 0x03, 0x01,
+       0x05, 0xFF, 0xAE, 0x00, 0xAC, 0xFF, 0x14, 0x00, 0x00, 0x00, 0x20,
+       0x00, 0x7F, 0xFF, 0x1E, 0x01, 0x19, 0xFE, 0xC3, 0x02, 0x61, 0xFC,
+       0x9B, 0x04, 0xF2, 0x48, 0xC6, 0x02, 0x2C, 0xFD, 0x5A, 0x02, 0x50,
+       0xFE, 0x04, 0x01, 0x8A, 0xFF, 0x1D, 0x00, 0x17, 0x00, 0xA1, 0xFF,
+       0xC9, 0x00, 0xCD, 0xFE, 0x6C, 0x01, 0xEA, 0xFE, 0xF3, 0xFE, 0x70,
+       0x48, 0xFF, 0x08, 0x94, 0xFA, 0xAD, 0x03, 0xA3, 0xFD, 0x55, 0x01,
+       0x6A, 0xFF, 0x26, 0x00, 0x00, 0x00, 0x0F, 0x00, 0xC3, 0xFF, 0x71,
+       0x00, 0x81, 0xFF, 0x1F, 0x00, 0x42, 0x01, 0x37, 0xFA, 0x7C, 0x46,
+       0xE7, 0x0F, 0x08, 0xF8, 0xE6, 0x04, 0x0B, 0xFD, 0x99, 0x01, 0x4F,
+       0xFF, 0x2E, 0x00, 0xFF, 0xFF, 0x08, 0x00, 0xE3, 0xFF, 0x1E, 0x00,
+       0x2A, 0x00, 0xEF, 0xFE, 0x4D, 0x03, 0x7D, 0xF6, 0x2A, 0x43, 0x4B,
+       0x17, 0xB0, 0xF5, 0xEF, 0x05, 0x93, 0xFC, 0xCB, 0x01, 0x3D, 0xFF,
+       0x34, 0x00, 0xFE, 0xFF, 0x03, 0x00, 0xFF, 0xFF, 0xD4, 0xFF, 0xBF,
+       0x00, 0xEB, 0xFD, 0xF3, 0x04, 0xCF, 0xF3, 0x98, 0x3E, 0xF3, 0x1E,
+       0xB9, 0xF3, 0xB2, 0x06, 0x48, 0xFC, 0xE4, 0x01, 0x36, 0xFF, 0x36,
+       0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x16, 0x00, 0x96, 0xFF, 0x39, 0x01,
+       0x1F, 0xFD, 0x28, 0x06, 0x2A, 0xF2, 0xF2, 0x38, 0xA0, 0x26, 0x4B,
+       0xF2, 0x1C, 0x07, 0x32, 0xFC, 0xE0, 0x01, 0x3C, 0xFF, 0x35, 0x00,
+       0xFD, 0xFF, 0xFD, 0xFF, 0x26, 0x00, 0x67, 0xFF, 0x94, 0x01, 0x90,
+       0xFC, 0xE5, 0x06, 0x81, 0xF1, 0x6B, 0x32, 0x11, 0x2E, 0x8E, 0xF1,
+       0x1D, 0x07, 0x58, 0xFC, 0xBC, 0x01, 0x52, 0xFF, 0x2E, 0x00, 0xFD,
+       0xFF, 0xFD, 0xFF, 0x31, 0x00, 0x48, 0xFF, 0xCE, 0x01, 0x42, 0xFC,
+       0x2A, 0x07, 0xBF, 0xF1, 0x40, 0x2B, 0x05, 0x35, 0xA6, 0xF1, 0xAB,
+       0x06, 0xBF, 0xFC, 0x75, 0x01, 0x77, 0xFF, 0x21, 0x00, 0xFE, 0xFF,
+       0xFD, 0xFF, 0x36, 0x00, 0x38, 0xFF, 0xE5, 0x01, 0x33, 0xFC, 0xFF,
+       0x06, 0xC4, 0xF2, 0xB0, 0x23, 0x3B, 0x3B, 0xAD, 0xF2, 0xBF, 0x05,
+       0x66, 0xFD, 0x0E, 0x01, 0xAC, 0xFF, 0x0E, 0x00, 0x00, 0x00, 0xFE,
+       0xFF, 0x36, 0x00, 0x37, 0xFF, 0xDE, 0x01, 0x5F, 0xFC, 0x70, 0x06,
+       0x6C, 0xF4, 0xFD, 0x1B, 0x7D, 0x40, 0xB7, 0xF4, 0x5D, 0x04, 0x49,
+       0xFE, 0x88, 0x00, 0xEF, 0xFF, 0xF5, 0xFF, 0x04, 0x00, 0xFF, 0xFF,
+       0x32, 0x00, 0x43, 0xFF, 0xBA, 0x01, 0xBC, 0xFC, 0x90, 0x05, 0x8E,
+       0xF6, 0x68, 0x14, 0x99, 0x44, 0xCD, 0xF7, 0x8F, 0x02, 0x60, 0xFF,
+       0xEA, 0xFF, 0x3E, 0x00, 0xD7, 0xFF, 0x0A, 0x00, 0x00, 0x00, 0x2B,
+       0x00, 0x59, 0xFF, 0x81, 0x01, 0x42, 0xFD, 0x72, 0x04, 0xFF, 0xF8,
+       0x2D, 0x0D, 0x69, 0x47, 0xEB, 0xFB, 0x63, 0x00, 0x9D, 0x00, 0x3C,
+       0xFF, 0x93, 0x00, 0xB6, 0xFF, 0x12, 0x00, 0x00, 0x00, 0x22, 0x00,
+       0x76, 0xFF, 0x37, 0x01, 0xE4, 0xFD, 0x2C, 0x03, 0x94, 0xFB, 0x83,
+       0x06, 0xCE, 0x48, 0x05, 0x01, 0xF5, 0xFD, 0xF0, 0x01, 0x87, 0xFE,
+       0xEA, 0x00, 0x94, 0xFF, 0x1A, 0x00, 0x1A, 0x00, 0x96, 0xFF, 0xE3,
+       0x00, 0x95, 0xFE, 0xD5, 0x01, 0x26, 0xFE, 0x98, 0x00, 0xBF, 0x48,
+       0x00, 0x07, 0x61, 0xFB, 0x46, 0x03, 0xD6, 0xFD, 0x3D, 0x01, 0x73,
+       0xFF, 0x23, 0x00, 0x00, 0x00, 0x11, 0x00, 0xB9, 0xFF, 0x8C, 0x00,
+       0x4A, 0xFF, 0x83, 0x00, 0x91, 0x00, 0x91, 0xFB, 0x3D, 0x47, 0xB7,
+       0x0D, 0xCD, 0xF8, 0x89, 0x04, 0x36, 0xFD, 0x86, 0x01, 0x57, 0xFF,
+       0x2B, 0x00, 0x00, 0x00, 0x0A, 0x00, 0xD9, 0xFF, 0x37, 0x00, 0xF7,
+       0xFF, 0x49, 0xFF, 0xB6, 0x02, 0x86, 0xF7, 0x53, 0x44, 0xFB, 0x14,
+       0x61, 0xF6, 0xA4, 0x05, 0xB4, 0xFC, 0xBE, 0x01, 0x42, 0xFF, 0x32,
+       0x00, 0xFF, 0xFF, 0x04, 0x00, 0xF7, 0xFF, 0xEA, 0xFF, 0x93, 0x00,
+       0x36, 0xFE, 0x7D, 0x04, 0x85, 0xF4, 0x1F, 0x40, 0x94, 0x1C, 0x47,
+       0xF4, 0x7E, 0x06, 0x5A, 0xFC, 0xDF, 0x01, 0x37, 0xFF, 0x36, 0x00,
+       0xFE, 0xFF, 0x00, 0x00, 0x0F, 0x00, 0xA8, 0xFF, 0x17, 0x01, 0x57,
+       0xFD, 0xD6, 0x05, 0x90, 0xF2, 0xC8, 0x3A, 0x46, 0x24, 0xAA, 0xF2,
+       0x06, 0x07, 0x32, 0xFC, 0xE5, 0x01, 0x39, 0xFF, 0x36, 0x00, 0xFD,
+       0xFF, 0xFE, 0xFF, 0x22, 0x00, 0x74, 0xFF, 0x7C, 0x01, 0xB5, 0xFC,
+       0xB8, 0x06, 0x9C, 0xF1, 0x81, 0x34, 0xD1, 0x2B, 0xB3, 0xF1, 0x29,
+       0x07, 0x46, 0xFC, 0xCA, 0x01, 0x4A, 0xFF, 0x30, 0x00, 0xFD, 0xFF,
+       0xFD, 0xFF, 0x2E, 0x00, 0x50, 0xFF, 0xC0, 0x01, 0x53, 0xFC, 0x21,
+       0x07, 0x96, 0xF1, 0x82, 0x2D, 0xF2, 0x32, 0x86, 0xF1, 0xDB, 0x06,
+       0x99, 0xFC, 0x8E, 0x01, 0x6A, 0xFF, 0x25, 0x00, 0xFD, 0xFF, 0xFD,
+       0xFF, 0x35, 0x00, 0x3B, 0xFF, 0xE2, 0x01, 0x31, 0xFC, 0x17, 0x07,
+       0x61, 0xF2, 0x0A, 0x26, 0x6A, 0x39, 0x41, 0xF2, 0x15, 0x06, 0x2C,
+       0xFD, 0x31, 0x01, 0x9B, 0xFF, 0x14, 0x00, 0xFF, 0xFF, 0xFE, 0xFF,
+       0x36, 0x00, 0x36, 0xFF, 0xE3, 0x01, 0x4C, 0xFC, 0xA6, 0x06, 0xDB,
+       0xF3, 0x5B, 0x1E, 0xFC, 0x3E, 0xFA, 0xF3, 0xD7, 0x04, 0xFD, 0xFD,
+       0xB4, 0x00, 0xD9, 0xFF, 0xFD, 0xFF, 0x03, 0x00, 0xFF, 0xFF, 0x33,
+       0x00, 0x3E, 0xFF, 0xC8, 0x01, 0x9B, 0xFC, 0xDD, 0x05, 0xDC, 0xF5,
+       0xB6, 0x16, 0x77, 0x43, 0xBD, 0xF6, 0x28, 0x03, 0x05, 0xFF, 0x1D,
+       0x00, 0x25, 0x00, 0xE1, 0xFF, 0x08, 0x00, 0xFF, 0xFF, 0x2D, 0x00,
+       0x51, 0xFF, 0x95, 0x01, 0x15, 0xFD, 0xCF, 0x04, 0x39, 0xF8, 0x59,
+       0x0F, 0xAF, 0x46, 0x8B, 0xFA, 0x17, 0x01, 0x38, 0x00, 0x73, 0xFF,
+       0x78, 0x00, 0xC0, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x25, 0x00, 0x6C,
+       0xFF, 0x4F, 0x01, 0xB0, 0xFD, 0x93, 0x03, 0xC7, 0xFA, 0x7D, 0x08,
+       0x86, 0x48, 0x5A, 0xFF, 0xBA, 0xFE, 0x86, 0x01, 0xBF, 0xFE, 0xCF,
+       0x00, 0x9E, 0xFF, 0x17, 0x00, 0x1C, 0x00, 0x8C, 0xFF, 0xFE, 0x00,
+       0x5D, 0xFE, 0x3F, 0x02, 0x5E, 0xFD, 0x54, 0x02, 0xEC, 0x48, 0x13,
+       0x05, 0x2E, 0xFC, 0xDE, 0x02, 0x0C, 0xFE, 0x24, 0x01, 0x7D, 0xFF,
+       0x20, 0x00, 0x00, 0x00, 0x14, 0x00, 0xAE, 0xFF, 0xA7, 0x00, 0x12,
+       0xFF, 0xEA, 0x00, 0xD9, 0xFF, 0x03, 0xFD, 0xDC, 0x47, 0x95, 0x0B,
+       0x96, 0xF9, 0x29, 0x04, 0x65, 0xFD, 0x71, 0x01, 0x5F, 0xFF, 0x29,
+       0x00, 0x00, 0x00, 0x0C, 0x00, 0xD0, 0xFF, 0x51, 0x00, 0xC3, 0xFF,
+       0xA6, 0xFF, 0x16, 0x02, 0xA9, 0xF8, 0x5C, 0x45, 0xB2, 0x12, 0x19,
+       0xF7, 0x52, 0x05, 0xD8, 0xFC, 0xAF, 0x01, 0x47, 0xFF, 0x30, 0x00,
+       0xFF, 0xFF, 0x06, 0x00, 0xEE, 0xFF, 0x01, 0x00, 0x66, 0x00, 0x85,
+       0xFE, 0xFC, 0x03, 0x55, 0xF5, 0x8C, 0x41, 0x38, 0x1A, 0xE1, 0xF4,
+       0x43, 0x06, 0x70, 0xFC, 0xD8, 0x01, 0x39, 0xFF, 0x35, 0x00, 0xFE,
+       0xFF, 0x01, 0x00, 0x08, 0x00, 0xBB, 0xFF, 0xF1, 0x00, 0x96, 0xFD,
+       0x78, 0x05, 0x0E, 0xF3, 0x8A, 0x3C, 0xEA, 0x21, 0x19, 0xF3, 0xE6,
+       0x06, 0x38, 0xFC, 0xE6, 0x01, 0x37, 0xFF, 0x36, 0x00, 0xFD, 0xFF,
+       0xFE, 0xFF, 0x1D, 0x00, 0x82, 0xFF, 0x60, 0x01, 0xE0, 0xFC, 0x7F,
+       0x06, 0xCC, 0xF1, 0x85, 0x36, 0x87, 0x29, 0xEB, 0xF1, 0x2A, 0x07,
+       0x39, 0xFC, 0xD6, 0x01, 0x43, 0xFF, 0x33, 0x00, 0xFD, 0xFF, 0xFD,
+       0xFF, 0x2B, 0x00, 0x59, 0xFF, 0xAE, 0x01, 0x6A, 0xFC, 0x0D, 0x07,
+       0x80, 0xF1, 0xB8, 0x2F, 0xCF, 0x30, 0x7D, 0xF1, 0xFF, 0x06, 0x78,
+       0xFC, 0xA5, 0x01, 0x5F, 0xFF, 0x29, 0x00, 0xFD, 0xFF, 0xFD, 0xFF,
+       0x34, 0x00, 0x40, 0xFF, 0xDB, 0x01, 0x35, 0xFC, 0x26, 0x07, 0x0E,
+       0xF2, 0x60, 0x28, 0x82, 0x37, 0xED, 0xF1, 0x5E, 0x06, 0xF8, 0xFC,
+       0x51, 0x01, 0x8A, 0xFF, 0x1A, 0x00, 0xFF, 0xFF, 0xFD, 0xFF, 0x36,
+       0x00, 0x36, 0xFF, 0xE6, 0x01, 0x3E, 0xFC, 0xD3, 0x06, 0x56, 0xF3,
+       0xBA, 0x20, 0x61, 0x3D, 0x56, 0xF3, 0x45, 0x05, 0xB7, 0xFD, 0xDE,
+       0x00, 0xC5, 0xFF, 0x05, 0x00, 0x02, 0x00, 0xFE, 0xFF, 0x35, 0x00,
+       0x3A, 0xFF, 0xD3, 0x01, 0x7D, 0xFC, 0x23, 0x06, 0x32, 0xF5, 0x0C,
+       0x19, 0x38, 0x42, 0xC7, 0xF5, 0xB8, 0x03, 0xAF, 0xFE, 0x4E, 0x00,
+       0x0C, 0x00, 0xEA, 0xFF, 0x06, 0x00, 0xFF, 0xFF, 0x2F, 0x00, 0x4A,
+       0xFF, 0xA7, 0x01, 0xEC, 0xFC, 0x28, 0x05, 0x77, 0xF7, 0x92, 0x11,
+       0xD7, 0x45, 0x43, 0xF9, 0xC3, 0x01, 0xD6, 0xFF, 0xA9, 0xFF, 0x5E,
+       0x00, 0xCB, 0xFF, 0x0D, 0x00, 0x00, 0x00, 0x28, 0x00, 0x63, 0xFF,
+       0x66, 0x01, 0x7D, 0xFD, 0xF8, 0x03, 0xFB, 0xF9, 0x89, 0x0A, 0x1D,
+       0x48, 0xC5, 0xFD, 0x7A, 0xFF, 0x1D, 0x01, 0xF7, 0xFE, 0xB4, 0x00,
+       0xA9, 0xFF, 0x15, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x82, 0xFF, 0x18,
+       0x01, 0x27, 0xFE, 0xA9, 0x02, 0x94, 0xFC, 0x24, 0x04, 0xF5, 0x48,
+       0x39, 0x03, 0xF9, 0xFC, 0x74, 0x02, 0x42, 0xFE, 0x0B, 0x01, 0x87,
+       0xFF, 0x1E, 0x00, 0x16, 0x00, 0xA4, 0xFF, 0xC2, 0x00, 0xDB, 0xFE,
+       0x52, 0x01, 0x1B, 0xFF, 0x8D, 0xFE, 0x57, 0x48, 0x81, 0x09, 0x61,
+       0xFA, 0xC6, 0x03, 0x96, 0xFD, 0x5B, 0x01, 0x68, 0xFF, 0x26, 0x00,
+       0x00, 0x00, 0x0E, 0x00, 0xC6, 0xFF, 0x6B, 0x00, 0x8E, 0xFF, 0x06,
+       0x00, 0x6E, 0x01, 0xE4, 0xF9, 0x48, 0x46, 0x75, 0x10, 0xD7, 0xF7,
+       0xFC, 0x04, 0x00, 0xFD, 0x9E, 0x01, 0x4E, 0xFF, 0x2E, 0x00, 0xFF,
+       0xFF, 0x07, 0x00, 0xE5, 0xFF, 0x18, 0x00, 0x36, 0x00, 0xD9, 0xFE,
+       0x71, 0x03, 0x3F, 0xF6, 0xDB, 0x42, 0xE0, 0x17, 0x86, 0xF5, 0x00,
+       0x06, 0x8C, 0xFC, 0xCE, 0x01, 0x3C, 0xFF, 0x34, 0x00, 0xFE, 0xFF,
+       0x02, 0x00, 0x01, 0x00, 0xCF, 0xFF, 0xC9, 0x00, 0xDA, 0xFD, 0x0F,
+       0x05, 0xA5, 0xF3, 0x31, 0x3E, 0x8A, 0x1F, 0x97, 0xF3, 0xBD, 0x06,
+       0x44, 0xFC, 0xE5, 0x01, 0x36, 0xFF, 0x36, 0x00, 0xFD, 0xFF, 0xFF,
+       0xFF, 0x17, 0x00, 0x92, 0xFF, 0x41, 0x01, 0x11, 0xFD, 0x3B, 0x06,
+       0x14, 0xF2, 0x78, 0x38, 0x36, 0x27, 0x35, 0xF2, 0x20, 0x07, 0x33,
+       0xFC, 0xDF, 0x01, 0x3E, 0xFF, 0x34, 0x00, 0xFD, 0xFF, 0xFD, 0xFF,
+       0x28, 0x00, 0x64, 0xFF, 0x9A, 0x01, 0x88, 0xFC, 0xEE, 0x06, 0x7E,
+       0xF1, 0xE3, 0x31, 0x9F, 0x2E, 0x88, 0xF1, 0x19, 0x07, 0x5E, 0xFC,
+       0xB7, 0x01, 0x54, 0xFF, 0x2D, 0x00, 0xFD, 0xFF, 0xFD, 0xFF, 0x32,
+       0x00, 0x46, 0xFF, 0xD1, 0x01, 0x3F, 0xFC, 0x2B, 0x07, 0xCD, 0xF1,
+       0xAE, 0x2A, 0x86, 0x35, 0xB1, 0xF1, 0x9D, 0x06, 0xCA, 0xFC, 0x6E,
+       0x01, 0x7B, 0xFF, 0x20, 0x00, 0xFE, 0xFF, 0xFD, 0xFF, 0x36, 0x00,
+       0x38, 0xFF, 0xE6, 0x01, 0x35, 0xFC, 0xF7, 0x06, 0xE0, 0xF2, 0x18,
+       0x23, 0xAB, 0x3B, 0xCC, 0xF2, 0xA8, 0x05, 0x76, 0xFD, 0x04, 0x01,
+       0xB1, 0xFF, 0x0C, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x36, 0x00, 0x38,
+       0xFF, 0xDC, 0x01, 0x64, 0xFC, 0x62, 0x06, 0x93, 0xF4, 0x66, 0x1B,
+       0xD9, 0x40, 0xEA, 0xF4, 0x3E, 0x04, 0x5D, 0xFE, 0x7D, 0x00, 0xF5,
+       0xFF, 0xF3, 0xFF, 0x05, 0x00, 0xFF, 0xFF, 0x31, 0x00, 0x44, 0xFF,
+       0xB7, 0x01, 0xC5, 0xFC, 0x7C, 0x05, 0xBC, 0xF6, 0xD5, 0x13, 0xDC,
+       0x44, 0x14, 0xF8, 0x67, 0x02, 0x77, 0xFF, 0xDD, 0xFF, 0x44, 0x00,
+       0xD5, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x5B, 0xFF, 0x7C,
+       0x01, 0x4E, 0xFD, 0x5A, 0x04, 0x31, 0xF9, 0xA4, 0x0C, 0x90, 0x47,
+       0x47, 0xFC, 0x36, 0x00, 0xB6, 0x00, 0x2E, 0xFF, 0x99, 0x00, 0xB3,
+       0xFF, 0x12, 0x00, 0x00, 0x00, 0x22, 0x00, 0x78, 0xFF, 0x31, 0x01,
+       0xF1, 0xFD, 0x12, 0x03, 0xC7, 0xFB, 0x07, 0x06, 0xDB, 0x48, 0x73,
+       0x01, 0xC3, 0xFD, 0x0A, 0x02, 0x79, 0xFE, 0xF1, 0x00, 0x91, 0xFF,
+       0x1B, 0x00, 0x19, 0x00, 0x99, 0xFF, 0xDD, 0x00, 0xA3, 0xFE, 0xBB,
+       0x01, 0x58, 0xFE, 0x2D, 0x00, 0xAF, 0x48, 0x7E, 0x07, 0x2E, 0xFB,
+       0x60, 0x03, 0xC9, 0xFD, 0x43, 0x01, 0x71, 0xFF, 0x24, 0x00, 0x00,
+       0x00, 0x10, 0x00, 0xBB, 0xFF, 0x85, 0x00, 0x58, 0xFF, 0x6A, 0x00,
+       0xBE, 0x00, 0x38, 0xFB, 0x0F, 0x47, 0x42, 0x0E, 0x9B, 0xF8, 0xA1,
+       0x04, 0x2B, 0xFD, 0x8B, 0x01, 0x55, 0xFF, 0x2C, 0x00, 0xFF, 0xFF,
+       0x09, 0x00, 0xDC, 0xFF, 0x31, 0x00, 0x04, 0x00, 0x32, 0xFF, 0xDC,
+       0x02, 0x42, 0xF7, 0x0B, 0x44, 0x8E, 0x15, 0x34, 0xF6, 0xB7, 0x05,
+       0xAB, 0xFC, 0xC1, 0x01, 0x40, 0xFF, 0x33, 0x00, 0xFF, 0xFF, 0x04,
+       0x00, 0xF9, 0xFF, 0xE4, 0xFF, 0x9F, 0x00, 0x23, 0xFE, 0x9B, 0x04,
+       0x55, 0xF4, 0xC0, 0x3F, 0x2C, 0x1D, 0x22, 0xF4, 0x8C, 0x06, 0x55,
+       0xFC, 0xE1, 0x01, 0x37, 0xFF, 0x36, 0x00, 0xFE, 0xFF, 0x00, 0x00,
+       0x11, 0x00, 0xA3, 0xFF, 0x20, 0x01, 0x49, 0xFD, 0xEB, 0x05, 0x74,
+       0xF2, 0x54, 0x3A, 0xDD, 0x24, 0x91, 0xF2, 0x0C, 0x07, 0x32, 0xFC,
+       0xE4, 0x01, 0x3A, 0xFF, 0x36, 0x00, 0xFD, 0xFF, 0xFE, 0xFF, 0x23,
+       0x00, 0x71, 0xFF, 0x82, 0x01, 0xAB, 0xFC, 0xC4, 0x06, 0x93, 0xF1,
+       0xFD, 0x33, 0x62, 0x2C, 0xA8, 0xF1, 0x27, 0x07, 0x4A, 0xFC, 0xC7,
+       0x01, 0x4C, 0xFF, 0x30, 0x00, 0xFD, 0xFF, 0xFD, 0xFF, 0x2F, 0x00,
+       0x4E, 0xFF, 0xC3, 0x01, 0x4E, 0xFC, 0x24, 0x07, 0x9E, 0xF1, 0xF2,
+       0x2C, 0x78, 0x33, 0x8C, 0xF1, 0xD0, 0x06, 0xA2, 0xFC, 0x88, 0x01,
+       0x6D, 0xFF, 0x24, 0x00, 0xFD, 0xFF, 0xFD, 0xFF, 0x35, 0x00, 0x3B,
+       0xFF, 0xE3, 0x01, 0x31, 0xFC, 0x12, 0x07, 0x79, 0xF2, 0x73, 0x25,
+       0xDF, 0x39, 0x5A, 0xF2, 0x00, 0x06, 0x3A, 0xFD, 0x28, 0x01, 0x9F,
+       0xFF, 0x13, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x36, 0x00, 0x36, 0xFF,
+       0xE2, 0x01, 0x50, 0xFC, 0x99, 0x06, 0xFE, 0xF3, 0xC3, 0x1D, 0x5E,
+       0x3F, 0x27, 0xF4, 0xB9, 0x04, 0x10, 0xFE, 0xA9, 0x00, 0xDF, 0xFF,
+       0xFB, 0xFF, 0x03, 0x00, 0xFF, 0xFF, 0x33, 0x00, 0x3F, 0xFF, 0xC5,
+       0x01, 0xA3, 0xFC, 0xCA, 0x05, 0x07, 0xF6, 0x22, 0x16, 0xC3, 0x43,
+       0xFE, 0xF6, 0x02, 0x03, 0x1B, 0xFF, 0x11, 0x00, 0x2B, 0x00, 0xDE,
+       0xFF, 0x09, 0x00, 0xFF, 0xFF, 0x2D, 0x00, 0x53, 0xFF, 0x90, 0x01,
+       0x20, 0xFD, 0xB8, 0x04, 0x6A, 0xF8, 0xCD, 0x0E, 0xE1, 0x46, 0xE1,
+       0xFA, 0xEB, 0x00, 0x51, 0x00, 0x65, 0xFF, 0x7F, 0x00, 0xBE, 0xFF,
+       0x10, 0x00, 0x00, 0x00, 0x24, 0x00, 0x6E, 0xFF, 0x49, 0x01, 0xBC,
+       0xFD, 0x7A, 0x03, 0xFA, 0xFA, 0xFD, 0x07, 0x9C, 0x48, 0xC3, 0xFF,
+       0x89, 0xFE, 0xA1, 0x01, 0xB1, 0xFE, 0xD6, 0x00, 0x9C, 0xFF, 0x18,
+       0x00, 0x1C, 0x00, 0x8F, 0xFF, 0xF7, 0x00, 0x6B, 0xFE, 0x25, 0x02,
+       0x91, 0xFD, 0xE3, 0x01, 0xE5, 0x48, 0x8D, 0x05, 0xFB, 0xFB, 0xF8,
+       0x02, 0xFE, 0xFD, 0x2B, 0x01, 0x7A, 0xFF, 0x21, 0x00, 0x00, 0x00,
+       0x13, 0x00, 0xB1, 0xFF, 0xA0, 0x00, 0x20, 0xFF, 0xD0, 0x00, 0x07,
+       0x00, 0xA4, 0xFC, 0xB6, 0x47, 0x1C, 0x0C, 0x63, 0xF9, 0x42, 0x04,
+       0x59, 0xFD, 0x76, 0x01, 0x5D, 0xFF, 0x2A, 0x00, 0x00, 0x00, 0x0B,
+       0x00, 0xD2, 0xFF, 0x4A, 0x00, 0xD0, 0xFF, 0x8E, 0xFF, 0x3F, 0x02,
+       0x5E, 0xF8, 0x1E, 0x45, 0x44, 0x13, 0xEA, 0xF6, 0x67, 0x05, 0xCF,
+       0xFC, 0xB3, 0x01, 0x46, 0xFF, 0x31, 0x00, 0xFF, 0xFF, 0x05, 0x00,
+       0xF0, 0xFF, 0xFB, 0xFF, 0x71, 0x00, 0x71, 0xFE, 0x1D, 0x04, 0x1F,
+       0xF5, 0x32, 0x41, 0xCE, 0x1A, 0xBA, 0xF4, 0x53, 0x06, 0x6A, 0xFC,
+       0xDA, 0x01, 0x38, 0xFF, 0x35, 0x00, 0xFE, 0xFF, 0x01, 0x00, 0x0A,
+       0x00, 0xB6, 0xFF, 0xFB, 0x00, 0x85, 0xFD, 0x90, 0x05, 0xEC, 0xF2,
+       0x1C, 0x3C, 0x81, 0x22, 0xFC, 0xF2, 0xEF, 0x06, 0x36, 0xFC, 0xE6,
+       0x01, 0x37, 0xFF, 0x36, 0x00, 0xFD, 0xFF, 0xFE, 0xFF, 0x1E, 0x00,
+       0x7F, 0xFF, 0x67, 0x01, 0xD5, 0xFC, 0x8E, 0x06, 0xBE, 0xF1, 0x06,
+       0x36, 0x1A, 0x2A, 0xDC, 0xF1, 0x2A, 0x07, 0x3C, 0xFC, 0xD3, 0x01,
+       0x44, 0xFF, 0x32, 0x00, 0xFD, 0xFF, 0xFD, 0xFF, 0x2C, 0x00, 0x57,
+       0xFF, 0xB3, 0x01, 0x64, 0xFC, 0x13, 0x07, 0x83, 0xF1, 0x2C, 0x2F,
+       0x5A, 0x31, 0x7D, 0xF1, 0xF7, 0x06, 0x80, 0xFC, 0x9F, 0x01, 0x61,
+       0xFF, 0x29, 0x00, 0xFD, 0xFF, 0xFD, 0xFF, 0x34, 0x00, 0x3F, 0xFF,
+       0xDD, 0x01, 0x34, 0xFC, 0x23, 0x07, 0x21, 0xF2, 0xCB, 0x27, 0xFE,
+       0x37, 0x00, 0xF2, 0x4D, 0x06, 0x04, 0xFD, 0x49, 0x01, 0x8E, 0xFF,
+       0x19, 0x00, 0xFF, 0xFF, 0xFD, 0xFF, 0x36, 0x00, 0x36, 0xFF, 0xE6,
+       0x01, 0x41, 0xFC, 0xC8, 0x06, 0x76, 0xF3, 0x22, 0x20, 0xCA, 0x3D,
+       0x7D, 0xF3, 0x2A, 0x05, 0xC8, 0xFD, 0xD4, 0x00, 0xCA, 0xFF, 0x03,
+       0x00, 0x02, 0x00, 0xFE, 0xFF, 0x34, 0x00, 0x3B, 0xFF, 0xD1, 0x01,
+       0x84, 0xFC, 0x12, 0x06, 0x5C, 0xF5, 0x76, 0x18, 0x89, 0x42, 0x02,
+       0xF6, 0x94, 0x03, 0xC4, 0xFE, 0x42, 0x00, 0x12, 0x00, 0xE8, 0xFF,
+       0x07, 0x00, 0xFF, 0xFF, 0x2F, 0x00, 0x4C, 0xFF, 0xA2, 0x01, 0xF6,
+       0xFC, 0x12, 0x05, 0xA7, 0xF7, 0x03, 0x11, 0x10, 0x46, 0x93, 0xF9,
+       0x98, 0x01, 0xEE, 0xFF, 0x9B, 0xFF, 0x64, 0x00, 0xC8, 0xFF, 0x0E,
+       0x00, 0x00, 0x00, 0x27, 0x00, 0x65, 0xFF, 0x60, 0x01, 0x8A, 0xFD,
+       0xDF, 0x03, 0x2E, 0xFA, 0x04, 0x0A, 0x3A, 0x48, 0x28, 0xFE, 0x4B,
+       0xFF, 0x38, 0x01, 0xE9, 0xFE, 0xBB, 0x00, 0xA6, 0xFF, 0x16, 0x00,
+       0x00, 0x00, 0x1E, 0x00, 0x84, 0xFF, 0x11, 0x01, 0x34, 0xFE, 0x8F,
+       0x02, 0xC7, 0xFC, 0xAE, 0x03, 0xF7, 0x48, 0xAE, 0x03, 0xC7, 0xFC,
+       0x8F, 0x02, 0x34, 0xFE, 0x11, 0x01, 0x84, 0xFF, 0x1E, 0x00, 0x00,
+       0x00, 0xF4, 0xFF, 0x1A, 0x00, 0xFF, 0x00, 0x07, 0x03, 0x16, 0x06,
+       0x7C, 0x09, 0x2A, 0x0C, 0x2E, 0x0D, 0x2A, 0x0C, 0x7C, 0x09, 0x16,
+       0x06, 0x07, 0x03, 0xFF, 0x00, 0x1A, 0x00, 0xF4, 0xFF, 0xF2, 0xFF,
+       0xA0, 0xFF, 0x71, 0xFF, 0x71, 0x00, 0x86, 0x03, 0x73, 0x08, 0x88,
+       0x0D, 0x78, 0x10, 0xC9, 0x0F, 0xD5, 0x0B, 0x8B, 0x06, 0x28, 0x02,
+       0xDF, 0xFF, 0x6F, 0xFF, 0xC3, 0xFF, 0xFD, 0xFF, 0x00, 0x00, 0xDC,
+       0xFF, 0x80, 0xFF, 0x9A, 0xFF, 0x46, 0x01, 0x1E, 0x05, 0x5A, 0x0A,
+       0xED, 0x0E, 0xAA, 0x10, 0xAF, 0x0E, 0xFD, 0x09, 0xCB, 0x04, 0x18,
+       0x01, 0x8E, 0xFF, 0x85, 0xFF, 0xE1, 0xFF, 0xFC, 0xFF, 0xBD, 0xFF,
+       0x6D, 0xFF, 0xF6, 0xFF, 0x65, 0x02, 0xE5, 0x06, 0x2B, 0x0C, 0xF3,
+       0x0F, 0x60, 0x10, 0x3B, 0x0D, 0x16, 0x08, 0x3F, 0x03, 0x50, 0x00,
+       0x6E, 0xFF, 0xA7, 0xFF, 0xF5, 0xFF, 0xEF, 0xFF, 0x9A, 0xFF, 0x75,
+       0xFF, 0x91, 0x00, 0xC9, 0x03, 0xC8, 0x08, 0xCC, 0x0D, 0x89, 0x10,
+       0x9F, 0x0F, 0x85, 0x0B, 0x3B, 0x06, 0xF4, 0x01, 0xCD, 0xFF, 0x72,
+       0xFF, 0xC9, 0xFF, 0xFE, 0xFF, 0x00, 0x00, 0xD7, 0xFF, 0x7B, 0xFF,
+       0xA5, 0xFF, 0x73, 0x01, 0x6A, 0x05, 0xAD, 0x0A, 0x21, 0x0F, 0xA6,
+       0x10, 0x74, 0x0E, 0xA9, 0x09, 0x83, 0x04, 0xF0, 0x00, 0x85, 0xFF,
+       0x8B, 0xFF, 0xE5, 0xFF, 0xFA, 0xFF, 0xB7, 0xFF, 0x6C, 0xFF, 0x0C,
+       0x00, 0x9D, 0x02, 0x37, 0x07, 0x78, 0x0C, 0x15, 0x10, 0x47, 0x10,
+       0xF3, 0x0C, 0xC2, 0x07, 0x01, 0x03, 0x35, 0x00, 0x6D, 0xFF, 0xAD,
+       0xFF, 0xF7, 0xFF, 0xEB, 0xFF, 0x94, 0xFF, 0x7A, 0xFF, 0xB3, 0x00,
+       0x0D, 0x04, 0x1C, 0x09, 0x0D, 0x0E, 0x97, 0x10, 0x73, 0x0F, 0x35,
+       0x0B, 0xEB, 0x05, 0xC1, 0x01, 0xBD, 0xFF, 0x75, 0xFF, 0xCE, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xD2, 0xFF, 0x77, 0xFF, 0xB3, 0xFF, 0xA1,
+       0x01, 0xB7, 0x05, 0xFF, 0x0A, 0x53, 0x0F, 0x9E, 0x10, 0x37, 0x0E,
+       0x55, 0x09, 0x3B, 0x04, 0xCB, 0x00, 0x7E, 0xFF, 0x90, 0xFF, 0xE9,
+       0xFF, 0xF8, 0xFF, 0xB1, 0xFF, 0x6C, 0xFF, 0x24, 0x00, 0xD8, 0x02,
+       0x8A, 0x07, 0xC2, 0x0C, 0x34, 0x10, 0x2A, 0x10, 0xAA, 0x0C, 0x6F,
+       0x07, 0xC4, 0x02, 0x1C, 0x00, 0x6C, 0xFF, 0xB3, 0xFF, 0xF9, 0xFF,
+       0xE8, 0xFF, 0x8E, 0xFF, 0x80, 0xFF, 0xD7, 0x00, 0x53, 0x04, 0x71,
+       0x09, 0x4C, 0x0E, 0xA1, 0x10, 0x43, 0x0F, 0xE3, 0x0A, 0x9D, 0x05,
+       0x91, 0x01, 0xAE, 0xFF, 0x79, 0xFF, 0xD4, 0xFF, 0x00, 0x00, 0xFF,
+       0xFF, 0xCD, 0xFF, 0x74, 0xFF, 0xC2, 0xFF, 0xD2, 0x01, 0x06, 0x06,
+       0x50, 0x0B, 0x82, 0x0F, 0x93, 0x10, 0xF8, 0x0D, 0x00, 0x09, 0xF6,
+       0x03, 0xA7, 0x00, 0x78, 0xFF, 0x96, 0xFF, 0xEC, 0xFF, 0xF6, 0xFF,
+       0xAB, 0xFF, 0x6D, 0xFF, 0x3E, 0x00, 0x15, 0x03, 0xDE, 0x07, 0x0B,
+       0x0D, 0x50, 0x10, 0x0A, 0x10, 0x5E, 0x0C, 0x1C, 0x07, 0x8A, 0x02,
+       0x04, 0x00, 0x6C, 0xFF, 0xB9, 0xFF, 0xFB, 0xFF, 0xE4, 0xFF, 0x89,
+       0xFF, 0x88, 0xFF, 0xFD, 0x00, 0x9B, 0x04, 0xC5, 0x09, 0x88, 0x0E,
+       0xA8, 0x10, 0x10, 0x0F, 0x91, 0x0A, 0x50, 0x05, 0x64, 0x01, 0xA1,
+       0xFF, 0x7D, 0xFF, 0xD9, 0xFF, 0x00, 0x00, 0xFE, 0xFF, 0xC7, 0xFF,
+       0x71, 0xFF, 0xD3, 0xFF, 0x05, 0x02, 0x55, 0x06, 0xA0, 0x0B, 0xAD,
+       0x0F, 0x84, 0x10, 0xB6, 0x0D, 0xAC, 0x08, 0xB3, 0x03, 0x86, 0x00,
+       0x74, 0xFF, 0x9C, 0xFF, 0xF0, 0xFF, 0xF4, 0xFF, 0xA5, 0xFF, 0x6F,
+       0xFF, 0x5A, 0x00, 0x54, 0x03, 0x32, 0x08, 0x52, 0x0D, 0x68, 0x10,
+       0xE6, 0x0F, 0x11, 0x0C, 0xCA, 0x06, 0x52, 0x02, 0xEF, 0xFF, 0x6E,
+       0xFF, 0xBF, 0xFF, 0xFC, 0xFF, 0xDF, 0xFF, 0x84, 0xFF, 0x91, 0xFF,
+       0x25, 0x01, 0xE4, 0x04, 0x19, 0x0A, 0xC2, 0x0E, 0xAA, 0x10, 0xDA,
+       0x0E, 0x3E, 0x0A, 0x05, 0x05, 0x38, 0x01, 0x96, 0xFF, 0x81, 0xFF,
+       0xDD, 0xFF, 0x00, 0x00, 0xFD, 0xFF, 0xC1, 0xFF, 0x6E, 0xFF, 0xE6,
+       0xFF, 0x3A, 0x02, 0xA6, 0x06, 0xEF, 0x0B, 0xD6, 0x0F, 0x71, 0x10,
+       0x71, 0x0D, 0x57, 0x08, 0x71, 0x03, 0x67, 0x00, 0x70, 0xFF, 0xA2,
+       0xFF, 0xF3, 0xFF, 0xF1, 0xFF, 0x9F, 0xFF, 0x72, 0xFF, 0x78, 0x00,
+       0x95, 0x03, 0x86, 0x08, 0x98, 0x0D, 0x7C, 0x10, 0xC0, 0x0F, 0xC3,
+       0x0B, 0x79, 0x06, 0x1C, 0x02, 0xDB, 0xFF, 0x70, 0xFF, 0xC5, 0xFF,
+       0xFE, 0xFF, 0x00, 0x00, 0xDB, 0xFF, 0x7F, 0xFF, 0x9C, 0xFF, 0x50,
+       0x01, 0x2F, 0x05, 0x6C, 0x0A, 0xF9, 0x0E, 0xA9, 0x10, 0xA2, 0x0E,
+       0xEA, 0x09, 0xBB, 0x04, 0x0F, 0x01, 0x8C, 0xFF, 0x87, 0xFF, 0xE2,
+       0xFF, 0xFC, 0xFF, 0xBC, 0xFF, 0x6D, 0xFF, 0xFA, 0xFF, 0x71, 0x02,
+       0xF7, 0x06, 0x3C, 0x0C, 0xFB, 0x0F, 0x5B, 0x10, 0x2B, 0x0D, 0x03,
+       0x08, 0x31, 0x03, 0x4A, 0x00, 0x6E, 0xFF, 0xA8, 0xFF, 0xF5, 0xFF,
+       0xEE, 0xFF, 0x99, 0xFF, 0x76, 0xFF, 0x98, 0x00, 0xD8, 0x03, 0xDB,
+       0x08, 0xDB, 0x0D, 0x8D, 0x10, 0x96, 0x0F, 0x73, 0x0B, 0x29, 0x06,
+       0xE8, 0x01, 0xC9, 0xFF, 0x72, 0xFF, 0xCA, 0xFF, 0xFE, 0xFF, 0x00,
+       0x00, 0xD6, 0xFF, 0x7A, 0xFF, 0xA8, 0xFF, 0x7D, 0x01, 0x7B, 0x05,
+       0xBF, 0x0A, 0x2D, 0x0F, 0xA5, 0x10, 0x67, 0x0E, 0x96, 0x09, 0x73,
+       0x04, 0xE7, 0x00, 0x84, 0xFF, 0x8C, 0xFF, 0xE6, 0xFF, 0xFA, 0xFF,
+       0xB6, 0xFF, 0x6C, 0xFF, 0x11, 0x00, 0xAA, 0x02, 0x4A, 0x07, 0x88,
+       0x0C, 0x1C, 0x10, 0x41, 0x10, 0xE3, 0x0C, 0xAF, 0x07, 0xF3, 0x02,
+       0x2F, 0x00, 0x6C, 0xFF, 0xAE, 0xFF, 0xF7, 0xFF, 0xEA, 0xFF, 0x93,
+       0xFF, 0x7B, 0xFF, 0xBB, 0x00, 0x1C, 0x04, 0x2F, 0x09, 0x1B, 0x0E,
+       0x9A, 0x10, 0x68, 0x0F, 0x23, 0x0B, 0xDA, 0x05, 0xB7, 0x01, 0xB9,
+       0xFF, 0x76, 0xFF, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD1, 0xFF,
+       0x76, 0xFF, 0xB6, 0xFF, 0xAC, 0x01, 0xC8, 0x05, 0x11, 0x0B, 0x5E,
+       0x0F, 0x9C, 0x10, 0x29, 0x0E, 0x42, 0x09, 0x2C, 0x04, 0xC2, 0x00,
+       0x7D, 0xFF, 0x92, 0xFF, 0xEA, 0xFF, 0xF8, 0xFF, 0xB0, 0xFF, 0x6C,
+       0xFF, 0x29, 0x00, 0xE6, 0x02, 0x9D, 0x07, 0xD3, 0x0C, 0x3B, 0x10,
+       0x23, 0x10, 0x99, 0x0C, 0x5C, 0x07, 0xB7, 0x02, 0x16, 0x00, 0x6C,
+       0xFF, 0xB4, 0xFF, 0xF9, 0xFF, 0xE7, 0xFF, 0x8D, 0xFF, 0x82, 0xFF,
+       0xDF, 0x00, 0x63, 0x04, 0x84, 0x09, 0x59, 0x0E, 0xA3, 0x10, 0x38,
+       0x0F, 0xD1, 0x0A, 0x8C, 0x05, 0x87, 0x01, 0xAB, 0xFF, 0x79, 0xFF,
+       0xD5, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xCB, 0xFF, 0x73, 0xFF, 0xC6,
+       0xFF, 0xDD, 0x01, 0x17, 0x06, 0x62, 0x0B, 0x8C, 0x0F, 0x90, 0x10,
+       0xE9, 0x0D, 0xED, 0x08, 0xE7, 0x03, 0xA0, 0x00, 0x77, 0xFF, 0x97,
+       0xFF, 0xED, 0xFF, 0xF6, 0xFF, 0xA9, 0xFF, 0x6D, 0xFF, 0x44, 0x00,
+       0x23, 0x03, 0xF1, 0x07, 0x1B, 0x0D, 0x55, 0x10, 0x02, 0x10, 0x4D,
+       0x0C, 0x0A, 0x07, 0x7E, 0x02, 0xFF, 0xFF, 0x6D, 0xFF, 0xBA, 0xFF,
+       0xFB, 0xFF, 0xE3, 0xFF, 0x88, 0xFF, 0x8A, 0xFF, 0x06, 0x01, 0xAB,
+       0x04, 0xD8, 0x09, 0x95, 0x0E, 0xA9, 0x10, 0x05, 0x0F, 0x7F, 0x0A,
+       0x40, 0x05, 0x5A, 0x01, 0x9F, 0xFF, 0x7E, 0xFF, 0xDA, 0xFF, 0x00,
+       0x00, 0xFE, 0xFF, 0xC6, 0xFF, 0x70, 0xFF, 0xD7, 0xFF, 0x10, 0x02,
+       0x67, 0x06, 0xB1, 0x0B, 0xB7, 0x0F, 0x80, 0x10, 0xA7, 0x0D, 0x99,
+       0x08, 0xA4, 0x03, 0x7F, 0x00, 0x73, 0xFF, 0x9D, 0xFF, 0xF0, 0xFF,
+       0xF3, 0xFF, 0xA3, 0xFF, 0x70, 0xFF, 0x60, 0x00, 0x62, 0x03, 0x45,
+       0x08, 0x62, 0x0D, 0x6C, 0x10, 0xDE, 0x0F, 0x00, 0x0C, 0xB8, 0x06,
+       0x46, 0x02, 0xEA, 0xFF, 0x6E, 0xFF, 0xC0, 0xFF, 0xFD, 0xFF, 0x00,
+       0x00, 0xDE, 0xFF, 0x83, 0xFF, 0x94, 0xFF, 0x2F, 0x01, 0xF4, 0x04,
+       0x2B, 0x0A, 0xCE, 0x0E, 0xAA, 0x10, 0xCE, 0x0E, 0x2B, 0x0A, 0xF4,
+       0x04, 0x2F, 0x01, 0x94, 0xFF, 0x83, 0xFF, 0xDE, 0xFF, 0xFD, 0xFF,
+       0xC0, 0xFF, 0x6E, 0xFF, 0xEA, 0xFF, 0x46, 0x02, 0xB8, 0x06, 0x00,
+       0x0C, 0xDE, 0x0F, 0x6C, 0x10, 0x62, 0x0D, 0x45, 0x08, 0x62, 0x03,
+       0x60, 0x00, 0x70, 0xFF, 0xA3, 0xFF, 0xF3, 0xFF, 0xF0, 0xFF, 0x9D,
+       0xFF, 0x73, 0xFF, 0x7F, 0x00, 0xA4, 0x03, 0x99, 0x08, 0xA7, 0x0D,
+       0x80, 0x10, 0xB7, 0x0F, 0xB1, 0x0B, 0x67, 0x06, 0x10, 0x02, 0xD7,
+       0xFF, 0x70, 0xFF, 0xC6, 0xFF, 0xFE, 0xFF, 0x00, 0x00, 0xDA, 0xFF,
+       0x7E, 0xFF, 0x9F, 0xFF, 0x5A, 0x01, 0x40, 0x05, 0x7F, 0x0A, 0x05,
+       0x0F, 0xA9, 0x10, 0x95, 0x0E, 0xD8, 0x09, 0xAB, 0x04, 0x06, 0x01,
+       0x8A, 0xFF, 0x88, 0xFF, 0xE3, 0xFF, 0xFB, 0xFF, 0xBA, 0xFF, 0x6D,
+       0xFF, 0xFF, 0xFF, 0x7E, 0x02, 0x0A, 0x07, 0x4D, 0x0C, 0x02, 0x10,
+       0x55, 0x10, 0x1B, 0x0D, 0xF1, 0x07, 0x23, 0x03, 0x44, 0x00, 0x6D,
+       0xFF, 0xA9, 0xFF, 0xF6, 0xFF, 0xED, 0xFF, 0x97, 0xFF, 0x77, 0xFF,
+       0xA0, 0x00, 0xE7, 0x03, 0xED, 0x08, 0xE9, 0x0D, 0x90, 0x10, 0x8C,
+       0x0F, 0x62, 0x0B, 0x17, 0x06, 0xDD, 0x01, 0xC6, 0xFF, 0x73, 0xFF,
+       0xCB, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xD5, 0xFF, 0x79, 0xFF, 0xAB,
+       0xFF, 0x87, 0x01, 0x8C, 0x05, 0xD1, 0x0A, 0x38, 0x0F, 0xA3, 0x10,
+       0x59, 0x0E, 0x84, 0x09, 0x63, 0x04, 0xDF, 0x00, 0x82, 0xFF, 0x8D,
+       0xFF, 0xE7, 0xFF, 0xF9, 0xFF, 0xB4, 0xFF, 0x6C, 0xFF, 0x16, 0x00,
+       0xB7, 0x02, 0x5C, 0x07, 0x99, 0x0C, 0x23, 0x10, 0x3B, 0x10, 0xD3,
+       0x0C, 0x9D, 0x07, 0xE6, 0x02, 0x29, 0x00, 0x6C, 0xFF, 0xB0, 0xFF,
+       0xF8, 0xFF, 0xEA, 0xFF, 0x92, 0xFF, 0x7D, 0xFF, 0xC2, 0x00, 0x2C,
+       0x04, 0x42, 0x09, 0x29, 0x0E, 0x9C, 0x10, 0x5E, 0x0F, 0x11, 0x0B,
+       0xC8, 0x05, 0xAC, 0x01, 0xB6, 0xFF, 0x76, 0xFF, 0xD1, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xD0, 0xFF, 0x76, 0xFF, 0xB9, 0xFF, 0xB7, 0x01,
+       0xDA, 0x05, 0x23, 0x0B, 0x68, 0x0F, 0x9A, 0x10, 0x1B, 0x0E, 0x2F,
+       0x09, 0x1C, 0x04, 0xBB, 0x00, 0x7B, 0xFF, 0x93, 0xFF, 0xEA, 0xFF,
+       0xF7, 0xFF, 0xAE, 0xFF, 0x6C, 0xFF, 0x2F, 0x00, 0xF3, 0x02, 0xAF,
+       0x07, 0xE3, 0x0C, 0x41, 0x10, 0x1C, 0x10, 0x88, 0x0C, 0x4A, 0x07,
+       0xAA, 0x02, 0x11, 0x00, 0x6C, 0xFF, 0xB6, 0xFF, 0xFA, 0xFF, 0xE6,
+       0xFF, 0x8C, 0xFF, 0x84, 0xFF, 0xE7, 0x00, 0x73, 0x04, 0x96, 0x09,
+       0x67, 0x0E, 0xA5, 0x10, 0x2D, 0x0F, 0xBF, 0x0A, 0x7B, 0x05, 0x7D,
+       0x01, 0xA8, 0xFF, 0x7A, 0xFF, 0xD6, 0xFF, 0x00, 0x00, 0xFE, 0xFF,
+       0xCA, 0xFF, 0x72, 0xFF, 0xC9, 0xFF, 0xE8, 0x01, 0x29, 0x06, 0x73,
+       0x0B, 0x96, 0x0F, 0x8D, 0x10, 0xDB, 0x0D, 0xDB, 0x08, 0xD8, 0x03,
+       0x98, 0x00, 0x76, 0xFF, 0x99, 0xFF, 0xEE, 0xFF, 0xF5, 0xFF, 0xA8,
+       0xFF, 0x6E, 0xFF, 0x4A, 0x00, 0x31, 0x03, 0x03, 0x08, 0x2B, 0x0D,
+       0x5B, 0x10, 0xFB, 0x0F, 0x3C, 0x0C, 0xF7, 0x06, 0x71, 0x02, 0xFA,
+       0xFF, 0x6D, 0xFF, 0xBC, 0xFF, 0xFC, 0xFF, 0xE2, 0xFF, 0x87, 0xFF,
+       0x8C, 0xFF, 0x0F, 0x01, 0xBB, 0x04, 0xEA, 0x09, 0xA2, 0x0E, 0xA9,
+       0x10, 0xF9, 0x0E, 0x6C, 0x0A, 0x2F, 0x05, 0x50, 0x01, 0x9C, 0xFF,
+       0x7F, 0xFF, 0xDB, 0xFF, 0x00, 0x00, 0xFE, 0xFF, 0xC5, 0xFF, 0x70,
+       0xFF, 0xDB, 0xFF, 0x1C, 0x02, 0x79, 0x06, 0xC3, 0x0B, 0xC0, 0x0F,
+       0x7C, 0x10, 0x98, 0x0D, 0x86, 0x08, 0x95, 0x03, 0x78, 0x00, 0x72,
+       0xFF, 0x9F, 0xFF, 0xF1, 0xFF, 0xF3, 0xFF, 0xA2, 0xFF, 0x70, 0xFF,
+       0x67, 0x00, 0x71, 0x03, 0x57, 0x08, 0x71, 0x0D, 0x71, 0x10, 0xD6,
+       0x0F, 0xEF, 0x0B, 0xA6, 0x06, 0x3A, 0x02, 0xE6, 0xFF, 0x6E, 0xFF,
+       0xC1, 0xFF, 0xFD, 0xFF, 0x00, 0x00, 0xDD, 0xFF, 0x81, 0xFF, 0x96,
+       0xFF, 0x38, 0x01, 0x05, 0x05, 0x3E, 0x0A, 0xDA, 0x0E, 0xAA, 0x10,
+       0xC2, 0x0E, 0x19, 0x0A, 0xE4, 0x04, 0x25, 0x01, 0x91, 0xFF, 0x84,
+       0xFF, 0xDF, 0xFF, 0xFC, 0xFF, 0xBF, 0xFF, 0x6E, 0xFF, 0xEF, 0xFF,
+       0x52, 0x02, 0xCA, 0x06, 0x11, 0x0C, 0xE6, 0x0F, 0x68, 0x10, 0x52,
+       0x0D, 0x32, 0x08, 0x54, 0x03, 0x5A, 0x00, 0x6F, 0xFF, 0xA5, 0xFF,
+       0xF4, 0xFF, 0xF0, 0xFF, 0x9C, 0xFF, 0x74, 0xFF, 0x86, 0x00, 0xB3,
+       0x03, 0xAC, 0x08, 0xB6, 0x0D, 0x84, 0x10, 0xAD, 0x0F, 0xA0, 0x0B,
+       0x55, 0x06, 0x05, 0x02, 0xD3, 0xFF, 0x71, 0xFF, 0xC7, 0xFF, 0xFE,
+       0xFF, 0x00, 0x00, 0xD9, 0xFF, 0x7D, 0xFF, 0xA1, 0xFF, 0x64, 0x01,
+       0x50, 0x05, 0x91, 0x0A, 0x10, 0x0F, 0xA8, 0x10, 0x88, 0x0E, 0xC5,
+       0x09, 0x9B, 0x04, 0xFD, 0x00, 0x88, 0xFF, 0x89, 0xFF, 0xE4, 0xFF,
+       0xFB, 0xFF, 0xB9, 0xFF, 0x6C, 0xFF, 0x04, 0x00, 0x8A, 0x02, 0x1C,
+       0x07, 0x5E, 0x0C, 0x0A, 0x10, 0x50, 0x10, 0x0B, 0x0D, 0xDE, 0x07,
+       0x15, 0x03, 0x3E, 0x00, 0x6D, 0xFF, 0xAB, 0xFF, 0xF6, 0xFF, 0xEC,
+       0xFF, 0x96, 0xFF, 0x78, 0xFF, 0xA7, 0x00, 0xF6, 0x03, 0x00, 0x09,
+       0xF8, 0x0D, 0x93, 0x10, 0x82, 0x0F, 0x50, 0x0B, 0x06, 0x06, 0xD2,
+       0x01, 0xC2, 0xFF, 0x74, 0xFF, 0xCD, 0xFF, 0xFF, 0xFF, 0x00, 0x00,
+       0xD4, 0xFF, 0x79, 0xFF, 0xAE, 0xFF, 0x91, 0x01, 0x9D, 0x05, 0xE3,
+       0x0A, 0x43, 0x0F, 0xA1, 0x10, 0x4C, 0x0E, 0x71, 0x09, 0x53, 0x04,
+       0xD7, 0x00, 0x80, 0xFF, 0x8E, 0xFF, 0xE8, 0xFF, 0xF9, 0xFF, 0xB3,
+       0xFF, 0x6C, 0xFF, 0x1C, 0x00, 0xC4, 0x02, 0x6F, 0x07, 0xAA, 0x0C,
+       0x2A, 0x10, 0x34, 0x10, 0xC2, 0x0C, 0x8A, 0x07, 0xD8, 0x02, 0x24,
+       0x00, 0x6C, 0xFF, 0xB1, 0xFF, 0xF8, 0xFF, 0xE9, 0xFF, 0x90, 0xFF,
+       0x7E, 0xFF, 0xCB, 0x00, 0x3B, 0x04, 0x55, 0x09, 0x37, 0x0E, 0x9E,
+       0x10, 0x53, 0x0F, 0xFF, 0x0A, 0xB7, 0x05, 0xA1, 0x01, 0xB3, 0xFF,
+       0x77, 0xFF, 0xD2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCE, 0xFF, 0x75,
+       0xFF, 0xBD, 0xFF, 0xC1, 0x01, 0xEB, 0x05, 0x35, 0x0B, 0x73, 0x0F,
+       0x97, 0x10, 0x0D, 0x0E, 0x1C, 0x09, 0x0D, 0x04, 0xB3, 0x00, 0x7A,
+       0xFF, 0x94, 0xFF, 0xEB, 0xFF, 0xF7, 0xFF, 0xAD, 0xFF, 0x6D, 0xFF,
+       0x35, 0x00, 0x01, 0x03, 0xC2, 0x07, 0xF3, 0x0C, 0x47, 0x10, 0x15,
+       0x10, 0x78, 0x0C, 0x37, 0x07, 0x9D, 0x02, 0x0C, 0x00, 0x6C, 0xFF,
+       0xB7, 0xFF, 0xFA, 0xFF, 0xE5, 0xFF, 0x8B, 0xFF, 0x85, 0xFF, 0xF0,
+       0x00, 0x83, 0x04, 0xA9, 0x09, 0x74, 0x0E, 0xA6, 0x10, 0x21, 0x0F,
+       0xAD, 0x0A, 0x6A, 0x05, 0x73, 0x01, 0xA5, 0xFF, 0x7B, 0xFF, 0xD7,
+       0xFF, 0x00, 0x00, 0xFE, 0xFF, 0xC9, 0xFF, 0x72, 0xFF, 0xCD, 0xFF,
+       0xF4, 0x01, 0x3B, 0x06, 0x85, 0x0B, 0x9F, 0x0F, 0x89, 0x10, 0xCC,
+       0x0D, 0xC8, 0x08, 0xC9, 0x03, 0x91, 0x00, 0x75, 0xFF, 0x9A, 0xFF,
+       0xEF, 0xFF, 0xF5, 0xFF, 0xA7, 0xFF, 0x6E, 0xFF, 0x50, 0x00, 0x3F,
+       0x03, 0x16, 0x08, 0x3B, 0x0D, 0x60, 0x10, 0xF3, 0x0F, 0x2B, 0x0C,
+       0xE5, 0x06, 0x65, 0x02, 0xF6, 0xFF, 0x6D, 0xFF, 0xBD, 0xFF, 0xFC,
+       0xFF, 0xE1, 0xFF, 0x85, 0xFF, 0x8E, 0xFF, 0x18, 0x01, 0xCB, 0x04,
+       0xFD, 0x09, 0xAF, 0x0E, 0xAA, 0x10, 0xED, 0x0E, 0x5A, 0x0A, 0x1E,
+       0x05, 0x46, 0x01, 0x9A, 0xFF, 0x80, 0xFF, 0xDC, 0xFF, 0x00, 0x00,
+       0xFD, 0xFF, 0xC3, 0xFF, 0x6F, 0xFF, 0xDF, 0xFF, 0x28, 0x02, 0x8B,
+       0x06, 0xD5, 0x0B, 0xC9, 0x0F, 0x78, 0x10, 0x88, 0x0D, 0x73, 0x08,
+       0x86, 0x03, 0x71, 0x00, 0x71, 0xFF, 0xA0, 0xFF, 0xF2, 0xFF, 0xF2,
+       0xFF, 0xA1, 0xFF, 0x71, 0xFF, 0x6E, 0x00, 0x7F, 0x03, 0x6A, 0x08,
+       0x81, 0x0D, 0x76, 0x10, 0xCD, 0x0F, 0xDD, 0x0B, 0x94, 0x06, 0x2E,
+       0x02, 0xE1, 0xFF, 0x6F, 0xFF, 0xC3, 0xFF, 0xFD, 0xFF, 0x00, 0x00,
+       0xDC, 0xFF, 0x80, 0xFF, 0x98, 0xFF, 0x42, 0x01, 0x16, 0x05, 0x50,
+       0x0A, 0xE7, 0x0E, 0xAA, 0x10, 0xB5, 0x0E, 0x06, 0x0A, 0xD3, 0x04,
+       0x1C, 0x01, 0x8F, 0xFF, 0x85, 0xFF, 0xE0, 0xFF, 0xFC, 0xFF, 0xBE,
+       0xFF, 0x6D, 0xFF, 0xF3, 0xFF, 0x5E, 0x02, 0xDC, 0x06, 0x23, 0x0C,
+       0xEF, 0x0F, 0x63, 0x10, 0x43, 0x0D, 0x1F, 0x08, 0x46, 0x03, 0x53,
+       0x00, 0x6E, 0xFF, 0xA6, 0xFF, 0xF4, 0xFF, 0xEF, 0xFF, 0x9B, 0xFF,
+       0x75, 0xFF, 0x8D, 0x00, 0xC1, 0x03, 0xBE, 0x08, 0xC4, 0x0D, 0x88,
+       0x10, 0xA4, 0x0F, 0x8E, 0x0B, 0x43, 0x06, 0xF9, 0x01, 0xCF, 0xFF,
+       0x71, 0xFF, 0xC8, 0xFF, 0xFE, 0xFF, 0x00, 0x00, 0xD8, 0xFF, 0x7C,
+       0xFF, 0xA4, 0xFF, 0x6E, 0x01, 0x61, 0x05, 0xA3, 0x0A, 0x1C, 0x0F,
+       0xA7, 0x10, 0x7B, 0x0E, 0xB2, 0x09, 0x8B, 0x04, 0xF4, 0x00, 0x86,
+       0xFF, 0x8A, 0xFF, 0xE4, 0xFF, 0xFA, 0xFF, 0xB8, 0xFF, 0x6C, 0xFF,
+       0x09, 0x00, 0x97, 0x02, 0x2E, 0x07, 0x6F, 0x0C, 0x11, 0x10, 0x4A,
+       0x10, 0xFB, 0x0C, 0xCB, 0x07, 0x07, 0x03, 0x38, 0x00, 0x6D, 0xFF,
+       0xAC, 0xFF, 0xF7, 0xFF, 0xEC, 0xFF, 0x95, 0xFF, 0x79, 0xFF, 0xAF,
+       0x00, 0x05, 0x04, 0x13, 0x09, 0x06, 0x0E, 0x96, 0x10, 0x78, 0x0F,
+       0x3E, 0x0B, 0xF4, 0x05, 0xC7, 0x01, 0xBF, 0xFF, 0x74, 0xFF, 0xCE,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD2, 0xFF, 0x78, 0xFF, 0xB1, 0xFF,
+       0x9C, 0x01, 0xAE, 0x05, 0xF6, 0x0A, 0x4E, 0x0F, 0x9F, 0x10, 0x3E,
+       0x0E, 0x5E, 0x09, 0x43, 0x04, 0xCF, 0x00, 0x7F, 0xFF, 0x90, 0xFF,
+       0xE8, 0xFF, 0xF9, 0xFF, 0xB2, 0xFF, 0x6C, 0xFF, 0x21, 0x00, 0xD2,
+       0x02, 0x81, 0x07, 0xBA, 0x0C, 0x31, 0x10, 0x2E, 0x10, 0xB2, 0x0C,
+       0x78, 0x07, 0xCB, 0x02, 0x1E, 0x00, 0x6C, 0xFF, 0xB2, 0xFF, 0xF9,
+       0xFF, 0xE8, 0xFF, 0x8F, 0xFF, 0x80, 0xFF, 0xD3, 0x00, 0x4B, 0x04,
+       0x67, 0x09, 0x45, 0x0E, 0xA0, 0x10, 0x48, 0x0F, 0xEC, 0x0A, 0xA6,
+       0x05, 0x97, 0x01, 0xB0, 0xFF, 0x78, 0xFF, 0xD3, 0xFF, 0x00, 0x00,
+       0xFF, 0xFF, 0xCD, 0xFF, 0x74, 0xFF, 0xC0, 0xFF, 0xCC, 0x01, 0xFD,
+       0x05, 0x47, 0x0B, 0x7D, 0x0F, 0x94, 0x10, 0xFF, 0x0D, 0x0A, 0x09,
+       0xFE, 0x03, 0xAB, 0x00, 0x79, 0xFF, 0x95, 0xFF, 0xEC, 0xFF, 0xF7,
+       0xFF, 0xAC, 0xFF, 0x6D, 0xFF, 0x3B, 0x00, 0x0E, 0x03, 0xD5, 0x07,
+       0x03, 0x0D, 0x4D, 0x10, 0x0E, 0x10, 0x67, 0x0C, 0x25, 0x07, 0x91,
+       0x02, 0x07, 0x00, 0x6C, 0xFF, 0xB8, 0xFF, 0xFB, 0xFF, 0xE4, 0xFF,
+       0x89, 0xFF, 0x87, 0xFF, 0xF9, 0x00, 0x93, 0x04, 0xBC, 0x09, 0x82,
+       0x0E, 0xA7, 0x10, 0x16, 0x0F, 0x9A, 0x0A, 0x59, 0x05, 0x69, 0x01,
+       0xA3, 0xFF, 0x7C, 0xFF, 0xD8, 0xFF, 0x00, 0x00, 0xFE, 0xFF, 0xC8,
+       0xFF, 0x71, 0xFF, 0xD1, 0xFF, 0xFF, 0x01, 0x4C, 0x06, 0x97, 0x0B,
+       0xA9, 0x0F, 0x86, 0x10, 0xBD, 0x0D, 0xB5, 0x08, 0xBA, 0x03, 0x8A,
+       0x00, 0x74, 0xFF, 0x9B, 0xFF, 0xEF, 0xFF, 0xF4, 0xFF, 0xA5, 0xFF,
+       0x6F, 0xFF, 0x57, 0x00, 0x4D, 0x03, 0x29, 0x08, 0x4B, 0x0D, 0x65,
+       0x10, 0xEB, 0x0F, 0x1A, 0x0C, 0xD3, 0x06, 0x58, 0x02, 0xF1, 0xFF,
+       0x6D, 0xFF, 0xBE, 0xFF, 0xFC, 0xFF, 0xE0, 0xFF, 0x84, 0xFF, 0x90,
+       0xFF, 0x21, 0x01, 0xDC, 0x04, 0x10, 0x0A, 0xBB, 0x0E, 0xAA, 0x10,
+       0xE1, 0x0E, 0x47, 0x0A, 0x0D, 0x05, 0x3D, 0x01, 0x97, 0xFF, 0x81,
+       0xFF, 0xDD, 0xFF, 0x00, 0x00, 0xFD, 0xFF, 0xC2, 0xFF, 0x6F, 0xFF,
+       0xE4, 0xFF, 0x34, 0x02, 0x9D, 0x06, 0xE6, 0x0B, 0xD1, 0x0F, 0x73,
+       0x10, 0x79, 0x0D, 0x61, 0x08, 0x78, 0x03, 0x6A, 0x00, 0x70, 0xFF,
+       0xA1, 0xFF, 0xF2, 0xFF, 0xF1, 0xFF, 0x9F, 0xFF, 0x72, 0xFF, 0x74,
+       0x00, 0x8E, 0x03, 0x7D, 0x08, 0x90, 0x0D, 0x7A, 0x10, 0xC4, 0x0F,
+       0xCC, 0x0B, 0x82, 0x06, 0x22, 0x02, 0xDD, 0xFF, 0x6F, 0xFF, 0xC4,
+       0xFF, 0xFD, 0xFF, 0x00, 0x00, 0xDB, 0xFF, 0x7F, 0xFF, 0x9B, 0xFF,
+       0x4B, 0x01, 0x26, 0x05, 0x63, 0x0A, 0xF3, 0x0E, 0xAA, 0x10, 0xA8,
+       0x0E, 0xF4, 0x09, 0xC3, 0x04, 0x13, 0x01, 0x8D, 0xFF, 0x86, 0xFF,
+       0xE1, 0xFF, 0xFC, 0xFF, 0xBC, 0xFF, 0x6D, 0xFF, 0xF8, 0xFF, 0x6B,
+       0x02, 0xEE, 0x06, 0x34, 0x0C, 0xF7, 0x0F, 0x5D, 0x10, 0x33, 0x0D,
+       0x0D, 0x08, 0x38, 0x03, 0x4D, 0x00, 0x6E, 0xFF, 0xA7, 0xFF, 0xF5,
+       0xFF, 0xEE, 0xFF, 0x99, 0xFF, 0x76, 0xFF, 0x94, 0x00, 0xD0, 0x03,
+       0xD1, 0x08, 0xD3, 0x0D, 0x8B, 0x10, 0x9A, 0x0F, 0x7C, 0x0B, 0x32,
+       0x06, 0xEE, 0x01, 0xCB, 0xFF, 0x72, 0xFF, 0xCA, 0xFF, 0xFE, 0xFF,
+       0x00, 0x00, 0xD6, 0xFF, 0x7B, 0xFF, 0xA7, 0xFF, 0x78, 0x01, 0x72,
+       0x05, 0xB6, 0x0A, 0x27, 0x0F, 0xA5, 0x10, 0x6E, 0x0E, 0xA0, 0x09,
+       0x7B, 0x04, 0xEC, 0x00, 0x85, 0xFF, 0x8B, 0xFF, 0xE5, 0xFF, 0xFA,
+       0xFF, 0xB6, 0xFF, 0x6C, 0xFF, 0x0E, 0x00, 0xA4, 0x02, 0x41, 0x07,
+       0x80, 0x0C, 0x19, 0x10, 0x44, 0x10, 0xEB, 0x0C, 0xB9, 0x07, 0xFA,
+       0x02, 0x32, 0x00, 0x6D, 0xFF, 0xAE, 0xFF, 0xF7, 0xFF, 0xEB, 0xFF,
+       0x93, 0xFF, 0x7B, 0xFF, 0xB7, 0x00, 0x15, 0x04, 0x26, 0x09, 0x14,
+       0x0E, 0x98, 0x10, 0x6D, 0x0F, 0x2C, 0x0B, 0xE3, 0x05, 0xBC, 0x01,
+       0xBB, 0xFF, 0x75, 0xFF, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD1,
+       0xFF, 0x77, 0xFF, 0xB5, 0xFF, 0xA6, 0x01, 0xC0, 0x05, 0x08, 0x0B,
+       0x58, 0x0F, 0x9D, 0x10, 0x30, 0x0E, 0x4B, 0x09, 0x34, 0x04, 0xC6,
+       0x00, 0x7D, 0xFF, 0x91, 0xFF, 0xE9, 0xFF, 0xF8, 0xFF, 0xB0, 0xFF,
+       0x6C, 0xFF, 0x27, 0x00, 0xDF, 0x02, 0x94, 0x07, 0xCA, 0x0C, 0x37,
+       0x10, 0x27, 0x10, 0xA1, 0x0C, 0x65, 0x07, 0xBE, 0x02, 0x19, 0x00,
+       0x6C, 0xFF, 0xB4, 0xFF, 0xF9, 0xFF, 0xE7, 0xFF, 0x8E, 0xFF, 0x81,
+       0xFF, 0xDB, 0x00, 0x5B, 0x04, 0x7A, 0x09, 0x53, 0x0E, 0xA2, 0x10,
+       0x3D, 0x0F, 0xDA, 0x0A, 0x95, 0x05, 0x8C, 0x01, 0xAD, 0xFF, 0x79,
+       0xFF, 0xD4, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xCC, 0xFF, 0x73, 0xFF,
+       0xC4, 0xFF, 0xD7, 0x01, 0x0E, 0x06, 0x59, 0x0B, 0x87, 0x0F, 0x91,
+       0x10, 0xF0, 0x0D, 0xF7, 0x08, 0xEF, 0x03, 0xA3, 0x00, 0x78, 0xFF,
+       0x97, 0xFF, 0xED, 0xFF, 0xF6, 0xFF, 0xAA, 0xFF, 0x6D, 0xFF, 0x41,
+       0x00, 0x1C, 0x03, 0xE7, 0x07, 0x13, 0x0D, 0x52, 0x10, 0x06, 0x10,
+       0x56, 0x0C, 0x13, 0x07, 0x84, 0x02, 0x02, 0x00, 0x6D, 0xFF, 0xBA,
+       0xFF, 0xFB, 0xFF, 0xE3, 0xFF, 0x88, 0xFF, 0x89, 0xFF, 0x01, 0x01,
+       0xA3, 0x04, 0xCE, 0x09, 0x8F, 0x0E, 0xA8, 0x10, 0x0A, 0x0F, 0x88,
+       0x0A, 0x48, 0x05, 0x5F, 0x01, 0xA0, 0xFF, 0x7D, 0xFF, 0xD9, 0xFF,
+       0x00, 0x00, 0xFE, 0xFF, 0xC7, 0xFF, 0x70, 0xFF, 0xD5, 0xFF, 0x0B,
+       0x02, 0x5E, 0x06, 0xA9, 0x0B, 0xB2, 0x0F, 0x82, 0x10, 0xAE, 0x0D,
+       0xA2, 0x08, 0xAB, 0x03, 0x82, 0x00, 0x73, 0xFF, 0x9D, 0xFF, 0xF0,
+       0xFF, 0xF3, 0xFF, 0xA4, 0xFF, 0x6F, 0xFF, 0x5D, 0x00, 0x5B, 0x03,
+       0x3B, 0x08, 0x5A, 0x0D, 0x6A, 0x10, 0xE2, 0x0F, 0x09, 0x0C, 0xC1,
+       0x06, 0x4C, 0x02, 0xEC, 0xFF, 0x6E, 0xFF, 0xC0, 0xFF, 0xFC, 0xFF,
+       0xDF, 0xFF, 0x83, 0xFF, 0x93, 0xFF, 0x2A, 0x01, 0xEC, 0x04, 0x22,
+       0x0A, 0xC8, 0x0E, 0xAB, 0x10, 0xD4, 0x0E, 0x35, 0x0A, 0xFD, 0x04,
+       0x33, 0x01, 0x95, 0xFF, 0x82, 0xFF, 0xDE, 0xFF, 0x00, 0x00, 0xFD,
+       0xFF, 0xC1, 0xFF, 0x6E, 0xFF, 0xE8, 0xFF, 0x40, 0x02, 0xAF, 0x06,
+       0xF7, 0x0B, 0xDA, 0x0F, 0x6F, 0x10, 0x6A, 0x0D, 0x4E, 0x08, 0x6A,
+       0x03, 0x64, 0x00, 0x70, 0xFF, 0xA3, 0xFF, 0xF3, 0xFF, 0xF1, 0xFF,
+       0x9E, 0xFF, 0x72, 0xFF, 0x7B, 0x00, 0x9C, 0x03, 0x90, 0x08, 0x9F,
+       0x0D, 0x7E, 0x10, 0xBB, 0x0F, 0xBA, 0x0B, 0x70, 0x06, 0x16, 0x02,
+       0xD9, 0xFF, 0x70, 0xFF, 0xC5, 0xFF, 0xFE, 0xFF, 0x00, 0x00, 0xDA,
+       0xFF, 0x7E, 0xFF, 0x9D, 0xFF, 0x55, 0x01, 0x37, 0x05, 0x75, 0x0A,
+       0xFF, 0x0E, 0xA9, 0x10, 0x9C, 0x0E, 0xE1, 0x09, 0xB3, 0x04, 0x0A,
+       0x01, 0x8B, 0xFF, 0x87, 0xFF, 0xE2, 0xFF, 0xFB, 0xFF, 0xBB, 0xFF,
+       0x6D, 0xFF, 0xFD, 0xFF, 0x77, 0x02, 0x01, 0x07, 0x45, 0x0C, 0xFF,
+       0x0F, 0x58, 0x10, 0x23, 0x0D, 0xFA, 0x07, 0x2A, 0x03, 0x47, 0x00,
+       0x6E, 0xFF, 0xA9, 0xFF, 0xF5, 0xFF, 0xED, 0xFF, 0x98, 0xFF, 0x77,
+       0xFF, 0x9C, 0x00, 0xDF, 0x03, 0xE4, 0x08, 0xE2, 0x0D, 0x8E, 0x10,
+       0x91, 0x0F, 0x6B, 0x0B, 0x20, 0x06, 0xE3, 0x01, 0xC8, 0xFF, 0x73,
+       0xFF, 0xCB, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xD5, 0xFF, 0x7A, 0xFF,
+       0xAA, 0xFF, 0x82, 0x01, 0x83, 0x05, 0xC8, 0x0A, 0x32, 0x0F, 0xA4,
+       0x10, 0x60, 0x0E, 0x8D, 0x09, 0x6B, 0x04, 0xE3, 0x00, 0x83, 0xFF,
+       0x8D, 0xFF, 0xE6, 0xFF, 0xFA, 0xFF, 0xB5, 0xFF, 0x6C, 0xFF, 0x14,
+       0x00, 0xB1, 0x02, 0x53, 0x07, 0x91, 0x0C, 0x20, 0x10, 0x3E, 0x10,
+       0xDB, 0x0C, 0xA6, 0x07, 0xEC, 0x02, 0x2C, 0x00, 0x6C, 0xFF, 0xAF,
+       0xFF, 0xF8, 0xFF, 0xEA, 0xFF, 0x92, 0xFF, 0x7C, 0xFF, 0xBE, 0x00,
+       0x24, 0x04, 0x38, 0x09, 0x22, 0x0E, 0x9B, 0x10, 0x63, 0x0F, 0x1A,
+       0x0B, 0xD1, 0x05, 0xB1, 0x01, 0xB8, 0xFF, 0x76, 0xFF, 0xD0, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xD0, 0xFF, 0x76, 0xFF, 0xB8, 0xFF, 0xB1,
+       0x01, 0xD1, 0x05, 0x1A, 0x0B, 0x63, 0x0F, 0x9B, 0x10, 0x22, 0x0E,
+       0x38, 0x09, 0x24, 0x04, 0xBE, 0x00, 0x7C, 0xFF, 0x92, 0xFF, 0xEA,
+       0xFF, 0xF8, 0xFF, 0xAF, 0xFF, 0x6C, 0xFF, 0x2C, 0x00, 0xEC, 0x02,
+       0xA6, 0x07, 0xDB, 0x0C, 0x3E, 0x10, 0x20, 0x10, 0x91, 0x0C, 0x53,
+       0x07, 0xB1, 0x02, 0x14, 0x00, 0x6C, 0xFF, 0xB5, 0xFF, 0xFA, 0xFF,
+       0xE6, 0xFF, 0x8D, 0xFF, 0x83, 0xFF, 0xE3, 0x00, 0x6B, 0x04, 0x8D,
+       0x09, 0x60, 0x0E, 0xA4, 0x10, 0x32, 0x0F, 0xC8, 0x0A, 0x83, 0x05,
+       0x82, 0x01, 0xAA, 0xFF, 0x7A, 0xFF, 0xD5, 0xFF, 0x00, 0x00, 0xFF,
+       0xFF, 0xCB, 0xFF, 0x73, 0xFF, 0xC8, 0xFF, 0xE3, 0x01, 0x20, 0x06,
+       0x6B, 0x0B, 0x91, 0x0F, 0x8E, 0x10, 0xE2, 0x0D, 0xE4, 0x08, 0xDF,
+       0x03, 0x9C, 0x00, 0x77, 0xFF, 0x98, 0xFF, 0xED, 0xFF, 0xF5, 0xFF,
+       0xA9, 0xFF, 0x6E, 0xFF, 0x47, 0x00, 0x2A, 0x03, 0xFA, 0x07, 0x23,
+       0x0D, 0x58, 0x10, 0xFF, 0x0F, 0x45, 0x0C, 0x01, 0x07, 0x77, 0x02,
+       0xFD, 0xFF, 0x6D, 0xFF, 0xBB, 0xFF, 0xFB, 0xFF, 0xE2, 0xFF, 0x87,
+       0xFF, 0x8B, 0xFF, 0x0A, 0x01, 0xB3, 0x04, 0xE1, 0x09, 0x9C, 0x0E,
+       0xA9, 0x10, 0xFF, 0x0E, 0x75, 0x0A, 0x37, 0x05, 0x55, 0x01, 0x9D,
+       0xFF, 0x7E, 0xFF, 0xDA, 0xFF, 0x00, 0x00, 0xFE, 0xFF, 0xC5, 0xFF,
+       0x70, 0xFF, 0xD9, 0xFF, 0x16, 0x02, 0x70, 0x06, 0xBA, 0x0B, 0xBB,
+       0x0F, 0x7E, 0x10, 0x9F, 0x0D, 0x90, 0x08, 0x9C, 0x03, 0x7B, 0x00,
+       0x72, 0xFF, 0x9E, 0xFF, 0xF1, 0xFF, 0xF3, 0xFF, 0xA3, 0xFF, 0x70,
+       0xFF, 0x64, 0x00, 0x6A, 0x03, 0x4E, 0x08, 0x6A, 0x0D, 0x6F, 0x10,
+       0xDA, 0x0F, 0xF7, 0x0B, 0xAF, 0x06, 0x40, 0x02, 0xE8, 0xFF, 0x6E,
+       0xFF, 0xC1, 0xFF, 0xFD, 0xFF, 0x00, 0x00, 0xDE, 0xFF, 0x82, 0xFF,
+       0x95, 0xFF, 0x33, 0x01, 0xFD, 0x04, 0x35, 0x0A, 0xD4, 0x0E, 0xAB,
+       0x10, 0xC8, 0x0E, 0x22, 0x0A, 0xEC, 0x04, 0x2A, 0x01, 0x93, 0xFF,
+       0x83, 0xFF, 0xDF, 0xFF, 0xFC, 0xFF, 0xC0, 0xFF, 0x6E, 0xFF, 0xEC,
+       0xFF, 0x4C, 0x02, 0xC1, 0x06, 0x09, 0x0C, 0xE2, 0x0F, 0x6A, 0x10,
+       0x5A, 0x0D, 0x3B, 0x08, 0x5B, 0x03, 0x5D, 0x00, 0x6F, 0xFF, 0xA4,
+       0xFF, 0xF3, 0xFF, 0xF0, 0xFF, 0x9D, 0xFF, 0x73, 0xFF, 0x82, 0x00,
+       0xAB, 0x03, 0xA2, 0x08, 0xAE, 0x0D, 0x82, 0x10, 0xB2, 0x0F, 0xA9,
+       0x0B, 0x5E, 0x06, 0x0B, 0x02, 0xD5, 0xFF, 0x70, 0xFF, 0xC7, 0xFF,
+       0xFE, 0xFF, 0x00, 0x00, 0xD9, 0xFF, 0x7D, 0xFF, 0xA0, 0xFF, 0x5F,
+       0x01, 0x48, 0x05, 0x88, 0x0A, 0x0A, 0x0F, 0xA8, 0x10, 0x8F, 0x0E,
+       0xCE, 0x09, 0xA3, 0x04, 0x01, 0x01, 0x89, 0xFF, 0x88, 0xFF, 0xE3,
+       0xFF, 0xFB, 0xFF, 0xBA, 0xFF, 0x6D, 0xFF, 0x02, 0x00, 0x84, 0x02,
+       0x13, 0x07, 0x56, 0x0C, 0x06, 0x10, 0x52, 0x10, 0x13, 0x0D, 0xE7,
+       0x07, 0x1C, 0x03, 0x41, 0x00, 0x6D, 0xFF, 0xAA, 0xFF, 0xF6, 0xFF,
+       0xED, 0xFF, 0x97, 0xFF, 0x78, 0xFF, 0xA3, 0x00, 0xEF, 0x03, 0xF7,
+       0x08, 0xF0, 0x0D, 0x91, 0x10, 0x87, 0x0F, 0x59, 0x0B, 0x0E, 0x06,
+       0xD7, 0x01, 0xC4, 0xFF, 0x73, 0xFF, 0xCC, 0xFF, 0xFF, 0xFF, 0x00,
+       0x00, 0xD4, 0xFF, 0x79, 0xFF, 0xAD, 0xFF, 0x8C, 0x01, 0x95, 0x05,
+       0xDA, 0x0A, 0x3D, 0x0F, 0xA2, 0x10, 0x53, 0x0E, 0x7A, 0x09, 0x5B,
+       0x04, 0xDB, 0x00, 0x81, 0xFF, 0x8E, 0xFF, 0xE7, 0xFF, 0xF9, 0xFF,
+       0xB4, 0xFF, 0x6C, 0xFF, 0x19, 0x00, 0xBE, 0x02, 0x65, 0x07, 0xA1,
+       0x0C, 0x27, 0x10, 0x37, 0x10, 0xCA, 0x0C, 0x94, 0x07, 0xDF, 0x02,
+       0x27, 0x00, 0x6C, 0xFF, 0xB0, 0xFF, 0xF8, 0xFF, 0xE9, 0xFF, 0x91,
+       0xFF, 0x7D, 0xFF, 0xC6, 0x00, 0x34, 0x04, 0x4B, 0x09, 0x30, 0x0E,
+       0x9D, 0x10, 0x58, 0x0F, 0x08, 0x0B, 0xC0, 0x05, 0xA6, 0x01, 0xB5,
+       0xFF, 0x77, 0xFF, 0xD1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0xFF,
+       0x75, 0xFF, 0xBB, 0xFF, 0xBC, 0x01, 0xE3, 0x05, 0x2C, 0x0B, 0x6D,
+       0x0F, 0x98, 0x10, 0x14, 0x0E, 0x26, 0x09, 0x15, 0x04, 0xB7, 0x00,
+       0x7B, 0xFF, 0x93, 0xFF, 0xEB, 0xFF, 0xF7, 0xFF, 0xAE, 0xFF, 0x6D,
+       0xFF, 0x32, 0x00, 0xFA, 0x02, 0xB9, 0x07, 0xEB, 0x0C, 0x44, 0x10,
+       0x19, 0x10, 0x80, 0x0C, 0x41, 0x07, 0xA4, 0x02, 0x0E, 0x00, 0x6C,
+       0xFF, 0xB6, 0xFF, 0xFA, 0xFF, 0xE5, 0xFF, 0x8B, 0xFF, 0x85, 0xFF,
+       0xEC, 0x00, 0x7B, 0x04, 0xA0, 0x09, 0x6E, 0x0E, 0xA5, 0x10, 0x27,
+       0x0F, 0xB6, 0x0A, 0x72, 0x05, 0x78, 0x01, 0xA7, 0xFF, 0x7B, 0xFF,
+       0xD6, 0xFF, 0x00, 0x00, 0xFE, 0xFF, 0xCA, 0xFF, 0x72, 0xFF, 0xCB,
+       0xFF, 0xEE, 0x01, 0x32, 0x06, 0x7C, 0x0B, 0x9A, 0x0F, 0x8B, 0x10,
+       0xD3, 0x0D, 0xD1, 0x08, 0xD0, 0x03, 0x94, 0x00, 0x76, 0xFF, 0x99,
+       0xFF, 0xEE, 0xFF, 0xF5, 0xFF, 0xA7, 0xFF, 0x6E, 0xFF, 0x4D, 0x00,
+       0x38, 0x03, 0x0D, 0x08, 0x33, 0x0D, 0x5D, 0x10, 0xF7, 0x0F, 0x34,
+       0x0C, 0xEE, 0x06, 0x6B, 0x02, 0xF8, 0xFF, 0x6D, 0xFF, 0xBC, 0xFF,
+       0xFC, 0xFF, 0xE1, 0xFF, 0x86, 0xFF, 0x8D, 0xFF, 0x13, 0x01, 0xC3,
+       0x04, 0xF4, 0x09, 0xA8, 0x0E, 0xAA, 0x10, 0xF3, 0x0E, 0x63, 0x0A,
+       0x26, 0x05, 0x4B, 0x01, 0x9B, 0xFF, 0x7F, 0xFF, 0xDB, 0xFF, 0x00,
+       0x00, 0xFD, 0xFF, 0xC4, 0xFF, 0x6F, 0xFF, 0xDD, 0xFF, 0x22, 0x02,
+       0x82, 0x06, 0xCC, 0x0B, 0xC4, 0x0F, 0x7A, 0x10, 0x90, 0x0D, 0x7D,
+       0x08, 0x8E, 0x03, 0x74, 0x00, 0x72, 0xFF, 0x9F, 0xFF, 0xF1, 0xFF,
+       0xF2, 0xFF, 0xA1, 0xFF, 0x70, 0xFF, 0x6A, 0x00, 0x78, 0x03, 0x61,
+       0x08, 0x79, 0x0D, 0x73, 0x10, 0xD1, 0x0F, 0xE6, 0x0B, 0x9D, 0x06,
+       0x34, 0x02, 0xE4, 0xFF, 0x6F, 0xFF, 0xC2, 0xFF, 0xFD, 0xFF, 0x00,
+       0x00, 0xDD, 0xFF, 0x81, 0xFF, 0x97, 0xFF, 0x3D, 0x01, 0x0D, 0x05,
+       0x47, 0x0A, 0xE1, 0x0E, 0xAA, 0x10, 0xBB, 0x0E, 0x10, 0x0A, 0xDC,
+       0x04, 0x21, 0x01, 0x90, 0xFF, 0x84, 0xFF, 0xE0, 0xFF, 0xFC, 0xFF,
+       0xBE, 0xFF, 0x6D, 0xFF, 0xF1, 0xFF, 0x58, 0x02, 0xD3, 0x06, 0x1A,
+       0x0C, 0xEB, 0x0F, 0x65, 0x10, 0x4B, 0x0D, 0x29, 0x08, 0x4D, 0x03,
+       0x57, 0x00, 0x6F, 0xFF, 0xA5, 0xFF, 0xF4, 0xFF, 0xEF, 0xFF, 0x9B,
+       0xFF, 0x74, 0xFF, 0x8A, 0x00, 0xBA, 0x03, 0xB5, 0x08, 0xBD, 0x0D,
+       0x86, 0x10, 0xA9, 0x0F, 0x97, 0x0B, 0x4C, 0x06, 0xFF, 0x01, 0xD1,
+       0xFF, 0x71, 0xFF, 0xC8, 0xFF, 0xFE, 0xFF, 0x00, 0x00, 0xD8, 0xFF,
+       0x7C, 0xFF, 0xA3, 0xFF, 0x69, 0x01, 0x59, 0x05, 0x9A, 0x0A, 0x16,
+       0x0F, 0xA7, 0x10, 0x82, 0x0E, 0xBC, 0x09, 0x93, 0x04, 0xF9, 0x00,
+       0x87, 0xFF, 0x89, 0xFF, 0xE4, 0xFF, 0xFB, 0xFF, 0xB8, 0xFF, 0x6C,
+       0xFF, 0x07, 0x00, 0x91, 0x02, 0x25, 0x07, 0x67, 0x0C, 0x0E, 0x10,
+       0x4D, 0x10, 0x03, 0x0D, 0xD5, 0x07, 0x0E, 0x03, 0x3B, 0x00, 0x6D,
+       0xFF, 0xAC, 0xFF, 0xF7, 0xFF, 0xEC, 0xFF, 0x95, 0xFF, 0x79, 0xFF,
+       0xAB, 0x00, 0xFE, 0x03, 0x0A, 0x09, 0xFF, 0x0D, 0x94, 0x10, 0x7D,
+       0x0F, 0x47, 0x0B, 0xFD, 0x05, 0xCC, 0x01, 0xC0, 0xFF, 0x74, 0xFF,
+       0xCD, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xD3, 0xFF, 0x78, 0xFF, 0xB0,
+       0xFF, 0x97, 0x01, 0xA6, 0x05, 0xEC, 0x0A, 0x48, 0x0F, 0xA0, 0x10,
+       0x45, 0x0E, 0x67, 0x09, 0x4B, 0x04, 0xD3, 0x00, 0x80, 0xFF, 0x8F,
+       0xFF, 0xE8, 0xFF, 0xF9, 0xFF, 0xB2, 0xFF, 0x6C, 0xFF, 0x1E, 0x00,
+       0xCB, 0x02, 0x78, 0x07, 0xB2, 0x0C, 0x2E, 0x10, 0x31, 0x10, 0xBA,
+       0x0C, 0x81, 0x07, 0xD2, 0x02, 0x21, 0x00, 0x6C, 0xFF, 0xB2, 0xFF,
+       0xF9, 0xFF, 0xE8, 0xFF, 0x90, 0xFF, 0x7F, 0xFF, 0xCF, 0x00, 0x43,
+       0x04, 0x5E, 0x09, 0x3E, 0x0E, 0x9F, 0x10, 0x4E, 0x0F, 0xF6, 0x0A,
+       0xAE, 0x05, 0x9C, 0x01, 0xB1, 0xFF, 0x78, 0xFF, 0xD2, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xCE, 0xFF, 0x74, 0xFF, 0xBF, 0xFF, 0xC7, 0x01,
+       0xF4, 0x05, 0x3E, 0x0B, 0x78, 0x0F, 0x96, 0x10, 0x06, 0x0E, 0x13,
+       0x09, 0x05, 0x04, 0xAF, 0x00, 0x79, 0xFF, 0x95, 0xFF, 0xEC, 0xFF,
+       0xF7, 0xFF, 0xAC, 0xFF, 0x6D, 0xFF, 0x38, 0x00, 0x07, 0x03, 0xCB,
+       0x07, 0xFB, 0x0C, 0x4A, 0x10, 0x11, 0x10, 0x6F, 0x0C, 0x2E, 0x07,
+       0x97, 0x02, 0x09, 0x00, 0x6C, 0xFF, 0xB8, 0xFF, 0xFA, 0xFF, 0xE4,
+       0xFF, 0x8A, 0xFF, 0x86, 0xFF, 0xF4, 0x00, 0x8B, 0x04, 0xB2, 0x09,
+       0x7B, 0x0E, 0xA7, 0x10, 0x1C, 0x0F, 0xA3, 0x0A, 0x61, 0x05, 0x6E,
+       0x01, 0xA4, 0xFF, 0x7C, 0xFF, 0xD8, 0xFF, 0x00, 0x00, 0xFE, 0xFF,
+       0xC8, 0xFF, 0x71, 0xFF, 0xCF, 0xFF, 0xF9, 0x01, 0x43, 0x06, 0x8E,
+       0x0B, 0xA4, 0x0F, 0x88, 0x10, 0xC4, 0x0D, 0xBE, 0x08, 0xC1, 0x03,
+       0x8D, 0x00, 0x75, 0xFF, 0x9B, 0xFF, 0xEF, 0xFF, 0xF4, 0xFF, 0xA6,
+       0xFF, 0x6E, 0xFF, 0x53, 0x00, 0x46, 0x03, 0x1F, 0x08, 0x43, 0x0D,
+       0x63, 0x10, 0xEF, 0x0F, 0x23, 0x0C, 0xDC, 0x06, 0x5E, 0x02, 0xF3,
+       0xFF, 0x6D, 0xFF, 0xBE, 0xFF, 0xFC, 0xFF, 0xE0, 0xFF, 0x85, 0xFF,
+       0x8F, 0xFF, 0x1C, 0x01, 0xD3, 0x04, 0x06, 0x0A, 0xB5, 0x0E, 0xAA,
+       0x10, 0xE7, 0x0E, 0x50, 0x0A, 0x16, 0x05, 0x42, 0x01, 0x98, 0xFF,
+       0x80, 0xFF, 0xDC, 0xFF, 0x00, 0x00, 0xFD, 0xFF, 0xC3, 0xFF, 0x6F,
+       0xFF, 0xE1, 0xFF, 0x2E, 0x02, 0x94, 0x06, 0xDD, 0x0B, 0xCD, 0x0F,
+       0x76, 0x10, 0x81, 0x0D, 0x6A, 0x08, 0x7F, 0x03, 0x6E, 0x00, 0x71,
+       0xFF, 0xA1, 0xFF, 0xF2, 0xFF, 0x00, 0x00, 0x15, 0x00, 0xD1, 0xFF,
+       0x8B, 0xFE, 0xBC, 0xFD, 0xE1, 0x00, 0x84, 0x09, 0xB0, 0x13, 0x47,
+       0x18, 0xB0, 0x13, 0x84, 0x09, 0xE1, 0x00, 0xBC, 0xFD, 0x8B, 0xFE,
+       0xD1, 0xFF, 0x15, 0x00, 0xFD, 0xFF, 0x13, 0x00, 0xDA, 0x00, 0x30,
+       0x00, 0x5D, 0xFC, 0xB3, 0xFC, 0x35, 0x0A, 0xC2, 0x1C, 0x24, 0x20,
+       0x48, 0x10, 0x5D, 0xFF, 0x74, 0xFB, 0x3A, 0xFF, 0xFB, 0x00, 0x42,
+       0x00, 0xF8, 0xFF, 0xFA, 0xFF, 0x2C, 0x00, 0xF3, 0x00, 0xAD, 0xFF,
+       0xC5, 0xFB, 0x11, 0xFE, 0xAF, 0x0D, 0xEF, 0x1E, 0x68, 0x1E, 0xBC,
+       0x0C, 0xA7, 0xFD, 0xEA, 0xFB, 0xD3, 0xFF, 0xEE, 0x00, 0x24, 0x00,
+       0xFA, 0xFF, 0xF7, 0xFF, 0x4C, 0x00, 0xFB, 0x00, 0x0C, 0xFF, 0x5F,
+       0xFB, 0xE8, 0xFF, 0x3D, 0x11, 0x7E, 0x20, 0x13, 0x1C, 0x4C, 0x09,
+       0x6A, 0xFC, 0x8C, 0xFC, 0x4E, 0x00, 0xD1, 0x00, 0x0E, 0x00, 0xFD,
+       0xFF, 0xF7, 0xFF, 0x72, 0x00, 0xEC, 0x00, 0x55, 0xFE, 0x3D, 0xFB,
+       0x37, 0x02, 0xBE, 0x14, 0x5D, 0x21, 0x40, 0x19, 0x18, 0x06, 0xA2,
+       0xFB, 0x47, 0xFD, 0xA7, 0x00, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0xFC, 0xFF, 0x9B, 0x00, 0xC0, 0x00, 0x92, 0xFD, 0x73,
+       0xFB, 0xF2, 0x04, 0x0E, 0x18, 0x81, 0x21, 0x0C, 0x16, 0x37, 0x03,
+       0x47, 0xFB, 0x0B, 0xFE, 0xDF, 0x00, 0x82, 0x00, 0xF9, 0xFF, 0xFE,
+       0xFF, 0x08, 0x00, 0xC3, 0x00, 0x74, 0x00, 0xD2, 0xFC, 0x10, 0xFC,
+       0x08, 0x08, 0x0A, 0x1B, 0xE9, 0x20, 0x9A, 0x12, 0xBE, 0x00, 0x49,
+       0xFB, 0xC8, 0xFE, 0xF9, 0x00, 0x5A, 0x00, 0xF7, 0xFF, 0xFC, 0xFF,
+       0x1B, 0x00, 0xE4, 0x00, 0x06, 0x00, 0x24, 0xFC, 0x1E, 0xFD, 0x65,
+       0x0B, 0x94, 0x1D, 0x9D, 0x1F, 0x0D, 0x0F, 0xB8, 0xFE, 0x96, 0xFB,
+       0x72, 0xFF, 0xF9, 0x00, 0x37, 0x00, 0xF8, 0xFF, 0xF9, 0xFF, 0x36,
+       0x00, 0xF8, 0x00, 0x78, 0xFF, 0x9B, 0xFB, 0xA6, 0xFE, 0xE9, 0x0E,
+       0x8D, 0x1F, 0xAA, 0x1D, 0x87, 0x0B, 0x2B, 0xFD, 0x1E, 0xFC, 0x02,
+       0x00, 0xE5, 0x00, 0x1C, 0x00, 0xFB, 0xFF, 0xF7, 0xFF, 0x58, 0x00,
+       0xF9, 0x00, 0xCF, 0xFE, 0x4A, 0xFB, 0xA7, 0x00, 0x77, 0x12, 0xE0,
+       0x20, 0x26, 0x1B, 0x28, 0x08, 0x18, 0xFC, 0xCB, 0xFC, 0x71, 0x00,
+       0xC5, 0x00, 0x08, 0x00, 0xFE, 0xFF, 0xF8, 0xFF, 0x80, 0x00, 0xE1,
+       0x00, 0x13, 0xFE, 0x45, 0xFB, 0x1D, 0x03, 0xEB, 0x15, 0x7F, 0x21,
+       0x2D, 0x18, 0x0E, 0x05, 0x77, 0xFB, 0x8B, 0xFD, 0xBE, 0x00, 0x9D,
+       0x00, 0xFD, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xA9, 0x00,
+       0xAA, 0x00, 0x4F, 0xFD, 0x9D, 0xFB, 0xFA, 0x05, 0x22, 0x19, 0x62,
+       0x21, 0xE0, 0x14, 0x50, 0x02, 0x3E, 0xFB, 0x4E, 0xFE, 0xEB, 0x00,
+       0x73, 0x00, 0xF7, 0xFF, 0xFE, 0xFF, 0x0D, 0x00, 0xD0, 0x00, 0x52,
+       0x00, 0x93, 0xFC, 0x60, 0xFC, 0x2C, 0x09, 0xFA, 0x1B, 0x8A, 0x20,
+       0x60, 0x11, 0xFD, 0xFF, 0x5C, 0xFB, 0x06, 0xFF, 0xFB, 0x00, 0x4D,
+       0x00, 0xF7, 0xFF, 0xFA, 0xFF, 0x23, 0x00, 0xED, 0x00, 0xD9, 0xFF,
+       0xEF, 0xFB, 0x98, 0xFD, 0x99, 0x0C, 0x54, 0x1E, 0x02, 0x1F, 0xD2,
+       0x0D, 0x20, 0xFE, 0xC0, 0xFB, 0xA7, 0xFF, 0xF4, 0x00, 0x2D, 0x00,
+       0xF9, 0xFF, 0xF8, 0xFF, 0x41, 0x00, 0xFB, 0x00, 0x41, 0xFF, 0x78,
+       0xFB, 0x4A, 0xFF, 0x25, 0x10, 0x16, 0x20, 0xDA, 0x1C, 0x56, 0x0A,
+       0xBE, 0xFC, 0x56, 0xFC, 0x2C, 0x00, 0xDB, 0x00, 0x14, 0x00, 0xFD,
+       0xFF, 0xF7, 0xFF, 0x66, 0x00, 0xF4, 0x00, 0x8F, 0xFE, 0x3F, 0xFB,
+       0x75, 0x01, 0xAE, 0x13, 0x2C, 0x21, 0x2A, 0x1A, 0x0D, 0x07, 0xD4,
+       0xFB, 0x0C, 0xFD, 0x8F, 0x00, 0xB7, 0x00, 0x03, 0x00, 0xFF, 0xFF,
+       0x00, 0x00, 0xFA, 0xFF, 0x8E, 0x00, 0xD1, 0x00, 0xCF, 0xFD, 0x58,
+       0xFB, 0x10, 0x04, 0x10, 0x17, 0x8A, 0x21, 0x10, 0x17, 0x10, 0x04,
+       0x58, 0xFB, 0xCF, 0xFD, 0xD1, 0x00, 0x8E, 0x00, 0xFA, 0xFF, 0xFF,
+       0xFF, 0x03, 0x00, 0xB7, 0x00, 0x8F, 0x00, 0x0C, 0xFD, 0xD4, 0xFB,
+       0x0D, 0x07, 0x2A, 0x1A, 0x2C, 0x21, 0xAE, 0x13, 0x75, 0x01, 0x3F,
+       0xFB, 0x8F, 0xFE, 0xF4, 0x00, 0x66, 0x00, 0xF7, 0xFF, 0xFD, 0xFF,
+       0x14, 0x00, 0xDB, 0x00, 0x2C, 0x00, 0x56, 0xFC, 0xBE, 0xFC, 0x56,
+       0x0A, 0xDA, 0x1C, 0x16, 0x20, 0x25, 0x10, 0x4A, 0xFF, 0x78, 0xFB,
+       0x41, 0xFF, 0xFB, 0x00, 0x41, 0x00, 0xF8, 0xFF, 0xF9, 0xFF, 0x2D,
+       0x00, 0xF4, 0x00, 0xA7, 0xFF, 0xC0, 0xFB, 0x20, 0xFE, 0xD2, 0x0D,
+       0x02, 0x1F, 0x54, 0x1E, 0x99, 0x0C, 0x98, 0xFD, 0xEF, 0xFB, 0xD9,
+       0xFF, 0xED, 0x00, 0x23, 0x00, 0xFA, 0xFF, 0xF7, 0xFF, 0x4D, 0x00,
+       0xFB, 0x00, 0x06, 0xFF, 0x5C, 0xFB, 0xFD, 0xFF, 0x60, 0x11, 0x8A,
+       0x20, 0xFA, 0x1B, 0x2C, 0x09, 0x60, 0xFC, 0x93, 0xFC, 0x52, 0x00,
+       0xD0, 0x00, 0x0D, 0x00, 0xFE, 0xFF, 0xF7, 0xFF, 0x73, 0x00, 0xEB,
+       0x00, 0x4E, 0xFE, 0x3E, 0xFB, 0x50, 0x02, 0xE0, 0x14, 0x62, 0x21,
+       0x22, 0x19, 0xFA, 0x05, 0x9D, 0xFB, 0x4F, 0xFD, 0xAA, 0x00, 0xA9,
+       0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0x9D, 0x00,
+       0xBE, 0x00, 0x8B, 0xFD, 0x77, 0xFB, 0x0E, 0x05, 0x2D, 0x18, 0x7F,
+       0x21, 0xEB, 0x15, 0x1D, 0x03, 0x45, 0xFB, 0x13, 0xFE, 0xE1, 0x00,
+       0x80, 0x00, 0xF8, 0xFF, 0xFE, 0xFF, 0x08, 0x00, 0xC5, 0x00, 0x71,
+       0x00, 0xCB, 0xFC, 0x18, 0xFC, 0x28, 0x08, 0x26, 0x1B, 0xE0, 0x20,
+       0x77, 0x12, 0xA7, 0x00, 0x4A, 0xFB, 0xCF, 0xFE, 0xF9, 0x00, 0x58,
+       0x00, 0xF7, 0xFF, 0xFB, 0xFF, 0x1C, 0x00, 0xE5, 0x00, 0x02, 0x00,
+       0x1E, 0xFC, 0x2B, 0xFD, 0x87, 0x0B, 0xAA, 0x1D, 0x8D, 0x1F, 0xE9,
+       0x0E, 0xA6, 0xFE, 0x9B, 0xFB, 0x78, 0xFF, 0xF8, 0x00, 0x36, 0x00,
+       0xF9, 0xFF, 0xF8, 0xFF, 0x37, 0x00, 0xF9, 0x00, 0x72, 0xFF, 0x96,
+       0xFB, 0xB8, 0xFE, 0x0D, 0x0F, 0x9D, 0x1F, 0x94, 0x1D, 0x65, 0x0B,
+       0x1E, 0xFD, 0x24, 0xFC, 0x06, 0x00, 0xE4, 0x00, 0x1B, 0x00, 0xFC,
+       0xFF, 0xF7, 0xFF, 0x5A, 0x00, 0xF9, 0x00, 0xC8, 0xFE, 0x49, 0xFB,
+       0xBE, 0x00, 0x9A, 0x12, 0xE9, 0x20, 0x0A, 0x1B, 0x08, 0x08, 0x10,
+       0xFC, 0xD2, 0xFC, 0x74, 0x00, 0xC3, 0x00, 0x08, 0x00, 0xFE, 0xFF,
+       0xF9, 0xFF, 0x82, 0x00, 0xDF, 0x00, 0x0B, 0xFE, 0x47, 0xFB, 0x37,
+       0x03, 0x0C, 0x16, 0x81, 0x21, 0x0E, 0x18, 0xF2, 0x04, 0x73, 0xFB,
+       0x92, 0xFD, 0xC0, 0x00, 0x9B, 0x00, 0xFC, 0xFF, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0xAB, 0x00, 0xA7, 0x00, 0x47, 0xFD, 0xA2, 0xFB,
+       0x18, 0x06, 0x40, 0x19, 0x5D, 0x21, 0xBE, 0x14, 0x37, 0x02, 0x3D,
+       0xFB, 0x55, 0xFE, 0xEC, 0x00, 0x72, 0x00, 0xF7, 0xFF, 0xFD, 0xFF,
+       0x0E, 0x00, 0xD1, 0x00, 0x4E, 0x00, 0x8C, 0xFC, 0x6A, 0xFC, 0x4C,
+       0x09, 0x13, 0x1C, 0x7E, 0x20, 0x3D, 0x11, 0xE8, 0xFF, 0x5F, 0xFB,
+       0x0C, 0xFF, 0xFB, 0x00, 0x4C, 0x00, 0xF7, 0xFF, 0xFA, 0xFF, 0x24,
+       0x00, 0xEE, 0x00, 0xD3, 0xFF, 0xEA, 0xFB, 0xA7, 0xFD, 0xBC, 0x0C,
+       0x68, 0x1E, 0xEF, 0x1E, 0xAF, 0x0D, 0x11, 0xFE, 0xC5, 0xFB, 0xAD,
+       0xFF, 0xF3, 0x00, 0x2C, 0x00, 0xFA, 0xFF, 0xF8, 0xFF, 0x42, 0x00,
+       0xFB, 0x00, 0x3A, 0xFF, 0x74, 0xFB, 0x5D, 0xFF, 0x48, 0x10, 0x24,
+       0x20, 0xC2, 0x1C, 0x35, 0x0A, 0xB3, 0xFC, 0x5D, 0xFC, 0x30, 0x00,
+       0xDA, 0x00, 0x13, 0x00, 0xFD, 0xFF, 0xF7, 0xFF, 0x67, 0x00, 0xF3,
+       0x00, 0x88, 0xFE, 0x3E, 0xFB, 0x8C, 0x01, 0xD0, 0x13, 0x33, 0x21,
+       0x0D, 0x1A, 0xEE, 0x06, 0xCD, 0xFB, 0x13, 0xFD, 0x92, 0x00, 0xB6,
+       0x00, 0x03, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFA, 0xFF, 0x90, 0x00,
+       0xCF, 0x00, 0xC7, 0xFD, 0x5B, 0xFB, 0x2B, 0x04, 0x31, 0x17, 0x8A,
+       0x21, 0xF0, 0x16, 0xF4, 0x03, 0x56, 0xFB, 0xD6, 0xFD, 0xD3, 0x00,
+       0x8D, 0x00, 0xFA, 0xFF, 0xFF, 0xFF, 0x04, 0x00, 0xB9, 0x00, 0x8C,
+       0x00, 0x05, 0xFD, 0xDB, 0xFB, 0x2C, 0x07, 0x47, 0x1A, 0x25, 0x21,
+       0x8B, 0x13, 0x5D, 0x01, 0x40, 0xFB, 0x97, 0xFE, 0xF5, 0x00, 0x64,
+       0x00, 0xF7, 0xFF, 0xFC, 0xFF, 0x15, 0x00, 0xDC, 0x00, 0x27, 0x00,
+       0x50, 0xFC, 0xCA, 0xFC, 0x78, 0x0A, 0xF2, 0x1C, 0x07, 0x20, 0x02,
+       0x10, 0x37, 0xFF, 0x7B, 0xFB, 0x47, 0xFF, 0xFB, 0x00, 0x40, 0x00,
+       0xF8, 0xFF, 0xF9, 0xFF, 0x2E, 0x00, 0xF5, 0x00, 0xA2, 0xFF, 0xBB,
+       0xFB, 0x31, 0xFE, 0xF5, 0x0D, 0x14, 0x1F, 0x3F, 0x1E, 0x77, 0x0C,
+       0x8A, 0xFD, 0xF5, 0xFB, 0xDE, 0xFF, 0xEC, 0x00, 0x22, 0x00, 0xFB,
+       0xFF, 0xF7, 0xFF, 0x4E, 0x00, 0xFB, 0x00, 0xFF, 0xFE, 0x59, 0xFB,
+       0x11, 0x00, 0x83, 0x11, 0x96, 0x20, 0xE0, 0x1B, 0x0B, 0x09, 0x56,
+       0xFC, 0x99, 0xFC, 0x56, 0x00, 0xCE, 0x00, 0x0D, 0x00, 0xFE, 0xFF,
+       0xF8, 0xFF, 0x75, 0x00, 0xEA, 0x00, 0x47, 0xFE, 0x3E, 0xFB, 0x69,
+       0x02, 0x02, 0x15, 0x66, 0x21, 0x04, 0x19, 0xDC, 0x05, 0x98, 0xFB,
+       0x56, 0xFD, 0xAD, 0x00, 0xA8, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00,
+       0x00, 0xFD, 0xFF, 0x9E, 0x00, 0xBC, 0x00, 0x83, 0xFD, 0x7B, 0xFB,
+       0x2B, 0x05, 0x4C, 0x18, 0x7C, 0x21, 0xCA, 0x15, 0x03, 0x03, 0x44,
+       0xFB, 0x1A, 0xFE, 0xE2, 0x00, 0x7E, 0x00, 0xF8, 0xFF, 0xFE, 0xFF,
+       0x09, 0x00, 0xC6, 0x00, 0x6D, 0x00, 0xC3, 0xFC, 0x20, 0xFC, 0x49,
+       0x08, 0x41, 0x1B, 0xD6, 0x20, 0x54, 0x12, 0x92, 0x00, 0x4C, 0xFB,
+       0xD6, 0xFE, 0xFA, 0x00, 0x57, 0x00, 0xF7, 0xFF, 0xFB, 0xFF, 0x1D,
+       0x00, 0xE6, 0x00, 0xFD, 0xFF, 0x18, 0xFC, 0x38, 0xFD, 0xA9, 0x0B,
+       0xC0, 0x1D, 0x7C, 0x1F, 0xC6, 0x0E, 0x95, 0xFE, 0x9F, 0xFB, 0x7E,
+       0xFF, 0xF8, 0x00, 0x35, 0x00, 0xF9, 0xFF, 0xF8, 0xFF, 0x38, 0x00,
+       0xF9, 0x00, 0x6C, 0xFF, 0x92, 0xFB, 0xC9, 0xFE, 0x2F, 0x0F, 0xAD,
+       0x1F, 0x7D, 0x1D, 0x42, 0x0B, 0x12, 0xFD, 0x2A, 0xFC, 0x0B, 0x00,
+       0xE3, 0x00, 0x1A, 0x00, 0xFC, 0xFF, 0xF7, 0xFF, 0x5B, 0x00, 0xF8,
+       0x00, 0xC1, 0xFE, 0x47, 0xFB, 0xD4, 0x00, 0xBC, 0x12, 0xF3, 0x20,
+       0xEF, 0x1A, 0xE9, 0x07, 0x08, 0xFC, 0xD9, 0xFC, 0x78, 0x00, 0xC2,
+       0x00, 0x07, 0x00, 0xFF, 0xFF, 0xF9, 0xFF, 0x83, 0x00, 0xDD, 0x00,
+       0x04, 0xFE, 0x49, 0xFB, 0x52, 0x03, 0x2D, 0x16, 0x83, 0x21, 0xEF,
+       0x17, 0xD5, 0x04, 0x6F, 0xFB, 0x9A, 0xFD, 0xC3, 0x00, 0x9A, 0x00,
+       0xFC, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xAD, 0x00, 0xA4,
+       0x00, 0x40, 0xFD, 0xA8, 0xFB, 0x36, 0x06, 0x5E, 0x19, 0x58, 0x21,
+       0x9C, 0x14, 0x1E, 0x02, 0x3D, 0xFB, 0x5D, 0xFE, 0xED, 0x00, 0x70,
+       0x00, 0xF7, 0xFF, 0xFD, 0xFF, 0x0F, 0x00, 0xD2, 0x00, 0x4A, 0x00,
+       0x85, 0xFC, 0x74, 0xFC, 0x6D, 0x09, 0x2D, 0x1C, 0x72, 0x20, 0x1A,
+       0x11, 0xD4, 0xFF, 0x61, 0xFB, 0x13, 0xFF, 0xFC, 0x00, 0x4A, 0x00,
+       0xF7, 0xFF, 0xFA, 0xFF, 0x25, 0x00, 0xEF, 0x00, 0xCE, 0xFF, 0xE4,
+       0xFB, 0xB5, 0xFD, 0xDE, 0x0C, 0x7C, 0x1E, 0xDD, 0x1E, 0x8C, 0x0D,
+       0x01, 0xFE, 0xCA, 0xFB, 0xB3, 0xFF, 0xF3, 0x00, 0x2B, 0x00, 0xFA,
+       0xFF, 0xF8, 0xFF, 0x44, 0x00, 0xFB, 0x00, 0x34, 0xFF, 0x71, 0xFB,
+       0x71, 0xFF, 0x6B, 0x10, 0x32, 0x20, 0xA9, 0x1C, 0x13, 0x0A, 0xA8,
+       0xFC, 0x63, 0xFC, 0x35, 0x00, 0xD9, 0x00, 0x12, 0x00, 0xFD, 0xFF,
+       0xF7, 0xFF, 0x69, 0x00, 0xF2, 0x00, 0x81, 0xFE, 0x3E, 0xFB, 0xA4,
+       0x01, 0xF2, 0x13, 0x3A, 0x21, 0xF0, 0x19, 0xCF, 0x06, 0xC7, 0xFB,
+       0x1B, 0xFD, 0x96, 0x00, 0xB4, 0x00, 0x02, 0x00, 0xFF, 0xFF, 0x00,
+       0x00, 0xFB, 0xFF, 0x92, 0x00, 0xCD, 0x00, 0xC0, 0xFD, 0x5E, 0xFB,
+       0x47, 0x04, 0x51, 0x17, 0x8A, 0x21, 0xD0, 0x16, 0xD9, 0x03, 0x53,
+       0xFB, 0xDE, 0xFD, 0xD5, 0x00, 0x8B, 0x00, 0xFA, 0xFF, 0xFF, 0xFF,
+       0x04, 0x00, 0xBA, 0x00, 0x89, 0x00, 0xFD, 0xFC, 0xE2, 0xFB, 0x4B,
+       0x07, 0x63, 0x1A, 0x1D, 0x21, 0x69, 0x13, 0x46, 0x01, 0x41, 0xFB,
+       0x9E, 0xFE, 0xF5, 0x00, 0x63, 0x00, 0xF7, 0xFF, 0xFC, 0xFF, 0x16,
+       0x00, 0xDD, 0x00, 0x23, 0x00, 0x49, 0xFC, 0xD5, 0xFC, 0x99, 0x0A,
+       0x09, 0x1D, 0xF9, 0x1F, 0xDF, 0x0F, 0x24, 0xFF, 0x7F, 0xFB, 0x4D,
+       0xFF, 0xFB, 0x00, 0x3F, 0x00, 0xF8, 0xFF, 0xF9, 0xFF, 0x2F, 0x00,
+       0xF5, 0x00, 0x9C, 0xFF, 0xB6, 0xFB, 0x41, 0xFE, 0x17, 0x0E, 0x26,
+       0x1F, 0x2B, 0x1E, 0x54, 0x0C, 0x7C, 0xFD, 0xFA, 0xFB, 0xE3, 0xFF,
+       0xEB, 0x00, 0x21, 0x00, 0xFB, 0xFF, 0xF7, 0xFF, 0x50, 0x00, 0xFB,
+       0x00, 0xF8, 0xFE, 0x57, 0xFB, 0x26, 0x00, 0xA6, 0x11, 0xA1, 0x20,
+       0xC6, 0x1B, 0xEA, 0x08, 0x4D, 0xFC, 0xA0, 0xFC, 0x5A, 0x00, 0xCD,
+       0x00, 0x0C, 0x00, 0xFE, 0xFF, 0xF8, 0xFF, 0x77, 0x00, 0xE9, 0x00,
+       0x3F, 0xFE, 0x3F, 0xFB, 0x82, 0x02, 0x23, 0x15, 0x6B, 0x21, 0xE5,
+       0x18, 0xBE, 0x05, 0x93, 0xFB, 0x5E, 0xFD, 0xAF, 0x00, 0xA6, 0x00,
+       0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xA0, 0x00, 0xB9,
+       0x00, 0x7C, 0xFD, 0x80, 0xFB, 0x48, 0x05, 0x6B, 0x18, 0x79, 0x21,
+       0xA9, 0x15, 0xE9, 0x02, 0x43, 0xFB, 0x21, 0xFE, 0xE3, 0x00, 0x7D,
+       0x00, 0xF8, 0xFF, 0xFE, 0xFF, 0x09, 0x00, 0xC7, 0x00, 0x69, 0x00,
+       0xBC, 0xFC, 0x29, 0xFC, 0x69, 0x08, 0x5C, 0x1B, 0xCC, 0x20, 0x32,
+       0x12, 0x7C, 0x00, 0x4E, 0xFB, 0xDD, 0xFE, 0xFA, 0x00, 0x56, 0x00,
+       0xF7, 0xFF, 0xFB, 0xFF, 0x1D, 0x00, 0xE7, 0x00, 0xF8, 0xFF, 0x12,
+       0xFC, 0x45, 0xFD, 0xCB, 0x0B, 0xD6, 0x1D, 0x6C, 0x1F, 0xA3, 0x0E,
+       0x84, 0xFE, 0xA4, 0xFB, 0x84, 0xFF, 0xF7, 0x00, 0x34, 0x00, 0xF9,
+       0xFF, 0xF8, 0xFF, 0x3A, 0x00, 0xFA, 0x00, 0x66, 0xFF, 0x8E, 0xFB,
+       0xDB, 0xFE, 0x53, 0x0F, 0xBD, 0x1F, 0x66, 0x1D, 0x21, 0x0B, 0x05,
+       0xFD, 0x30, 0xFC, 0x10, 0x00, 0xE2, 0x00, 0x19, 0x00, 0xFC, 0xFF,
+       0xF7, 0xFF, 0x5D, 0x00, 0xF8, 0x00, 0xBA, 0xFE, 0x46, 0xFB, 0xEA,
+       0x00, 0xDF, 0x12, 0xFC, 0x20, 0xD3, 0x1A, 0xC9, 0x07, 0x00, 0xFC,
+       0xE0, 0xFC, 0x7B, 0x00, 0xC0, 0x00, 0x07, 0x00, 0xFF, 0xFF, 0xF9,
+       0xFF, 0x85, 0x00, 0xDC, 0x00, 0xFC, 0xFD, 0x4A, 0xFB, 0x6C, 0x03,
+       0x4E, 0x16, 0x85, 0x21, 0xCF, 0x17, 0xB8, 0x04, 0x6C, 0xFB, 0xA2,
+       0xFD, 0xC5, 0x00, 0x98, 0x00, 0xFC, 0xFF, 0x00, 0x00, 0xFF, 0xFF,
+       0x01, 0x00, 0xAE, 0x00, 0xA1, 0x00, 0x38, 0xFD, 0xAE, 0xFB, 0x54,
+       0x06, 0x7C, 0x19, 0x53, 0x21, 0x7B, 0x14, 0x05, 0x02, 0x3D, 0xFB,
+       0x64, 0xFE, 0xEE, 0x00, 0x6F, 0x00, 0xF7, 0xFF, 0xFD, 0xFF, 0x0F,
+       0x00, 0xD4, 0x00, 0x46, 0x00, 0x7E, 0xFC, 0x7E, 0xFC, 0x8E, 0x09,
+       0x46, 0x1C, 0x66, 0x20, 0xF7, 0x10, 0xC0, 0xFF, 0x64, 0xFB, 0x1A,
+       0xFF, 0xFC, 0x00, 0x49, 0x00, 0xF7, 0xFF, 0xFA, 0xFF, 0x26, 0x00,
+       0xF0, 0x00, 0xC9, 0xFF, 0xDF, 0xFB, 0xC4, 0xFD, 0x01, 0x0D, 0x90,
+       0x1E, 0xCA, 0x1E, 0x69, 0x0D, 0xF1, 0xFD, 0xCF, 0xFB, 0xB8, 0xFF,
+       0xF2, 0x00, 0x29, 0x00, 0xFA, 0xFF, 0xF7, 0xFF, 0x45, 0x00, 0xFC,
+       0x00, 0x2D, 0xFF, 0x6D, 0xFB, 0x84, 0xFF, 0x8E, 0x10, 0x3F, 0x20,
+       0x91, 0x1C, 0xF2, 0x09, 0x9D, 0xFC, 0x6A, 0xFC, 0x39, 0x00, 0xD7,
+       0x00, 0x12, 0x00, 0xFD, 0xFF, 0xF7, 0xFF, 0x6A, 0x00, 0xF1, 0x00,
+       0x7A, 0xFE, 0x3D, 0xFB, 0xBC, 0x01, 0x14, 0x14, 0x41, 0x21, 0xD4,
+       0x19, 0xB0, 0x06, 0xC0, 0xFB, 0x22, 0xFD, 0x99, 0x00, 0xB3, 0x00,
+       0x02, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFB, 0xFF, 0x93, 0x00, 0xCB,
+       0x00, 0xB8, 0xFD, 0x61, 0xFB, 0x63, 0x04, 0x71, 0x17, 0x89, 0x21,
+       0xB0, 0x16, 0xBD, 0x03, 0x51, 0xFB, 0xE6, 0xFD, 0xD7, 0x00, 0x8A,
+       0x00, 0xFA, 0xFF, 0xFF, 0xFF, 0x05, 0x00, 0xBC, 0x00, 0x86, 0x00,
+       0xF6, 0xFC, 0xE9, 0xFB, 0x6A, 0x07, 0x80, 0x1A, 0x15, 0x21, 0x47,
+       0x13, 0x2F, 0x01, 0x42, 0xFB, 0xA5, 0xFE, 0xF6, 0x00, 0x61, 0x00,
+       0xF7, 0xFF, 0xFC, 0xFF, 0x16, 0x00, 0xDF, 0x00, 0x1E, 0x00, 0x43,
+       0xFC, 0xE1, 0xFC, 0xBB, 0x0A, 0x21, 0x1D, 0xEA, 0x1F, 0xBC, 0x0F,
+       0x12, 0xFF, 0x82, 0xFB, 0x54, 0xFF, 0xFA, 0x00, 0x3D, 0x00, 0xF8,
+       0xFF, 0xF9, 0xFF, 0x30, 0x00, 0xF6, 0x00, 0x96, 0xFF, 0xB1, 0xFB,
+       0x51, 0xFE, 0x3A, 0x0E, 0x38, 0x1F, 0x16, 0x1E, 0x32, 0x0C, 0x6E,
+       0xFD, 0x00, 0xFC, 0xE8, 0xFF, 0xEA, 0x00, 0x20, 0x00, 0xFB, 0xFF,
+       0xF7, 0xFF, 0x51, 0x00, 0xFB, 0x00, 0xF1, 0xFE, 0x54, 0xFB, 0x3B,
+       0x00, 0xC9, 0x11, 0xAD, 0x20, 0xAC, 0x1B, 0xCA, 0x08, 0x44, 0xFC,
+       0xA7, 0xFC, 0x5E, 0x00, 0xCC, 0x00, 0x0B, 0x00, 0xFE, 0xFF, 0xF8,
+       0xFF, 0x78, 0x00, 0xE7, 0x00, 0x38, 0xFE, 0x40, 0xFB, 0x9B, 0x02,
+       0x45, 0x15, 0x6F, 0x21, 0xC7, 0x18, 0xA1, 0x05, 0x8E, 0xFB, 0x65,
+       0xFD, 0xB2, 0x00, 0xA5, 0x00, 0xFE, 0xFF, 0x00, 0x00, 0x00, 0x00,
+       0xFE, 0xFF, 0xA2, 0x00, 0xB7, 0x00, 0x74, 0xFD, 0x84, 0xFB, 0x66,
+       0x05, 0x8A, 0x18, 0x76, 0x21, 0x87, 0x15, 0xCF, 0x02, 0x41, 0xFB,
+       0x29, 0xFE, 0xE5, 0x00, 0x7B, 0x00, 0xF8, 0xFF, 0xFE, 0xFF, 0x0A,
+       0x00, 0xC9, 0x00, 0x66, 0x00, 0xB5, 0xFC, 0x32, 0xFC, 0x89, 0x08,
+       0x77, 0x1B, 0xC2, 0x20, 0x0F, 0x12, 0x66, 0x00, 0x50, 0xFB, 0xE4,
+       0xFE, 0xFA, 0x00, 0x54, 0x00, 0xF7, 0xFF, 0xFB, 0xFF, 0x1E, 0x00,
+       0xE8, 0x00, 0xF3, 0xFF, 0x0C, 0xFC, 0x53, 0xFD, 0xED, 0x0B, 0xEB,
+       0x1D, 0x5A, 0x1F, 0x80, 0x0E, 0x73, 0xFE, 0xA8, 0xFB, 0x8A, 0xFF,
+       0xF7, 0x00, 0x32, 0x00, 0xF9, 0xFF, 0xF8, 0xFF, 0x3B, 0x00, 0xFA,
+       0x00, 0x60, 0xFF, 0x8A, 0xFB, 0xED, 0xFE, 0x76, 0x0F, 0xCC, 0x1F,
+       0x4F, 0x1D, 0xFF, 0x0A, 0xF9, 0xFC, 0x36, 0xFC, 0x15, 0x00, 0xE1,
+       0x00, 0x18, 0x00, 0xFC, 0xFF, 0xF7, 0xFF, 0x5E, 0x00, 0xF7, 0x00,
+       0xB3, 0xFE, 0x44, 0xFB, 0x01, 0x01, 0x02, 0x13, 0x04, 0x21, 0xB8,
+       0x1A, 0xA9, 0x07, 0xF8, 0xFB, 0xE7, 0xFC, 0x7F, 0x00, 0xBF, 0x00,
+       0x06, 0x00, 0xFF, 0xFF, 0xF9, 0xFF, 0x86, 0x00, 0xDA, 0x00, 0xF5,
+       0xFD, 0x4C, 0xFB, 0x87, 0x03, 0x6E, 0x16, 0x86, 0x21, 0xB0, 0x17,
+       0x9C, 0x04, 0x68, 0xFB, 0xA9, 0xFD, 0xC7, 0x00, 0x96, 0x00, 0xFB,
+       0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x01, 0x00, 0xB0, 0x00, 0x9F, 0x00,
+       0x31, 0xFD, 0xB4, 0xFB, 0x73, 0x06, 0x99, 0x19, 0x4D, 0x21, 0x59,
+       0x14, 0xED, 0x01, 0x3D, 0xFB, 0x6B, 0xFE, 0xEF, 0x00, 0x6D, 0x00,
+       0xF7, 0xFF, 0xFD, 0xFF, 0x10, 0x00, 0xD5, 0x00, 0x42, 0x00, 0x77,
+       0xFC, 0x88, 0xFC, 0xAF, 0x09, 0x5F, 0x1C, 0x59, 0x20, 0xD4, 0x10,
+       0xAC, 0xFF, 0x67, 0xFB, 0x20, 0xFF, 0xFC, 0x00, 0x48, 0x00, 0xF7,
+       0xFF, 0xFA, 0xFF, 0x27, 0x00, 0xF0, 0x00, 0xC3, 0xFF, 0xD9, 0xFB,
+       0xD3, 0xFD, 0x24, 0x0D, 0xA3, 0x1E, 0xB7, 0x1E, 0x46, 0x0D, 0xE2,
+       0xFD, 0xD4, 0xFB, 0xBE, 0xFF, 0xF1, 0x00, 0x28, 0x00, 0xFA, 0xFF,
+       0xF7, 0xFF, 0x46, 0x00, 0xFC, 0x00, 0x27, 0xFF, 0x6A, 0xFB, 0x98,
+       0xFF, 0xB1, 0x10, 0x4C, 0x20, 0x78, 0x1C, 0xD1, 0x09, 0x93, 0xFC,
+       0x71, 0xFC, 0x3D, 0x00, 0xD6, 0x00, 0x11, 0x00, 0xFD, 0xFF, 0xF7,
+       0xFF, 0x6C, 0x00, 0xF0, 0x00, 0x72, 0xFE, 0x3D, 0xFB, 0xD4, 0x01,
+       0x36, 0x14, 0x47, 0x21, 0xB6, 0x19, 0x91, 0x06, 0xBA, 0xFB, 0x29,
+       0xFD, 0x9C, 0x00, 0xB1, 0x00, 0x02, 0x00, 0xFF, 0xFF, 0x00, 0x00,
+       0xFB, 0xFF, 0x95, 0x00, 0xC9, 0x00, 0xB1, 0xFD, 0x65, 0xFB, 0x80,
+       0x04, 0x90, 0x17, 0x88, 0x21, 0x8F, 0x16, 0xA2, 0x03, 0x4E, 0xFB,
+       0xED, 0xFD, 0xD9, 0x00, 0x88, 0x00, 0xF9, 0xFF, 0xFF, 0xFF, 0x05,
+       0x00, 0xBD, 0x00, 0x82, 0x00, 0xEF, 0xFC, 0xF0, 0xFB, 0x8A, 0x07,
+       0x9C, 0x1A, 0x0D, 0x21, 0x24, 0x13, 0x18, 0x01, 0x43, 0xFB, 0xAC,
+       0xFE, 0xF7, 0x00, 0x60, 0x00, 0xF7, 0xFF, 0xFC, 0xFF, 0x17, 0x00,
+       0xE0, 0x00, 0x1A, 0x00, 0x3D, 0xFC, 0xED, 0xFC, 0xDD, 0x0A, 0x38,
+       0x1D, 0xDB, 0x1F, 0x99, 0x0F, 0xFF, 0xFE, 0x86, 0xFB, 0x5A, 0xFF,
+       0xFA, 0x00, 0x3C, 0x00, 0xF8, 0xFF, 0xF9, 0xFF, 0x31, 0x00, 0xF6,
+       0x00, 0x90, 0xFF, 0xAD, 0xFB, 0x62, 0xFE, 0x5D, 0x0E, 0x49, 0x1F,
+       0x01, 0x1E, 0x10, 0x0C, 0x60, 0xFD, 0x06, 0xFC, 0xEE, 0xFF, 0xE9,
+       0x00, 0x1F, 0x00, 0xFB, 0xFF, 0xF7, 0xFF, 0x53, 0x00, 0xFB, 0x00,
+       0xEB, 0xFE, 0x52, 0xFB, 0x51, 0x00, 0xEC, 0x11, 0xB7, 0x20, 0x91,
+       0x1B, 0xA9, 0x08, 0x3B, 0xFC, 0xAE, 0xFC, 0x62, 0x00, 0xCA, 0x00,
+       0x0B, 0x00, 0xFE, 0xFF, 0xF8, 0xFF, 0x7A, 0x00, 0xE6, 0x00, 0x30,
+       0xFE, 0x40, 0xFB, 0xB5, 0x02, 0x66, 0x15, 0x73, 0x21, 0xA9, 0x18,
+       0x83, 0x05, 0x89, 0xFB, 0x6D, 0xFD, 0xB4, 0x00, 0xA3, 0x00, 0xFE,
+       0xFF, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xA3, 0x00, 0xB4, 0x00,
+       0x6D, 0xFD, 0x89, 0xFB, 0x83, 0x05, 0xA9, 0x18, 0x73, 0x21, 0x66,
+       0x15, 0xB5, 0x02, 0x40, 0xFB, 0x30, 0xFE, 0xE6, 0x00, 0x7A, 0x00,
+       0xF8, 0xFF, 0xFE, 0xFF, 0x0B, 0x00, 0xCA, 0x00, 0x62, 0x00, 0xAE,
+       0xFC, 0x3B, 0xFC, 0xA9, 0x08, 0x91, 0x1B, 0xB7, 0x20, 0xEC, 0x11,
+       0x51, 0x00, 0x52, 0xFB, 0xEB, 0xFE, 0xFB, 0x00, 0x53, 0x00, 0xF7,
+       0xFF, 0xFB, 0xFF, 0x1F, 0x00, 0xE9, 0x00, 0xEE, 0xFF, 0x06, 0xFC,
+       0x60, 0xFD, 0x10, 0x0C, 0x01, 0x1E, 0x49, 0x1F, 0x5D, 0x0E, 0x62,
+       0xFE, 0xAD, 0xFB, 0x90, 0xFF, 0xF6, 0x00, 0x31, 0x00, 0xF9, 0xFF,
+       0xF8, 0xFF, 0x3C, 0x00, 0xFA, 0x00, 0x5A, 0xFF, 0x86, 0xFB, 0xFF,
+       0xFE, 0x99, 0x0F, 0xDB, 0x1F, 0x38, 0x1D, 0xDD, 0x0A, 0xED, 0xFC,
+       0x3D, 0xFC, 0x1A, 0x00, 0xE0, 0x00, 0x17, 0x00, 0xFC, 0xFF, 0xF7,
+       0xFF, 0x60, 0x00, 0xF7, 0x00, 0xAC, 0xFE, 0x43, 0xFB, 0x18, 0x01,
+       0x24, 0x13, 0x0D, 0x21, 0x9C, 0x1A, 0x8A, 0x07, 0xF0, 0xFB, 0xEF,
+       0xFC, 0x82, 0x00, 0xBD, 0x00, 0x05, 0x00, 0xFF, 0xFF, 0xF9, 0xFF,
+       0x88, 0x00, 0xD9, 0x00, 0xED, 0xFD, 0x4E, 0xFB, 0xA2, 0x03, 0x8F,
+       0x16, 0x88, 0x21, 0x90, 0x17, 0x80, 0x04, 0x65, 0xFB, 0xB1, 0xFD,
+       0xC9, 0x00, 0x95, 0x00, 0xFB, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x02,
+       0x00, 0xB1, 0x00, 0x9C, 0x00, 0x29, 0xFD, 0xBA, 0xFB, 0x91, 0x06,
+       0xB6, 0x19, 0x47, 0x21, 0x36, 0x14, 0xD4, 0x01, 0x3D, 0xFB, 0x72,
+       0xFE, 0xF0, 0x00, 0x6C, 0x00, 0xF7, 0xFF, 0xFD, 0xFF, 0x11, 0x00,
+       0xD6, 0x00, 0x3D, 0x00, 0x71, 0xFC, 0x93, 0xFC, 0xD1, 0x09, 0x78,
+       0x1C, 0x4C, 0x20, 0xB1, 0x10, 0x98, 0xFF, 0x6A, 0xFB, 0x27, 0xFF,
+       0xFC, 0x00, 0x46, 0x00, 0xF7, 0xFF, 0xFA, 0xFF, 0x28, 0x00, 0xF1,
+       0x00, 0xBE, 0xFF, 0xD4, 0xFB, 0xE2, 0xFD, 0x46, 0x0D, 0xB7, 0x1E,
+       0xA3, 0x1E, 0x24, 0x0D, 0xD3, 0xFD, 0xD9, 0xFB, 0xC3, 0xFF, 0xF0,
+       0x00, 0x27, 0x00, 0xFA, 0xFF, 0xF7, 0xFF, 0x48, 0x00, 0xFC, 0x00,
+       0x20, 0xFF, 0x67, 0xFB, 0xAC, 0xFF, 0xD4, 0x10, 0x59, 0x20, 0x5F,
+       0x1C, 0xAF, 0x09, 0x88, 0xFC, 0x77, 0xFC, 0x42, 0x00, 0xD5, 0x00,
+       0x10, 0x00, 0xFD, 0xFF, 0xF7, 0xFF, 0x6D, 0x00, 0xEF, 0x00, 0x6B,
+       0xFE, 0x3D, 0xFB, 0xED, 0x01, 0x59, 0x14, 0x4D, 0x21, 0x99, 0x19,
+       0x73, 0x06, 0xB4, 0xFB, 0x31, 0xFD, 0x9F, 0x00, 0xB0, 0x00, 0x01,
+       0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFB, 0xFF, 0x96, 0x00, 0xC7, 0x00,
+       0xA9, 0xFD, 0x68, 0xFB, 0x9C, 0x04, 0xB0, 0x17, 0x86, 0x21, 0x6E,
+       0x16, 0x87, 0x03, 0x4C, 0xFB, 0xF5, 0xFD, 0xDA, 0x00, 0x86, 0x00,
+       0xF9, 0xFF, 0xFF, 0xFF, 0x06, 0x00, 0xBF, 0x00, 0x7F, 0x00, 0xE7,
+       0xFC, 0xF8, 0xFB, 0xA9, 0x07, 0xB8, 0x1A, 0x04, 0x21, 0x02, 0x13,
+       0x01, 0x01, 0x44, 0xFB, 0xB3, 0xFE, 0xF7, 0x00, 0x5E, 0x00, 0xF7,
+       0xFF, 0xFC, 0xFF, 0x18, 0x00, 0xE1, 0x00, 0x15, 0x00, 0x36, 0xFC,
+       0xF9, 0xFC, 0xFF, 0x0A, 0x4F, 0x1D, 0xCC, 0x1F, 0x76, 0x0F, 0xED,
+       0xFE, 0x8A, 0xFB, 0x60, 0xFF, 0xFA, 0x00, 0x3B, 0x00, 0xF8, 0xFF,
+       0xF9, 0xFF, 0x32, 0x00, 0xF7, 0x00, 0x8A, 0xFF, 0xA8, 0xFB, 0x73,
+       0xFE, 0x80, 0x0E, 0x5A, 0x1F, 0xEB, 0x1D, 0xED, 0x0B, 0x53, 0xFD,
+       0x0C, 0xFC, 0xF3, 0xFF, 0xE8, 0x00, 0x1E, 0x00, 0xFB, 0xFF, 0xF7,
+       0xFF, 0x54, 0x00, 0xFA, 0x00, 0xE4, 0xFE, 0x50, 0xFB, 0x66, 0x00,
+       0x0F, 0x12, 0xC2, 0x20, 0x77, 0x1B, 0x89, 0x08, 0x32, 0xFC, 0xB5,
+       0xFC, 0x66, 0x00, 0xC9, 0x00, 0x0A, 0x00, 0xFE, 0xFF, 0xF8, 0xFF,
+       0x7B, 0x00, 0xE5, 0x00, 0x29, 0xFE, 0x41, 0xFB, 0xCF, 0x02, 0x87,
+       0x15, 0x76, 0x21, 0x8A, 0x18, 0x66, 0x05, 0x84, 0xFB, 0x74, 0xFD,
+       0xB7, 0x00, 0xA2, 0x00, 0xFE, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFE,
+       0xFF, 0xA5, 0x00, 0xB2, 0x00, 0x65, 0xFD, 0x8E, 0xFB, 0xA1, 0x05,
+       0xC7, 0x18, 0x6F, 0x21, 0x45, 0x15, 0x9B, 0x02, 0x40, 0xFB, 0x38,
+       0xFE, 0xE7, 0x00, 0x78, 0x00, 0xF8, 0xFF, 0xFE, 0xFF, 0x0B, 0x00,
+       0xCC, 0x00, 0x5E, 0x00, 0xA7, 0xFC, 0x44, 0xFC, 0xCA, 0x08, 0xAC,
+       0x1B, 0xAD, 0x20, 0xC9, 0x11, 0x3B, 0x00, 0x54, 0xFB, 0xF1, 0xFE,
+       0xFB, 0x00, 0x51, 0x00, 0xF7, 0xFF, 0xFB, 0xFF, 0x20, 0x00, 0xEA,
+       0x00, 0xE8, 0xFF, 0x00, 0xFC, 0x6E, 0xFD, 0x32, 0x0C, 0x16, 0x1E,
+       0x38, 0x1F, 0x3A, 0x0E, 0x51, 0xFE, 0xB1, 0xFB, 0x96, 0xFF, 0xF6,
+       0x00, 0x30, 0x00, 0xF9, 0xFF, 0xF8, 0xFF, 0x3D, 0x00, 0xFA, 0x00,
+       0x54, 0xFF, 0x82, 0xFB, 0x12, 0xFF, 0xBC, 0x0F, 0xEA, 0x1F, 0x21,
+       0x1D, 0xBB, 0x0A, 0xE1, 0xFC, 0x43, 0xFC, 0x1E, 0x00, 0xDF, 0x00,
+       0x16, 0x00, 0xFC, 0xFF, 0xF7, 0xFF, 0x61, 0x00, 0xF6, 0x00, 0xA5,
+       0xFE, 0x42, 0xFB, 0x2F, 0x01, 0x47, 0x13, 0x15, 0x21, 0x80, 0x1A,
+       0x6A, 0x07, 0xE9, 0xFB, 0xF6, 0xFC, 0x86, 0x00, 0xBC, 0x00, 0x05,
+       0x00, 0xFF, 0xFF, 0xFA, 0xFF, 0x8A, 0x00, 0xD7, 0x00, 0xE6, 0xFD,
+       0x51, 0xFB, 0xBD, 0x03, 0xB0, 0x16, 0x89, 0x21, 0x71, 0x17, 0x63,
+       0x04, 0x61, 0xFB, 0xB8, 0xFD, 0xCB, 0x00, 0x93, 0x00, 0xFB, 0xFF,
+       0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0xB3, 0x00, 0x99, 0x00, 0x22,
+       0xFD, 0xC0, 0xFB, 0xB0, 0x06, 0xD4, 0x19, 0x41, 0x21, 0x14, 0x14,
+       0xBC, 0x01, 0x3D, 0xFB, 0x7A, 0xFE, 0xF1, 0x00, 0x6A, 0x00, 0xF7,
+       0xFF, 0xFD, 0xFF, 0x12, 0x00, 0xD7, 0x00, 0x39, 0x00, 0x6A, 0xFC,
+       0x9D, 0xFC, 0xF2, 0x09, 0x91, 0x1C, 0x3F, 0x20, 0x8E, 0x10, 0x84,
+       0xFF, 0x6D, 0xFB, 0x2D, 0xFF, 0xFC, 0x00, 0x45, 0x00, 0xF7, 0xFF,
+       0xFA, 0xFF, 0x29, 0x00, 0xF2, 0x00, 0xB8, 0xFF, 0xCF, 0xFB, 0xF1,
+       0xFD, 0x69, 0x0D, 0xCA, 0x1E, 0x90, 0x1E, 0x01, 0x0D, 0xC4, 0xFD,
+       0xDF, 0xFB, 0xC9, 0xFF, 0xF0, 0x00, 0x26, 0x00, 0xFA, 0xFF, 0xF7,
+       0xFF, 0x49, 0x00, 0xFC, 0x00, 0x1A, 0xFF, 0x64, 0xFB, 0xC0, 0xFF,
+       0xF7, 0x10, 0x66, 0x20, 0x46, 0x1C, 0x8E, 0x09, 0x7E, 0xFC, 0x7E,
+       0xFC, 0x46, 0x00, 0xD4, 0x00, 0x0F, 0x00, 0xFD, 0xFF, 0xF7, 0xFF,
+       0x6F, 0x00, 0xEE, 0x00, 0x64, 0xFE, 0x3D, 0xFB, 0x05, 0x02, 0x7B,
+       0x14, 0x53, 0x21, 0x7C, 0x19, 0x54, 0x06, 0xAE, 0xFB, 0x38, 0xFD,
+       0xA1, 0x00, 0xAE, 0x00, 0x01, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFC,
+       0xFF, 0x98, 0x00, 0xC5, 0x00, 0xA2, 0xFD, 0x6C, 0xFB, 0xB8, 0x04,
+       0xCF, 0x17, 0x85, 0x21, 0x4E, 0x16, 0x6C, 0x03, 0x4A, 0xFB, 0xFC,
+       0xFD, 0xDC, 0x00, 0x85, 0x00, 0xF9, 0xFF, 0xFF, 0xFF, 0x07, 0x00,
+       0xC0, 0x00, 0x7B, 0x00, 0xE0, 0xFC, 0x00, 0xFC, 0xC9, 0x07, 0xD3,
+       0x1A, 0xFC, 0x20, 0xDF, 0x12, 0xEA, 0x00, 0x46, 0xFB, 0xBA, 0xFE,
+       0xF8, 0x00, 0x5D, 0x00, 0xF7, 0xFF, 0xFC, 0xFF, 0x19, 0x00, 0xE2,
+       0x00, 0x10, 0x00, 0x30, 0xFC, 0x05, 0xFD, 0x21, 0x0B, 0x66, 0x1D,
+       0xBD, 0x1F, 0x53, 0x0F, 0xDB, 0xFE, 0x8E, 0xFB, 0x66, 0xFF, 0xFA,
+       0x00, 0x3A, 0x00, 0xF8, 0xFF, 0xF9, 0xFF, 0x34, 0x00, 0xF7, 0x00,
+       0x84, 0xFF, 0xA4, 0xFB, 0x84, 0xFE, 0xA3, 0x0E, 0x6C, 0x1F, 0xD6,
+       0x1D, 0xCB, 0x0B, 0x45, 0xFD, 0x12, 0xFC, 0xF8, 0xFF, 0xE7, 0x00,
+       0x1D, 0x00, 0xFB, 0xFF, 0xF7, 0xFF, 0x56, 0x00, 0xFA, 0x00, 0xDD,
+       0xFE, 0x4E, 0xFB, 0x7C, 0x00, 0x32, 0x12, 0xCC, 0x20, 0x5C, 0x1B,
+       0x69, 0x08, 0x29, 0xFC, 0xBC, 0xFC, 0x69, 0x00, 0xC7, 0x00, 0x09,
+       0x00, 0xFE, 0xFF, 0xF8, 0xFF, 0x7D, 0x00, 0xE3, 0x00, 0x21, 0xFE,
+       0x43, 0xFB, 0xE9, 0x02, 0xA9, 0x15, 0x79, 0x21, 0x6B, 0x18, 0x48,
+       0x05, 0x80, 0xFB, 0x7C, 0xFD, 0xB9, 0x00, 0xA0, 0x00, 0xFD, 0xFF,
+       0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xA6, 0x00, 0xAF, 0x00, 0x5E,
+       0xFD, 0x93, 0xFB, 0xBE, 0x05, 0xE5, 0x18, 0x6B, 0x21, 0x23, 0x15,
+       0x82, 0x02, 0x3F, 0xFB, 0x3F, 0xFE, 0xE9, 0x00, 0x77, 0x00, 0xF8,
+       0xFF, 0xFE, 0xFF, 0x0C, 0x00, 0xCD, 0x00, 0x5A, 0x00, 0xA0, 0xFC,
+       0x4D, 0xFC, 0xEA, 0x08, 0xC6, 0x1B, 0xA1, 0x20, 0xA6, 0x11, 0x26,
+       0x00, 0x57, 0xFB, 0xF8, 0xFE, 0xFB, 0x00, 0x50, 0x00, 0xF7, 0xFF,
+       0xFB, 0xFF, 0x21, 0x00, 0xEB, 0x00, 0xE3, 0xFF, 0xFA, 0xFB, 0x7C,
+       0xFD, 0x54, 0x0C, 0x2B, 0x1E, 0x26, 0x1F, 0x17, 0x0E, 0x41, 0xFE,
+       0xB6, 0xFB, 0x9C, 0xFF, 0xF5, 0x00, 0x2F, 0x00, 0xF9, 0xFF, 0xF8,
+       0xFF, 0x3F, 0x00, 0xFB, 0x00, 0x4D, 0xFF, 0x7F, 0xFB, 0x24, 0xFF,
+       0xDF, 0x0F, 0xF9, 0x1F, 0x09, 0x1D, 0x99, 0x0A, 0xD5, 0xFC, 0x49,
+       0xFC, 0x23, 0x00, 0xDD, 0x00, 0x16, 0x00, 0xFC, 0xFF, 0xF7, 0xFF,
+       0x63, 0x00, 0xF5, 0x00, 0x9E, 0xFE, 0x41, 0xFB, 0x46, 0x01, 0x69,
+       0x13, 0x1D, 0x21, 0x63, 0x1A, 0x4B, 0x07, 0xE2, 0xFB, 0xFD, 0xFC,
+       0x89, 0x00, 0xBA, 0x00, 0x04, 0x00, 0xFF, 0xFF, 0xFA, 0xFF, 0x8B,
+       0x00, 0xD5, 0x00, 0xDE, 0xFD, 0x53, 0xFB, 0xD9, 0x03, 0xD0, 0x16,
+       0x8A, 0x21, 0x51, 0x17, 0x47, 0x04, 0x5E, 0xFB, 0xC0, 0xFD, 0xCD,
+       0x00, 0x92, 0x00, 0xFB, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00,
+       0xB4, 0x00, 0x96, 0x00, 0x1B, 0xFD, 0xC7, 0xFB, 0xCF, 0x06, 0xF0,
+       0x19, 0x3A, 0x21, 0xF2, 0x13, 0xA4, 0x01, 0x3E, 0xFB, 0x81, 0xFE,
+       0xF2, 0x00, 0x69, 0x00, 0xF7, 0xFF, 0xFD, 0xFF, 0x12, 0x00, 0xD9,
+       0x00, 0x35, 0x00, 0x63, 0xFC, 0xA8, 0xFC, 0x13, 0x0A, 0xA9, 0x1C,
+       0x32, 0x20, 0x6B, 0x10, 0x71, 0xFF, 0x71, 0xFB, 0x34, 0xFF, 0xFB,
+       0x00, 0x44, 0x00, 0xF8, 0xFF, 0xFA, 0xFF, 0x2B, 0x00, 0xF3, 0x00,
+       0xB3, 0xFF, 0xCA, 0xFB, 0x01, 0xFE, 0x8C, 0x0D, 0xDD, 0x1E, 0x7C,
+       0x1E, 0xDE, 0x0C, 0xB5, 0xFD, 0xE4, 0xFB, 0xCE, 0xFF, 0xEF, 0x00,
+       0x25, 0x00, 0xFA, 0xFF, 0xF7, 0xFF, 0x4A, 0x00, 0xFC, 0x00, 0x13,
+       0xFF, 0x61, 0xFB, 0xD4, 0xFF, 0x1A, 0x11, 0x72, 0x20, 0x2D, 0x1C,
+       0x6D, 0x09, 0x74, 0xFC, 0x85, 0xFC, 0x4A, 0x00, 0xD2, 0x00, 0x0F,
+       0x00, 0xFD, 0xFF, 0xF7, 0xFF, 0x70, 0x00, 0xED, 0x00, 0x5D, 0xFE,
+       0x3D, 0xFB, 0x1E, 0x02, 0x9C, 0x14, 0x58, 0x21, 0x5E, 0x19, 0x36,
+       0x06, 0xA8, 0xFB, 0x40, 0xFD, 0xA4, 0x00, 0xAD, 0x00, 0x00, 0x00,
+       0xFF, 0xFF, 0x00, 0x00, 0xFC, 0xFF, 0x9A, 0x00, 0xC3, 0x00, 0x9A,
+       0xFD, 0x6F, 0xFB, 0xD5, 0x04, 0xEF, 0x17, 0x83, 0x21, 0x2D, 0x16,
+       0x52, 0x03, 0x49, 0xFB, 0x04, 0xFE, 0xDD, 0x00, 0x83, 0x00, 0xF9,
+       0xFF, 0xFF, 0xFF, 0x07, 0x00, 0xC2, 0x00, 0x78, 0x00, 0xD9, 0xFC,
+       0x08, 0xFC, 0xE9, 0x07, 0xEF, 0x1A, 0xF3, 0x20, 0xBC, 0x12, 0xD4,
+       0x00, 0x47, 0xFB, 0xC1, 0xFE, 0xF8, 0x00, 0x5B, 0x00, 0xF7, 0xFF,
+       0xFC, 0xFF, 0x1A, 0x00, 0xE3, 0x00, 0x0B, 0x00, 0x2A, 0xFC, 0x12,
+       0xFD, 0x42, 0x0B, 0x7D, 0x1D, 0xAD, 0x1F, 0x2F, 0x0F, 0xC9, 0xFE,
+       0x92, 0xFB, 0x6C, 0xFF, 0xF9, 0x00, 0x38, 0x00, 0xF8, 0xFF, 0xF9,
+       0xFF, 0x35, 0x00, 0xF8, 0x00, 0x7E, 0xFF, 0x9F, 0xFB, 0x95, 0xFE,
+       0xC6, 0x0E, 0x7C, 0x1F, 0xC0, 0x1D, 0xA9, 0x0B, 0x38, 0xFD, 0x18,
+       0xFC, 0xFD, 0xFF, 0xE6, 0x00, 0x1D, 0x00, 0xFB, 0xFF, 0xF7, 0xFF,
+       0x57, 0x00, 0xFA, 0x00, 0xD6, 0xFE, 0x4C, 0xFB, 0x92, 0x00, 0x54,
+       0x12, 0xD6, 0x20, 0x41, 0x1B, 0x49, 0x08, 0x20, 0xFC, 0xC3, 0xFC,
+       0x6D, 0x00, 0xC6, 0x00, 0x09, 0x00, 0xFE, 0xFF, 0xF8, 0xFF, 0x7E,
+       0x00, 0xE2, 0x00, 0x1A, 0xFE, 0x44, 0xFB, 0x03, 0x03, 0xCA, 0x15,
+       0x7C, 0x21, 0x4C, 0x18, 0x2B, 0x05, 0x7B, 0xFB, 0x83, 0xFD, 0xBC,
+       0x00, 0x9E, 0x00, 0xFD, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF,
+       0xA8, 0x00, 0xAD, 0x00, 0x56, 0xFD, 0x98, 0xFB, 0xDC, 0x05, 0x04,
+       0x19, 0x66, 0x21, 0x02, 0x15, 0x69, 0x02, 0x3E, 0xFB, 0x47, 0xFE,
+       0xEA, 0x00, 0x75, 0x00, 0xF8, 0xFF, 0xFE, 0xFF, 0x0D, 0x00, 0xCE,
+       0x00, 0x56, 0x00, 0x99, 0xFC, 0x56, 0xFC, 0x0B, 0x09, 0xE0, 0x1B,
+       0x96, 0x20, 0x83, 0x11, 0x11, 0x00, 0x59, 0xFB, 0xFF, 0xFE, 0xFB,
+       0x00, 0x4E, 0x00, 0xF7, 0xFF, 0xFB, 0xFF, 0x22, 0x00, 0xEC, 0x00,
+       0xDE, 0xFF, 0xF5, 0xFB, 0x8A, 0xFD, 0x77, 0x0C, 0x3F, 0x1E, 0x14,
+       0x1F, 0xF5, 0x0D, 0x31, 0xFE, 0xBB, 0xFB, 0xA2, 0xFF, 0xF5, 0x00,
+       0x2E, 0x00, 0xF9, 0xFF, 0xF8, 0xFF, 0x40, 0x00, 0xFB, 0x00, 0x47,
+       0xFF, 0x7B, 0xFB, 0x37, 0xFF, 0x02, 0x10, 0x07, 0x20, 0xF2, 0x1C,
+       0x78, 0x0A, 0xCA, 0xFC, 0x50, 0xFC, 0x27, 0x00, 0xDC, 0x00, 0x15,
+       0x00, 0xFC, 0xFF, 0xF7, 0xFF, 0x64, 0x00, 0xF5, 0x00, 0x97, 0xFE,
+       0x40, 0xFB, 0x5D, 0x01, 0x8B, 0x13, 0x25, 0x21, 0x47, 0x1A, 0x2C,
+       0x07, 0xDB, 0xFB, 0x05, 0xFD, 0x8C, 0x00, 0xB9, 0x00, 0x04, 0x00,
+       0xFF, 0xFF, 0xFA, 0xFF, 0x8D, 0x00, 0xD3, 0x00, 0xD6, 0xFD, 0x56,
+       0xFB, 0xF4, 0x03, 0xF0, 0x16, 0x8A, 0x21, 0x31, 0x17, 0x2B, 0x04,
+       0x5B, 0xFB, 0xC7, 0xFD, 0xCF, 0x00, 0x90, 0x00, 0xFA, 0xFF, 0x00,
+       0x00, 0xFF, 0xFF, 0x03, 0x00, 0xB6, 0x00, 0x92, 0x00, 0x13, 0xFD,
+       0xCD, 0xFB, 0xEE, 0x06, 0x0D, 0x1A, 0x33, 0x21, 0xD0, 0x13, 0x8C,
+       0x01, 0x3E, 0xFB, 0x88, 0xFE, 0xF3, 0x00, 0x67, 0x00, 0xF7, 0xFF,
+       0x06, 0x00, 0x1D, 0x00, 0x03, 0xFF, 0xFE, 0x00, 0xA1, 0x02, 0xA6,
+       0xF8, 0x56, 0x02, 0xA5, 0x28, 0xA5, 0x28, 0x56, 0x02, 0xA6, 0xF8,
+       0xA1, 0x02, 0xFE, 0x00, 0x03, 0xFF, 0x1D, 0x00, 0x06, 0x00, 0x00,
+       0x00, 0x21, 0x00, 0xA6, 0xFF, 0x3F, 0xFF, 0x0B, 0x03, 0x42, 0xFE,
+       0x3E, 0xF8, 0x7F, 0x15, 0xAC, 0x30, 0x7F, 0x15, 0x3E, 0xF8, 0x42,
+       0xFE, 0x0B, 0x03, 0x3F, 0xFF, 0xA6, 0xFF, 0x21, 0x00, 0x00, 0x00,
+       0xFA, 0xFF, 0xCE, 0xFF, 0x14, 0x01, 0x00, 0xFD, 0x35, 0x06, 0xD5,
+       0xF4, 0xDA, 0x15, 0x92, 0x40, 0xAE, 0xFE, 0xF3, 0xFC, 0x68, 0x03,
+       0x86, 0xFD, 0x51, 0x01, 0x8B, 0xFF, 0x11, 0x00, 0x01, 0x00, 0xEC,
+       0xFF, 0xF9, 0xFF, 0xC6, 0x00, 0x55, 0xFD, 0x35, 0x06, 0x90, 0xF3,
+       0xE5, 0x1C, 0x6B, 0x3D, 0x71, 0xFA, 0x34, 0xFF, 0x46, 0x02, 0xFF,
+       0xFD, 0x2D, 0x01, 0x90, 0xFF, 0x10, 0x00, 0x03, 0x00, 0xDB, 0xFF,
+       0x2D, 0x00, 0x60, 0x00, 0xE1, 0xFD, 0xCE, 0x05, 0xED, 0xF2, 0xF3,
+       0x23, 0x20, 0x39, 0x22, 0xF7, 0x44, 0x01, 0x1F, 0x01, 0x89, 0xFE,
+       0xFB, 0x00, 0x9C, 0xFF, 0x0D, 0x00, 0x06, 0x00, 0xC9, 0xFF, 0x68,
+       0x00, 0xE5, 0xFF, 0xA0, 0xFE, 0xFB, 0x04, 0x0C, 0xF3, 0xC5, 0x2A,
+       0xD8, 0x33, 0xC9, 0xF4, 0x0B, 0x03, 0x05, 0x00, 0x1A, 0xFF, 0xC1,
+       0x00, 0xAD, 0xFF, 0x0A, 0x00, 0x09, 0x00, 0xB5, 0xFF, 0xA5, 0x00,
+       0x5C, 0xFF, 0x8C, 0xFF, 0xBF, 0x03, 0x06, 0xF4, 0x22, 0x31, 0xC8,
+       0x2D, 0x63, 0xF3, 0x76, 0x04, 0x08, 0xFF, 0xA7, 0xFF, 0x84, 0x00,
+       0xC0, 0xFF, 0x07, 0x00, 0x0C, 0x00, 0xA4, 0xFF, 0xE1, 0x00, 0xCB,
+       0xFE, 0x9B, 0x00, 0x21, 0x02, 0xEE, 0xF5, 0xCD, 0x36, 0x24, 0x27,
+       0xE1, 0xF2, 0x7A, 0x05, 0x33, 0xFE, 0x2A, 0x00, 0x47, 0x00, 0xD3,
+       0xFF, 0x04, 0x00, 0x0F, 0x00, 0x95, 0xFF, 0x17, 0x01, 0x3D, 0xFE,
+       0xBD, 0x01, 0x30, 0x00, 0xCC, 0xF8, 0x92, 0x3B, 0x2A, 0x20, 0x2E,
+       0xF3, 0x12, 0x06, 0x8F, 0xFD, 0x9A, 0x00, 0x10, 0x00, 0xE5, 0xFF,
+       0x02, 0x00, 0x10, 0x00, 0x8C, 0xFF, 0x42, 0x01, 0xBB, 0xFD, 0xE4,
+       0x02, 0x01, 0xFE, 0x9C, 0xFC, 0x45, 0x3F, 0x16, 0x19, 0x2D, 0xF4,
+       0x41, 0x06, 0x21, 0xFD, 0xF3, 0x00, 0xE0, 0xFF, 0xF4, 0xFF, 0x01,
+       0x00, 0x10, 0x00, 0x8B, 0xFF, 0x5D, 0x01, 0x4F, 0xFD, 0xFB, 0x03,
+       0xB2, 0xFB, 0x53, 0x01, 0xC2, 0x41, 0x24, 0x12, 0xBA, 0xF5, 0x0F,
+       0x06, 0xE9, 0xFC, 0x33, 0x01, 0xBB, 0xFF, 0x00, 0x00, 0x00, 0x00,
+       0x0D, 0x00, 0x93, 0xFF, 0x63, 0x01, 0x04, 0xFD, 0xEF, 0x04, 0x62,
+       0xF9, 0xD7, 0x06, 0xF2, 0x42, 0x8D, 0x0B, 0xB0, 0xF7, 0x87, 0x05,
+       0xE6, 0xFC, 0x58, 0x01, 0xA0, 0xFF, 0x09, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x07, 0x00, 0xA5, 0xFF, 0x52, 0x01, 0xE2, 0xFC, 0xAD, 0x05,
+       0x35, 0xF7, 0x08, 0x0D, 0xCB, 0x42, 0x81, 0x05, 0xE8, 0xF9, 0xBB,
+       0x04, 0x12, 0xFD, 0x64, 0x01, 0x90, 0xFF, 0x0E, 0x00, 0x00, 0x00,
+       0xFE, 0xFF, 0xC2, 0xFF, 0x27, 0x01, 0xF1, 0xFC, 0x22, 0x06, 0x54,
+       0xF5, 0xB8, 0x13, 0x4A, 0x41, 0x29, 0x00, 0x3C, 0xFC, 0xBD, 0x03,
+       0x66, 0xFD, 0x58, 0x01, 0x8A, 0xFF, 0x11, 0x00, 0x01, 0x00, 0xF1,
+       0xFF, 0xEB, 0xFF, 0xE1, 0x00, 0x35, 0xFD, 0x40, 0x06, 0xE4, 0xF3,
+       0xB7, 0x1A, 0x85, 0x3E, 0xA6, 0xFB, 0x86, 0xFE, 0xA0, 0x02, 0xD7,
+       0xFD, 0x39, 0x01, 0x8E, 0xFF, 0x10, 0x00, 0x03, 0x00, 0xE1, 0xFF,
+       0x1C, 0x00, 0x82, 0x00, 0xB0, 0xFD, 0xF9, 0x05, 0x0C, 0xF3, 0xCB,
+       0x21, 0x8F, 0x3A, 0x0D, 0xF8, 0xA9, 0x00, 0x79, 0x01, 0x5D, 0xFE,
+       0x0B, 0x01, 0x98, 0xFF, 0x0E, 0x00, 0x05, 0x00, 0xCE, 0xFF, 0x55,
+       0x00, 0x0D, 0x00, 0x60, 0xFE, 0x48, 0x05, 0xEC, 0xF2, 0xB6, 0x28,
+       0x91, 0x35, 0x68, 0xF5, 0x88, 0x02, 0x5A, 0x00, 0xED, 0xFE, 0xD4,
+       0x00, 0xA8, 0xFF, 0x0B, 0x00, 0x08, 0x00, 0xBB, 0xFF, 0x92, 0x00,
+       0x87, 0xFF, 0x3F, 0xFF, 0x2B, 0x04, 0xA1, 0xF3, 0x3D, 0x2F, 0xB8,
+       0x2F, 0xB8, 0xF3, 0x11, 0x04, 0x52, 0xFF, 0x7C, 0xFF, 0x97, 0x00,
+       0xBA, 0xFF, 0x08, 0x00, 0x0B, 0x00, 0xA9, 0xFF, 0xCF, 0x00, 0xF8,
+       0xFE, 0x44, 0x00, 0xAA, 0x02, 0x3E, 0xF5, 0x24, 0x35, 0x3B, 0x29,
+       0xF2, 0xF2, 0x35, 0x05, 0x70, 0xFE, 0x03, 0x00, 0x5A, 0x00, 0xCD,
+       0xFF, 0x05, 0x00, 0x0E, 0x00, 0x99, 0xFF, 0x07, 0x01, 0x68, 0xFE,
+       0x63, 0x01, 0xD0, 0x00, 0xD0, 0xF7, 0x35, 0x3A, 0x55, 0x22, 0x02,
+       0xF3, 0xEF, 0x05, 0xBC, 0xFD, 0x7A, 0x00, 0x20, 0x00, 0xDF, 0xFF,
+       0x03, 0x00, 0x10, 0x00, 0x8E, 0xFF, 0x36, 0x01, 0xE1, 0xFD, 0x8A,
+       0x02, 0xB2, 0xFE, 0x56, 0xFB, 0x40, 0x3E, 0x42, 0x1B, 0xCE, 0xF3,
+       0x3E, 0x06, 0x3D, 0xFD, 0xDB, 0x00, 0xEE, 0xFF, 0xF0, 0xFF, 0x01,
+       0x00, 0x11, 0x00, 0x8A, 0xFF, 0x57, 0x01, 0x6D, 0xFD, 0xA8, 0x03,
+       0x69, 0xFC, 0xC8, 0xFF, 0x20, 0x41, 0x40, 0x14, 0x33, 0xF5, 0x28,
+       0x06, 0xF5, 0xFC, 0x22, 0x01, 0xC5, 0xFF, 0xFD, 0xFF, 0x00, 0x00,
+       0x0F, 0x00, 0x8F, 0xFF, 0x64, 0x01, 0x17, 0xFD, 0xA9, 0x04, 0x16,
+       0xFA, 0x10, 0x05, 0xB8, 0x42, 0x87, 0x0D, 0x0D, 0xF7, 0xB9, 0x05,
+       0xE2, 0xFC, 0x50, 0x01, 0xA7, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x0A, 0x00, 0x9E, 0xFF, 0x5A, 0x01, 0xE8, 0xFC, 0x7A, 0x05,
+       0xDA, 0xF7, 0x10, 0x0B, 0xFB, 0x42, 0x4B, 0x07, 0x35, 0xF9, 0x00,
+       0x05, 0x00, 0xFD, 0x63, 0x01, 0x94, 0xFF, 0x0D, 0x00, 0x00, 0x00,
+       0x01, 0x00, 0xB8, 0xFF, 0x37, 0x01, 0xE7, 0xFC, 0x07, 0x06, 0xDE,
+       0xF5, 0x9F, 0x11, 0xE4, 0x41, 0xB8, 0x01, 0x84, 0xFB, 0x0F, 0x04,
+       0x48, 0xFD, 0x5E, 0x01, 0x8B, 0xFF, 0x10, 0x00, 0x01, 0x00, 0xF5,
+       0xFF, 0xDD, 0xFF, 0xF9, 0x00, 0x1B, 0xFD, 0x41, 0x06, 0x47, 0xF4,
+       0x8B, 0x18, 0x81, 0x3F, 0xF1, 0xFC, 0xD5, 0xFD, 0xFA, 0x02, 0xB2,
+       0xFD, 0x45, 0x01, 0x8C, 0xFF, 0x11, 0x00, 0x02, 0x00, 0xE6, 0xFF,
+       0x0C, 0x00, 0xA2, 0x00, 0x85, 0xFD, 0x1A, 0x06, 0x3C, 0xF3, 0x9F,
+       0x1F, 0xE6, 0x3B, 0x0E, 0xF9, 0x07, 0x00, 0xD4, 0x01, 0x33, 0xFE,
+       0x1B, 0x01, 0x94, 0xFF, 0x0F, 0x00, 0x04, 0x00, 0xD4, 0xFF, 0x43,
+       0x00, 0x33, 0x00, 0x25, 0xFE, 0x89, 0x05, 0xE0, 0xF2, 0x9C, 0x26,
+       0x33, 0x37, 0x1E, 0xF6, 0xFD, 0x01, 0xB0, 0x00, 0xC0, 0xFE, 0xE6,
+       0x00, 0xA2, 0xFF, 0x0C, 0x00, 0x07, 0x00, 0xC1, 0xFF, 0x7F, 0x00,
+       0xB2, 0xFF, 0xF6, 0xFE, 0x8E, 0x04, 0x51, 0xF3, 0x49, 0x2D, 0x98,
+       0x31, 0x23, 0xF4, 0xA2, 0x03, 0xA0, 0xFF, 0x51, 0xFF, 0xAA, 0x00,
+       0xB4, 0xFF, 0x09, 0x00, 0x0A, 0x00, 0xAE, 0xFF, 0xBD, 0x00, 0x25,
+       0xFF, 0xF1, 0xFF, 0x2B, 0x03, 0xA5, 0xF4, 0x68, 0x33, 0x48, 0x2B,
+       0x17, 0xF3, 0xE7, 0x04, 0xB1, 0xFE, 0xDB, 0xFF, 0x6C, 0x00, 0xC7,
+       0xFF, 0x06, 0x00, 0x0D, 0x00, 0x9E, 0xFF, 0xF7, 0x00, 0x94, 0xFE,
+       0x09, 0x01, 0x6A, 0x01, 0xEB, 0xF6, 0xC1, 0x38, 0x7D, 0x24, 0xE8,
+       0xF2, 0xC1, 0x05, 0xEE, 0xFD, 0x57, 0x00, 0x31, 0x00, 0xDA, 0xFF,
+       0x03, 0x00, 0x10, 0x00, 0x91, 0xFF, 0x29, 0x01, 0x09, 0xFE, 0x2F,
+       0x02, 0x5F, 0xFF, 0x27, 0xFA, 0x20, 0x3D, 0x70, 0x1D, 0x7D, 0xF3,
+       0x31, 0x06, 0x5E, 0xFD, 0xBF, 0x00, 0xFD, 0xFF, 0xEB, 0xFF, 0x02,
+       0x00, 0x11, 0x00, 0x8B, 0xFF, 0x4E, 0x01, 0x8E, 0xFD, 0x52, 0x03,
+       0x20, 0xFD, 0x52, 0xFE, 0x60, 0x40, 0x63, 0x16, 0xB7, 0xF4, 0x39,
+       0x06, 0x05, 0xFD, 0x0F, 0x01, 0xD1, 0xFF, 0xF9, 0xFF, 0x00, 0x00,
+       0x10, 0x00, 0x8D, 0xFF, 0x62, 0x01, 0x2E, 0xFD, 0x5E, 0x04, 0xCC,
+       0xFA, 0x5B, 0x03, 0x5E, 0x42, 0x8E, 0x0F, 0x71, 0xF6, 0xE4, 0x05,
+       0xE2, 0xFC, 0x45, 0x01, 0xAF, 0xFF, 0x04, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x0B, 0x00, 0x99, 0xFF, 0x60, 0x01, 0xF2, 0xFC, 0x40, 0x05,
+       0x85, 0xF8, 0x26, 0x09, 0x0C, 0x43, 0x26, 0x09, 0x85, 0xF8, 0x40,
+       0x05, 0xF2, 0xFC, 0x60, 0x01, 0x99, 0xFF, 0x0B, 0x00, 0x00, 0x00,
+       0x04, 0x00, 0xAF, 0xFF, 0x45, 0x01, 0xE2, 0xFC, 0xE4, 0x05, 0x71,
+       0xF6, 0x8E, 0x0F, 0x5E, 0x42, 0x5B, 0x03, 0xCC, 0xFA, 0x5E, 0x04,
+       0x2E, 0xFD, 0x62, 0x01, 0x8D, 0xFF, 0x10, 0x00, 0x00, 0x00, 0xF9,
+       0xFF, 0xD1, 0xFF, 0x0F, 0x01, 0x05, 0xFD, 0x39, 0x06, 0xB7, 0xF4,
+       0x63, 0x16, 0x60, 0x40, 0x52, 0xFE, 0x20, 0xFD, 0x52, 0x03, 0x8E,
+       0xFD, 0x4E, 0x01, 0x8B, 0xFF, 0x11, 0x00, 0x02, 0x00, 0xEB, 0xFF,
+       0xFD, 0xFF, 0xBF, 0x00, 0x5E, 0xFD, 0x31, 0x06, 0x7D, 0xF3, 0x70,
+       0x1D, 0x20, 0x3D, 0x27, 0xFA, 0x5F, 0xFF, 0x2F, 0x02, 0x09, 0xFE,
+       0x29, 0x01, 0x91, 0xFF, 0x10, 0x00, 0x03, 0x00, 0xDA, 0xFF, 0x31,
+       0x00, 0x57, 0x00, 0xEE, 0xFD, 0xC1, 0x05, 0xE8, 0xF2, 0x7D, 0x24,
+       0xC1, 0x38, 0xEB, 0xF6, 0x6A, 0x01, 0x09, 0x01, 0x94, 0xFE, 0xF7,
+       0x00, 0x9E, 0xFF, 0x0D, 0x00, 0x06, 0x00, 0xC7, 0xFF, 0x6C, 0x00,
+       0xDB, 0xFF, 0xB1, 0xFE, 0xE7, 0x04, 0x17, 0xF3, 0x48, 0x2B, 0x68,
+       0x33, 0xA5, 0xF4, 0x2B, 0x03, 0xF1, 0xFF, 0x25, 0xFF, 0xBD, 0x00,
+       0xAE, 0xFF, 0x0A, 0x00, 0x09, 0x00, 0xB4, 0xFF, 0xAA, 0x00, 0x51,
+       0xFF, 0xA0, 0xFF, 0xA2, 0x03, 0x23, 0xF4, 0x98, 0x31, 0x49, 0x2D,
+       0x51, 0xF3, 0x8E, 0x04, 0xF6, 0xFE, 0xB2, 0xFF, 0x7F, 0x00, 0xC1,
+       0xFF, 0x07, 0x00, 0x0C, 0x00, 0xA2, 0xFF, 0xE6, 0x00, 0xC0, 0xFE,
+       0xB0, 0x00, 0xFD, 0x01, 0x1E, 0xF6, 0x33, 0x37, 0x9C, 0x26, 0xE0,
+       0xF2, 0x89, 0x05, 0x25, 0xFE, 0x33, 0x00, 0x43, 0x00, 0xD4, 0xFF,
+       0x04, 0x00, 0x0F, 0x00, 0x94, 0xFF, 0x1B, 0x01, 0x33, 0xFE, 0xD4,
+       0x01, 0x07, 0x00, 0x0E, 0xF9, 0xE6, 0x3B, 0x9F, 0x1F, 0x3C, 0xF3,
+       0x1A, 0x06, 0x85, 0xFD, 0xA2, 0x00, 0x0C, 0x00, 0xE6, 0xFF, 0x02,
+       0x00, 0x11, 0x00, 0x8C, 0xFF, 0x45, 0x01, 0xB2, 0xFD, 0xFA, 0x02,
+       0xD5, 0xFD, 0xF1, 0xFC, 0x81, 0x3F, 0x8B, 0x18, 0x47, 0xF4, 0x41,
+       0x06, 0x1B, 0xFD, 0xF9, 0x00, 0xDD, 0xFF, 0xF5, 0xFF, 0x01, 0x00,
+       0x10, 0x00, 0x8B, 0xFF, 0x5E, 0x01, 0x48, 0xFD, 0x0F, 0x04, 0x84,
+       0xFB, 0xB8, 0x01, 0xE4, 0x41, 0x9F, 0x11, 0xDE, 0xF5, 0x07, 0x06,
+       0xE7, 0xFC, 0x37, 0x01, 0xB8, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x0D,
+       0x00, 0x94, 0xFF, 0x63, 0x01, 0x00, 0xFD, 0x00, 0x05, 0x35, 0xF9,
+       0x4B, 0x07, 0xFB, 0x42, 0x10, 0x0B, 0xDA, 0xF7, 0x7A, 0x05, 0xE8,
+       0xFC, 0x5A, 0x01, 0x9E, 0xFF, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x07, 0x00, 0xA7, 0xFF, 0x50, 0x01, 0xE2, 0xFC, 0xB9, 0x05, 0x0D,
+       0xF7, 0x87, 0x0D, 0xB8, 0x42, 0x10, 0x05, 0x16, 0xFA, 0xA9, 0x04,
+       0x17, 0xFD, 0x64, 0x01, 0x8F, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xFD,
+       0xFF, 0xC5, 0xFF, 0x22, 0x01, 0xF5, 0xFC, 0x28, 0x06, 0x33, 0xF5,
+       0x40, 0x14, 0x20, 0x41, 0xC8, 0xFF, 0x69, 0xFC, 0xA8, 0x03, 0x6D,
+       0xFD, 0x57, 0x01, 0x8A, 0xFF, 0x11, 0x00, 0x01, 0x00, 0xF0, 0xFF,
+       0xEE, 0xFF, 0xDB, 0x00, 0x3D, 0xFD, 0x3E, 0x06, 0xCE, 0xF3, 0x42,
+       0x1B, 0x40, 0x3E, 0x56, 0xFB, 0xB2, 0xFE, 0x8A, 0x02, 0xE1, 0xFD,
+       0x36, 0x01, 0x8E, 0xFF, 0x10, 0x00, 0x03, 0x00, 0xDF, 0xFF, 0x20,
+       0x00, 0x7A, 0x00, 0xBC, 0xFD, 0xEF, 0x05, 0x02, 0xF3, 0x55, 0x22,
+       0x35, 0x3A, 0xD0, 0xF7, 0xD0, 0x00, 0x63, 0x01, 0x68, 0xFE, 0x07,
+       0x01, 0x99, 0xFF, 0x0E, 0x00, 0x05, 0x00, 0xCD, 0xFF, 0x5A, 0x00,
+       0x03, 0x00, 0x70, 0xFE, 0x35, 0x05, 0xF2, 0xF2, 0x3B, 0x29, 0x24,
+       0x35, 0x3E, 0xF5, 0xAA, 0x02, 0x44, 0x00, 0xF8, 0xFE, 0xCF, 0x00,
+       0xA9, 0xFF, 0x0B, 0x00, 0x08, 0x00, 0xBA, 0xFF, 0x97, 0x00, 0x7C,
+       0xFF, 0x52, 0xFF, 0x11, 0x04, 0xB8, 0xF3, 0xB8, 0x2F, 0x3D, 0x2F,
+       0xA1, 0xF3, 0x2B, 0x04, 0x3F, 0xFF, 0x87, 0xFF, 0x92, 0x00, 0xBB,
+       0xFF, 0x08, 0x00, 0x0B, 0x00, 0xA8, 0xFF, 0xD4, 0x00, 0xED, 0xFE,
+       0x5A, 0x00, 0x88, 0x02, 0x68, 0xF5, 0x91, 0x35, 0xB6, 0x28, 0xEC,
+       0xF2, 0x48, 0x05, 0x60, 0xFE, 0x0D, 0x00, 0x55, 0x00, 0xCE, 0xFF,
+       0x05, 0x00, 0x0E, 0x00, 0x98, 0xFF, 0x0B, 0x01, 0x5D, 0xFE, 0x79,
+       0x01, 0xA9, 0x00, 0x0D, 0xF8, 0x8F, 0x3A, 0xCB, 0x21, 0x0C, 0xF3,
+       0xF9, 0x05, 0xB0, 0xFD, 0x82, 0x00, 0x1C, 0x00, 0xE1, 0xFF, 0x03,
+       0x00, 0x10, 0x00, 0x8E, 0xFF, 0x39, 0x01, 0xD7, 0xFD, 0xA0, 0x02,
+       0x86, 0xFE, 0xA6, 0xFB, 0x85, 0x3E, 0xB7, 0x1A, 0xE4, 0xF3, 0x40,
+       0x06, 0x35, 0xFD, 0xE1, 0x00, 0xEB, 0xFF, 0xF1, 0xFF, 0x01, 0x00,
+       0x11, 0x00, 0x8A, 0xFF, 0x58, 0x01, 0x66, 0xFD, 0xBD, 0x03, 0x3C,
+       0xFC, 0x29, 0x00, 0x4A, 0x41, 0xB8, 0x13, 0x54, 0xF5, 0x22, 0x06,
+       0xF1, 0xFC, 0x27, 0x01, 0xC2, 0xFF, 0xFE, 0xFF, 0x00, 0x00, 0x0E,
+       0x00, 0x90, 0xFF, 0x64, 0x01, 0x12, 0xFD, 0xBB, 0x04, 0xE8, 0xF9,
+       0x81, 0x05, 0xCB, 0x42, 0x08, 0x0D, 0x35, 0xF7, 0xAD, 0x05, 0xE2,
+       0xFC, 0x52, 0x01, 0xA5, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x09, 0x00, 0xA0, 0xFF, 0x58, 0x01, 0xE6, 0xFC, 0x87, 0x05, 0xB0,
+       0xF7, 0x8D, 0x0B, 0xF2, 0x42, 0xD7, 0x06, 0x62, 0xF9, 0xEF, 0x04,
+       0x04, 0xFD, 0x63, 0x01, 0x93, 0xFF, 0x0D, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0xBB, 0xFF, 0x33, 0x01, 0xE9, 0xFC, 0x0F, 0x06, 0xBA, 0xF5,
+       0x24, 0x12, 0xC2, 0x41, 0x53, 0x01, 0xB2, 0xFB, 0xFB, 0x03, 0x4F,
+       0xFD, 0x5D, 0x01, 0x8B, 0xFF, 0x10, 0x00, 0x01, 0x00, 0xF4, 0xFF,
+       0xE0, 0xFF, 0xF3, 0x00, 0x21, 0xFD, 0x41, 0x06, 0x2D, 0xF4, 0x16,
+       0x19, 0x45, 0x3F, 0x9C, 0xFC, 0x01, 0xFE, 0xE4, 0x02, 0xBB, 0xFD,
+       0x42, 0x01, 0x8C, 0xFF, 0x10, 0x00, 0x02, 0x00, 0xE5, 0xFF, 0x10,
+       0x00, 0x9A, 0x00, 0x8F, 0xFD, 0x12, 0x06, 0x2E, 0xF3, 0x2A, 0x20,
+       0x92, 0x3B, 0xCC, 0xF8, 0x30, 0x00, 0xBD, 0x01, 0x3D, 0xFE, 0x17,
+       0x01, 0x95, 0xFF, 0x0F, 0x00, 0x04, 0x00, 0xD3, 0xFF, 0x47, 0x00,
+       0x2A, 0x00, 0x33, 0xFE, 0x7A, 0x05, 0xE1, 0xF2, 0x24, 0x27, 0xCD,
+       0x36, 0xEE, 0xF5, 0x21, 0x02, 0x9B, 0x00, 0xCB, 0xFE, 0xE1, 0x00,
+       0xA4, 0xFF, 0x0C, 0x00, 0x07, 0x00, 0xC0, 0xFF, 0x84, 0x00, 0xA7,
+       0xFF, 0x08, 0xFF, 0x76, 0x04, 0x63, 0xF3, 0xC8, 0x2D, 0x22, 0x31,
+       0x06, 0xF4, 0xBF, 0x03, 0x8C, 0xFF, 0x5C, 0xFF, 0xA5, 0x00, 0xB5,
+       0xFF, 0x09, 0x00, 0x0A, 0x00, 0xAD, 0xFF, 0xC1, 0x00, 0x1A, 0xFF,
+       0x05, 0x00, 0x0B, 0x03, 0xC9, 0xF4, 0xD8, 0x33, 0xC5, 0x2A, 0x0C,
+       0xF3, 0xFB, 0x04, 0xA0, 0xFE, 0xE5, 0xFF, 0x68, 0x00, 0xC9, 0xFF,
+       0x06, 0x00, 0x0D, 0x00, 0x9C, 0xFF, 0xFB, 0x00, 0x89, 0xFE, 0x1F,
+       0x01, 0x44, 0x01, 0x22, 0xF7, 0x20, 0x39, 0xF3, 0x23, 0xED, 0xF2,
+       0xCE, 0x05, 0xE1, 0xFD, 0x60, 0x00, 0x2D, 0x00, 0xDB, 0xFF, 0x03,
+       0x00, 0x10, 0x00, 0x90, 0xFF, 0x2D, 0x01, 0xFF, 0xFD, 0x46, 0x02,
+       0x34, 0xFF, 0x71, 0xFA, 0x6B, 0x3D, 0xE5, 0x1C, 0x90, 0xF3, 0x35,
+       0x06, 0x55, 0xFD, 0xC6, 0x00, 0xF9, 0xFF, 0xEC, 0xFF, 0x01, 0x00,
+       0x11, 0x00, 0x8B, 0xFF, 0x51, 0x01, 0x86, 0xFD, 0x68, 0x03, 0xF3,
+       0xFC, 0xAE, 0xFE, 0x92, 0x40, 0xDA, 0x15, 0xD5, 0xF4, 0x35, 0x06,
+       0x00, 0xFD, 0x14, 0x01, 0xCE, 0xFF, 0xFA, 0xFF, 0x00, 0x00, 0x0F,
+       0x00, 0x8D, 0xFF, 0x63, 0x01, 0x28, 0xFD, 0x71, 0x04, 0x9E, 0xFA,
+       0xC7, 0x03, 0x79, 0x42, 0x0B, 0x0F, 0x97, 0xF6, 0xDA, 0x05, 0xE2,
+       0xFC, 0x48, 0x01, 0xAD, 0xFF, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x0B, 0x00, 0x9A, 0xFF, 0x5F, 0x01, 0xEF, 0xFC, 0x4F, 0x05, 0x5A,
+       0xF8, 0x9F, 0x09, 0x0A, 0x43, 0xAE, 0x08, 0xB1, 0xF8, 0x30, 0x05,
+       0xF5, 0xFC, 0x61, 0x01, 0x97, 0xFF, 0x0C, 0x00, 0x00, 0x00, 0x03,
+       0x00, 0xB1, 0xFF, 0x41, 0x01, 0xE3, 0xFC, 0xED, 0x05, 0x4C, 0xF6,
+       0x11, 0x10, 0x42, 0x42, 0xF1, 0x02, 0xFA, 0xFA, 0x4B, 0x04, 0x34,
+       0xFD, 0x61, 0x01, 0x8C, 0xFF, 0x10, 0x00, 0x01, 0x00, 0xF8, 0xFF,
+       0xD4, 0xFF, 0x0A, 0x01, 0x0A, 0xFD, 0x3C, 0x06, 0x9A, 0xF4, 0xED,
+       0x16, 0x2A, 0x40, 0xF8, 0xFD, 0x4D, 0xFD, 0x3C, 0x03, 0x97, 0xFD,
+       0x4C, 0x01, 0x8B, 0xFF, 0x11, 0x00, 0x02, 0x00, 0xEA, 0xFF, 0x00,
+       0x00, 0xB8, 0x00, 0x67, 0xFD, 0x2C, 0x06, 0x6B, 0xF3, 0xFC, 0x1D,
+       0xD3, 0x3C, 0xDF, 0xF9, 0x89, 0xFF, 0x18, 0x02, 0x13, 0xFE, 0x26,
+       0x01, 0x92, 0xFF, 0x0F, 0x00, 0x04, 0x00, 0xD9, 0xFF, 0x36, 0x00,
+       0x4E, 0x00, 0xFB, 0xFD, 0xB4, 0x05, 0xE4, 0xF2, 0x04, 0x25, 0x5F,
+       0x38, 0xB6, 0xF6, 0x90, 0x01, 0xF3, 0x00, 0x9F, 0xFE, 0xF3, 0x00,
+       0x9F, 0xFF, 0x0D, 0x00, 0x06, 0x00, 0xC6, 0xFF, 0x71, 0x00, 0xD1,
+       0xFF, 0xC2, 0xFE, 0xD1, 0x04, 0x23, 0xF3, 0xC9, 0x2B, 0xF5, 0x32,
+       0x83, 0xF4, 0x49, 0x03, 0xDC, 0xFF, 0x30, 0xFF, 0xB8, 0x00, 0xB0,
+       0xFF, 0x0A, 0x00, 0x09, 0x00, 0xB3, 0xFF, 0xAE, 0x00, 0x46, 0xFF,
+       0xB4, 0xFF, 0x85, 0x03, 0x42, 0xF4, 0x0E, 0x32, 0xCA, 0x2C, 0x41,
+       0xF3, 0xA5, 0x04, 0xE4, 0xFE, 0xBC, 0xFF, 0x7A, 0x00, 0xC3, 0xFF,
+       0x07, 0x00, 0x0D, 0x00, 0xA1, 0xFF, 0xEA, 0x00, 0xB5, 0xFE, 0xC6,
+       0x00, 0xD9, 0x01, 0x4F, 0xF6, 0x99, 0x37, 0x16, 0x26, 0xE0, 0xF2,
+       0x98, 0x05, 0x16, 0xFE, 0x3C, 0x00, 0x3F, 0x00, 0xD6, 0xFF, 0x04,
+       0x00, 0x0F, 0x00, 0x93, 0xFF, 0x1F, 0x01, 0x28, 0xFE, 0xEB, 0x01,
+       0xDD, 0xFF, 0x52, 0xF9, 0x36, 0x3C, 0x13, 0x1F, 0x4B, 0xF3, 0x20,
+       0x06, 0x7B, 0xFD, 0xA9, 0x00, 0x08, 0x00, 0xE7, 0xFF, 0x02, 0x00,
+       0x11, 0x00, 0x8C, 0xFF, 0x47, 0x01, 0xA9, 0xFD, 0x10, 0x03, 0xA8,
+       0xFD, 0x47, 0xFD, 0xBB, 0x3F, 0x01, 0x18, 0x62, 0xF4, 0x40, 0x06,
+       0x15, 0xFD, 0xFF, 0x00, 0xDA, 0xFF, 0xF6, 0xFF, 0x01, 0x00, 0x10,
+       0x00, 0x8B, 0xFF, 0x5F, 0x01, 0x41, 0xFD, 0x23, 0x04, 0x56, 0xFB,
+       0x1F, 0x02, 0x06, 0x42, 0x19, 0x11, 0x02, 0xF6, 0xFF, 0x05, 0xE5,
+       0xFC, 0x3B, 0x01, 0xB6, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x0D, 0x00,
+       0x95, 0xFF, 0x62, 0x01, 0xFC, 0xFC, 0x10, 0x05, 0x09, 0xF9, 0xC1,
+       0x07, 0x03, 0x43, 0x94, 0x0A, 0x05, 0xF8, 0x6C, 0x05, 0xEA, 0xFC,
+       0x5C, 0x01, 0x9D, 0xFF, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06,
+       0x00, 0xA9, 0xFF, 0x4D, 0x01, 0xE1, 0xFC, 0xC4, 0x05, 0xE6, 0xF6,
+       0x08, 0x0E, 0xA5, 0x42, 0xA1, 0x04, 0x43, 0xFA, 0x97, 0x04, 0x1D,
+       0xFD, 0x64, 0x01, 0x8F, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xFC, 0xFF,
+       0xC8, 0xFF, 0x1E, 0x01, 0xF8, 0xFC, 0x2D, 0x06, 0x13, 0xF5, 0xC8,
+       0x14, 0xF2, 0x40, 0x69, 0xFF, 0x97, 0xFC, 0x92, 0x03, 0x75, 0xFD,
+       0x55, 0x01, 0x8A, 0xFF, 0x11, 0x00, 0x01, 0x00, 0xEF, 0xFF, 0xF2,
+       0xFF, 0xD4, 0x00, 0x45, 0xFD, 0x3B, 0x06, 0xB8, 0xF3, 0xCE, 0x1B,
+       0xFB, 0x3D, 0x08, 0xFB, 0xDE, 0xFE, 0x73, 0x02, 0xEB, 0xFD, 0x33,
+       0x01, 0x8F, 0xFF, 0x10, 0x00, 0x03, 0x00, 0xDE, 0xFF, 0x25, 0x00,
+       0x71, 0x00, 0xC8, 0xFD, 0xE5, 0x05, 0xFA, 0xF2, 0xDF, 0x22, 0xDB,
+       0x39, 0x94, 0xF7, 0xF7, 0x00, 0x4C, 0x01, 0x73, 0xFE, 0x03, 0x01,
+       0x9A, 0xFF, 0x0E, 0x00, 0x05, 0x00, 0xCC, 0xFF, 0x5E, 0x00, 0xF9,
+       0xFF, 0x80, 0xFE, 0x23, 0x05, 0xF9, 0xF2, 0xC0, 0x29, 0xB8, 0x34,
+       0x16, 0xF5, 0xCB, 0x02, 0x2F, 0x00, 0x03, 0xFF, 0xCA, 0x00, 0xAA,
+       0xFF, 0x0B, 0x00, 0x08, 0x00, 0xB8, 0xFF, 0x9B, 0x00, 0x72, 0xFF,
+       0x65, 0xFF, 0xF6, 0x03, 0xD1, 0xF3, 0x31, 0x30, 0xC1, 0x2E, 0x8B,
+       0xF3, 0x45, 0x04, 0x2D, 0xFF, 0x92, 0xFF, 0x8D, 0x00, 0xBD, 0xFF,
+       0x08, 0x00, 0x0C, 0x00, 0xA6, 0xFF, 0xD8, 0x00, 0xE2, 0xFE, 0x6F,
+       0x00, 0x66, 0x02, 0x93, 0xF5, 0xFB, 0x35, 0x31, 0x28, 0xE7, 0xF2,
+       0x59, 0x05, 0x51, 0xFE, 0x17, 0x00, 0x50, 0x00, 0xD0, 0xFF, 0x05,
+       0x00, 0x0E, 0x00, 0x97, 0xFF, 0x0F, 0x01, 0x53, 0xFE, 0x90, 0x01,
+       0x81, 0x00, 0x4B, 0xF8, 0xE6, 0x3A, 0x3F, 0x21, 0x16, 0xF3, 0x02,
+       0x06, 0xA5, 0xFD, 0x8A, 0x00, 0x18, 0x00, 0xE2, 0xFF, 0x02, 0x00,
+       0x10, 0x00, 0x8D, 0xFF, 0x3C, 0x01, 0xCE, 0xFD, 0xB7, 0x02, 0x5A,
+       0xFE, 0xF7, 0xFB, 0xC6, 0x3E, 0x2C, 0x1A, 0xFC, 0xF3, 0x41, 0x06,
+       0x2E, 0xFD, 0xE7, 0x00, 0xE7, 0xFF, 0xF2, 0xFF, 0x01, 0x00, 0x10,
+       0x00, 0x8B, 0xFF, 0x5A, 0x01, 0x5E, 0xFD, 0xD2, 0x03, 0x0E, 0xFC,
+       0x8B, 0x00, 0x75, 0x41, 0x32, 0x13, 0x75, 0xF5, 0x1C, 0x06, 0xEE,
+       0xFC, 0x2B, 0x01, 0xC0, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x0E, 0x00,
+       0x91, 0xFF, 0x64, 0x01, 0x0D, 0xFD, 0xCD, 0x04, 0xBB, 0xF9, 0xF2,
+       0x05, 0xD9, 0x42, 0x88, 0x0C, 0x5E, 0xF7, 0xA1, 0x05, 0xE3, 0xFC,
+       0x54, 0x01, 0xA3, 0xFF, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09,
+       0x00, 0xA2, 0xFF, 0x56, 0x01, 0xE5, 0xFC, 0x94, 0x05, 0x87, 0xF7,
+       0x0A, 0x0C, 0xE6, 0x42, 0x64, 0x06, 0x8E, 0xF9, 0xDE, 0x04, 0x09,
+       0xFD, 0x64, 0x01, 0x92, 0xFF, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0xBD, 0xFF, 0x2F, 0x01, 0xEC, 0xFC, 0x16, 0x06, 0x98, 0xF5, 0xAB,
+       0x12, 0x9C, 0x41, 0xEE, 0x00, 0xE0, 0xFB, 0xE6, 0x03, 0x57, 0xFD,
+       0x5B, 0x01, 0x8B, 0xFF, 0x10, 0x00, 0x01, 0x00, 0xF3, 0xFF, 0xE4,
+       0xFF, 0xED, 0x00, 0x27, 0xFD, 0x41, 0x06, 0x14, 0xF4, 0xA1, 0x19,
+       0x06, 0x3F, 0x49, 0xFC, 0x2E, 0xFE, 0xCD, 0x02, 0xC4, 0xFD, 0x3F,
+       0x01, 0x8D, 0xFF, 0x10, 0x00, 0x02, 0x00, 0xE3, 0xFF, 0x14, 0x00,
+       0x92, 0x00, 0x9A, 0xFD, 0x0A, 0x06, 0x22, 0xF3, 0xB4, 0x20, 0x3C,
+       0x3B, 0x8B, 0xF8, 0x58, 0x00, 0xA7, 0x01, 0x48, 0xFE, 0x13, 0x01,
+       0x96, 0xFF, 0x0F, 0x00, 0x04, 0x00, 0xD1, 0xFF, 0x4C, 0x00, 0x20,
+       0x00, 0x42, 0xFE, 0x6A, 0x05, 0xE3, 0xF2, 0xAB, 0x27, 0x66, 0x36,
+       0xC0, 0xF5, 0x44, 0x02, 0x85, 0x00, 0xD7, 0xFE, 0xDD, 0x00, 0xA5,
+       0xFF, 0x0C, 0x00, 0x07, 0x00, 0xBE, 0xFF, 0x89, 0x00, 0x9D, 0xFF,
+       0x1A, 0xFF, 0x5E, 0x04, 0x76, 0xF3, 0x45, 0x2E, 0xAA, 0x30, 0xEB,
+       0xF3, 0xDB, 0x03, 0x79, 0xFF, 0x67, 0xFF, 0xA0, 0x00, 0xB7, 0xFF,
+       0x09, 0x00, 0x0B, 0x00, 0xAC, 0xFF, 0xC6, 0x00, 0x0E, 0xFF, 0x1A,
+       0x00, 0xEB, 0x02, 0xEF, 0xF4, 0x49, 0x34, 0x43, 0x2A, 0x02, 0xF3,
+       0x0F, 0x05, 0x90, 0xFE, 0xEF, 0xFF, 0x63, 0x00, 0xCA, 0xFF, 0x06,
+       0x00, 0x0E, 0x00, 0x9B, 0xFF, 0xFF, 0x00, 0x7E, 0xFE, 0x36, 0x01,
+       0x1E, 0x01, 0x5B, 0xF7, 0x7E, 0x39, 0x69, 0x23, 0xF3, 0xF2, 0xD9,
+       0x05, 0xD4, 0xFD, 0x69, 0x00, 0x29, 0x00, 0xDD, 0xFF, 0x03, 0x00,
+       0x10, 0x00, 0x90, 0xFF, 0x30, 0x01, 0xF5, 0xFD, 0x5C, 0x02, 0x09,
+       0xFF, 0xBC, 0xFA, 0xB5, 0x3D, 0x5A, 0x1C, 0xA3, 0xF3, 0x38, 0x06,
+       0x4D, 0xFD, 0xCD, 0x00, 0xF5, 0xFF, 0xED, 0xFF, 0x01, 0x00, 0x11,
+       0x00, 0x8B, 0xFF, 0x53, 0x01, 0x7E, 0xFD, 0x7D, 0x03, 0xC5, 0xFC,
+       0x0B, 0xFF, 0xC3, 0x40, 0x51, 0x15, 0xF4, 0xF4, 0x31, 0x06, 0xFC,
+       0xFC, 0x19, 0x01, 0xCB, 0xFF, 0xFB, 0xFF, 0x00, 0x00, 0x0F, 0x00,
+       0x8E, 0xFF, 0x63, 0x01, 0x22, 0xFD, 0x84, 0x04, 0x71, 0xFA, 0x34,
+       0x04, 0x90, 0x42, 0x89, 0x0E, 0xBE, 0xF6, 0xCF, 0x05, 0xE1, 0xFC,
+       0x4A, 0x01, 0xAB, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B,
+       0x00, 0x9B, 0xFF, 0x5D, 0x01, 0xEC, 0xFC, 0x5D, 0x05, 0x2F, 0xF8,
+       0x19, 0x0A, 0x07, 0x43, 0x37, 0x08, 0xDD, 0xF8, 0x21, 0x05, 0xF8,
+       0xFC, 0x62, 0x01, 0x96, 0xFF, 0x0C, 0x00, 0x00, 0x00, 0x03, 0x00,
+       0xB4, 0xFF, 0x3E, 0x01, 0xE4, 0xFC, 0xF6, 0x05, 0x26, 0xF6, 0x95,
+       0x10, 0x26, 0x42, 0x87, 0x02, 0x28, 0xFB, 0x37, 0x04, 0x3B, 0xFD,
+       0x60, 0x01, 0x8C, 0xFF, 0x10, 0x00, 0x01, 0x00, 0xF7, 0xFF, 0xD7,
+       0xFF, 0x04, 0x01, 0x0F, 0xFD, 0x3E, 0x06, 0x7D, 0xF4, 0x76, 0x17,
+       0xF4, 0x3F, 0x9F, 0xFD, 0x7B, 0xFD, 0x26, 0x03, 0xA0, 0xFD, 0x4A,
+       0x01, 0x8B, 0xFF, 0x11, 0x00, 0x02, 0x00, 0xE9, 0xFF, 0x04, 0x00,
+       0xB1, 0x00, 0x71, 0xFD, 0x26, 0x06, 0x5A, 0xF3, 0x88, 0x1E, 0x87,
+       0x3C, 0x98, 0xF9, 0xB3, 0xFF, 0x02, 0x02, 0x1E, 0xFE, 0x22, 0x01,
+       0x93, 0xFF, 0x0F, 0x00, 0x04, 0x00, 0xD7, 0xFF, 0x3A, 0x00, 0x45,
+       0x00, 0x09, 0xFE, 0xA7, 0x05, 0xE1, 0xF2, 0x8D, 0x25, 0xFD, 0x37,
+       0x82, 0xF6, 0xB5, 0x01, 0xDC, 0x00, 0xAA, 0xFE, 0xEE, 0x00, 0xA0,
+       0xFF, 0x0D, 0x00, 0x06, 0x00, 0xC4, 0xFF, 0x76, 0x00, 0xC7, 0xFF,
+       0xD3, 0xFE, 0xBC, 0x04, 0x31, 0xF3, 0x4A, 0x2C, 0x83, 0x32, 0x61,
+       0xF4, 0x68, 0x03, 0xC8, 0xFF, 0x3B, 0xFF, 0xB3, 0x00, 0xB1, 0xFF,
+       0x0A, 0x00, 0x0A, 0x00, 0xB1, 0xFF, 0xB3, 0x00, 0x3B, 0xFF, 0xC8,
+       0xFF, 0x68, 0x03, 0x61, 0xF4, 0x83, 0x32, 0x4A, 0x2C, 0x31, 0xF3,
+       0xBC, 0x04, 0xD3, 0xFE, 0xC7, 0xFF, 0x76, 0x00, 0xC4, 0xFF, 0x06,
+       0x00, 0x0D, 0x00, 0xA0, 0xFF, 0xEE, 0x00, 0xAA, 0xFE, 0xDC, 0x00,
+       0xB5, 0x01, 0x82, 0xF6, 0xFD, 0x37, 0x8D, 0x25, 0xE1, 0xF2, 0xA7,
+       0x05, 0x09, 0xFE, 0x45, 0x00, 0x3A, 0x00, 0xD7, 0xFF, 0x04, 0x00,
+       0x0F, 0x00, 0x93, 0xFF, 0x22, 0x01, 0x1E, 0xFE, 0x02, 0x02, 0xB3,
+       0xFF, 0x98, 0xF9, 0x87, 0x3C, 0x88, 0x1E, 0x5A, 0xF3, 0x26, 0x06,
+       0x71, 0xFD, 0xB1, 0x00, 0x04, 0x00, 0xE9, 0xFF, 0x02, 0x00, 0x11,
+       0x00, 0x8B, 0xFF, 0x4A, 0x01, 0xA0, 0xFD, 0x26, 0x03, 0x7B, 0xFD,
+       0x9F, 0xFD, 0xF4, 0x3F, 0x76, 0x17, 0x7D, 0xF4, 0x3E, 0x06, 0x0F,
+       0xFD, 0x04, 0x01, 0xD7, 0xFF, 0xF7, 0xFF, 0x01, 0x00, 0x10, 0x00,
+       0x8C, 0xFF, 0x60, 0x01, 0x3B, 0xFD, 0x37, 0x04, 0x28, 0xFB, 0x87,
+       0x02, 0x26, 0x42, 0x95, 0x10, 0x26, 0xF6, 0xF6, 0x05, 0xE4, 0xFC,
+       0x3E, 0x01, 0xB4, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x96,
+       0xFF, 0x62, 0x01, 0xF8, 0xFC, 0x21, 0x05, 0xDD, 0xF8, 0x37, 0x08,
+       0x07, 0x43, 0x19, 0x0A, 0x2F, 0xF8, 0x5D, 0x05, 0xEC, 0xFC, 0x5D,
+       0x01, 0x9B, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00,
+       0xAB, 0xFF, 0x4A, 0x01, 0xE1, 0xFC, 0xCF, 0x05, 0xBE, 0xF6, 0x89,
+       0x0E, 0x90, 0x42, 0x34, 0x04, 0x71, 0xFA, 0x84, 0x04, 0x22, 0xFD,
+       0x63, 0x01, 0x8E, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xFB, 0xFF, 0xCB,
+       0xFF, 0x19, 0x01, 0xFC, 0xFC, 0x31, 0x06, 0xF4, 0xF4, 0x51, 0x15,
+       0xC3, 0x40, 0x0B, 0xFF, 0xC5, 0xFC, 0x7D, 0x03, 0x7E, 0xFD, 0x53,
+       0x01, 0x8B, 0xFF, 0x11, 0x00, 0x01, 0x00, 0xED, 0xFF, 0xF5, 0xFF,
+       0xCD, 0x00, 0x4D, 0xFD, 0x38, 0x06, 0xA3, 0xF3, 0x5A, 0x1C, 0xB5,
+       0x3D, 0xBC, 0xFA, 0x09, 0xFF, 0x5C, 0x02, 0xF5, 0xFD, 0x30, 0x01,
+       0x90, 0xFF, 0x10, 0x00, 0x03, 0x00, 0xDD, 0xFF, 0x29, 0x00, 0x69,
+       0x00, 0xD4, 0xFD, 0xD9, 0x05, 0xF3, 0xF2, 0x69, 0x23, 0x7E, 0x39,
+       0x5B, 0xF7, 0x1E, 0x01, 0x36, 0x01, 0x7E, 0xFE, 0xFF, 0x00, 0x9B,
+       0xFF, 0x0E, 0x00, 0x06, 0x00, 0xCA, 0xFF, 0x63, 0x00, 0xEF, 0xFF,
+       0x90, 0xFE, 0x0F, 0x05, 0x02, 0xF3, 0x43, 0x2A, 0x49, 0x34, 0xEF,
+       0xF4, 0xEB, 0x02, 0x1A, 0x00, 0x0E, 0xFF, 0xC6, 0x00, 0xAC, 0xFF,
+       0x0B, 0x00, 0x09, 0x00, 0xB7, 0xFF, 0xA0, 0x00, 0x67, 0xFF, 0x79,
+       0xFF, 0xDB, 0x03, 0xEB, 0xF3, 0xAA, 0x30, 0x45, 0x2E, 0x76, 0xF3,
+       0x5E, 0x04, 0x1A, 0xFF, 0x9D, 0xFF, 0x89, 0x00, 0xBE, 0xFF, 0x07,
+       0x00, 0x0C, 0x00, 0xA5, 0xFF, 0xDD, 0x00, 0xD7, 0xFE, 0x85, 0x00,
+       0x44, 0x02, 0xC0, 0xF5, 0x66, 0x36, 0xAB, 0x27, 0xE3, 0xF2, 0x6A,
+       0x05, 0x42, 0xFE, 0x20, 0x00, 0x4C, 0x00, 0xD1, 0xFF, 0x04, 0x00,
+       0x0F, 0x00, 0x96, 0xFF, 0x13, 0x01, 0x48, 0xFE, 0xA7, 0x01, 0x58,
+       0x00, 0x8B, 0xF8, 0x3C, 0x3B, 0xB4, 0x20, 0x22, 0xF3, 0x0A, 0x06,
+       0x9A, 0xFD, 0x92, 0x00, 0x14, 0x00, 0xE3, 0xFF, 0x02, 0x00, 0x10,
+       0x00, 0x8D, 0xFF, 0x3F, 0x01, 0xC4, 0xFD, 0xCD, 0x02, 0x2E, 0xFE,
+       0x49, 0xFC, 0x06, 0x3F, 0xA1, 0x19, 0x14, 0xF4, 0x41, 0x06, 0x27,
+       0xFD, 0xED, 0x00, 0xE4, 0xFF, 0xF3, 0xFF, 0x01, 0x00, 0x10, 0x00,
+       0x8B, 0xFF, 0x5B, 0x01, 0x57, 0xFD, 0xE6, 0x03, 0xE0, 0xFB, 0xEE,
+       0x00, 0x9C, 0x41, 0xAB, 0x12, 0x98, 0xF5, 0x16, 0x06, 0xEC, 0xFC,
+       0x2F, 0x01, 0xBD, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x92,
+       0xFF, 0x64, 0x01, 0x09, 0xFD, 0xDE, 0x04, 0x8E, 0xF9, 0x64, 0x06,
+       0xE6, 0x42, 0x0A, 0x0C, 0x87, 0xF7, 0x94, 0x05, 0xE5, 0xFC, 0x56,
+       0x01, 0xA2, 0xFF, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00,
+       0xA3, 0xFF, 0x54, 0x01, 0xE3, 0xFC, 0xA1, 0x05, 0x5E, 0xF7, 0x88,
+       0x0C, 0xD9, 0x42, 0xF2, 0x05, 0xBB, 0xF9, 0xCD, 0x04, 0x0D, 0xFD,
+       0x64, 0x01, 0x91, 0xFF, 0x0E, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xC0,
+       0xFF, 0x2B, 0x01, 0xEE, 0xFC, 0x1C, 0x06, 0x75, 0xF5, 0x32, 0x13,
+       0x75, 0x41, 0x8B, 0x00, 0x0E, 0xFC, 0xD2, 0x03, 0x5E, 0xFD, 0x5A,
+       0x01, 0x8B, 0xFF, 0x10, 0x00, 0x01, 0x00, 0xF2, 0xFF, 0xE7, 0xFF,
+       0xE7, 0x00, 0x2E, 0xFD, 0x41, 0x06, 0xFC, 0xF3, 0x2C, 0x1A, 0xC6,
+       0x3E, 0xF7, 0xFB, 0x5A, 0xFE, 0xB7, 0x02, 0xCE, 0xFD, 0x3C, 0x01,
+       0x8D, 0xFF, 0x10, 0x00, 0x02, 0x00, 0xE2, 0xFF, 0x18, 0x00, 0x8A,
+       0x00, 0xA5, 0xFD, 0x02, 0x06, 0x16, 0xF3, 0x3F, 0x21, 0xE6, 0x3A,
+       0x4B, 0xF8, 0x81, 0x00, 0x90, 0x01, 0x53, 0xFE, 0x0F, 0x01, 0x97,
+       0xFF, 0x0E, 0x00, 0x05, 0x00, 0xD0, 0xFF, 0x50, 0x00, 0x17, 0x00,
+       0x51, 0xFE, 0x59, 0x05, 0xE7, 0xF2, 0x31, 0x28, 0xFB, 0x35, 0x93,
+       0xF5, 0x66, 0x02, 0x6F, 0x00, 0xE2, 0xFE, 0xD8, 0x00, 0xA6, 0xFF,
+       0x0C, 0x00, 0x08, 0x00, 0xBD, 0xFF, 0x8D, 0x00, 0x92, 0xFF, 0x2D,
+       0xFF, 0x45, 0x04, 0x8B, 0xF3, 0xC1, 0x2E, 0x31, 0x30, 0xD1, 0xF3,
+       0xF6, 0x03, 0x65, 0xFF, 0x72, 0xFF, 0x9B, 0x00, 0xB8, 0xFF, 0x08,
+       0x00, 0x0B, 0x00, 0xAA, 0xFF, 0xCA, 0x00, 0x03, 0xFF, 0x2F, 0x00,
+       0xCB, 0x02, 0x16, 0xF5, 0xB8, 0x34, 0xC0, 0x29, 0xF9, 0xF2, 0x23,
+       0x05, 0x80, 0xFE, 0xF9, 0xFF, 0x5E, 0x00, 0xCC, 0xFF, 0x05, 0x00,
+       0x0E, 0x00, 0x9A, 0xFF, 0x03, 0x01, 0x73, 0xFE, 0x4C, 0x01, 0xF7,
+       0x00, 0x94, 0xF7, 0xDB, 0x39, 0xDF, 0x22, 0xFA, 0xF2, 0xE5, 0x05,
+       0xC8, 0xFD, 0x71, 0x00, 0x25, 0x00, 0xDE, 0xFF, 0x03, 0x00, 0x10,
+       0x00, 0x8F, 0xFF, 0x33, 0x01, 0xEB, 0xFD, 0x73, 0x02, 0xDE, 0xFE,
+       0x08, 0xFB, 0xFB, 0x3D, 0xCE, 0x1B, 0xB8, 0xF3, 0x3B, 0x06, 0x45,
+       0xFD, 0xD4, 0x00, 0xF2, 0xFF, 0xEF, 0xFF, 0x01, 0x00, 0x11, 0x00,
+       0x8A, 0xFF, 0x55, 0x01, 0x75, 0xFD, 0x92, 0x03, 0x97, 0xFC, 0x69,
+       0xFF, 0xF2, 0x40, 0xC8, 0x14, 0x13, 0xF5, 0x2D, 0x06, 0xF8, 0xFC,
+       0x1E, 0x01, 0xC8, 0xFF, 0xFC, 0xFF, 0x00, 0x00, 0x0F, 0x00, 0x8F,
+       0xFF, 0x64, 0x01, 0x1D, 0xFD, 0x97, 0x04, 0x43, 0xFA, 0xA1, 0x04,
+       0xA5, 0x42, 0x08, 0x0E, 0xE6, 0xF6, 0xC4, 0x05, 0xE1, 0xFC, 0x4D,
+       0x01, 0xA9, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00,
+       0x9D, 0xFF, 0x5C, 0x01, 0xEA, 0xFC, 0x6C, 0x05, 0x05, 0xF8, 0x94,
+       0x0A, 0x03, 0x43, 0xC1, 0x07, 0x09, 0xF9, 0x10, 0x05, 0xFC, 0xFC,
+       0x62, 0x01, 0x95, 0xFF, 0x0D, 0x00, 0x00, 0x00, 0x02, 0x00, 0xB6,
+       0xFF, 0x3B, 0x01, 0xE5, 0xFC, 0xFF, 0x05, 0x02, 0xF6, 0x19, 0x11,
+       0x06, 0x42, 0x1F, 0x02, 0x56, 0xFB, 0x23, 0x04, 0x41, 0xFD, 0x5F,
+       0x01, 0x8B, 0xFF, 0x10, 0x00, 0x01, 0x00, 0xF6, 0xFF, 0xDA, 0xFF,
+       0xFF, 0x00, 0x15, 0xFD, 0x40, 0x06, 0x62, 0xF4, 0x01, 0x18, 0xBB,
+       0x3F, 0x47, 0xFD, 0xA8, 0xFD, 0x10, 0x03, 0xA9, 0xFD, 0x47, 0x01,
+       0x8C, 0xFF, 0x11, 0x00, 0x02, 0x00, 0xE7, 0xFF, 0x08, 0x00, 0xA9,
+       0x00, 0x7B, 0xFD, 0x20, 0x06, 0x4B, 0xF3, 0x13, 0x1F, 0x36, 0x3C,
+       0x52, 0xF9, 0xDD, 0xFF, 0xEB, 0x01, 0x28, 0xFE, 0x1F, 0x01, 0x93,
+       0xFF, 0x0F, 0x00, 0x04, 0x00, 0xD6, 0xFF, 0x3F, 0x00, 0x3C, 0x00,
+       0x16, 0xFE, 0x98, 0x05, 0xE0, 0xF2, 0x16, 0x26, 0x99, 0x37, 0x4F,
+       0xF6, 0xD9, 0x01, 0xC6, 0x00, 0xB5, 0xFE, 0xEA, 0x00, 0xA1, 0xFF,
+       0x0D, 0x00, 0x07, 0x00, 0xC3, 0xFF, 0x7A, 0x00, 0xBC, 0xFF, 0xE4,
+       0xFE, 0xA5, 0x04, 0x41, 0xF3, 0xCA, 0x2C, 0x0E, 0x32, 0x42, 0xF4,
+       0x85, 0x03, 0xB4, 0xFF, 0x46, 0xFF, 0xAE, 0x00, 0xB3, 0xFF, 0x09,
+       0x00, 0x0A, 0x00, 0xB0, 0xFF, 0xB8, 0x00, 0x30, 0xFF, 0xDC, 0xFF,
+       0x49, 0x03, 0x83, 0xF4, 0xF5, 0x32, 0xC9, 0x2B, 0x23, 0xF3, 0xD1,
+       0x04, 0xC2, 0xFE, 0xD1, 0xFF, 0x71, 0x00, 0xC6, 0xFF, 0x06, 0x00,
+       0x0D, 0x00, 0x9F, 0xFF, 0xF3, 0x00, 0x9F, 0xFE, 0xF3, 0x00, 0x90,
+       0x01, 0xB6, 0xF6, 0x5F, 0x38, 0x04, 0x25, 0xE4, 0xF2, 0xB4, 0x05,
+       0xFB, 0xFD, 0x4E, 0x00, 0x36, 0x00, 0xD9, 0xFF, 0x04, 0x00, 0x0F,
+       0x00, 0x92, 0xFF, 0x26, 0x01, 0x13, 0xFE, 0x18, 0x02, 0x89, 0xFF,
+       0xDF, 0xF9, 0xD3, 0x3C, 0xFC, 0x1D, 0x6B, 0xF3, 0x2C, 0x06, 0x67,
+       0xFD, 0xB8, 0x00, 0x00, 0x00, 0xEA, 0xFF, 0x02, 0x00, 0x11, 0x00,
+       0x8B, 0xFF, 0x4C, 0x01, 0x97, 0xFD, 0x3C, 0x03, 0x4D, 0xFD, 0xF8,
+       0xFD, 0x2A, 0x40, 0xED, 0x16, 0x9A, 0xF4, 0x3C, 0x06, 0x0A, 0xFD,
+       0x0A, 0x01, 0xD4, 0xFF, 0xF8, 0xFF, 0x01, 0x00, 0x10, 0x00, 0x8C,
+       0xFF, 0x61, 0x01, 0x34, 0xFD, 0x4B, 0x04, 0xFA, 0xFA, 0xF1, 0x02,
+       0x42, 0x42, 0x11, 0x10, 0x4C, 0xF6, 0xED, 0x05, 0xE3, 0xFC, 0x41,
+       0x01, 0xB1, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x97, 0xFF,
+       0x61, 0x01, 0xF5, 0xFC, 0x30, 0x05, 0xB1, 0xF8, 0xAE, 0x08, 0x0A,
+       0x43, 0x9F, 0x09, 0x5A, 0xF8, 0x4F, 0x05, 0xEF, 0xFC, 0x5F, 0x01,
+       0x9A, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0xAD,
+       0xFF, 0x48, 0x01, 0xE2, 0xFC, 0xDA, 0x05, 0x97, 0xF6, 0x0B, 0x0F,
+       0x79, 0x42, 0xC7, 0x03, 0x9E, 0xFA, 0x71, 0x04, 0x28, 0xFD, 0x63,
+       0x01, 0x8D, 0xFF, 0x0F, 0x00 
+};
+
+static u16
+CoefficientSizes[] = {
+    /* Playback */
+    0x00C0, 0x5000, 0x0060, 0x2800, 0x0040, 0x0060, 0x1400, 0x0000,
+    /* Record */
+    0x0020, 0x1260, 0x0020, 0x1260, 0x0000, 0x0040, 0x1260, 0x0000,
+};
+
+#ifndef JUST_DATA
+
+static u16
+nm256_getStartOffset (u8 which)
+{
+    u16 offset = 0;
+
+    while (which-- > 0)
+       offset += CoefficientSizes[which];
+
+    return offset;
+}
+
+static void
+nm256_loadOneCoefficient (struct nm256_info *card, u32 port, u16 which)
+{
+    u32 coeffBuf = (which < 8) ? card->coeffBuf : card->allCoeffBuf;
+    u16 offset = nm256_getStartOffset (which);
+    u16 size = CoefficientSizes[which];
+
+    card->coeffsCurrent = 0;
+
+    if (nm256_debug)
+       printk (KERN_INFO "NM256: Loading coefficient buffer 0x%x-0x%x with coefficient %d\n",
+               coeffBuf, coeffBuf + size - 1, which);
+    nm256_writeBuffer8 (card, coefficients + offset, 1, coeffBuf, size);
+    nm256_writePort32 (card, 2, port + 0, coeffBuf);
+    nm256_writePort32 (card, 2, port + 4, coeffBuf + size - 1);
+}
+
+static void
+nm256_loadAllCoefficients (struct nm256_info *card)
+{
+    nm256_writeBuffer8 (card, coefficients, 1, card->allCoeffBuf,
+                         NM_TOTAL_COEFF_COUNT * 4);
+    card->coeffsCurrent = 1;
+}
+
+void
+nm256_loadCoefficient (struct nm256_info *card, int which, int number)
+{
+    static u16 addrs[3] = { 0x1c, 0x21c, 0x408 };
+    /* The enable register for the specified engine.  */
+    u32 poffset = (which == 1 ? 0x200 : 1);
+
+    if (nm256_readPort8 (card, 2, poffset) & 1) {
+       printk (KERN_ERR "NM256: Engine was enabled while loading coefficients!\n");
+       return;
+    }
+
+    /* The recording engine uses coefficient values 8-15.  */
+    if (which == 1)
+       number += 8;
+
+    if (! nm256_cachedCoefficients (card))
+       nm256_loadOneCoefficient (card, addrs[which], number);
+    else {
+       u32 base = card->allCoeffBuf;
+       u32 offset = nm256_getStartOffset (number);
+       u32 endOffset = offset + CoefficientSizes[number];
+
+       if (nm256_debug)
+           printk (KERN_DEBUG "loading coefficient %d at port 0x%x, offset %d (0x%x-0x%x)\n",
+                   number, addrs[which], offset, base + offset,
+                   base + endOffset - 1);
+
+       if (! card->coeffsCurrent)
+           nm256_loadAllCoefficients (card);
+
+       nm256_writePort32 (card, 2, addrs[which], base + offset);
+       nm256_writePort32 (card, 2, addrs[which] + 4, base + endOffset - 1);
+    }
+}
+
+#endif /* JUST_DATA */
+
+#endif
+\f
+/*
+ * Local variables:
+ *  c-basic-offset: 4
+ * End:
+ */
index 8898c655a15f1beafc25f8009f6a9ea6ae0a0ceb..295ccfa17d964f133b3ce5f87def7c342fd1adfe 100644 (file)
@@ -32,8 +32,6 @@
 #include "sound_config.h"
 #include "soundmodule.h"
 
-#ifdef CONFIG_YM3812
-
 #include "opl3.h"
 
 #define MAX_VOICE      18
@@ -1218,10 +1216,10 @@ void cleanup_module(void)
        SOUND_LOCK_END;
 }
 
+MODULE_PARM(io, "i");
+
 #endif
 
 EXPORT_SYMBOL(opl3_init);
 EXPORT_SYMBOL(opl3_detect);
-MODULE_PARM(io, "i");
 
-#endif
index ba8fc0c7182661e496e8422b7110d4348b1c8e27..e4664b06abdaf8164f2e7b88dd4e6c7ca1af5425 100644 (file)
@@ -1209,15 +1209,6 @@ FKS_test (devc);
                        break;
        }
 
-       /* AAS: info stolen from ALSA: these boards have different clocks */
-       switch(devc->submodel) {
-               case SUBMDL_ES1869:
-               case SUBMDL_ES1887:
-               case SUBMDL_ES1888:
-                       devc->caps |= SB_CAP_ES18XX_RATE;
-                       break;
-       }
-
        hw_config->name = name;
        /* FKS: sb_dsp_reset to enable extended mode???? */
        sb_dsp_reset(devc); /* Turn on extended mode */
index 6731180b40259ed418abbfb337f5e76125f87c77..631dea62ef0b7bfd6da1340ef4f6426f419c7b2d 100644 (file)
@@ -39,6 +39,7 @@
 #endif                         /* __KERNEL__ */
 #include <linux/delay.h>
 #include <linux/proc_fs.h>
+#include <linux/smp_lock.h>
 
 #include "soundmodule.h"
 struct notifier_block *sound_locker=(struct notifier_block *)0;
@@ -375,60 +376,76 @@ static ssize_t sndstat_file_read(struct file * file, char * buf, size_t nbytes,
 static ssize_t sound_read(struct file *file, char *buf, size_t count, loff_t *ppos)
 {
        int dev = MINOR(file->f_dentry->d_inode->i_rdev);
+       int ret = -EINVAL;
 
+       /*
+        *      The OSS drivers aren't remotely happy without this locking,
+        *      and unless someone fixes them when they are about to bite the
+        *      big one anyway, we might as well bandage here..
+        */
+        
+       lock_kernel();
+       
        DEB(printk("sound_read(dev=%d, count=%d)\n", dev, count));
        switch (dev & 0x0f) {
        case SND_DEV_STATUS:
-               return sndstat_file_read(file, buf, count, ppos);
+               ret = sndstat_file_read(file, buf, count, ppos);
 
 #ifdef CONFIG_AUDIO
        case SND_DEV_DSP:
        case SND_DEV_DSP16:
        case SND_DEV_AUDIO:
-               return audio_read(dev, file, buf, count);
+               ret = audio_read(dev, file, buf, count);
+               break;
 #endif
 
 #ifdef CONFIG_SEQUENCER
        case SND_DEV_SEQ:
        case SND_DEV_SEQ2:
-               return sequencer_read(dev, file, buf, count);
+               ret = sequencer_read(dev, file, buf, count);
+               break;
 #endif
 
 #ifdef CONFIG_MIDI
        case SND_DEV_MIDIN:
-               return MIDIbuf_read(dev, file, buf, count);
+               ret = MIDIbuf_read(dev, file, buf, count);
 #endif
-
-       default:;
        }
-       return -EINVAL;
+       unlock_kernel();
+       return ret;
 }
 
 static ssize_t sound_write(struct file *file, const char *buf, size_t count, loff_t *ppos)
 {
        int dev = MINOR(file->f_dentry->d_inode->i_rdev);
-
+       int ret = -EINVAL;
+       
+       lock_kernel();
        DEB(printk("sound_write(dev=%d, count=%d)\n", dev, count));
        switch (dev & 0x0f) {
 #ifdef CONFIG_SEQUENCER
        case SND_DEV_SEQ:
        case SND_DEV_SEQ2:
-               return sequencer_write(dev, file, buf, count);
+               ret =  sequencer_write(dev, file, buf, count);
+               break;
 #endif
 
 #ifdef CONFIG_AUDIO
        case SND_DEV_DSP:
        case SND_DEV_DSP16:
        case SND_DEV_AUDIO:
-               return audio_write(dev, file, buf, count);
+               ret = audio_write(dev, file, buf, count);
+               break;
 #endif
 
 #ifdef CONFIG_MIDI
        case SND_DEV_MIDIN:
-               return MIDIbuf_write(dev, file, buf, count);
+               ret =  MIDIbuf_write(dev, file, buf, count);
+               break;
 #endif
        }
-       return -EINVAL;
+       unlock_kernel();
+       return ret;
 }
 
 static long long sound_lseek(struct file *file, long long offset, int orig)
@@ -858,8 +875,11 @@ static int      sound[20] = {
 
 int traceinit = 0;
 static int dmabuf = 0;
+static int dmabug = 0;
+
 MODULE_PARM(traceinit, "i");
 MODULE_PARM(dmabuf, "i");
+MODULE_PARM(dmabug, "i");
 
 int init_module(void)
 {
@@ -868,6 +888,15 @@ int init_module(void)
        int             i;
 
        trace_init=traceinit;
+       
+#ifdef HAS_BRIDGE_BUGGY_FUNC
+       if(dmabug)
+               isa_dma_bridge_buggy = dmabug;
+#else
+       if(dmabug)
+               printk(KERN_ERR "sound: rebuild with PCI_QUIRKS enabled to configure this.\n");
+#endif
+               
        /*
         * "sound=" command line handling by Harald Milz.
         */
index 25bfaf3a7e19b47e631bd398047b706a50a4277c..4acffcf6d74755769cc199f2ae2b0483e8d0a232 100644 (file)
@@ -125,7 +125,7 @@ static char old_hardware = 0;
 static void sleep(unsigned howlong)
 {
        current->state = TASK_INTERRUPTIBLE;
-       schedule_timeout(1);
+       schedule_timeout(howlong);
 }
 
 static unsigned char sscape_read(struct sscape_info *devc, int reg)
index 17df87e24ed7fee1173ba6b8c3523dd101ab049c..5863587b4abb8f47f42a874bc830b9aeda15f622 100644 (file)
 #include <linux/stddef.h>
 #include <linux/spinlock.h>
 #include <asm/fixmap.h>
-#include <asm/sgi-cobalt.h>
+#include <asm/cobalt.h>
+#include <asm/semaphore.h>
 
 #include "sound_config.h"
 
index e535439113b0b65417c750abd0a8bedf5e193847..cbecb5e4f07fc5953c2592721ef5cb0bf06aed98 100644 (file)
@@ -106,7 +106,7 @@ static void p9100_margins (struct fb_info_sbusfb *fb, struct display *p, int x_m
 
 static char idstring[60] __initdata = { 0 };
 
-__initfunc(char *p9100fb_init(struct fb_info_sbusfb *fb))
+char * __init p9100fb_init(struct fb_info_sbusfb *fb)
 {
        struct fb_fix_screeninfo *fix = &fb->fix;
        struct display *disp = &fb->disp;
index 9b0e6a9dea63fb7e7586655203200a7714b4e027..696845f8adc17426ee418b80621ed0dac6cdb5ff 100644 (file)
@@ -166,7 +166,7 @@ static const char __init *vgacon_startup(void)
 {
        const char *display_desc = NULL;
        u16 saved1, saved2;
-       u16 *p;
+       volatile u16 *p;
 
        if (ORIG_VIDEO_ISVGA == VIDEO_TYPE_VLFB) {
        no_vga:
@@ -285,7 +285,7 @@ static const char __init *vgacon_startup(void)
         *      Find out if there is a graphics card present.
         *      Are there smarter methods around?
         */
-       p = (u16 *)vga_vram_base;
+       p = (volatile u16 *)vga_vram_base;
        saved1 = scr_readw(p);
        saved2 = scr_readw(p + 1);
        scr_writew(0xAA55, p);
index 2abbce4a790e8aab40b239bb3ba96a1be650d600..3acd5e028a9c842a45531afce25b200fc54559ef 100644 (file)
@@ -27,7 +27,6 @@
 
 #define QNX4_VERSION  4
 #define QNX4_BMNAME   ".bitmap"
-#define CHECK_BOOT_SIGNATURE 0
 
 static struct super_operations qnx4_sops;
 
@@ -257,9 +256,6 @@ static const char *qnx4_checkroot(struct super_block *s)
        int i, j;
        int found = 0;
 
-       if (s == NULL) {
-               return "no qnx4 filesystem (null superblock).";
-       }
        if (*(s->u.qnx4_sb.sb->RootDir.di_fname) != '/') {
                return "no qnx4 filesystem (no root dir).";
        } else {
@@ -282,6 +278,8 @@ static const char *qnx4_checkroot(struct super_block *s)
                                        }
                                }
                        }
+                       /* WAIT! s->u.qnx4_sb.BitMap points into bh->b_data
+                          and now we release bh?? */
                        brelse(bh);
                        if (found != 0) {
                                break;
@@ -299,9 +297,8 @@ static struct super_block *qnx4_read_super(struct super_block *s,
 {
        struct buffer_head *bh;
        kdev_t dev = s->s_dev;
-#if CHECK_BOOT_SIGNATURE
+       struct inode *root;
        char *tmpc;
-#endif
        const char *errmsg;
 
        MOD_INC_USE_COUNT;
@@ -311,7 +308,9 @@ static struct super_block *qnx4_read_super(struct super_block *s,
        s->s_blocksize_bits = 9;
        s->s_dev = dev;
 
-#if CHECK_BOOT_SIGNATURE
+       /* Check the boot signature. Since the qnx4 code is
+          dangerous, we should leave as quickly as possible
+          if we don't belong here... */
        bh = bread(dev, 0, QNX4_BLOCK_SIZE);
        if (!bh) {
                printk("qnx4: unable to read the boot sector\n");
@@ -320,11 +319,12 @@ static struct super_block *qnx4_read_super(struct super_block *s,
        tmpc = (char *) bh->b_data;
        if (tmpc[4] != 'Q' || tmpc[5] != 'N' || tmpc[6] != 'X' ||
            tmpc[7] != '4' || tmpc[8] != 'F' || tmpc[9] != 'S') {
-               printk("qnx4: wrong fsid in boot sector.\n");
+               if (!silent)
+                       printk("qnx4: wrong fsid in boot sector.\n");
                goto out;
        }
        brelse(bh);
-#endif
+
        bh = bread(dev, 1, QNX4_BLOCK_SIZE);
        if (!bh) {
                printk("qnx4: unable to read the superblock\n");
@@ -337,23 +337,35 @@ static struct super_block *qnx4_read_super(struct super_block *s,
 #endif
        s->u.qnx4_sb.sb_buf = bh;
        s->u.qnx4_sb.sb = (struct qnx4_super_block *) bh->b_data;
-       s->s_root =
-           d_alloc_root(iget(s, QNX4_ROOT_INO * QNX4_INODES_PER_BLOCK));
-       if (s->s_root == NULL) {
-               printk("qnx4: get inode failed\n");
-               goto out;
-       }
+
+       /* check before allocating dentries, inodes, .. */
        errmsg = qnx4_checkroot(s);
        if (errmsg != NULL) {
-               printk("qnx4: %s\n", errmsg);
+               if (!silent)
+                       printk("qnx4: %s\n", errmsg);
                goto out;
        }
+       /* does root not have inode number QNX4_ROOT_INO ?? */
+       root = iget(s, QNX4_ROOT_INO * QNX4_INODES_PER_BLOCK);
+       if (!root) {
+               printk("qnx4: get inode failed\n");
+               goto out;
+       }
+       s->s_root = d_alloc_root(root);
+       if (s->s_root == NULL)
+               goto outi;
        brelse(bh);
        unlock_super(s);
        s->s_dirt = 1;
 
        return s;
 
+      outi:
+       iput(root);
       out:
        brelse(bh);
       outnobh:
index ee60551ae2aaea9e4279f4ee69d7873a7c7285d3..9cfc401fadc973873f6de37b783dc31dd1896db3 100644 (file)
 #define __NR_putpmsg           189     /* some people actually want streams */
 #define __NR_vfork             190
 
-/* user-visible error numbers are in the range -1 - -122: see <asm-i386/errno.h> */
+/* user-visible error numbers are in the range -1 - -124: see <asm-i386/errno.h> */
 
 #define __syscall_return(type, res) \
 do { \
diff --git a/include/linux/acpi.h b/include/linux/acpi.h
new file mode 100644 (file)
index 0000000..98b115c
--- /dev/null
@@ -0,0 +1,156 @@
+/*
+ *  acpi.h - ACPI driver interface
+ *
+ *  Copyright (C) 1999 Andrew Henroid
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#ifndef _LINUX_ACPI_H
+#define _LINUX_ACPI_H
+
+#include <linux/types.h>
+#include <linux/ioctl.h>
+
+/* /dev/acpi minor number */
+#define ACPI_MINOR_DEV 167
+
+/* RSDP location */
+#define ACPI_BIOS_ROM_BASE ((__u8*) 0xe0000)
+#define ACPI_BIOS_ROM_END  ((__u8*) 0x100000)
+
+/* Table signatures */
+#define ACPI_RSDP1_SIG 0x20445352 /* 'RSD ' */
+#define ACPI_RSDP2_SIG 0x20525450 /* 'PTR ' */
+#define ACPI_RSDT_SIG  0x54445352 /* 'RSDT' */
+#define ACPI_FACP_SIG  0x50434146 /* 'FACP' */
+#define ACPI_DSDT_SIG  0x54445344 /* 'DSDT' */
+
+/* PM1_STS flags */
+#define ACPI_TMR_STS    0x0001
+#define ACPI_BM_STS     0x0010
+#define ACPI_GBL_STS    0x0020
+#define ACPI_PWRBTN_STS 0x0100
+#define ACPI_SLPBTN_STS 0x0200
+#define ACPI_RTC_STS    0x0400
+#define ACPI_WAK_STS    0x8000
+
+/* PM1_EN flags */
+#define ACPI_TMR_EN    0x0001
+#define ACPI_GBL_EN    0x0020
+#define ACPI_PWRBTN_EN 0x0100
+#define ACPI_SLPBTN_EN 0x0200
+#define ACPI_RTC_EN    0x0400
+
+/* PM1_CNT flags */
+#define ACPI_SCI_EN   0x0001
+#define ACPI_BM_RLD   0x0002
+#define ACPI_GBL_RLS  0x0004
+#define ACPI_SLP_TYP0 0x0400
+#define ACPI_SLP_TYP1 0x0800
+#define ACPI_SLP_TYP2 0x1000
+#define ACPI_SLP_EN   0x2000
+
+/* PM_TMR masks */
+#define ACPI_TMR_VAL_MASK   0x00ffffff
+#define ACPI_E_TMR_VAL_MASK 0xff000000
+
+/* PM2_CNT flags */
+#define ACPI_ARB_DIS 0x01
+
+/* FACP flags */
+#define ACPI_WBINVD       0x00000001
+#define ACPI_WBINVD_FLUSH 0x00000002
+#define ACPI_PROC_C1      0x00000004
+#define ACPI_P_LVL2_UP    0x00000008
+#define ACPI_PWR_BUTTON   0x00000010
+#define ACPI_SLP_BUTTON   0x00000020
+#define ACPI_FIX_RTC      0x00000040
+#define ACPI_RTC_64       0x00000080
+#define ACPI_TMR_VAL_EXT  0x00000100
+#define ACPI_DCK_CAP      0x00000200
+
+struct acpi_rsdp {
+       __u32 signature[2];
+       __u8 checksum;
+       __u8 oem[6];
+       __u8 reserved;
+       __u32 rsdt;
+};
+
+struct acpi_table {
+       __u32 signature;
+       __u32 length;
+       __u8 rev;
+       __u8 checksum;
+       __u8 oem[6];
+       __u8 oem_table[8];
+       __u32 oem_rev;
+       __u32 creator;
+       __u32 creator_rev;
+};
+
+struct acpi_facp {
+       struct acpi_table hdr;
+       __u32 facs;
+       __u32 dsdt;
+       __u8 int_model;
+       __u8 reserved;
+       __u16 sci_int;
+       __u32 smi_cmd;
+       __u8 acpi_enable;
+       __u8 acpi_disable;
+       __u8 s4bios_req;
+       __u8 reserved2;
+       __u32 pm1a_evt;
+       __u32 pm1b_evt;
+       __u32 pm1a_cnt;
+       __u32 pm1b_cnt;
+       __u32 pm2_cnt;
+       __u32 pm_tmr;
+       __u32 gpe0;
+       __u32 gpe1;
+       __u8 pm1_evt_len;
+       __u8 pm1_cnt_len;
+       __u8 pm2_cnt_len;
+       __u8 pm_tm_len;
+       __u8 gpe0_len;
+       __u8 gpe1_len;
+       __u8 gpe1_base;
+       __u8 reserved3;
+       __u16 p_lvl2_lat;
+       __u16 p_lvl3_lat;
+       __u16 flush_size;
+       __u16 flush_stride;
+       __u8 duty_offset;
+       __u8 duty_width;
+       __u8 day_alarm;
+       __u8 mon_alarm;
+       __u8 century;
+       __u8 reserved4;
+       __u8 reserved5;
+       __u8 reserved6;
+       __u32 flags;
+};
+
+#define ACPI_FIND_TABLES       _IOR('A', 1, struct acpi_find_tables)
+#define ACPI_WAIT_EVENT                _IO('A', 2)
+
+struct acpi_find_tables {
+       unsigned long facp;
+       unsigned long dsdt;
+};
+
+#endif /* _LINUX_ACPI_H */
index 53e3ea81bce9675b36605488c373f0061912a288..768e815c639b74044f95c02c5101ffa4b557aef9 100644 (file)
@@ -609,6 +609,7 @@ struct cyclades_port {
 #define Cy_EVENT_OPEN_WAKEUP           4
 #define Cy_EVENT_SHUTDOWN_WAKEUP       5
 #define        Cy_EVENT_DELTA_WAKEUP           6
+#define        Cy_EVENT_Z_RX_FULL              7
 
 #define        CLOSING_WAIT_DELAY      30*HZ
 #define CY_CLOSING_WAIT_NONE   65535
index feb877ed0d103cb422845e941f4bc904af42f814..f5e1a3015c5885816dbbe25ae5761166832c563c 100644 (file)
@@ -41,6 +41,8 @@ struct i2c_device;
 #define I2C_BUSID_BT848                1       /* I2C bus on a BT848 */
 #define I2C_BUSID_PARPORT      2       /* Bit banging on a parallel port */
 #define I2C_BUSID_BUZ          3
+#define I2C_BUSID_ZORAN                4
+
 /*
  * struct for a driver for a i2c chip (tuner, soundprocessor,
  * videotext, ... ).
index 4b5141d401fd810840f7c7e65ab4c1f2af5d13b2..d11ff1f097f1439b9e53220c0e530ad7d71f6247 100644 (file)
@@ -36,111 +36,6 @@ struct i2o_message
        /* List follows */
 };
 
-/**************************************************************************
- * HRT related constants and structures
- **************************************************************************/
-#define I2O_BUS_LOCAL  0
-#define I2O_BUS_ISA    1
-#define I2O_BUS_EISA   2
-#define I2O_BUS_MCA    3
-#define I2O_BUS_PCI    4
-#define I2O_BUS_PCMCIA 5
-#define I2O_BUS_NUBUS  6
-#define I2O_BUS_CARDBUS        7
-#define I2O_BUS_UNKNOWN        0x80
-
-typedef struct _i2o_pci_bus {
-       u8 PciFunctionNumber;
-       u8 PciDeviceNumber;
-       u8 PciBusNumber;
-       u8 reserved;
-       u16 PciVendorID;
-       u16 PciDeviceID;
-} i2o_pci_bus, *pi2o_pci_bus;
-
-typedef struct _i2o_local_bus {
-       u16 LbBaseIOPort;
-       u16 reserved;
-       u32 LbBaseMemoryAddress;
-} i2o_local_bus, *pi2o_local_bus;
-
-typedef struct _i2o_isa_bus {
-       u16 IsaBaseIOPort;
-       u8 CSN;
-       u8 reserved;
-       u32 IsaBaseMemoryAddress;
-} i2o_isa_bus, *pi2o_isa_bus;
-
-typedef struct _i2o_eisa_bus_info {
-       u16 EisaBaseIOPort;
-       u8 reserved;
-       u8 EisaSlotNumber;
-       u32 EisaBaseMemoryAddress;
-} i2o_eisa_bus, *pi2o_eisa_bus;
-
-typedef struct _i2o_mca_bus {
-       u16 McaBaseIOPort;
-       u8 reserved;
-       u8 McaSlotNumber;
-       u32 McaBaseMemoryAddress;
-} i2o_mca_bus, *pi2o_mca_bus;
-
-typedef struct _i2o_other_bus {
-       u16 BaseIOPort;
-       u16 reserved;
-       u32 BaseMemoryAddress;
-} i2o_other_bus, *pi2o_other_bus;
-
-
-typedef struct _i2o_hrt_entry {
-       u32 adapter_id;
-       u32 parent_tid:12;
-       u32 state:4;
-       u32 bus_num:8;
-       u32 bus_type:8;
-       union {
-               i2o_pci_bus pci_bus;
-               i2o_local_bus local_bus;
-               i2o_isa_bus isa_bus;
-               i2o_eisa_bus eisa_bus;
-               i2o_mca_bus mca_bus;
-               i2o_other_bus other_bus;
-       } bus;
-} i2o_hrt_entry, *pi2o_hrt_entry;
-
-typedef struct _i2o_hrt {
-       u16 num_entries;
-       u8 entry_len;
-       u8 hrt_version;
-       u32 change_ind;
-       i2o_hrt_entry hrt_entry[1];
-} i2o_hrt, *pi2o_hrt;
-
-typedef struct _i2o_lct_entry {
-       u32 entry_size:16;
-       u32 tid:12;
-       u32 reserved:4;
-       u32 change_ind;
-       u32 device_flags;
-       u32 class_id;
-       u32 sub_class;
-       u32 user_tid:12;
-       u32 parent_tid:12;
-       u32 bios_info:8;
-       u8 identity_tag[8];
-       u32 event_capabilities;
-} i2o_lct_entry, *pi2o_lct_entry;
-
-typedef struct _i2o_lct {
-       u32 table_size:16;
-       u32 boot_tid:12;
-       u32 lct_ver:4;
-       u32 iop_flags;
-       u32 current_change_ind;
-       i2o_lct_entry lct_entry[1];
-} i2o_lct, *pi2o_lct;
-
-
 /*
  *     Each I2O device entity has one or more of these. There is one
  *     per device. *FIXME* how to handle multiple types on one unit.
@@ -329,6 +224,8 @@ extern int i2o_release_device(struct i2o_device *, struct i2o_handler *, u32);
 extern int i2o_post_this(struct i2o_controller *, int, u32 *, int);
 extern int i2o_post_wait(struct i2o_controller *, int, u32 *, int, int *, int);
 extern int i2o_issue_claim(struct i2o_controller *, int, int, int, int *, u32);
+extern int i2o_issue_params(int, struct i2o_controller *, int, int, void *,
+                           int, void *, int, int *); 
 
 extern int i2o_query_scalar(struct i2o_controller *, int, int, int, int, 
                        void *, int, int *);
@@ -602,7 +499,7 @@ extern const char *i2o_get_class_name(int);
 #define I2O_DSC_DEVICE_NOT_AVAILABLE           0x001C
 
 /* Device Claim Types */
-#define        I2O_CLAIM_PRIMARY                                               0x01000000
+#define        I2O_CLAIM_PRIMARY                                       0x01000000
 #define        I2O_CLAIM_MANAGEMENT                                    0x02000000
 #define        I2O_CLAIM_AUTHORIZED                                    0x03000000
 #define        I2O_CLAIM_SECONDARY                                     0x04000000
@@ -659,67 +556,177 @@ extern const char *i2o_get_class_name(int);
 
 #endif /* __KERNEL__ */
 
-#include <asm/ioctl.h>
+#include <linux/ioctl.h>
 
 /*
  * I2O Control IOCTLs and structures
  */
 #define I2O_MAGIC_NUMBER       'i'
-#define I2OGETIOPS             _IO(I2O_MAGIC_NUMBER,0)
-#define I2OHRTGET              _IO(I2O_MAGIC_NUMBER,1)
-#define I2OLCTGET              _IO(I2O_MAGIC_NUMBER,2)
-#define I2OPARMSET             _IO(I2O_MAGIC_NUMBER,3)
-#define I2OPARMGET             _IO(I2O_MAGIC_NUMBER,4)
-#define I2OSWDL                        _IO(I2O_MAGIC_NUMBER,5)
-#define I2OSWUL                        _IO(I2O_MAGIC_NUMBER,6)
-#define I2OSWDEL               _IO(I2O_MAGIC_NUMBER,7)
-#define I2OHTML                        _IO(I2O_MAGIC_NUMBER,8)
+#define I2OGETIOPS             _IOR(I2O_MAGIC_NUMBER,0,u8[MAX_I2O_CONTROLLERS])
+#define I2OHRTGET              _IOWR(I2O_MAGIC_NUMBER,1,struct i2o_cmd_hrtlct)
+#define I2OLCTGET              _IOWR(I2O_MAGIC_NUMBER,2,struct i2o_cmd_hrtlct)
+#define I2OPARMSET             _IOWR(I2O_MAGIC_NUMBER,3,struct i2o_cmd_psetget)
+#define I2OPARMGET             _IOWR(I2O_MAGIC_NUMBER,4,struct i2o_cmd_psetget)
+#define I2OSWDL                        _IOWR(I2O_MAGIC_NUMBER,5,struct i2o_sw_xfer)
+#define I2OSWUL                        _IOWR(I2O_MAGIC_NUMBER,6,struct i2o_sw_xfer)
+#define I2OSWDEL               _IOWR(I2O_MAGIC_NUMBER,7,struct i2o_sw_xfer)
+#define I2OVALIDATE            _IOR(I2O_MAGIC_NUMBER,8,u32)
+#define I2OHTML                        _IOWR(I2O_MAGIC_NUMBER,9,struct i2o_html)
 
 /* On hold until we figure this out
-#define I2OEVTREG              _IO(I2O_MAGIC_NUMBER,9)
-#define I2OEVTCLR              _IO(I2O_MAGIC_NUMBER,10)
-#define I2OEVTGET              _IO(I2O_MAGIC_NUMBER,11)
+#define I2OEVTREG              _IO(I2O_MAGIC_NUMBER,10)
+#define I2OEVTCLR              _IO(I2O_MAGIC_NUMBER,11)
+#define I2OEVTGET              _IO(I2O_MAGIC_NUMBER,12)
  */
 
 struct i2o_cmd_hrtlct
 {
-       unsigned int iop;  /* IOP unit number */
-       void  *resbuf;  /* Buffer for result */
-       unsigned int *reslen;  /* Buffer length in bytes */
+       unsigned int iop;       /* IOP unit number */
+       void *resbuf;           /* Buffer for result */
+       unsigned int *reslen;   /* Buffer length in bytes */
 };
 
-
 struct i2o_cmd_psetget
 {
-       unsigned int iop;      /* IOP unit number */
-       unsigned int tid;      /* Target device TID */
-       void  *opbuf;   /* Operation List buffer */
-       unsigned int   oplen;    /* Operation List buffer length in bytes */
-       void  *resbuf;  /* Result List buffer */
-       unsigned int  *reslen;  /* Result List buffer length in bytes */
+       unsigned int iop;       /* IOP unit number */
+       unsigned int tid;       /* Target device TID */
+       void *opbuf;            /* Operation List buffer */
+       unsigned int oplen;     /* Operation List buffer length in bytes */
+       void *resbuf;           /* Result List buffer */
+       unsigned int *reslen;   /* Result List buffer length in bytes */
 };
 
 struct i2o_sw_xfer
 {
        unsigned int iop;       /* IOP unit number */
-       unsigned char dl_flags; /* DownLoadFlags field */
+       unsigned char flags;    /* Flags field */
        unsigned char sw_type;  /* Software type */
-       unsigned int sw_id;     /* Software ID */
-       void  *buf;             /* Pointer to software buffer */
-       unsigned int *swlen;    /* Length of software data */
-       unsigned int *maxfrag;  /* Maximum fragment count */
-        unsigned int *curfrag;  /* Current fragment count */
+       unsigned int sw_id;     /* Software ID */
+       void *buf;              /* Pointer to software buffer */
+       unsigned int *swlen;    /* Length of software data */
+       unsigned int *maxfrag;  /* Maximum fragment count */
+        unsigned int *curfrag; /* Current fragment count */
 };
 
 struct i2o_html
 {
-       unsigned int iop;      /* IOP unit number */
-       unsigned int tid;      /* Target device ID */
-       unsigned int page;     /* HTML page */
-       void  *resbuf;  /* Buffer for reply HTML page */
-       unsigned int *reslen;  /* Length in bytes of reply buffer */
-       void  *qbuf;    /* Pointer to HTTP query string */
-       unsigned int qlen;     /* Length in bytes of query string buffer */
+       unsigned int iop;       /* IOP unit number */
+       unsigned int tid;       /* Target device ID */
+       unsigned int page;      /* HTML page */
+       void *resbuf;           /* Buffer for reply HTML page */
+       unsigned int *reslen;   /* Length in bytes of reply buffer */
+       void *qbuf;             /* Pointer to HTTP query string */
+       unsigned int qlen;      /* Length in bytes of query string buffer */
 };
 
+
+/**************************************************************************
+ * HRT related constants and structures
+ **************************************************************************/
+#define I2O_BUS_LOCAL  0
+#define I2O_BUS_ISA    1
+#define I2O_BUS_EISA   2
+#define I2O_BUS_MCA    3
+#define I2O_BUS_PCI    4
+#define I2O_BUS_PCMCIA 5
+#define I2O_BUS_NUBUS  6
+#define I2O_BUS_CARDBUS        7
+#define I2O_BUS_UNKNOWN        0x80
+
+#ifndef __KERNEL__
+typedef unsigned char u8;
+typedef unsigned short u16;
+typedef unsigned int u32;
+#endif /* __KERNEL__ */
+
+typedef struct _i2o_pci_bus {
+       u8 PciFunctionNumber;
+       u8 PciDeviceNumber;
+       u8 PciBusNumber;
+       u8 reserved;
+       u16 PciVendorID;
+       u16 PciDeviceID;
+} i2o_pci_bus, *pi2o_pci_bus;
+
+typedef struct _i2o_local_bus {
+       u16 LbBaseIOPort;
+       u16 reserved;
+       u32 LbBaseMemoryAddress;
+} i2o_local_bus, *pi2o_local_bus;
+
+typedef struct _i2o_isa_bus {
+       u16 IsaBaseIOPort;
+       u8 CSN;
+       u8 reserved;
+       u32 IsaBaseMemoryAddress;
+} i2o_isa_bus, *pi2o_isa_bus;
+
+typedef struct _i2o_eisa_bus_info {
+       u16 EisaBaseIOPort;
+       u8 reserved;
+       u8 EisaSlotNumber;
+       u32 EisaBaseMemoryAddress;
+} i2o_eisa_bus, *pi2o_eisa_bus;
+
+typedef struct _i2o_mca_bus {
+       u16 McaBaseIOPort;
+       u8 reserved;
+       u8 McaSlotNumber;
+       u32 McaBaseMemoryAddress;
+} i2o_mca_bus, *pi2o_mca_bus;
+
+typedef struct _i2o_other_bus {
+       u16 BaseIOPort;
+       u16 reserved;
+       u32 BaseMemoryAddress;
+} i2o_other_bus, *pi2o_other_bus;
+
+typedef struct _i2o_hrt_entry {
+       u32 adapter_id;
+       u32 parent_tid:12;
+       u32 state:4;
+       u32 bus_num:8;
+       u32 bus_type:8;
+       union {
+               i2o_pci_bus pci_bus;
+               i2o_local_bus local_bus;
+               i2o_isa_bus isa_bus;
+               i2o_eisa_bus eisa_bus;
+               i2o_mca_bus mca_bus;
+               i2o_other_bus other_bus;
+       } bus;
+} i2o_hrt_entry, *pi2o_hrt_entry;
+
+typedef struct _i2o_hrt {
+       u16 num_entries;
+       u8 entry_len;
+       u8 hrt_version;
+       u32 change_ind;
+       i2o_hrt_entry hrt_entry[1];
+} i2o_hrt, *pi2o_hrt;
+
+typedef struct _i2o_lct_entry {
+       u32 entry_size:16;
+       u32 tid:12;
+       u32 reserved:4;
+       u32 change_ind;
+       u32 device_flags;
+       u32 class_id;
+       u32 sub_class;
+       u32 user_tid:12;
+       u32 parent_tid:12;
+       u32 bios_info:8;
+       u8 identity_tag[8];
+       u32 event_capabilities;
+} i2o_lct_entry, *pi2o_lct_entry;
+
+typedef struct _i2o_lct {
+       u32 table_size:16;
+       u32 boot_tid:12;
+       u32 lct_ver:4;
+       u32 iop_flags;
+       u32 current_change_ind;
+       i2o_lct_entry lct_entry[1];
+} i2o_lct, *pi2o_lct;
+
 #endif
index b687d7558d41b989deaeab8a6ce6e37700e10bd7..0aff25c2908fedbcb8192ba8500eda83202de12e 100644 (file)
@@ -103,7 +103,6 @@ extern void ___wait_on_page(struct page *);
 
 static inline void wait_on_page(struct page * page)
 {
-
        if (PageLocked(page))
                ___wait_on_page(page);
 }
index 5edc8840e4e2bbdaefcaf2715691fd0039b7aae6..5148fcd7fad02778f506c4f392151d85d7d35d3c 100644 (file)
  * <pci-ids@ucw.cz>.
  */
 #define PCI_VENDOR_ID_COMPAQ           0x0e11
+#define PCI_DEVICE_ID_COMPAQ_TOKENRING 0x0508
 #define PCI_DEVICE_ID_COMPAQ_1280      0x3033
 #define PCI_DEVICE_ID_COMPAQ_TRIFLEX   0x4000
 #define PCI_DEVICE_ID_COMPAQ_SMART2P   0xae10
 
 #define PCI_VENDOR_ID_LAVA             0x1407
 #define PCI_DEVICE_ID_LAVA_PARALLEL    0x8000
-#define PCI_DEVICE_ID_LAVA_DUAL_PAR_A  0x8001 /* The Lava Dual Parallel is */
-#define PCI_DEVICE_ID_LAVA_DUAL_PAR_B  0x8002 /* two PCI devices on a card */
+#define PCI_DEVICE_ID_LAVA_DUAL_PAR_A  0x8002 /* The Lava Dual Parallel is */
+#define PCI_DEVICE_ID_LAVA_DUAL_PAR_B  0x8003 /* two PCI devices on a card */
 
 #define PCI_VENDOR_ID_PANACOM          0x14d4
 #define PCI_DEVICE_ID_PANACOM_QUADMODEM        0x0400
@@ -1576,6 +1577,10 @@ extern inline struct pci_dev *pci_find_class(unsigned int class, struct pci_dev
 extern inline struct pci_dev *pci_find_slot(unsigned int bus, unsigned int devfn)
 { return NULL; }
 
+extern inline void pci_set_master(struct pci_dev *dev) 
+{ return; }
+
+
 #endif /* !CONFIG_PCI */
 
 /*
index 56f0dd92f85bae64fdaddf4a18bc91333a607da9..867ad832c2719786adee7239fd5e0e0195abb831 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * bus_ops.h 1.6 1999/08/28 04:12:33
+ * bus_ops.h 1.7 1999/09/10 06:22:33
  *
  * The contents of this file are subject to the Mozilla Public License
  * Version 1.1 (the "License"); you may not use this file except in
@@ -30,6 +30,8 @@
 #ifndef _LINUX_BUS_OPS_H
 #define _LINUX_BUS_OPS_H
 
+#ifdef CONFIG_VIRTUAL_BUS
+
 typedef struct bus_operations {
     void       *priv;
     u32                (*b_in)(void *bus, u32 port, s32 sz);
@@ -52,8 +54,6 @@ typedef struct bus_operations {
     void       (*b_free_irq)(void *bus, u_int irq, void *dev_id);
 } bus_operations;
 
-#ifdef CONFIG_VIRTUAL_BUS
-
 #define bus_inb(b,p)           (b)->b_in((b),(p),0)
 #define bus_inw(b,p)           (b)->b_in((b),(p),1)
 #define bus_inl(b,p)           (b)->b_in((b),(p),2)
index b13f2a759e2ac125b37b4c3d7fba18f617bf9d57..8e8e0df79c7cf1ec67447ee98e3e4da3ab3e810e 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * mem_op.h 1.10 1999/08/28 04:12:33
+ * mem_op.h 1.11 1999/09/15 07:14:03
  *
  * The contents of this file are subject to the Mozilla Public License
  * Version 1.1 (the "License"); you may not use this file except in
@@ -49,7 +49,7 @@ static inline void copy_pc_to_user(void *to, const void *from, size_t n)
     size_t odd = (n & 3);
     n -= odd;
     while (n) {
-       put_user(readl_ns(from), (int *)to);
+       put_user(__raw_readl(from), (int *)to);
        (char *)from += 4; (char *)to += 4; n -= 4;
     }
     while (odd--)
@@ -64,7 +64,7 @@ static inline void copy_user_to_pc(void *to, const void *from, size_t n)
     n -= odd;
     while (n) {
        get_user(l, (int *)from);
-       writel_ns(l, to);
+       __raw_writel(l, to);
        (char *)to += 4; (char *)from += 4; n -= 4;
     }
     while (odd--) {
index 571572406cc2a26c95e73a8eb86e716cd4d5acca..324667ef53bd421a415fde8cacb469442c1ff291 100644 (file)
@@ -84,7 +84,7 @@ extern void ppc_init(void);
 extern void sysctl_init(void);
 extern void filescache_init(void);
 extern void signals_init(void);
-extern int pcmcia_init(void);
+extern int init_pcmcia_ds(void);
 
 extern void free_initmem(void);
 extern void filesystem_setup(void);
@@ -659,7 +659,7 @@ static void __init do_basic_setup(void)
        irda_device_init(); /* Must be done after protocol initialization */
 #endif
 #ifdef CONFIG_PCMCIA
-       pcmcia_init();          /* Do this last */
+       init_pcmcia_ds();               /* Do this last */
 #endif
        /* Mount the root filesystem.. */
        mount_root();
index 17080b0c65247fab1f0f223dfbd8d237cb240015..0070c5813e29282bb6d2bc674ce927d5cb78dfef 100644 (file)
@@ -2,7 +2,7 @@
 # IPX configuration
 #
 
-bool 'IPX: Full internal IPX network' CONFIG_IPX_INTERN
+bool '  IPX: Full internal IPX network' CONFIG_IPX_INTERN
 if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
-  dep_tristate 'IPX: SPX networking (EXPERIMENTAL)' CONFIG_SPX $CONFIG_IPX
+  dep_tristate '  IPX: SPX networking (EXPERIMENTAL)' CONFIG_SPX $CONFIG_IPX
 fi
index 52548f0376105d03d4dc4617deaa27b958ce0f4b..ab24b855f1c16386787ca8d9a464852adb40d6b4 100644 (file)
@@ -744,7 +744,9 @@ static int ipxitf_rcv(ipx_interface *intrfc, struct sk_buff *skb)
 
        if(ipx->ipx_type == IPX_TYPE_PPROP
                && ipx->ipx_tctrl < 8 
-               && skb->pkt_type != PACKET_OTHERHOST) 
+               && skb->pkt_type != PACKET_OTHERHOST
+                  /* header + 8 network numbers */ 
+               && ntohs(ipx->ipx_pktsize) >= sizeof(struct ipxhdr) + 8 * 4) 
        {
                int i;
                ipx_interface *ifcs;
@@ -2044,6 +2046,10 @@ int ipx_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt)
        /* Too small? */
        if(ntohs(ipx->ipx_pktsize) < sizeof(struct ipxhdr))
                goto drop;
+
+       /* Invalid header */
+       if(ntohs(ipx->ipx_pktsize) > skb->len)
+               goto drop;
                
        /* Not ours */  
         if (skb->pkt_type == PACKET_OTHERHOST)
index 80eefc7e1e03eb675d5c72dd85c10e99775ace0c..0f89d25a93e6a3cebff95b0964d026fae30eacb4 100644 (file)
@@ -143,6 +143,10 @@ function comment () {
 #      define_bool define value
 #
 function define_bool () {
+       define_tristate $1 $2
+}
+
+function define_tristate () {
        case "$2" in
         "y")
                echo "$1=y" >>$CONFIG
@@ -213,11 +217,11 @@ function tristate () {
          while :; do
            readln "$1 ($2) [$defprompt] " "$def" "$old"
            case "$ans" in
-             [yY] | [yY]es ) define_bool "$2" "y"
+             [yY] | [yY]es ) define_tristate "$2" "y"
                              break ;;
-             [nN] | [nN]o )  define_bool "$2" "n"
+             [nN] | [nN]o )  define_tristate "$2" "n"
                              break ;;
-             [mM] )          define_bool "$2" "m"
+             [mM] )          define_tristate "$2" "m"
                              break ;;
              * )             help "$2"
                              ;;
@@ -246,7 +250,7 @@ function dep_tristate () {
        while [ $# -gt 0 ]; do
          case "$1" in
            n)
-             define_bool "$var" "n"
+             define_tristate "$var" "n"
              return
              ;;
            m)
@@ -268,9 +272,9 @@ function dep_tristate () {
                while :; do
                  readln "$ques ($var) [$defprompt] " "$def" "$old"
                  case "$ans" in
-                     [nN] | [nN]o )  define_bool "$var" "n"
+                     [nN] | [nN]o )  define_tristate "$var" "n"
                                      break ;;
-                     [mM] )          define_bool "$var" "m"
+                     [mM] )          define_tristate "$var" "m"
                                      break ;;
                      [yY] | [yY]es ) echo 
    echo "  This answer is not allowed, because it is not consistent with"
@@ -290,6 +294,23 @@ function dep_tristate () {
        fi
 }
 
+function dep_bool () {
+       ques=$1
+       var=$2
+       shift 2
+       while [ $# -gt 0 ]; do
+         case "$1" in
+           m | n)
+             define_bool "$var" "n"
+             return
+             ;;
+         esac
+         shift
+       done
+
+       bool "$ques" "$var"
+}
+
 #
 # define_int sets the value of a integer argument
 #
index a2572275607695c75867a684eae47cc94d110664..f7e3ef11851efb0e2392dcec24ce9ab000f5f407 100644 (file)
 #
 # 24 January 1999, Michael Elizabeth Chastain, <mec@shout.net>
 # - Improve the exit message (Jeff Ronne).
+#
+# 06 July 1999, Andrzej M. Krzysztofowicz, <ankry@mif.pg.gda.pl>
+# - Support for multiple conditions in dep_tristate().
+# - Implemented new functions: define_tristate(), define_int(), define_hex(),
+#   define_string(), dep_bool().
+# 
 
 
 #
@@ -132,6 +138,22 @@ function define_bool () {
        eval $1=$2
 }
 
+function define_tristate () {
+       eval $1=$2
+}
+
+function define_hex () {
+       eval $1=$2
+}
+
+function define_int () {
+       eval $1=$2
+}
+
+function define_string () {
+       eval $1="$2"
+}
+
 #
 # Create a boolean (Yes/No) function for our current menu
 # which calls our local bool function.
@@ -188,13 +210,52 @@ function tristate () {
 #       else in the kernel.
 #
 function dep_tristate () {
-       if [ "$3" = "y" ]; then
-           tristate "$1" "$2"
-       else if [ "$3" = "m" ]; then
-           mod_bool "$1" "$2"
+       ques="$1"
+       var="$2"
+       dep=y
+       shift 2
+       while [ $# -gt 0 ]; do
+               if   [ "$1" = y ]; then
+                       shift
+               elif [ "$1" = m ]; then
+                       dep=m
+                       shift
+               else
+                       dep=n
+                       shift $#
+               fi
+       done
+       if [ "$dep" = y ]; then
+           tristate "$ques" "$var"
+       elif [ "$dep" = m ]; then
+           mod_bool "$ques" "$var"
        else 
-           define_bool "$2" n
-       fi; fi
+           define_tristate "$var" n
+       fi
+}
+
+#
+#   Same as above, but now only Y and N are allowed as dependency
+#   (i.e. third and next arguments).
+#
+function dep_bool () {
+       ques="$1"
+       var="$2"
+       dep=y
+       shift 2
+       while [ $# -gt 0 ]; do
+               if [ "$1" = y ]; then
+                       shift
+               else
+                       dep=n
+                       shift $#
+               fi
+       done
+       if [ "$dep" = y ]; then
+           bool "$ques" "$var"
+       else 
+           define_bool "$var" n
+       fi
 }
 
 #
@@ -633,12 +694,13 @@ function parser(ifile,menu) {
 
                        printf("submenu %s MCmenu%s\n", $0, menu_no) >>menu
 
+                       newmenu = sprintf("MCmenu%d", menu_no);
                        printf( "function MCmenu%s () {\n"\
                                "default=$1\n"\
                                "menu_name %s\n",\
-                                menu_no, $0) >"MCmenu"menu_no
+                                menu_no, $0) >newmenu
 
-                       parser(ifile, "MCmenu"menu_no)
+                       parser(ifile, newmenu)
                }
                else if ($1 ~ "endmenu") {
                        printf("}\n") >>menu
@@ -988,13 +1050,37 @@ save_configuration () {
 
        function tristate () {
                set_x_info "$2" "n"
-               eval define_bool "$2" "$x"
+               eval define_tristate "$2" "$x"
        }
 
        function dep_tristate () {
                set_x_info "$2" "n"
-               if [ "$3" = "m" -a "$x" = "y" ]; then x="m"; fi
-               define_bool "$2" "$x"
+               var="$2"
+               shift 2
+               while [ $# -gt 0 ]; do
+                       if   [ "$1" = y ]; then
+                               shift
+                       elif [ "$1" = m -a "$x" != n ]; then
+                               x=m; shift
+                       else 
+                               x=n; shift $#
+                       fi
+               done
+               define_tristate "$var" "$x"
+       }
+
+       function dep_bool () {
+               set_x_info "$2" "n"
+               var="$2"
+               shift 2
+               while [ $# -gt 0 ]; do
+                       if   [ "$1" = y ]; then
+                               shift
+                       else 
+                               x=n; shift $#
+                       fi
+               done
+               define_bool "$var" "$x"
        }
 
        function int () {
@@ -1015,7 +1101,29 @@ save_configuration () {
                echo "#define $2 \"$x\""        >>$CONFIG_H
        }
 
+       function define_hex () {
+               eval $1="$2"
+                       echo "$1=$2"                    >>$CONFIG
+               echo "#define $1 0x${2##*[x,X]}"        >>$CONFIG_H
+       }
+
+       function define_int () {
+               eval $1="$2"
+               echo "$1=$2"                    >>$CONFIG
+               echo "#define $1 ($2)"          >>$CONFIG_H
+       }
+
+       function define_string () {
+               eval $1="$2"
+               echo "$1=\"$2\""                >>$CONFIG
+               echo "#define $1 \"$2\""        >>$CONFIG_H
+       }
+
        function define_bool () {
+               define_tristate "$1" "$2"
+       }
+
+       function define_tristate () {
                eval $1="$2"
 
                case "$2" in
index 8226fe3a7e477cd4805a9411c7e01e19476db858..adb5e0d41c130df0448098191591b92a35cfb303 100644 (file)
@@ -32,7 +32,7 @@ proc cget { w option } {
 proc vfix { var } {
        global $var
        if [ catch {eval concat $$var} ] {
-               set $var 0
+               set $var 4
        }
 }
 
@@ -42,6 +42,7 @@ proc vfix { var } {
 set CONSTANT_Y 1
 set CONSTANT_M 2
 set CONSTANT_N 0
+set CONSTANT_E 4
 
 #
 # Create a "reference" object to steal colors from.
@@ -67,9 +68,11 @@ proc mainmenu_name { text } {
 
 proc menu_option { w menu_num text } {
        global menus_per_column
-       if { $menu_num <= $menus_per_column } then {
+       global processed_top_level
+       set processed_top_level [expr $processed_top_level + 1]
+       if { $processed_top_level <= $menus_per_column } then {
            set myframe left
-       } elseif { $menu_num <= [expr 2 * $menus_per_column] } then {
+       } elseif { $processed_top_level <= [expr 2 * $menus_per_column] } then {
            set myframe middle
        } else {
            set myframe right
@@ -211,7 +214,7 @@ proc read_config { filename } {
        }
        close $file1
        update_choices
-       update_mainmenu .rdupd
+       update_mainmenu
 }
 proc write_comment { file1 file2 text } {
        puts $file1 ""
@@ -223,17 +226,49 @@ proc write_comment { file1 file2 text } {
        puts $file2 " */"
 }
 
-proc write_tristate { file1 file2 varname variable dep } {
-       if { $variable == 0 } \
-               then { puts $file1 "# $varname is not set"; \
-                      puts $file2 "#undef  $varname"} \
-       elseif { $variable == 2 || ($dep == 2 && $variable == 1) } \
+proc effective_dep { deplist } {
+       global CONFIG_MODULES
+       set depend 1
+       foreach i $deplist {
+               if {$i == 0} then {set depend 0}
+               if {$i == 2 && $depend == 1} then {set depend 2}
+       }
+       if {$depend == 2 && $CONFIG_MODULES == 0} then {set depend 0}
+       return $depend
+}
+
+proc sync_tristate { var dep } {
+       global CONFIG_MODULES
+       if {$dep == 0 && ($var == 1 || $var == 2)} then {
+               set var 0
+       } elseif {$dep == 2 && $var == 1} then {
+               set var 2
+       } elseif {$var == 2 && $CONFIG_MODULES == 0} then {
+               if {$dep == 1} then {set var 1} else {set var 0}
+       }
+       return $var
+}
+
+proc sync_bool { var dep } {
+       set var [sync_tristate $var $dep]
+       if {$dep == 2} then {
+               set var 0
+       }
+       return $var
+}
+
+proc write_tristate { file1 file2 varname variable deplist } {
+       set variable [sync_tristate $variable [effective_dep $deplist]]
+       if { $variable == 1 }\
+               then { puts $file1 "$varname=y"; \
+                      puts $file2 "#define $varname 1" } \
+       elseif { $variable == 2 } \
                then { puts $file1 "$varname=m"; \
                       puts $file2 "#undef  $varname"; \
                       puts $file2 "#define ${varname}_MODULE 1" } \
-       elseif { $variable == 1 && $dep != 2 } \
-               then { puts $file1 "$varname=y"; \
-                      puts $file2 "#define $varname 1" } \
+       elseif { $variable == 0 } \
+               then { puts $file1 "# $varname is not set"; \
+                      puts $file2 "#undef  $varname"} \
        else { \
            puts stdout "ERROR - Attempting to write value for unconfigured variable ($varname)." \
        }
@@ -245,7 +280,7 @@ proc write_int { file1 file2 varname variable dep } {
                       puts $file2 "#undef  $varname"} \
        else {
                puts $file1 "$varname=$variable"; \
-               puts $file2 "#define $varname $variable"; \
+               puts $file2 "#define $varname ($variable)"; \
        }
 }
 
@@ -255,7 +290,8 @@ proc write_hex { file1 file2 varname variable dep } {
                       puts $file2 "#undef  $varname"} \
        else {
                puts $file1 "$varname=$variable"; \
-               puts $file2 "#define $varname 0x$variable"; \
+               puts -nonewline $file2 "#define $varname 0x"; \
+               puts $file2 [exec echo $variable | sed s/^0\[xX\]//]; \
        }
 }
 
@@ -282,11 +318,11 @@ proc option_name {w mnum line text helpidx} {
 proc toggle_switch2 {w mnum line text variable} {
        frame $w.x$line -relief sunken
        radiobutton $w.x$line.y -text "y" -variable $variable -value 1 \
-               -relief groove -width 2 -command "update_menu$mnum .menu$mnum"
+               -relief groove -width 2 -command "update_active"
        radiobutton $w.x$line.m -text "-"  -variable $variable -value 2 \
-               -relief groove -width 2 -command "update_menu$mnum .menu$mnum"
+               -relief groove -width 2 -command "update_active"
        radiobutton $w.x$line.n -text "n"  -variable $variable -value 0 \
-               -relief groove -width 2 -command "update_menu$mnum .menu$mnum"
+               -relief groove -width 2 -command "update_active"
                
        option_name $w $mnum $line $text $variable
                
@@ -296,11 +332,11 @@ proc toggle_switch2 {w mnum line text variable} {
 proc toggle_switch3 {w mnum line text variable} {
        frame $w.x$line -relief sunken
        radiobutton $w.x$line.y -text "y" -variable $variable -value 1 \
-               -relief groove -width 2 -command "update_menu$mnum .menu$mnum"
+               -relief groove -width 2 -command "update_active"
        radiobutton $w.x$line.m -text "m"  -variable $variable -value 2 \
-               -relief groove -width 2 -command "update_menu$mnum .menu$mnum"
+               -relief groove -width 2 -command "update_active"
        radiobutton $w.x$line.n -text "n"  -variable $variable -value 0 \
-               -relief groove -width 2 -command "update_menu$mnum .menu$mnum"
+               -relief groove -width 2 -command "update_active"
                
        option_name $w $mnum $line $text $variable
                
@@ -322,10 +358,14 @@ proc tristate {w mnum line text variable } {
        pack $w.x$line -anchor w -fill both -expand on
 }
 
-proc dep_tristate {w mnum line text variable depend } {
+proc dep_tristate {w mnum line text variable } {
        tristate $w $mnum $line $text $variable
 }
 
+proc dep_bool {w mnum line text variable } {
+       bool $w $mnum $line $text $variable
+}
+
 proc int { w mnum line text variable } {
        frame $w.x$line
        entry $w.x$line.x -width 18 -relief sunken -borderwidth 2 \
@@ -358,6 +398,18 @@ proc minimenu { w mnum line text variable helpidx } {
        pack $w.x$line -anchor w -fill both -expand on
 }
 
+proc submenu { w mnum line text subnum } {
+       frame $w.x$line
+       button $w.x$line.l -text "" -width 15 -relief groove
+       $w.x$line.l configure -activefore [cget $w.x$line.l -fg] \
+               -activeback [cget $w.x$line.l -bg] -state disabled
+       button $w.x$line.m -text "$text" -relief raised -anchor w \
+               -command "catch {destroy .menu$subnum}; menu$subnum .menu$subnum \"$text\""
+       pack $w.x$line.l -side left -fill both
+       pack $w.x$line.m -anchor w -side right -fill both -expand on
+       pack $w.x$line -anchor w -fill both -expand on
+}
+
 proc comment {w line text } {
 #nothing done for comments now.
 }
@@ -417,7 +469,7 @@ ${var}:\\
        #
        frame $w.f2
        button $w.f2.ok -text "OK" \
-               -width 10 -command "destroy $w; focus $oldFocus"
+               -width 10 -command "destroy $w; catch {focus $oldFocus}"
        pack $w.f2.ok -side bottom -pady 6 -anchor n
        pack $w.f2 -side bottom -padx 10 -anchor s
 
@@ -458,6 +510,55 @@ proc wrapup {w }  {
 
 }
 
+proc unregister_active {num} {
+       global active_menus
+       set index [lsearch -exact $active_menus $num]
+       if {$index != -1} then {set active_menus [lreplace $active_menus $index $index]}
+}
+
+proc update_active {} {
+       global active_menus total_menus
+       set max 0
+       if {[llength $active_menus] > 0} then {
+               set max [lindex $active_menus end]
+               update_define [toplevel_menu [lindex $active_menus 0]] $max 0
+       }
+       foreach i $active_menus {
+               if {[winfo exists .menu$i] == 0} then {
+                       unregister_active $i
+               } else {
+                       update_menu$i
+               }
+       }
+       update_define [expr $max + 1] $total_menus 1
+       update_mainmenu
+}
+
+proc configure_entry {w option items} {
+       foreach i $items {
+               $w.$i configure -state $option
+       }
+}
+
+proc validate_int {name val default} {
+       if {([exec echo $val | sed s/^-//g | tr -d \[:digit:\] ] != "")} then {
+               global $name; set $name $default
+       }
+}
+
+proc validate_hex {name val default} {
+       if {([exec echo $val | tr -d \[:xdigit:\] ] != "")} then {
+               global $name; set $name $default
+       }
+}
+
+proc update_define {first last allow_update} {
+       for {set i $first} {$i <= $last} {incr i} {
+               update_define_menu$i
+               if {$allow_update == 1} then update
+       }
+}
+
 #
 # Next set up the particulars for the top level menu, and define a few
 # buttons which we will stick down at the bottom.
@@ -468,3 +569,5 @@ frame .f0.left
 frame .f0.middle
 frame .f0.right
 
+set active_menus [list]
+set processed_top_level 0
index 90e192a55ace64893e685ff3391b5fbfc199d482..2bad7a12fee1a570f9100ede028ab029d94e350f 100644 (file)
@@ -30,8 +30,11 @@ all: ncurses lxdialog
 lxdialog: $(OBJS)
 
 ncurses:
-       @x=`find /lib/ /usr/lib/ /usr/local/lib/ -maxdepth 1 -name 'libncurses.*'` ;\
-       if [ ! "$$x" ]; then \
+       @echo "main() {}" > lxtemp.c
+       @if $(CC) -lncurses lxtemp.c ; then \
+               rm -f lxtemp.c a.out; \
+       else \
+               rm -f lxtemp.c; \
                echo -e "\007" ;\
                echo ">> Unable to find the Ncurses libraries." ;\
                echo ">>" ;\
index f088fee4201395ba5f5229655a411b8d31f0f91c..7ca01f25235779c51160b7c1c0614d39a3ada5ed 100644 (file)
@@ -29,10 +29,12 @@ if { [file readable .config] == 1} then {
        read_config $defaults
 }
 
-update_mainmenu .f0
+update_define 1 $total_menus 0
+update_mainmenu
 
 button .f0.right.save -anchor w -text "Save and Exit" \
-    -command { writeconfig .config include/linux/autoconf.h; wrapup .wrap }
+    -command { catch {exec cp -f .config .config.old}; \
+               writeconfig .config include/linux/autoconf.h; wrapup .wrap }
 
 button .f0.right.quit -anchor w -text "Quit Without Saving" \
     -command { maybe_exit .maybe }
index 89069daad8382ae64d8592903af09e9a065f0570..f1a36bb25be4f86646da57bc647739a10f8741ee 100644 (file)
  *   every architecture and comparing it character-for-character against
  *   the output of the old tkparse.
  *
+ * 07 July 1999, Andrzej M. Krzysztofowicz <ankry@mif.pg.gda.pl>
+ * - kvariables removed; all variables are stored in a single table now
+ * - some elimination of options non-valid for current architecture
+ *   implemented.
+ * - negation (!) eliminated from conditions
+ *
  * TO DO:
  * - xconfig is at the end of its life cycle.  Contact <mec@shout.net> if
  *   you are interested in working on the replacement.
 
 
 /*
- * Transform op_variable to op_kvariable.
- *
- * This works, but it's gross, speed-wise.  It would benefit greatly
- * from a simple hash table that maps names to cfg.
- *
- * Note well: this is actually better than the loop structure xconfig
- * has been staggering along with for three years, which performs
- * this whole procedure inside *another* loop on active conditionals.
+ * Mark variables which are defined anywhere.
  */
-void transform_to_kvariable( struct kconfig * scfg )
+static void mark_variables( struct kconfig * scfg )
 {
     struct kconfig * cfg;
+    int i;
 
+    for ( i = 1; i <= max_varnum; i++ )
+       vartable[i].defined = 0;
     for ( cfg = scfg; cfg != NULL; cfg = cfg->next )
     {
-       struct condition * cond;
-
-       for ( cond = cfg->cond; cond != NULL; cond = cond->next )
+       if ( cfg->token == token_bool
+       ||   cfg->token == token_choice_item
+       ||   cfg->token == token_define_bool
+       ||   cfg->token == token_define_hex
+       ||   cfg->token == token_define_int
+       ||   cfg->token == token_define_string
+       ||   cfg->token == token_define_tristate
+       ||   cfg->token == token_dep_bool
+       ||   cfg->token == token_dep_tristate
+       ||   cfg->token == token_hex
+       ||   cfg->token == token_int
+       ||   cfg->token == token_string
+       ||   cfg->token == token_tristate
+       ||   cfg->token == token_unset )
        {
-           if ( cond->op == op_variable )
+           if ( cfg->nameindex > 0 )   /* paranoid */
            {
-               /* Here's where it gets DISGUSTING. */
-               struct kconfig * cfg1;
-
-               for ( cfg1 = scfg; cfg1 != NULL; cfg1 = cfg1->next )
-               {
-                   if ( cfg1->token == token_bool
-                   ||   cfg1->token == token_choice_item
-                   ||   cfg1->token == token_dep_tristate
-                   ||   cfg1->token == token_hex
-                   ||   cfg1->token == token_int
-                   ||   cfg1->token == token_string
-                   ||   cfg1->token == token_tristate )
-                   {
-                       if ( strcmp( cond->str, cfg1->optionname ) == 0 )
-                       {
-                           cond->op  = op_kvariable;
-                           cond->str = NULL;
-                           cond->cfg = cfg1;
-                           break;
-                       }
-                   }
-               }
+               vartable[cfg->nameindex].defined = 1;
            }
+       }
+    }
+}
 
-#if 0
-           /*
-            * Maybe someday this will be useful, but right now it
-            * gives a lot of false positives on files like
-            * drivers/video/Config.in that are meant for more
-            * than one architecture.  Turn it on if you want to play
-            * with it though; it does work.  -- mec
-            */
-           if ( cond->op == op_variable )
+
+
+static void free_cond( struct condition *cond )
+{
+    struct condition *tmp, *tmp1;
+    for ( tmp = cond; tmp; tmp = tmp1 )
+    {
+       tmp1 = tmp->next;
+       free( (void*)tmp );
+    }
+}
+
+
+
+/*
+ * Remove the bang operator from a condition to avoid priority problems.
+ * "!" has different priorities as "test" command argument and in 
+ * a tk script.
+ */
+static struct condition * remove_bang( struct condition * condition )
+{
+    struct condition * conda, * condb, * prev = NULL;
+
+    for ( conda = condition; conda; conda = conda->next )
+    {
+       if ( conda->op == op_bang && conda->next &&
+          ( condb = conda->next->next ) )
+       {
+           if ( condb->op == op_eq || condb->op == op_neq )
            {
-               if ( strcmp( cond->str, "ARCH"       ) != 0
-               &&   strcmp( cond->str, "CONSTANT_Y" ) != 0
-               &&   strcmp( cond->str, "CONSTANT_M" ) != 0
-               &&   strcmp( cond->str, "CONSTANT_N" ) != 0 )
+               condb->op = (condb->op == op_eq) ? op_neq : op_eq;
+               conda->op = op_nuked;
+               if ( prev )
                {
-                   fprintf( stderr, "warning: $%s used but not defined\n",
-                       cond->str );
+                   prev->next = conda->next;
                }
+               else
+               {
+                   condition = conda->next;
+               }
+               conda->next = NULL;
+               free_cond( conda );
+               conda = condb;
            }
-#endif
        }
+       prev = conda;
     }
+    return condition;
 }
 
 
@@ -103,27 +124,65 @@ void transform_to_kvariable( struct kconfig * scfg )
  * Make a new condition chain by joining the current condition stack with
  * the "&&" operator for glue.
  */
-struct condition * join_condition_stack( struct condition * conditions [],
+static struct condition * join_condition_stack( struct condition * conditions [],
     int depth )
 {
     struct condition * cond_list;
     struct condition * cond_last;
-    int i;
+    int i, is_first = 1;
 
     cond_list = cond_last = NULL;
+
+    for ( i = 0; i < depth; i++ )
+    {
+       if ( conditions[i]->op == op_false )
+       {
+           struct condition * cnew;
+
+           /* It is always false condition */
+           cnew = malloc( sizeof(*cnew) );
+           memset( cnew, 0, sizeof(*cnew) );
+           cnew->op = op_false;
+           cond_list = cond_last = cnew;
+           goto join_done;
+       }
+    }
     for ( i = 0; i < depth; i++ )
     {
        struct condition * cond;
        struct condition * cnew;
+       int add_paren;
+
+       /* omit always true conditions */
+       if ( conditions[i]->op == op_true )
+           continue;
+
+       /* if i have another condition, add an '&&' operator */
+       if ( !is_first )
+       {
+           cnew = malloc( sizeof(*cnew) );
+           memset( cnew, 0, sizeof(*cnew) );
+           cnew->op = op_and;
+           cond_last->next = cnew;
+           cond_last = cnew;
+       }
 
-       /* add a '(' */
-       cnew = malloc( sizeof(*cnew) );
-       memset( cnew, 0, sizeof(*cnew) );
-       cnew->op = op_lparen;
-       if ( cond_last == NULL )
-           { cond_list = cond_last = cnew; }
+       if ( conditions[i]->op != op_lparen )
+       {
+           /* add a '(' */
+           add_paren = 1;
+           cnew = malloc( sizeof(*cnew) );
+           memset( cnew, 0, sizeof(*cnew) );
+           cnew->op = op_lparen;
+           if ( cond_last == NULL )
+               { cond_list = cond_last = cnew; }
+           else
+               { cond_last->next = cnew; cond_last = cnew; }
+       }
        else
-           { cond_last->next = cnew; cond_last = cnew; }
+       {
+           add_paren = 0;
+       }
 
        /* duplicate the chain */
        for ( cond = conditions [i]; cond != NULL; cond = cond->next )
@@ -132,27 +191,23 @@ struct condition * join_condition_stack( struct condition * conditions [],
            cnew->next      = NULL;
            cnew->op        = cond->op;
            cnew->str       = cond->str ? strdup( cond->str ) : NULL;
-           cnew->cfg       = cond->cfg;
-           cond_last->next = cnew;
-           cond_last       = cnew;
+           cnew->nameindex = cond->nameindex;
+           if ( cond_last == NULL )
+               { cond_list = cond_last = cnew; }
+           else
+               { cond_last->next = cnew; cond_last = cnew; }
        }
 
-       /* add a ')' */
-       cnew = malloc( sizeof(*cnew) );
-       memset( cnew, 0, sizeof(*cnew) );
-       cnew->op = op_rparen;
-       cond_last->next = cnew;
-       cond_last = cnew;
-
-       /* if i have another condition, add an '&&' operator */
-       if ( i < depth - 1 )
+       if ( add_paren )
        {
+           /* add a ')' */
            cnew = malloc( sizeof(*cnew) );
            memset( cnew, 0, sizeof(*cnew) );
-           cnew->op = op_and;
+           cnew->op = op_rparen;
            cond_last->next = cnew;
            cond_last = cnew;
        }
+       is_first = 0;
     }
 
     /*
@@ -171,7 +226,7 @@ struct condition * join_condition_stack( struct condition * conditions [],
                cond1e = cond1d->next; if ( cond1e == NULL ) break;
                cond1f = cond1e->next; if ( cond1f == NULL ) break;
 
-               if ( cond1b->op == op_kvariable
+               if ( cond1b->op == op_variable
                && ( cond1c->op == op_eq || cond1c->op == op_neq )
                &&   cond1d->op == op_constant 
                &&   cond1e->op == op_rparen )
@@ -189,8 +244,8 @@ struct condition * join_condition_stack( struct condition * conditions [],
                            cond2f = cond2e->next;
 
                            /* look for match */
-                           if ( cond2b->op == op_kvariable
-                           &&   cond2b->cfg == cond1b->cfg
+                           if ( cond2b->op == op_variable
+                           &&   cond2b->nameindex == cond1b->nameindex
                            &&   cond2c->op == cond1c->op
                            &&   cond2d->op == op_constant
                            &&   strcmp( cond2d->str, cond1d->str ) == 0
@@ -219,64 +274,159 @@ struct condition * join_condition_stack( struct condition * conditions [],
        }
     }
 
+join_done:
     return cond_list;
 }
 
 
 
+static char * current_arch = NULL;
+
 /*
- * This is the main transformation function.
+ * Eliminating conditions with ARCH = <not current>.
  */
-void fix_conditionals( struct kconfig * scfg )
+static struct condition *eliminate_other_arch( struct condition *list )
 {
-    struct kconfig * cfg;
-
-    /*
-     * Transform op_variable to op_kvariable.
-     */
-    transform_to_kvariable( scfg );
-
-    /*
-     * Transform conditions that use variables from "choice" statements.
-     * Choice values appear to the user as a collection of booleans, and the
-     * script can test the individual booleans.  But internally, all I have is
-     * the N-way value of an unnamed temporary for the whole statement.  So I
-     * have to tranform '"$CONFIG_M386" != "y"'
-     * into '"$tmpvar_N" != "CONFIG_M386"'.
-     */
-    for ( cfg = scfg; cfg != NULL; cfg = cfg->next )
+    struct condition *cond1a = list, *cond1b = NULL, *cond1c = NULL, *cond1d = NULL;
+    if ( current_arch == NULL )
+       current_arch = getenv( "ARCH" );
+    if ( current_arch == NULL )
     {
-       struct condition * cond;
-
-       for ( cond = cfg->cond; cond != NULL; cond = cond->next )
+       fprintf( stderr, "error: ARCH undefined\n" );
+       exit( 1 );
+    }
+    if ( cond1a->op == op_variable
+    && ! strcmp( vartable[cond1a->nameindex].name, "ARCH" ) )
+    {
+       cond1b = cond1a->next; if ( cond1b == NULL ) goto done;
+       cond1c = cond1b->next; if ( cond1c == NULL ) goto done;
+       cond1d = cond1c->next;
+       if ( cond1c->op == op_constant && cond1d == NULL )
        {
-           if ( cond->op == op_kvariable && cond->cfg->token == token_choice_item )
+           if ( (cond1b->op == op_eq && strcmp( cond1c->str, current_arch ))
+           ||   (cond1b->op == op_neq && ! strcmp( cond1c->str, current_arch )) )
            {
-               /*
-                * Look two more tokens down for the comparison token.
-                * It has to be "y" for this trick to work.
-                *
-                * If you get this error, don't even think about relaxing the
-                * strcmp test.  You will produce incorrect TK code.  Instead,
-                * look for the place in your Config.in script where you are
-                * comparing a 'choice' variable to a value other than 'y',
-                * and rewrite the comparison to be '= "y"' or '!= "y"'.
-                */
-               struct condition * cond2 = cond->next->next;
-               const char * label;
-
-               if ( strcmp( cond2->str, "y" ) != 0 )
+               /* This is for another architecture */ 
+               cond1a->op = op_false;
+               cond1a->next = NULL;
+               free_cond( cond1b );
+               return cond1a;
+           }
+           else if ( (cond1b->op == op_neq && strcmp( cond1c->str, current_arch ))
+                ||   (cond1b->op == op_eq && ! strcmp( cond1c->str, current_arch )) )
+           {
+               /* This is for current architecture */
+               cond1a->op = op_true;
+               cond1a->next = NULL;
+               free_cond( cond1b );
+               return cond1a;
+           }
+       }
+       else if ( cond1c->op == op_constant && cond1d->op == op_or )
+       {
+           if ( (cond1b->op == op_eq && strcmp( cond1c->str, current_arch ))
+           ||   (cond1b->op == op_neq && ! strcmp( cond1c->str, current_arch )) )
+           {
+               /* This is for another architecture */ 
+               cond1b = cond1d->next;
+               cond1d->next = NULL;
+               free_cond( cond1a );
+               return eliminate_other_arch( cond1b );
+           }
+           else if ( (cond1b->op == op_neq && strcmp( cond1c->str, current_arch ))
+                || (cond1b->op == op_eq && ! strcmp( cond1c->str, current_arch )) )
+           {
+               /* This is for current architecture */
+               cond1a->op = op_true;
+               cond1a->next = NULL;
+               free_cond( cond1b );
+               return cond1a;
+           }
+       }
+       else if ( cond1c->op == op_constant && cond1d->op == op_and )
+       {
+           if ( (cond1b->op == op_eq && strcmp( cond1c->str, current_arch ))
+           ||   (cond1b->op == op_neq && ! strcmp( cond1c->str, current_arch )) )
+           {
+               /* This is for another architecture */
+               int l_par = 0;
+               
+               for ( cond1c = cond1d->next; cond1c; cond1c = cond1c->next )
                {
-                   fprintf( stderr, "tkparse choked in fix_choice_cond\n" );
-                   exit( 1 );
+                   if ( cond1c->op == op_lparen )
+                       l_par++;
+                   else if ( cond1c->op == op_rparen )
+                       l_par--;
+                   else if ( cond1c->op == op_or && l_par == 0 )
+                   /* Expression too complex - don't touch */
+                       return cond1a;
+                   else if ( l_par < 0 )
+                   {
+                       fprintf( stderr, "incorrect condition: programming error ?\n" );
+                       exit( 1 );
+                   }
                }
+               cond1a->op = op_false;
+               cond1a->next = NULL;
+               free_cond( cond1b );
+               return cond1a;
+           }
+           else if ( (cond1b->op == op_neq && strcmp( cond1c->str, current_arch ))
+                || (cond1b->op == op_eq && ! strcmp( cond1c->str, current_arch )) )
+           {
+               /* This is for current architecture */
+               cond1b = cond1d->next;
+               cond1d->next = NULL;
+               free_cond( cond1a );
+               return eliminate_other_arch( cond1b );
+           }
+       }
+    }
+    if ( cond1a->op == op_variable && ! vartable[cond1a->nameindex].defined )
+    {
+       cond1b = cond1a->next; if ( cond1b == NULL ) goto done;
+       cond1c = cond1b->next; if ( cond1c == NULL ) goto done;
+       cond1d = cond1c->next;
 
-               label = cond->cfg->label;
-               cond->cfg  = cond->cfg->cfg_parent;
-               cond2->str = strdup( label );
+       if ( cond1c->op == op_constant
+       && ( cond1d == NULL || cond1d->op == op_and ) ) /*???*/
+       {
+           if ( cond1b->op == op_eq && strcmp( cond1c->str, "" ) )
+           {
+               cond1a->op = op_false;
+               cond1a->next = NULL;
+               free_cond( cond1b );
+               return cond1a;
+           }
+       }
+       else if ( cond1c->op == op_constant && cond1d->op == op_or )
+       {
+           if ( cond1b->op == op_eq && strcmp( cond1c->str, "" ) )
+           {
+               cond1b = cond1d->next;
+               cond1d->next = NULL;
+               free_cond( cond1a );
+               return eliminate_other_arch( cond1b );
            }
        }
     }
+done:
+    return list;
+}
+
+
+
+/*
+ * This is the main transformation function.
+ */
+void fix_conditionals( struct kconfig * scfg )
+{
+    struct kconfig * cfg;
+
+    /*
+     * Transform op_variable to op_kvariable.
+     */
+    mark_variables( scfg );
 
     /*
      * Walk the statement list, maintaining a stack of current conditions.
@@ -290,16 +440,19 @@ void fix_conditionals( struct kconfig * scfg )
     {
        struct condition * cond_stack [32];
        int depth = 0;
+       struct kconfig * prev = NULL;
 
        for ( cfg = scfg; cfg != NULL; cfg = cfg->next )
        {
+           int good = 1;
            switch ( cfg->token )
            {
            default:
                break;
 
            case token_if:
-               cond_stack [depth++] = cfg->cond;
+               cond_stack [depth++] =
+                   remove_bang( eliminate_other_arch( cfg->cond ) );
                cfg->cond = NULL;
                break;
 
@@ -325,6 +478,8 @@ void fix_conditionals( struct kconfig * scfg )
                        case op_or:  cond->op = op_and1; break;
                        case op_neq: cond->op = op_eq;   break;
                        case op_eq:  cond->op = op_neq;  break;
+                       case op_true: cond->op = op_false;break;
+                       case op_false:cond->op = op_true; break;
                        }
                    }
                }
@@ -336,25 +491,109 @@ void fix_conditionals( struct kconfig * scfg )
 
            case token_bool:
            case token_choice_item:
+           case token_choice_header:
            case token_comment:
            case token_define_bool:
+           case token_define_hex:
+           case token_define_int:
+           case token_define_string:
+           case token_define_tristate:
            case token_hex:
            case token_int:
            case token_mainmenu_option:
            case token_string:
            case token_tristate:
+           case token_unset:
                cfg->cond = join_condition_stack( cond_stack, depth );
+               if ( cfg->cond && cfg->cond->op == op_false )
+               {
+                   good = 0;
+                   if ( prev )
+                       prev->next = cfg->next;
+                   else
+                       scfg = cfg->next;
+               }
                break;
 
+           case token_dep_bool:
            case token_dep_tristate:
                /*
                 * Same as the other simple statements, plus an additional
                 * condition for the dependency.
                 */
-               cond_stack [depth] = cfg->cond;
-               cfg->cond = join_condition_stack( cond_stack, depth+1 );
+               if ( cfg->cond )
+               {
+                   cond_stack [depth] = eliminate_other_arch( cfg->cond );
+                   cfg->cond = join_condition_stack( cond_stack, depth+1 );
+               }
+               else
+               {
+                   cfg->cond = join_condition_stack( cond_stack, depth );
+               }
+               if ( cfg->cond && cfg->cond->op == op_false )
+               {
+                   good = 0;
+                   if ( prev )
+                       prev->next = cfg->next;
+                   else
+                       scfg = cfg->next;
+               }
                break;
            }
+           if ( good )
+               prev = cfg;
        }
     }
 }
+
+
+
+#if 0
+void dump_condition( struct condition *list )
+{
+    struct condition *tmp;
+    for ( tmp = list; tmp; tmp = tmp->next )
+    {
+       switch (tmp->op)
+       {
+       default:
+           break;
+       case op_variable:
+           printf( " %s", vartable[tmp->nameindex].name );
+           break;
+       case op_constant: 
+           printf( " %s", tmp->str );
+           break;
+       case op_eq:
+           printf( " =" );
+           break;
+       case op_bang:
+           printf( " !" );
+           break;
+       case op_neq:
+           printf( " !=" );
+           break;
+       case op_and:
+       case op_and1:
+           printf( " -a" );
+           break;
+       case op_or:
+           printf( " -o" );
+           break;
+       case op_true:
+           printf( " TRUE" );
+           break;
+       case op_false:
+           printf( " FALSE" );
+           break;
+       case op_lparen:
+           printf( " (" );
+           break;
+       case op_rparen:
+           printf( " )" );
+           break;
+       }
+    }
+    printf( "\n" );
+}
+#endif
index 279072d7833d91a55d989c45795905dc45175009..4a50a82a44f67599a41ca176b72a3f240962ce56 100644 (file)
  *
  * 23 January 1999, Michael Elizabeth Chastain <mec@shout.net>
  * - Remove bug-compatible code.
+ *
+ * 07 July 1999, Andrzej M. Krzysztofowicz <ankry@mif.pg.gda.pl>
+ * Some bugfixes, including
+ * - disabling "m" options when CONFIG_MODULES is set to "n" as well as "y"
+ *   option in dep_tristate when dependency is set to "m",
+ * - deactivating choices which should not be available,
+ * - basic validation for int and hex introduced if the entered one is not 
+ *   valid,
+ * - updates of all opened menus instead of the active only. I was afraid
+ *   that it would slow down updates, but I don't even see any speed difference
+ *   on my machine. If it slows you can still work with only a single menu
+ *   opened,
+ * - fixed error when focussing non-existent window (especially Help windows),
+ * Higher level submenus implemented.
  */
 
 #include <stdio.h>
+#include <stdlib.h>
 #include <unistd.h>
+#include <string.h>
 #include "tkparse.h"
 
 
-
 /*
  * Total number of menus.
  */
 static int tot_menu_num = 0;
 
-
+/*
+ * Pointers to mainmenu_option and endmenu of each menu.
+ */
+struct kconfig * menu_first [100];
+struct kconfig * menu_last  [100];
 
 /*
  * Generate portion of wish script for the beginning of a submenu.
  * The guts get filled in with the various options.
  */
-static void start_proc( char * label, int menu_num, int flag )
+static void start_proc( char * label, int menu_num, int toplevel )
 {
-    if ( flag )
+    if ( toplevel )
        printf( "menu_option menu%d %d \"%s\"\n", menu_num, menu_num, label );
     printf( "proc menu%d {w title} {\n", menu_num );
-    printf( "\tcatch {destroy $w}\n" );
+    printf( "\tset oldFocus [focus]\n" );
+    if ( menu_first[menu_num]->menu_number != 0 )
+       printf( "\tcatch {focus .menu%d}\n",
+               menu_first[menu_num]->menu_number );
+    printf( "\tcatch {destroy $w; unregister_active %d}\n", menu_num );
     printf( "\ttoplevel $w -class Dialog\n" );
     printf( "\twm withdraw $w\n" );
+    printf( "\tglobal active_menus\n" );
+    printf( "\tset active_menus [lsort -integer [linsert $active_menus end %d]]\n", menu_num );
     printf( "\tmessage $w.m -width 400 -aspect 300 -text \\\n" );
     printf( "\t\t\"%s\"  -relief raised\n", label );
     printf( "\tpack $w.m -pady 10 -side top -padx 10\n" );
@@ -127,16 +152,41 @@ static void start_proc( char * label, int menu_num, int flag )
     /*
      * Attach the "Prev", "Next" and "OK" buttons at the end of the window.
      */
-    printf( "\tset oldFocus [focus]\n" );
     printf( "\tframe $w.f\n" );
-    printf( "\tbutton $w.f.back -text \"Main Menu\" \\\n" );
-    printf( "\t\t-width 15 -command \"destroy $w; focus $oldFocus; update_mainmenu $w\"\n" );
+    if ( toplevel )
+       printf( "\tbutton $w.f.back -text \"Main Menu\" \\\n" );
+    else
+       printf( "\tbutton $w.f.back -text \"OK\" \\\n" );
+    printf( "\t\t-width 15 -command \"catch {focus $oldFocus}; destroy $w; unregister_active %d\"\n",
+       menu_num );
     printf( "\tbutton $w.f.next -text \"Next\" \\\n" );
-    printf( "\t\t-width 15 -command \" destroy $w; focus $oldFocus;  menu%d .menu%d \\\"$title\\\"\"\n", menu_num+1, menu_num+1 );
+    printf( "\t\t-width 15 -command \"catch {focus $oldFocus}; " );
+    /* 
+     * We are checking which windows should be destroyed and which are 
+     * common parrents with the next one. Remember that menu_num field
+     * in mainmenu_option record reports number of its *parent* menu.
+     */
+    if ( menu_num < tot_menu_num
+    && menu_first[menu_num + 1]->menu_number != menu_num )
+    {
+       int to_destr;
+
+       printf( "destroy $w; unregister_active %d; ", menu_num );
+       to_destr = menu_first[menu_num]->menu_number;
+       while ( to_destr > 0 && menu_first[menu_num + 1]->menu_number != to_destr )
+       {
+           printf( "catch {destroy .menu%d}; unregister_active %d; ",
+               to_destr, to_destr );
+           to_destr = menu_first[to_destr]->menu_number;
+       }
+    }
+    printf( "menu%d .menu%d \\\"$title\\\"\"\n",
+       menu_num+1, menu_num+1 );
     if ( menu_num == tot_menu_num )
        printf( "\t$w.f.next configure -state disabled\n" );
     printf( "\tbutton $w.f.prev -text \"Prev\" \\\n" );
-    printf( "\t\t-width 15 -command \" destroy $w; focus $oldFocus; menu%d .menu%d \\\"$title\\\"\"\n", menu_num-1, menu_num-1 );
+    printf( "\t\t-width 15 -command \"catch {focus $oldFocus}; destroy $w; unregister_active %d; menu%d .menu%d \\\"$title\\\"\"\n",
+       menu_num, menu_num-1, menu_num-1 );
     if ( menu_num == 1 )
        printf( "\t$w.f.prev configure -state disabled\n" );
     printf( "\tpack $w.f.back $w.f.next $w.f.prev -side left -expand on\n" );
@@ -177,12 +227,11 @@ static void start_proc( char * label, int menu_num, int flag )
  * a global declaration so we know whether we need to insert one for a
  * given function or not.
  */
-void clear_globalflags( struct kconfig * scfg )
+static void clear_globalflags(void)
 {
-    struct kconfig * cfg;
-
-    for ( cfg = scfg; cfg != NULL; cfg = cfg->next )
-       cfg->global_written = 0;
+    int i;
+    for ( i = 1; i <= max_varnum; i++ )
+       vartable[i].global_written = 0;
 }
 
 
@@ -194,7 +243,7 @@ void clear_globalflags( struct kconfig * scfg )
  */
 void global( const char *var )
 {
-    printf( "\tglobal %s; vfix %s\n", var, var );
+    printf( "\tglobal %s\n", var );
 }
 
 
@@ -207,6 +256,21 @@ void generate_if( struct kconfig * cfg, struct condition * ocond,
     int menu_num, int line_num )
 {
     struct condition * cond;
+    struct dependency * tmp;
+    struct kconfig * cfg1;
+
+    if ( line_num >= -1 )
+    {
+       if ( cfg->token == token_define_bool || cfg->token == token_define_hex
+       ||   cfg->token == token_define_int || cfg->token == token_define_string
+       ||   cfg->token == token_define_tristate || cfg->token == token_unset )
+           return;
+    }
+    else
+    {
+       if ( cfg->token == token_string || cfg->token == token_mainmenu_option )
+           return;
+    }
 
     /*
      * First write any global declarations we need for this conditional.
@@ -219,14 +283,10 @@ void generate_if( struct kconfig * cfg, struct condition * ocond,
            break;
 
        case op_variable:
-           global( cond->str );
-           break;
-
-       case op_kvariable:
-           if ( ! cond->cfg->global_written )
+           if ( ! vartable[cond->nameindex].global_written )
            {
-               cond->cfg->global_written = 1;
-               global( cond->cfg->optionname );
+               vartable[cond->nameindex].global_written = 1;
+               global( vartable[cond->nameindex].name );
            }
            break;
        }
@@ -235,10 +295,10 @@ void generate_if( struct kconfig * cfg, struct condition * ocond,
     /*
      * Now write this option.
      */
-    if ( ! cfg->global_written && cfg->optionname != NULL )
+    if ( cfg->nameindex > 0 && ! vartable[cfg->nameindex].global_written )
     {
-       cfg->global_written = 1;
-       global( cfg->optionname );
+       vartable[cfg->nameindex].global_written = 1;
+       global( vartable[cfg->nameindex].name );
     }
 
     /*
@@ -262,156 +322,310 @@ void generate_if( struct kconfig * cfg, struct condition * ocond,
        case op_rparen: printf( ")"    ); break;
 
        case op_variable:
-           printf( "$%s", cond->str );
-           break;
-
-       case op_kvariable:
-           printf( "$%s", cond->cfg->optionname );
+           printf( "$%s", vartable[cond->nameindex].name );
            break;
 
        case op_constant:
            if      ( strcmp( cond->str, "y" ) == 0 ) printf( "1" );
            else if ( strcmp( cond->str, "n" ) == 0 ) printf( "0" );
            else if ( strcmp( cond->str, "m" ) == 0 ) printf( "2" );
+           else if ( strcmp( cond->str, "" ) == 0 )  printf( "4" );
            else
                printf( "\"%s\"", cond->str );
            break;
        }
     }
-    printf( "} then { " );
+    printf( "} then {" );
 
     /*
      * Generate a procedure call to write the value.
      * This code depends on procedures in header.tk.
      */
-    switch ( cfg->token )
+    if ( line_num >= -1 )
     {
-    default:
-       printf( " }\n" );
-       break;
-
-    case token_bool:
-       printf( ".menu%d.config.f.x%d.y configure -state normal;",
-           menu_num, line_num );
-       printf( ".menu%d.config.f.x%d.n configure -state normal;",
-           menu_num, line_num );
-       printf( ".menu%d.config.f.x%d.l configure -state normal;",
-           menu_num, line_num );
-       printf( "set %s [expr $%s&15];",
-           cfg->optionname, cfg->optionname );
-       printf( "} else { ");
-       printf( ".menu%d.config.f.x%d.y configure -state disabled;",
-           menu_num, line_num );
-       printf( ".menu%d.config.f.x%d.n configure -state disabled;",
-           menu_num, line_num );
-       printf( ".menu%d.config.f.x%d.l configure -state disabled;",
-           menu_num, line_num );
-       printf( "set %s [expr $%s|16];}\n",
-           cfg->optionname, cfg->optionname );
-       break;
+       switch ( cfg->token )
+       {
+       default:
+           printf( " }\n" );
+           break;
 
-    case token_choice_header:
-       fprintf( stderr, "Internal error on token_choice_header\n" );
-       exit( 1 );
+       case token_dep_bool:
+           printf( "\n" );
+           for ( tmp = cfg->depend; tmp; tmp = tmp->next )
+               if ( ! vartable[get_varnum( tmp->name )].global_written )
+               {
+                   global( tmp->name );
+               }
+           printf( "\tset tmpvar_dep [effective_dep [list" );
+           for ( tmp = cfg->depend; tmp; tmp = tmp->next )
+               printf( " $%s", tmp->name );
+           printf( "]];set %s [sync_bool $%s $tmpvar_dep];",
+               vartable[cfg->nameindex].name, vartable[cfg->nameindex].name );
+           printf( "if {$tmpvar_dep != 1} then {" );
+           printf( "configure_entry .menu%d.config.f.x%d disabled {y};",
+               menu_num, line_num );
+           printf( "} else {" );
+           printf( "configure_entry .menu%d.config.f.x%d normal {y};",
+               menu_num, line_num );
+           printf( "}; " );
+       case token_bool:
+           if ( cfg->token == token_bool )
+               printf( "\n\t" );
+           printf( "configure_entry .menu%d.config.f.x%d normal {n l",
+               menu_num, line_num );
+           if ( cfg->token == token_bool )
+               printf( " y" );
+           printf( "}" );
+           printf( "} else {");
+           printf( "configure_entry .menu%d.config.f.x%d disabled {y n l}}\n",
+               menu_num, line_num );
+           break;
 
-    case token_choice_item:
-       fprintf( stderr, "Internal error on token_choice_item\n" );
-       exit( 1 );
+       case token_choice_header:
+           printf( "configure_entry .menu%d.config.f.x%d normal {x l}",
+               menu_num, line_num );
+           printf( "} else {" );
+           printf( "configure_entry .menu%d.config.f.x%d disabled {x l}",
+               menu_num, line_num );
+           printf( "}\n" );
+           break;
 
-    case token_define_bool:
-       printf( "set %s %s } \n",
-           cfg->optionname, cfg->value );
-       break;
+       case token_choice_item:
+           fprintf( stderr, "Internal error on token_choice_item\n" );
+           exit( 1 );
 
-    case token_dep_tristate:
-    case token_tristate:
-       if ( cfg->token == token_dep_tristate )
-       {
-           global( cfg->depend );
-           printf( "if { $%s != 1 && $%s != 0 } then {",
-               cfg->depend, cfg->depend );
-           printf( ".menu%d.config.f.x%d.y configure -state disabled;",
+       case token_dep_tristate:
+           printf( "\n" );
+           for ( tmp = cfg->depend; tmp; tmp = tmp->next )
+               if ( ! vartable[get_varnum( tmp->name )].global_written )
+               {
+                   global( tmp->name );
+               }
+           printf( "\tset tmpvar_dep [effective_dep [list" );
+           for ( tmp = cfg->depend; tmp; tmp = tmp->next )
+               printf( " $%s", tmp->name );
+           printf( "]];set %s [sync_tristate $%s $tmpvar_dep];",
+               vartable[cfg->nameindex].name, vartable[cfg->nameindex].name );
+           printf( "\tif {$tmpvar_dep != 1} then {" );
+           printf( "configure_entry .menu%d.config.f.x%d disabled {y}",
                menu_num, line_num );
            printf( "} else {" );
-           printf( ".menu%d.config.f.x%d.y configure -state normal;",
-               menu_num, line_num);
+           printf( "configure_entry .menu%d.config.f.x%d normal {y}",
+               menu_num, line_num );
            printf( "}; " );
-       }
-       else
-       {
-           printf( ".menu%d.config.f.x%d.y configure -state normal;",
+           printf( "if {$tmpvar_dep == 0} then {" );
+           printf( "configure_entry .menu%d.config.f.x%d disabled {m}",
+               menu_num, line_num );
+           printf( "} else {" );
+           printf( "configure_entry .menu%d.config.f.x%d normal {m}",
+               menu_num, line_num );
+           printf( "}; " );
+       case token_tristate:
+           if ( cfg->token == token_tristate )
+           {
+               printf( "\n\tconfigure_entry .menu%d.config.f.x%d normal {y}; ",
+                   menu_num, line_num );
+           }
+           printf( "if {($CONFIG_MODULES == 1)} then {" );
+           printf( "configure_entry .menu%d.config.f.x%d normal {m}} else {",
+               menu_num, line_num );
+           printf( "configure_entry .menu%d.config.f.x%d disabled {m}}; ",
+               menu_num, line_num );
+           printf( "configure_entry .menu%d.config.f.x%d normal {n l}",
+               menu_num, line_num );
+
+       /*
+        * Or in a bit to the variable - this causes all of the radiobuttons
+        * to be deselected (i.e. not be red).
+        */
+           printf( "} else {" );
+           printf( "configure_entry .menu%d.config.f.x%d disabled {y n m l}}\n",
+               menu_num, line_num );
+           break;
+
+       case token_hex:
+       case token_int:
+       case token_string:
+           printf( ".menu%d.config.f.x%d.x configure -state normal -foreground [ cget .ref -foreground ]; ",
+               menu_num, line_num );
+           printf( ".menu%d.config.f.x%d.l configure -state normal; ",
                menu_num, line_num );
+           printf( "} else {" );
+           printf( ".menu%d.config.f.x%d.x configure -state disabled -foreground [ cget .ref -disabledforeground ]; ",
+               menu_num, line_num );
+           printf( ".menu%d.config.f.x%d.l configure -state disabled}\n",
+               menu_num, line_num );
+           break;
+
+       case token_mainmenu_option:
+           if ( line_num >= 0 )
+           {
+               printf( "configure_entry .menu%d.config.f.x%d normal {m}",
+                   menu_num, line_num );
+               printf( "} else {" );
+               printf( "configure_entry .menu%d.config.f.x%d disabled {m}}\n",
+                   menu_num, line_num );
+           }
+           else
+               printf( ".f0.x%d configure -state normal } else { .f0.x%d configure -state disabled }\n",
+                   menu_num, menu_num );
+           break;
        }
+    }
+    else
+    {
+       switch ( cfg->token )
+       {
+       default:
+           printf( " }\n" );
+           break;
+
+       case token_dep_bool:
+           printf( "\n" );
+           for ( tmp = cfg->depend; tmp; tmp = tmp->next )
+               if ( ! vartable[get_varnum( tmp->name )].global_written )
+               {
+                   global( tmp->name );
+               }
+           printf( "\tset tmpvar_dep [effective_dep [list" );
+           for ( tmp = cfg->depend; tmp; tmp = tmp->next )
+               printf( " $%s", tmp->name );
+           printf( "]];set %s [sync_bool $%s $tmpvar_dep];",
+               vartable[cfg->nameindex].name, vartable[cfg->nameindex].name );
+       case token_bool:
+           if ( cfg->token == token_bool )
+               printf( "\n\t" );
+           printf( "set %s [expr $%s&15]",
+               vartable[cfg->nameindex].name, vartable[cfg->nameindex].name );
+           printf( "} else {");
+           printf( "set %s [expr $%s|16]}\n",
+               vartable[cfg->nameindex].name, vartable[cfg->nameindex].name );
+           break;
 
-       printf( ".menu%d.config.f.x%d.n configure -state normal;",
-           menu_num, line_num );
-       printf( "global CONFIG_MODULES; if {($CONFIG_MODULES == 1)} then { .menu%d.config.f.x%d.m configure -state normal };",
-           menu_num, line_num );
-       printf( ".menu%d.config.f.x%d.l configure -state normal;",
-           menu_num, line_num );
+       case token_choice_header:
+           printf( "} else {" );
+           for ( cfg1  = cfg->next;
+                 cfg1 != NULL && cfg1->token == token_choice_item;
+                 cfg1  = cfg1->next )
+               printf( "set %s 4;", vartable[cfg1->nameindex].name );
+           printf( "}\n" );
+           break;
 
+       case token_choice_item:
+           fprintf( stderr, "Internal error on token_choice_item\n" );
+           exit( 1 );
+
+       case token_define_bool:
+       case token_define_tristate:
+           if ( ! vartable[get_varnum( cfg->value )].global_written )
+           {
+               global( cfg->value );
+           }
+           printf( "set %s $%s }\n",
+               vartable[cfg->nameindex].name, cfg->value );
+           break;
+
+       case token_define_hex:
+       case token_define_int:
+           printf( "set %s %s }\n",
+               vartable[cfg->nameindex].name, cfg->value );
+           break;
+
+       case token_define_string:
+           printf( "set %s \"%s\" }\n",
+               vartable[cfg->nameindex].name, cfg->value );
+           break;
+
+       case token_dep_tristate:
+           printf( "\n" );
+           for ( tmp = cfg->depend; tmp; tmp = tmp->next )
+               if ( ! vartable[get_varnum( tmp->name )].global_written )
+               {
+                   global( tmp->name );
+               }
+           printf( "\tset tmpvar_dep [effective_dep [list" );
+           for ( tmp = cfg->depend; tmp; tmp = tmp->next )
+               printf( " $%s", tmp->name );
+           printf( "]]; set %s [sync_tristate $%s $tmpvar_dep]; ",
+               vartable[cfg->nameindex].name, vartable[cfg->nameindex].name );
+       case token_tristate:
+           if ( cfg->token == token_tristate )
+               printf( "if {($CONFIG_MODULES == 0) && ($%s == 2)} then {set %s 1}; ",
+                   vartable[cfg->nameindex].name,
+                   vartable[cfg->nameindex].name );
        /*
         * Or in a bit to the variable - this causes all of the radiobuttons
         * to be deselected (i.e. not be red).
         */
-       printf( "set %s [expr $%s&15];",
-           cfg->optionname, cfg->optionname );
-       printf( "} else { " );
-       printf( ".menu%d.config.f.x%d.y configure -state disabled;",
-           menu_num, line_num );
-       printf( ".menu%d.config.f.x%d.n configure -state disabled;",
-           menu_num, line_num );
-       printf( ".menu%d.config.f.x%d.m configure -state disabled;",
-           menu_num, line_num );
-       printf( ".menu%d.config.f.x%d.l configure -state disabled;",
-           menu_num, line_num );
+           printf( "set %s [expr $%s&15]",
+               vartable[cfg->nameindex].name, vartable[cfg->nameindex].name );
+           printf( "} else {" );
 
        /*
         * Clear the disable bit to enable the correct radiobutton.
         */
-       printf( "set %s [expr $%s|16];}\n",
-           cfg->optionname, cfg->optionname );
-       break;
+           printf( "set %s [expr $%s|16]}\n",
+               vartable[cfg->nameindex].name, vartable[cfg->nameindex].name );
+           break;
 
-    case token_hex:
-    case token_int:
-    case token_string:
-       printf( ".menu%d.config.f.x%d.x configure -state normal -foreground [ cget .ref -foreground ]; ",
-           menu_num, line_num);
-       printf( ".menu%d.config.f.x%d.l configure -state normal; ",
-           menu_num, line_num);
-       printf( "} else { " );
-       printf( ".menu%d.config.f.x%d.x configure -state disabled -foreground [ cget .ref -disabledforeground ];",
-           menu_num, line_num );
-       printf( ".menu%d.config.f.x%d.l configure -state disabled;}\n",
-           menu_num, line_num );
-       break;
+       case token_hex:
+       case token_int:
+           if ( cfg->value && *cfg->value == '$' )
+           {
+               int index = get_varnum( cfg->value+1 );
+               printf( "\n" );
+               if ( ! vartable[index].global_written )
+               {
+                   global( vartable[index].name );
+               }
+               printf( "\t" );
+           }
+           if ( cfg->token == token_hex )
+               printf( "validate_hex " );
+           else if ( cfg->token == token_int )
+               printf( "validate_int " );
+           printf( "%s \"$%s\" %s}\n",
+               vartable[cfg->nameindex].name, vartable[cfg->nameindex].name,
+               cfg->value );
+           break;
 
-    case token_mainmenu_option:
-       printf( ".f0.x%d configure -state normal } else { .f0.x%d configure -state disabled }\n",
-           menu_num, menu_num );
-       break;
+       case token_unset:
+           printf( "set %s 4}\n", vartable[cfg->nameindex].name );
+           break;
+       }
     }
 }
 
 
-
 /*
  * Generate a line that writes a variable to the output file.
  */
 void generate_writeconfig( struct kconfig * cfg )
 {
     struct condition * cond;
-
+    struct dependency * tmp;
+    
     /*
      * Generate global declaration for this symbol.
      */
     if ( cfg->token != token_comment )
     {
-       if ( ! cfg->global_written )
+       if ( cfg->nameindex > 0 && ! vartable[cfg->nameindex].global_written )
+       {
+           vartable[cfg->nameindex].global_written = 1;
+           global( vartable[cfg->nameindex].name );
+       }
+       if ( cfg->token == token_define_tristate || cfg->token == token_define_bool )
        {
-           cfg->global_written = 1;
-           printf( "\tglobal %s\n", cfg->optionname );
+           if ( ! vartable[get_varnum( cfg->value )].global_written )
+           {
+               vartable[get_varnum( cfg->value )].global_written = 1;
+               global( cfg->value );
+           }
+       }
+       else if ( cfg->nameindex <= 0 && cfg->token == token_choice_header )
+       {
+           printf( "\tglobal tmpvar_%d\n", -(cfg->nameindex) );
        }
     }
 
@@ -426,14 +640,10 @@ void generate_writeconfig( struct kconfig * cfg )
            break;
 
        case op_variable:
-           global( cond->str );
-           break;
-
-       case op_kvariable:
-           if ( ! cond->cfg->global_written )
+           if ( ! vartable[cond->nameindex].global_written )
            {
-               cond->cfg->global_written = 1;
-               global( cond->cfg->optionname );
+               vartable[cond->nameindex].global_written = 1;
+               global( vartable[cond->nameindex].name );
            }
            break;
        }
@@ -442,7 +652,6 @@ void generate_writeconfig( struct kconfig * cfg )
     /*
      * Generate indentation.
      */
-    if ( cfg->token != token_choice_header )
        printf( "\t" );
 
     /*
@@ -466,17 +675,14 @@ void generate_writeconfig( struct kconfig * cfg )
            case op_rparen:    printf( ")"    ); break;
 
            case op_variable:
-               printf( "$%s", cond->str );
-               break;
-
-           case op_kvariable:
-               printf( "$%s", cond->cfg->optionname );
+               printf( "$%s", vartable[cond->nameindex].name );
                break;
 
            case op_constant:
                if      ( strcmp( cond->str, "n" ) == 0 ) printf( "0" );
                else if ( strcmp( cond->str, "y" ) == 0 ) printf( "1" );
                else if ( strcmp( cond->str, "m" ) == 0 ) printf( "2" );
+               else if ( strcmp( cond->str, "" ) == 0 )  printf( "4" );
                else
                    printf( "\"%s\"", cond->str );
                break;
@@ -499,10 +705,8 @@ void generate_writeconfig( struct kconfig * cfg )
 
     case token_bool:
     case token_tristate:
-       if ( cfg->cond )
-           printf( " " );
-       printf( "write_tristate $cfg $autocfg %s $%s $notmod", 
-           cfg->optionname, cfg->optionname );
+       printf( "write_tristate $cfg $autocfg %s $%s [list $notmod]", 
+           vartable[cfg->nameindex].name, vartable[cfg->nameindex].name );
        if ( cfg->cond != NULL )
            printf( " }" );
        printf( "\n" );
@@ -520,12 +724,15 @@ void generate_writeconfig( struct kconfig * cfg )
                  cfg1 != NULL && cfg1->token == token_choice_item;
                  cfg1  = cfg1->next )
            {
-               printf("\tif { $%s == \"%s\" } then { write_tristate $cfg $autocfg %s 1 $notmod } else { write_tristate $cfg $autocfg %s 0 $notmod }\n",
-                   cfg->optionname, cfg1->label,
-                   cfg1->optionname,
-                   cfg1->optionname );
+               printf("\n\tif { $tmpvar_%d == \"%s\" } then { write_tristate $cfg $autocfg %s 1 [list $notmod] } else { write_tristate $cfg $autocfg %s 0 [list $notmod] }",
+                   -(cfg->nameindex), cfg1->label,
+                   vartable[cfg1->nameindex].name,
+                   vartable[cfg1->nameindex].name );
            }
        }
+       if ( cfg->cond != NULL )
+           printf( "}" );
+       printf( "\n" );
        break;
 
     case token_choice_item:
@@ -541,53 +748,74 @@ void generate_writeconfig( struct kconfig * cfg )
        break;
 
     case token_define_bool:
+    case token_define_tristate:
        if ( cfg->cond == NULL )
        {
-           printf( "write_tristate $cfg $autocfg %s $%s $notmod\n",
-               cfg->optionname, cfg->optionname );
+           printf( "write_tristate $cfg $autocfg %s $%s [list $notmod]\n",
+               vartable[cfg->nameindex].name, vartable[cfg->nameindex].name );
        }
        else
        {
-           printf( "write_tristate $cfg $autocfg %s %s $notmod }\n",
-               cfg->optionname, cfg->value );
+           printf( "write_tristate $cfg $autocfg %s $%s [list $notmod] }\n",
+               vartable[cfg->nameindex].name, cfg->value );
        }
        break;
 
+    case token_dep_bool:
     case token_dep_tristate:
-       if ( cfg->cond )
-           printf( " " );
-       printf( "write_tristate $cfg $autocfg %s $%s $%s",
-           cfg->optionname, cfg->optionname, cfg->depend );
+       printf( "write_tristate $cfg $autocfg %s $%s [list",
+           vartable[cfg->nameindex].name, vartable[cfg->nameindex].name );
+       for ( tmp = cfg->depend; tmp; tmp = tmp->next )
+           printf( " $%s", tmp->name );
+       printf( "]" );
        if ( cfg->cond != NULL )
            printf( " }" );
-       printf( " \n" );
+       printf( "\n" );
        break;
 
-    case token_hex:
+    case token_define_hex:
+       printf( "write_hex $cfg $autocfg %s %s $notmod",
+           vartable[cfg->nameindex].name, cfg->value );
+       if ( cfg->cond != NULL )
+           printf( " }" );
+       printf( "\n" );
+       break;
+
+    case token_define_int:
+       printf( "write_int $cfg $autocfg %s %s $notmod",
+           vartable[cfg->nameindex].name, cfg->value );
+       if ( cfg->cond != NULL )
+           printf( " }" );
+       printf( "\n" );
+       break;
+
+    case token_define_string:
+       printf( "write_string $cfg $autocfg %s \"%s\" $notmod",
+           vartable[cfg->nameindex].name, cfg->value );
        if ( cfg->cond != NULL )
-           printf( " " );
+           printf( " }" );
+       printf( "\n" );
+       break;
+
+    case token_hex:
        printf( "write_hex $cfg $autocfg %s $%s $notmod",
-           cfg->optionname, cfg->optionname );
+           vartable[cfg->nameindex].name, vartable[cfg->nameindex].name );
        if ( cfg->cond != NULL )
            printf( " }" );
        printf( "\n" );
        break;
 
     case token_int:
-       if ( cfg->cond != NULL )
-           printf( " " );
        printf( "write_int $cfg $autocfg %s $%s $notmod",
-           cfg->optionname, cfg->optionname );
+           vartable[cfg->nameindex].name, vartable[cfg->nameindex].name );
        if ( cfg->cond != NULL )
            printf( " }" );
        printf( "\n" );
        break;
 
     case token_string:
-       if ( cfg->cond != NULL )
-           printf( " " );
-       printf( "write_string $cfg $autocfg %s $%s $notmod",
-           cfg->optionname, cfg->optionname );
+       printf( "write_string $cfg $autocfg %s \"$%s\" $notmod",
+           vartable[cfg->nameindex].name, vartable[cfg->nameindex].name );
        if ( cfg->cond != NULL )
            printf( " }" );
        printf( "\n" );
@@ -595,6 +823,112 @@ void generate_writeconfig( struct kconfig * cfg )
     }
 }
 
+static void generate_update_var( struct kconfig * scfg, int menu_num )
+{
+    struct kconfig * cfg;
+
+    if ( menu_num>0 )
+    {
+       printf( "proc update_define_menu%d {} {\n", menu_num );
+       printf( "\tupdate_define_mainmenu\n" );
+    }
+    else
+       printf( "proc update_define_mainmenu {} {\n" );
+    clear_globalflags();
+    global( "CONFIG_MODULES" );
+    vartable[ get_varnum( "CONFIG_MODULES" ) ].global_written = 1;
+    for ( cfg = scfg; cfg != NULL; cfg = cfg->next )
+    {
+       if ( cfg->menu_number == menu_num && (cfg->token == token_define_bool || cfg->token == token_define_tristate
+       ||   cfg->token == token_define_hex || cfg->token == token_define_int
+       ||   cfg->token == token_define_string || cfg->token == token_unset 
+       ||   cfg->token == token_tristate) )
+       {
+           if ( ! vartable[cfg->nameindex].global_written )
+           {
+               vartable[cfg->nameindex].global_written = 1;
+               global( vartable[cfg->nameindex].name );
+           }
+       }
+    }
+
+    for ( cfg = scfg; cfg != NULL; cfg = cfg->next )
+    {
+       char tmp[20];
+       struct kconfig * cfg1;
+
+       if ( cfg->menu_number == menu_num )
+       {
+           switch ( cfg->token )
+           {
+           default:
+           case token_choice_item:
+               break;
+           case token_choice_header:
+               sprintf( tmp, "tmpvar_%d", -(cfg->nameindex) );
+               global( tmp );
+               for ( cfg1  = cfg->next;
+                     cfg1 != NULL && cfg1->token == token_choice_item;
+                     cfg1  = cfg1->next )
+               {
+                   vartable[cfg1->nameindex].global_written = 1;
+                   global( vartable[cfg1->nameindex].name );
+                   printf( "\tif {$tmpvar_%d == \"%s\"} then {set %s 1} else {set %s 0}\n",
+                       -(cfg->nameindex), cfg1->label,
+                       vartable[cfg1->nameindex].name,
+                       vartable[cfg1->nameindex].name );
+               }
+               break;
+           case token_bool:
+           case token_define_bool:
+           case token_define_tristate:
+           case token_define_hex:
+           case token_define_int:
+           case token_define_string:
+           case token_dep_bool:
+           case token_dep_tristate:
+           case token_int:
+           case token_hex:
+           case token_mainmenu_option:
+           case token_tristate:
+           case token_unset:
+               if ( cfg->cond != NULL )
+                   generate_if( cfg, cfg->cond, menu_num, -2 );
+               else switch ( cfg->token )
+               {
+               case token_tristate:
+                   printf( "\n\tif {($CONFIG_MODULES == 0)} then {if {($%s == 2)} then {set %s 1}}\n",
+                       vartable[cfg->nameindex].name, vartable[cfg->nameindex].name );
+                   break;
+               case token_define_bool:
+               case token_define_tristate:
+                   if ( ! vartable[get_varnum( cfg->value )].global_written )
+                   {
+                       vartable[get_varnum( cfg->value )].global_written = 1;
+                       global( cfg->value );
+                   }
+                   printf( "\tset %s $%s\n", vartable[cfg->nameindex].name,
+                       cfg->value );
+                   break;
+               case token_define_hex:
+               case token_define_int:
+                   printf( "\tset %s %s\n", vartable[cfg->nameindex].name,
+                       cfg->value );
+                   break;
+               case token_define_string:
+                   printf( "\tset %s \"%s\"\n", vartable[cfg->nameindex].name,
+                       cfg->value );
+                   break;
+               case token_unset:
+                   printf( "\tset %s 4\n", vartable[cfg->nameindex].name );
+               default:
+                   break;
+               }
+           }
+       }
+    }
+    printf( "}\n\n\n" );
+}
 
 
 /*
@@ -603,13 +937,24 @@ void generate_writeconfig( struct kconfig * cfg )
 static void end_proc( struct kconfig * scfg, int menu_num )
 {
     struct kconfig * cfg;
+    int i;
 
     printf( "\n\n\n" );
     printf( "\tfocus $w\n" );
-    printf( "\tupdate_menu%d $w.config.f\n",
-       menu_num );
+    printf( "\tupdate_active\n" );
     printf( "\tglobal winx; global winy\n" );
-    printf( "\tset winx [expr [winfo x .]+30]; set winy [expr [winfo y .]+30]\n" );
+    if ( menu_first[menu_num]->menu_number != 0 )
+    {
+       printf( "\tif {[winfo exists .menu%d] == 0} then ",
+               menu_first[menu_num]->menu_number );
+       printf( "{menu%d .menu%d \"%s\"}\n",
+               menu_first[menu_num]->menu_number, menu_first[menu_num]->menu_number,
+               menu_first[menu_first[menu_num]->menu_number]->label );
+       printf( "\tset winx [expr [winfo x .menu%d]+30]; set winy [expr [winfo y .menu%d]+30]\n",
+               menu_first[menu_num]->menu_number, menu_first[menu_num]->menu_number );
+    }
+    else
+       printf( "\tset winx [expr [winfo x .]+30]; set winy [expr [winfo y .]+30]\n" );
     printf( "\twm geometry $w +$winx+$winy\n" );
 
     /*
@@ -660,27 +1005,12 @@ static void end_proc( struct kconfig * scfg, int menu_num )
      * widgets, and will be called first when the window is mapped,
      * and each time one of the buttons in the window are clicked.
      */
-    printf( "proc update_menu%d {w}  {\n", menu_num );
-    printf( "\tupdate_define\n" );
+    printf( "proc update_menu%d {} {\n", menu_num );
 
     /*
      * Clear all of the booleans that are defined in this menu.
      */
-    clear_globalflags( scfg );
-    for ( cfg = scfg; cfg != NULL; cfg = cfg->next )
-    {
-       if ( cfg->menu_number == menu_num && cfg->token == token_define_bool
-       &&   cfg->optionname  != NULL )
-       {
-           if ( ! cfg->global_written )
-           {
-               cfg->global_written = 1;
-               printf( "\tglobal %s\n", cfg->optionname );
-               printf( "\tset %s 0\n",  cfg->optionname );
-           }
-       }
-    }
-
+    clear_globalflags();
     for ( cfg = scfg; cfg != NULL; cfg = cfg->next )
     {
        if ( cfg->menu_number == menu_num
@@ -688,28 +1018,47 @@ static void end_proc( struct kconfig * scfg, int menu_num )
        &&   cfg->token != token_choice_item )
        {
            if ( cfg->cond != NULL )
+           {
+               int i;
+               if ( (cfg->token == token_tristate || cfg->token == token_dep_tristate)
+               && ! vartable[i = get_varnum( "CONFIG_MODULES" )].global_written )
+               {
+                   global( "CONFIG_MODULES" );
+                   vartable[i].global_written = 1;
+               }
                generate_if( cfg, cfg->cond, cfg->menu_number, cfg->menu_line );
+           }
            else
            {
-               /*
-                * Treat tristate like conditional here.
-                */
-               if ( cfg->token == token_dep_tristate )
+               if ( cfg->token == token_tristate )
                {
-                   global( cfg->depend );
-                   printf( "\tif {$%s != 1 && $%s != 0 } then { .menu%d.config.f.x%d.y configure -state disabled } else { .menu%d.config.f.x%d.y configure -state normal}\n",
-                       cfg->depend, cfg->depend,
+                   if ( ! vartable[cfg->nameindex].global_written )
+                   {
+                       vartable[cfg->nameindex].global_written = 1;
+                       printf( "\tglobal %s\n", vartable[cfg->nameindex].name );
+                   }
+                   if ( ! vartable[i = get_varnum( "CONFIG_MODULES" )].global_written )
+                   {
+                       global( "CONFIG_MODULES" );
+                       vartable[i].global_written = 1;
+                   }
+                   printf( "\n\tif {($CONFIG_MODULES == 1)} then {configure_entry .menu%d.config.f.x%d normal {m}} else {configure_entry .menu%d.config.f.x%d disabled {m}}\n",
                        menu_num, cfg->menu_line,
                        menu_num, cfg->menu_line );
                }
            }
        }
+       else if ( cfg->token == token_mainmenu_option
+            &&   cfg->menu_number == menu_num
+            &&   cfg->cond != NULL )
+       {
+           generate_if( cfg, cfg->cond, menu_num, cfg->menu_line );
+       }
     }
-
     printf("}\n\n\n");
-}
-
 
+    generate_update_var( scfg, menu_num );
+}
 
 /*
  * This is the top level function for generating the tk script.
@@ -718,18 +1067,20 @@ void dump_tk_script( struct kconfig * scfg )
 {
     int menu_depth;
     int menu_num [64];
-    struct kconfig * menu_first [256];
-    struct kconfig * menu_last  [256];
-    int imenu;
+    int imenu, i;
+    int top_level_num = 0;
     struct kconfig * cfg;
     struct kconfig * cfg1 = NULL;
     const char * name = "No Name";
 
     /*
-    * Thread the menu pointers so I can walk each menu separately.
-    */
+     * Mark begin and end of each menu so I can omit submenus when walking
+     * over a parent menu.
+     */
     tot_menu_num = 0;
     menu_depth   = 0;
+    menu_num [0] = 0;
+
     for ( cfg = scfg; cfg != NULL; cfg = cfg->next )
     {
        switch ( cfg->token )
@@ -744,14 +1095,22 @@ void dump_tk_script( struct kconfig * scfg )
        case token_mainmenu_option:
            if ( ++menu_depth >= 64 )
                { fprintf( stderr, "menus too deep\n" ); exit( 1 ); }
-           if ( ++tot_menu_num >= 256 )
+           if ( ++tot_menu_num >= 100 )
                { fprintf( stderr, "too many menus\n" ); exit( 1 ); }
            menu_num   [menu_depth]   = tot_menu_num;
            menu_first [tot_menu_num] = cfg;
            menu_last  [tot_menu_num] = cfg;
+           /*
+            * Note, that menu_number is set to the number of parent 
+            * (upper level) menu.
+            */
+           cfg->menu_number = menu_num[menu_depth - 1];
+           if ( menu_depth == 1 )
+               ++top_level_num;
            break;
 
        case token_endmenu:
+           menu_last [menu_num [menu_depth]] = cfg;
            /* flatten menus with proper scoping */
            if ( --menu_depth < 0 )
                { fprintf( stderr, "unmatched endmenu\n" ); exit( 1 ); }
@@ -760,19 +1119,24 @@ void dump_tk_script( struct kconfig * scfg )
        case token_bool:
        case token_choice_header:
        case token_choice_item:
+       case token_dep_bool:
        case token_dep_tristate:
        case token_hex:
        case token_int:
        case token_string:
        case token_tristate:
+           cfg->menu_number = menu_num[menu_depth];
            if ( menu_depth == 0 )
                { fprintf( stderr, "statement not in menu\n" ); exit( 1 ); }
-           menu_last [menu_num [menu_depth]]->menu_next = cfg;
-           menu_last [menu_num [menu_depth]]            = cfg;
-           cfg->menu_next                               = NULL;
            break;
 
        case token_define_bool:
+       case token_define_hex:
+       case token_define_int:
+       case token_define_string:
+       case token_define_tristate:
+       case token_unset:
+           cfg->menu_number = menu_num[menu_depth];
            break;
        }
     }
@@ -784,7 +1148,21 @@ void dump_tk_script( struct kconfig * scfg )
      *   one blank button
      *   add two to round up for division
      */
-    printf( "set menus_per_column %d\n\n", (tot_menu_num + 4 + 1 + 2) / 3 );
+    printf( "set menus_per_column %d\n", (top_level_num + 4 + 1 + 2) / 3 );
+    printf( "set total_menus %d\n\n", tot_menu_num );
+
+    printf( "proc toplevel_menu {num} {\n" );
+    for ( imenu = 1; imenu <= tot_menu_num; ++imenu )
+    {
+       int parent = 1;
+
+       if ( menu_first[imenu]->menu_number == 0 )
+           parent = menu_first[imenu]->menu_number;
+       else
+           printf( "\tif {$num == %d} then {return %d}\n",
+               imenu, menu_first[imenu]->menu_number );
+    }
+    printf( "\treturn $num\n}\n\n" );
 
     /*
      * Generate the menus.
@@ -793,24 +1171,33 @@ void dump_tk_script( struct kconfig * scfg )
     for ( imenu = 1; imenu <= tot_menu_num; ++imenu )
     {
        int menu_line = 0;
+       int nr_submenu = imenu;
 
-       clear_globalflags( scfg );
-       start_proc( menu_first[imenu]->label, imenu, 1 );
+       clear_globalflags();
+       start_proc( menu_first[imenu]->label, imenu, 
+               !menu_first[imenu]->menu_number );
 
-       for ( cfg = menu_first[imenu]; cfg != NULL; cfg = cfg->menu_next )
+       for ( cfg = menu_first[imenu]->next; cfg != NULL && cfg != menu_last[imenu]; cfg = cfg->next )
        {
-           cfg->menu_number = imenu;
-
            switch ( cfg->token )
            {
            default:
                break;
 
+           case token_mainmenu_option:
+               while ( menu_first[++nr_submenu]->menu_number > imenu )
+                   ;
+               cfg->menu_line = menu_line++;
+               printf( "\tsubmenu $w.config.f %d %d \"%s\" %d\n",
+                   cfg->menu_number, cfg->menu_line, cfg->label, nr_submenu );
+               cfg = menu_last[nr_submenu];
+               break;
+
            case token_bool:
                cfg->menu_line = menu_line++;
                printf( "\tbool $w.config.f %d %d \"%s\" %s\n",
                    cfg->menu_number, cfg->menu_line, cfg->label,
-                   cfg->optionname );
+                   vartable[cfg->nameindex].name );
                break;
 
            case token_choice_header:
@@ -819,54 +1206,61 @@ void dump_tk_script( struct kconfig * scfg )
                 * help text from Documentation/Configure.help.
                 */
                cfg->menu_line = menu_line++;
-               printf( "\tglobal %s\n", cfg->optionname );
-               printf( "\tminimenu $w.config.f %d %d \"%s\" %s %s\n",
+               printf( "\tglobal tmpvar_%d\n", -(cfg->nameindex) );
+               printf( "\tminimenu $w.config.f %d %d \"%s\" tmpvar_%d %s\n",
                    cfg->menu_number, cfg->menu_line, cfg->label,
-                   cfg->optionname, cfg->next->optionname );
+                   -(cfg->nameindex), vartable[cfg->next->nameindex].name );
                printf( "\tmenu $w.config.f.x%d.x.menu\n", cfg->menu_line );
                cfg1 = cfg;
                break;
 
            case token_choice_item:
                /* note: no menu line; uses choice header menu line */
-               printf( "\t$w.config.f.x%d.x.menu add radiobutton -label \"%s\" -variable %s -value \"%s\" -command \"update_menu%d .menu%d.config.f\"\n",
-                   cfg1->menu_line, cfg->label, cfg1->optionname,
-                   cfg->label, cfg1->menu_number, cfg1->menu_number );
+               printf( "\t$w.config.f.x%d.x.menu add radiobutton -label \"%s\" -variable tmpvar_%d -value \"%s\" -command \"update_active\"\n",
+                   cfg1->menu_line, cfg->label, -(cfg1->nameindex),
+                   cfg->label );
+               break;
+
+           case token_dep_bool:
+               cfg->menu_line = menu_line++;
+               printf( "\tdep_bool $w.config.f %d %d \"%s\" %s\n",
+                   cfg->menu_number, cfg->menu_line, cfg->label,
+                   vartable[cfg->nameindex].name );
                break;
 
            case token_dep_tristate:
                cfg->menu_line = menu_line++;
-               printf( "\tdep_tristate $w.config.f %d %d \"%s\" %s %s\n",
+               printf( "\tdep_tristate $w.config.f %d %d \"%s\" %s\n",
                    cfg->menu_number, cfg->menu_line, cfg->label,
-                   cfg->optionname, cfg->depend );
+                   vartable[cfg->nameindex].name );
                break;
 
            case token_hex:
                cfg->menu_line = menu_line++;
                printf( "\thex $w.config.f %d %d \"%s\" %s\n",
                    cfg->menu_number, cfg->menu_line, cfg->label,
-                   cfg->optionname );
+                   vartable[cfg->nameindex].name );
                break;
 
            case token_int:
                cfg->menu_line = menu_line++;
                printf( "\tint $w.config.f %d %d \"%s\" %s\n",
                    cfg->menu_number, cfg->menu_line, cfg->label,
-                   cfg->optionname );
+                   vartable[cfg->nameindex].name );
                break;
 
            case token_string:
                cfg->menu_line = menu_line++;
                printf( "\tistring $w.config.f %d %d \"%s\" %s\n",
                    cfg->menu_number, cfg->menu_line, cfg->label,
-                   cfg->optionname );
+                   vartable[cfg->nameindex].name );
                break;
 
            case token_tristate:
                cfg->menu_line = menu_line++;
                printf( "\ttristate $w.config.f %d %d \"%s\" %s\n",
                    cfg->menu_number, cfg->menu_line, cfg->label,
-                   cfg->optionname );
+                   vartable[cfg->nameindex].name );
                break;
            }
        }
@@ -875,36 +1269,21 @@ void dump_tk_script( struct kconfig * scfg )
     }
 
     /*
-     * The top level menu also needs an update function.  When we exit a
+     * The top level menu also needs an update function.  When we update a
      * submenu, we may need to disable one or more of the submenus on
      * the top level menu, and this procedure will ensure that things are
      * correct.
      */
-    clear_globalflags( scfg );
-    printf( "proc update_mainmenu {w}  {\n" );
-    for ( cfg = scfg; cfg != NULL; cfg = cfg->next )
+    clear_globalflags();
+    printf( "proc update_mainmenu {}  {\n" );
+    for ( imenu = 1; imenu <= tot_menu_num; imenu++ )
     {
-       if ( cfg->token == token_mainmenu_option && cfg->cond != NULL )
-           generate_if( cfg, cfg->cond, cfg->menu_number, cfg->menu_line );
+       if ( menu_first[imenu]->cond != NULL && menu_first[imenu]->menu_number == 0 )
+           generate_if( menu_first[imenu], menu_first[imenu]->cond, imenu, -1 );
     }
     printf( "}\n\n\n" );
 
-#if 0
-    /*
-     * Generate code to set the variables that are "defined".
-     */
-    for ( cfg = config; cfg != NULL; cfg = cfg->next )
-    {
-       if ( cfg->token == token_define_bool )
-       {
-           if ( cfg->cond != NULL ) 
-               generate_if( cfg, cfg->cond, menu_num, cfg->menu_line );
-           else
-               printf( "\twrite_define %s %s\n", cfg->optionname, cfg->value );
-       }
-    }
-    #endif
-
+    clear_globalflags();
     /*
      * Generate code to load the default settings into the variables.
      * The script in tail.tk will attempt to load .config,
@@ -919,26 +1298,49 @@ void dump_tk_script( struct kconfig * scfg )
 
        case token_bool:
        case token_choice_item:
+       case token_dep_bool:
        case token_dep_tristate:
        case token_tristate:
-           printf( "set %s 0\n", cfg->optionname );
+           if ( ! vartable[cfg->nameindex].global_written )
+           {
+               printf( "set %s 0\n", vartable[cfg->nameindex].name );
+               vartable[cfg->nameindex].global_written = 1;
+           }
            break;
 
        case token_choice_header:
-           printf( "set %s \"(not set)\"\n", cfg->optionname );
+           printf( "set tmpvar_%d \"(not set)\"\n", -(cfg->nameindex) );
            break;
 
        case token_hex:
        case token_int:
-           printf( "set %s %s\n", cfg->optionname, cfg->value ? cfg->value : "0");
+           if ( ! vartable[cfg->nameindex].global_written )
+           {
+               printf( "set %s %s\n", vartable[cfg->nameindex].name, cfg->value ? cfg->value : "0" );
+               vartable[cfg->nameindex].global_written = 1;
+           }
            break;
 
        case token_string:
-           printf( "set %s \"%s\"\n", cfg->optionname, cfg->value ? cfg->value : "");
+           if ( ! vartable[cfg->nameindex].global_written )
+           {
+               printf( "set %s \"%s\"\n", vartable[cfg->nameindex].name, cfg->value );
+               vartable[cfg->nameindex].global_written = 1;
+           }
            break;
        }
     }
 
+    /*
+     * Define to an empty value all other variables (which are never defined)
+     */
+    for ( i = 1; i <= max_varnum; i++ )
+    {
+       if ( ! vartable[i].global_written
+       &&   strncmp( vartable[i].name, "CONSTANT_", 9 ) )
+           printf( "set %s 4\n", vartable[i].name );
+    }
+
     /*
      * Generate a function to write all of the variables to a file.
      */
@@ -956,7 +1358,7 @@ void dump_tk_script( struct kconfig * scfg )
     printf( "\tputs $autocfg \" */\"\n" );
     printf( "\tputs $autocfg \"#define AUTOCONF_INCLUDED\"\n" );
 
-    clear_globalflags( scfg );
+    clear_globalflags();
     for ( cfg = scfg; cfg != NULL; cfg = cfg->next )
     {
        switch ( cfg->token )
@@ -968,6 +1370,11 @@ void dump_tk_script( struct kconfig * scfg )
        case token_choice_header:
        case token_comment:
        case token_define_bool:
+       case token_define_hex:
+       case token_define_int:
+       case token_define_string:
+       case token_define_tristate:
+       case token_dep_bool:
        case token_dep_tristate:
        case token_hex:
        case token_int:
@@ -996,7 +1403,8 @@ void dump_tk_script( struct kconfig * scfg )
                  cfg1  = cfg1->next )
            {
                printf( "\tglobal %s; set %s 0\n",
-                   cfg1->optionname, cfg1->optionname );
+                   vartable[cfg1->nameindex].name,
+                   vartable[cfg1->nameindex].name );
            }
        }
     }
@@ -1007,41 +1415,22 @@ void dump_tk_script( struct kconfig * scfg )
     {
        if ( cfg->token == token_choice_header )
        {
-           printf( "\tglobal %s\n", cfg->optionname );
+           printf( "\tglobal tmpvar_%d\n", -(cfg->nameindex) );
+           printf("\tset tmpvar_%d \"%s\"\n", -(cfg->nameindex), cfg->value);
            for ( cfg1  = cfg->next; 
                  cfg1 != NULL && cfg1->token == token_choice_item;
                  cfg1  = cfg1->next )
            {
-               printf( "\tglobal %s\n", cfg1->optionname );
-               printf( "\tif { $%s == 1 } then { set %s \"%s\" }\n",
-                   cfg1->optionname, cfg->optionname, cfg1->label );
+               printf( "\tglobal %s\n", vartable[cfg1->nameindex].name );
+               printf( "\tif { $%s == 1 } then { set tmpvar_%d \"%s\" }\n",
+                   vartable[cfg1->nameindex].name,
+                   -(cfg->nameindex), cfg1->label );
            }
        }
     }
     printf( "}\n\n\n" );
 
-    printf( "proc update_define { } {\n" );
-    clear_globalflags( scfg );
-    for ( cfg = scfg; cfg != NULL; cfg = cfg->next )
-    {
-       if ( cfg->token == token_define_bool )
-       {
-           cfg->global_written = 1;
-           printf( "\tglobal %s\n", cfg->optionname );
-       }
-    }
-
-    for ( cfg = scfg; cfg != NULL; cfg = cfg->next )
-    {
-       if( cfg->token == token_define_bool )
-       {
-           if ( cfg->cond == NULL )
-               printf( "\tset %s %s\n", cfg->optionname, cfg->value );
-           else
-               generate_if( cfg, cfg->cond, -1, 0 );
-       }
-    }
-    printf( "}\n\n\n" );
+    generate_update_var( scfg, 0 );
 
     /*
      * That's it.  We are done.  The output of this file will have header.tk
index 4b593fd0a9119596ae1d93a9060cdd1039ee4cc6..86924a08d82aa019480e411bb126a73642565618 100644 (file)
  * 23 January 1999, Michael Elizabeth Chastain, <mec@shout.net>
  * - Remove bug-compatible code.
  *
+ * 07 July 1999, Andrzej M. Krzysztofowicz, <ankry@mif.pg.gda.pl>
+ * - Submenus implemented,
+ * - plenty of option updating/displaying fixes,
+ * - dep_bool, define_hex, define_int, define_string, define_tristate and
+ *   undef implemented,
+ * - dep_tristate fixed to support multiple dependencies,
+ * - handling of variables with an empty value implemented,
+ * - value checking for int and hex fields,
+ * - more checking during condition parsing; choice variables are treated as
+ *   all others now,
+ *
  * TO DO:
  * - xconfig is at the end of its life cycle.  Contact <mec@shout.net> if
  *   you are interested in working on the replacement.
@@ -51,8 +62,6 @@ static void do_source( const char * );
 int my_strcmp( const char * s1, const char * s2 ) { return strcmp( s1, s2 ); }
 #define strcmp my_strcmp
 
-
-
 /*
  * Report a syntax error.
  */
@@ -64,6 +73,30 @@ static void syntax_error( const char * msg )
 
 
 
+/*
+ * Find index of a specyfic variable in the symbol table.
+ * Create a new entry if it does not exist yet.
+ */
+#define VARTABLE_SIZE 2048
+struct variable vartable[VARTABLE_SIZE];
+int max_varnum = 0;
+
+int get_varnum( char * name )
+{
+    int i;
+    
+    for ( i = 1; i <= max_varnum; i++ )
+       if ( strcmp( vartable[i].name, name ) == 0 )
+           return i;
+    if (max_varnum > VARTABLE_SIZE-1)
+       syntax_error( "Too many variables defined." );
+    vartable[++max_varnum].name = malloc( strlen( name )+1 );
+    strcpy( vartable[max_varnum].name, name );
+    return max_varnum;
+}
+
+
+
 /*
  * Get a string.
  */
@@ -138,6 +171,7 @@ static const char * get_qstring( const char * pnt, char ** label )
 }
 
 
+
 /*
  * Tokenize an 'if' statement condition.
  */
@@ -145,6 +179,7 @@ static struct condition * tokenize_if( const char * pnt )
 {
     struct condition * list;
     struct condition * last;
+    struct condition * prev;
 
     /* eat the open bracket */
     while ( *pnt == ' ' || *pnt == '\t' )
@@ -170,30 +205,53 @@ static struct condition * tokenize_if( const char * pnt )
        cond = malloc( sizeof(*cond) );
        memset( cond, 0, sizeof(*cond) );
        if ( last == NULL )
-           { list = last = cond; }
+           { list = last = cond; prev = NULL; }
        else
-           { last->next = cond; last = cond; }
+           { prev = last; last->next = cond; last = cond; }
 
        /* determine the token value */
        if ( *pnt == '-' && pnt[1] == 'a' )
-           { cond->op = op_and;  pnt += 2; continue; }
+       {
+           if ( ! prev || ( prev->op != op_variable && prev->op != op_constant ) )
+               syntax_error( "incorrect argument" );
+           cond->op = op_and;  pnt += 2; continue;
+       }
 
        if ( *pnt == '-' && pnt[1] == 'o' )
-           { cond->op = op_or;   pnt += 2; continue; }
+       {
+           if ( ! prev || ( prev->op != op_variable && prev->op != op_constant ) )
+               syntax_error( "incorrect argument" );
+           cond->op = op_or;   pnt += 2; continue;
+       }
 
        if ( *pnt == '!' && pnt[1] == '=' )
-           { cond->op = op_neq;  pnt += 2; continue; }
+       {
+           if ( ! prev || ( prev->op != op_variable && prev->op != op_constant ) )
+               syntax_error( "incorrect argument" );
+           cond->op = op_neq;  pnt += 2; continue;
+       }
 
        if ( *pnt == '=' )
-           { cond->op = op_eq;   pnt += 1; continue; }
+       {
+           if ( ! prev || ( prev->op != op_variable && prev->op != op_constant ) )
+               syntax_error( "incorrect argument" );
+           cond->op = op_eq;   pnt += 1; continue;
+       }
 
        if ( *pnt == '!' )
-           { cond->op = op_bang; pnt += 1; continue; }
+       {
+           if ( prev && ( prev->op != op_and && prev->op != op_or
+                     && prev->op != op_bang ) )
+               syntax_error( "incorrect argument" );
+           cond->op = op_bang; pnt += 1; continue;
+       }
 
        if ( *pnt == '"' )
        {
            const char * word;
 
+           if ( prev && ( prev->op == op_variable || prev->op == op_constant ) )
+               syntax_error( "incorrect argument" );
            /* advance to the word */
            pnt++;
            if ( *pnt == '$' )
@@ -217,7 +275,15 @@ static struct condition * tokenize_if( const char * pnt )
                char * str = malloc( pnt - word + 1 );
                memcpy( str, word, pnt - word );
                str [pnt - word] = '\0';
-               cond->str = str;
+               if ( cond->op == op_variable )
+               {
+                   cond->nameindex = get_varnum( str );
+                   free( str );
+               }
+               else /* op_constant */
+               {
+                   cond->str = str;
+               }
            }
 
            pnt++;
@@ -241,6 +307,7 @@ static const char * tokenize_choices( struct kconfig * cfg_choose,
     for ( ; ; )
     {
        struct kconfig * cfg;
+       char * buffer = malloc( 64 );
 
        /* skip whitespace */
        while ( *pnt == ' ' || *pnt == '\t' )
@@ -262,7 +329,8 @@ static const char * tokenize_choices( struct kconfig * cfg_choose,
        pnt = get_string( pnt, &cfg->label );
        while ( *pnt == ' ' || *pnt == '\t' )
            pnt++;
-       pnt = get_string( pnt, &cfg->optionname );
+       pnt = get_string( pnt, &buffer );
+       cfg->nameindex = get_varnum( buffer );
     }
 
     return pnt;
@@ -270,8 +338,6 @@ static const char * tokenize_choices( struct kconfig * cfg_choose,
 
 
 
-
-
 /*
  * Tokenize one line.
  */
@@ -280,6 +346,8 @@ static void tokenize_line( const char * pnt )
     static struct kconfig * last_menuoption = NULL;
     enum e_token token;
     struct kconfig * cfg;
+    struct dependency ** dep_ptr;
+    char * buffer = malloc( 64 );
 
     /* skip white space */
     while ( *pnt == ' ' || *pnt == '\t' )
@@ -313,6 +381,11 @@ static void tokenize_line( const char * pnt )
 
     case 'd':
        match_token( token_define_bool, "define_bool" );
+       match_token( token_define_hex, "define_hex" );
+       match_token( token_define_int, "define_int" );
+       match_token( token_define_string, "define_string" );
+       match_token( token_define_tristate, "define_tristate" );
+       match_token( token_dep_bool, "dep_bool" );
        match_token( token_dep_tristate, "dep_tristate" );
        break;
 
@@ -371,11 +444,13 @@ static void tokenize_line( const char * pnt )
        syntax_error( "bogus 'then'" );
     }
 
+#if 0
     if ( token == token_unset )
     {
        fprintf( stderr, "Ignoring 'unset' command\n" );
        return;
     }
+#endif
 
     if ( token == token_UNKNOWN )
        syntax_error( "unknown command" );
@@ -404,8 +479,9 @@ static void tokenize_line( const char * pnt )
 
     case token_bool:
     case token_tristate:
-       pnt = get_qstring ( pnt, &cfg->label      );
-       pnt = get_string  ( pnt, &cfg->optionname );
+       pnt = get_qstring ( pnt, &cfg->label );
+       pnt = get_string  ( pnt, &buffer );
+       cfg->nameindex = get_varnum( buffer );
        break;
 
     case token_choice_header:
@@ -417,9 +493,7 @@ static void tokenize_line( const char * pnt )
            pnt = get_qstring ( pnt, &choice_list );
            pnt = get_string  ( pnt, &cfg->value  );
 
-           cfg->optionname = malloc( 32 );
-           sprintf( cfg->optionname, "tmpvar_%d", choose_number++ );
-
+           cfg->nameindex = -(choose_number++);
            tokenize_choices( cfg, choice_list );
            free( choice_list );
        }
@@ -436,56 +510,133 @@ static void tokenize_line( const char * pnt )
        break;
 
     case token_define_bool:
-       pnt = get_string( pnt, &cfg->optionname );
+    case token_define_tristate:
+       pnt = get_string( pnt, &buffer );
+       cfg->nameindex = get_varnum( buffer );
        while ( *pnt == ' ' || *pnt == '\t' )
            pnt++;
-       if      ( *pnt == 'n' || *pnt == 'N' ) cfg->value = "0";
-       else if ( *pnt == 'y' || *pnt == 'Y' ) cfg->value = "1";
-       else if ( *pnt == 'm' || *pnt == 'M' ) cfg->value = "2";
+       if ( ( pnt[0] == 'Y'  || pnt[0] == 'M' || pnt[0] == 'N'
+       ||     pnt[0] == 'y'  || pnt[0] == 'm' || pnt[0] == 'n' )
+       &&   ( pnt[1] == '\0' || pnt[1] == ' ' || pnt[1] == '\t' ) )
+       {
+           if      ( *pnt == 'n' || *pnt == 'N' ) cfg->value = strdup( "CONSTANT_N" );
+           else if ( *pnt == 'y' || *pnt == 'Y' ) cfg->value = strdup( "CONSTANT_Y" );
+           else if ( *pnt == 'm' || *pnt == 'M' ) cfg->value = strdup( "CONSTANT_M" );
+       }
+       else if ( *pnt == '$' )
+       {
+           pnt++;
+           pnt = get_string( pnt, &cfg->value );
+       }
        else
        {
            syntax_error( "unknown define_bool value" );
        }
+       get_varnum( cfg->value );
+       break;
+
+    case token_define_hex:
+    case token_define_int:
+       pnt = get_string( pnt, &buffer );
+       cfg->nameindex = get_varnum( buffer );
+       pnt = get_string( pnt, &cfg->value );
        break;
 
+    case token_define_string:
+       pnt = get_string( pnt, &buffer );
+       cfg->nameindex = get_varnum( buffer );
+       pnt = get_qstring( pnt, &cfg->value );
+       break;
+
+    case token_dep_bool:
     case token_dep_tristate:
-       pnt = get_qstring ( pnt, &cfg->label      );
-       pnt = get_string  ( pnt, &cfg->optionname );
+       pnt = get_qstring ( pnt, &cfg->label );
+       pnt = get_string  ( pnt, &buffer );
+       cfg->nameindex = get_varnum( buffer );
 
        while ( *pnt == ' ' || *pnt == '\t' )
            pnt++;
 
-       if ( ( pnt[0] == 'Y'  || pnt[0] == 'M' || pnt[0] == 'N'
-       ||     pnt[0] == 'y'  || pnt[0] == 'm' || pnt[0] == 'n'  )
-       &&   ( pnt[1] == '\0' || pnt[1] == ' ' || pnt[1] == '\t' ) )
-       {
-           /* dep_tristate 'foo' CONFIG_FOO m */
-           if      ( pnt[0] == 'Y' || pnt[0] == 'y' )
-               cfg->depend = strdup( "CONSTANT_Y" );
-           else if ( pnt[0] == 'M' || pnt[0] == 'm' )
-               cfg->depend = strdup( "CONSTANT_M" );
+       dep_ptr = &(cfg->depend);
+
+       do {
+           *dep_ptr = (struct dependency *) malloc( sizeof( struct dependency ) );
+           (*dep_ptr)->next = NULL;
+
+           if ( ( pnt[0] == 'Y'  || pnt[0] == 'M' || pnt[0] == 'N'
+           ||     pnt[0] == 'y'  || pnt[0] == 'm' || pnt[0] == 'n' )
+           &&   ( pnt[1] == '\0' || pnt[1] == ' ' || pnt[1] == '\t' ) )
+           {
+               /* dep_tristate 'foo' CONFIG_FOO m */
+               if      ( pnt[0] == 'Y' || pnt[0] == 'y' )
+                   (*dep_ptr)->name = strdup( "CONSTANT_Y" );
+               else if ( pnt[0] == 'N' || pnt[0] == 'n' )
+                   (*dep_ptr)->name = strdup( "CONSTANT_N" );
+               else
+                   (*dep_ptr)->name = strdup( "CONSTANT_M" );
+               pnt++;
+               get_varnum( (*dep_ptr)->name );
+           }
+           else if ( *pnt == '$' )
+           {
+               pnt++;
+               pnt = get_string( pnt, &(*dep_ptr)->name );
+               get_varnum( (*dep_ptr)->name );
+           }
            else
-               cfg->depend = strdup( "CONSTANT_N" );
-           pnt++;
-       }
-       else if ( *pnt == '$' )
-       {
-           pnt++;
-           pnt = get_string( pnt, &cfg->depend );
-       }
-       else
-       {
-           syntax_error( "can't handle dep_tristate condition" );
-       }
+           {
+               syntax_error( "can't handle dep_bool/dep_tristate condition" );
+           }
+           dep_ptr = &(*dep_ptr)->next;
+           while ( *pnt == ' ' || *pnt == '\t' )
+               pnt++;
+       } while ( *pnt );
 
        /*
-        * Create a conditional for this object's dependency.
+        * Create a conditional for this object's dependencies.
         */
        {
            char fake_if [1024];
-           sprintf( fake_if, "[ \"$%s\" = \"y\" -o \"$%s\" = \"m\" ]; then",
-               cfg->depend, cfg->depend );
-           cfg->cond = tokenize_if( fake_if );
+           struct dependency * dep;
+           struct condition ** cond_ptr;
+           int first = 1;
+
+           cond_ptr = &(cfg->cond);
+           for ( dep = cfg->depend; dep; dep = dep->next )
+           {
+               if ( token == token_dep_tristate
+               && ! strcmp( dep->name, "CONSTANT_M" ) )
+               {
+                   continue;
+               }
+               if ( first )
+               {
+                   first = 0;
+               }
+               else
+               {
+                   *cond_ptr = malloc( sizeof(struct condition) );
+                   memset( *cond_ptr, 0, sizeof(struct condition) );
+                   (*cond_ptr)->op = op_and;
+                   cond_ptr = &(*cond_ptr)->next;
+               }
+               *cond_ptr = malloc( sizeof(struct condition) );
+               memset( *cond_ptr, 0, sizeof(struct condition) );
+               (*cond_ptr)->op = op_lparen;
+               if ( token == token_dep_tristate )
+                   sprintf( fake_if, "[ \"$%s\" = \"y\" -o \"$%s\" = \"m\" -o \"$%s\" = \"\" ]; then",
+                       dep->name, dep->name, dep->name );
+               else
+                   sprintf( fake_if, "[ \"$%s\" = \"y\" -o \"$%s\" = \"\" ]; then",
+                       dep->name, dep->name );
+               (*cond_ptr)->next = tokenize_if( fake_if );
+               while ( *cond_ptr )
+                   cond_ptr = &(*cond_ptr)->next;
+               *cond_ptr = malloc( sizeof(struct condition) );
+               memset( *cond_ptr, 0, sizeof(struct condition) );
+               (*cond_ptr)->op = op_rparen;
+               cond_ptr = &(*cond_ptr)->next;
+           }
        }
        break;
 
@@ -496,15 +647,17 @@ static void tokenize_line( const char * pnt )
 
     case token_hex:
     case token_int:
-       pnt = get_qstring ( pnt, &cfg->label      );
-       pnt = get_string  ( pnt, &cfg->optionname );
-       pnt = get_string  ( pnt, &cfg->value      );
+       pnt = get_qstring ( pnt, &cfg->label );
+       pnt = get_string  ( pnt, &buffer );
+       cfg->nameindex = get_varnum( buffer );
+       pnt = get_string  ( pnt, &cfg->value );
        break;
 
     case token_string:
-       pnt = get_qstring ( pnt, &cfg->label      );
-       pnt = get_string  ( pnt, &cfg->optionname );
-       pnt = get_qstring  ( pnt, &cfg->value      );
+       pnt = get_qstring ( pnt, &cfg->label );
+       pnt = get_string  ( pnt, &buffer );
+       cfg->nameindex = get_varnum( buffer );
+       pnt = get_qstring  ( pnt, &cfg->value );
        break;
 
     case token_if:
@@ -521,8 +674,25 @@ static void tokenize_line( const char * pnt )
        else
            pnt = get_qstring( pnt, &cfg->label );
        break;
-    }
 
+    case token_unset:
+       pnt = get_string( pnt, &buffer );
+       cfg->nameindex = get_varnum( buffer );
+       while ( *pnt == ' ' || *pnt == '\t' )
+           pnt++;
+       while (*pnt)
+       {
+           cfg->next = (struct kconfig *) malloc( sizeof(struct kconfig) );
+           memset( cfg->next, 0, sizeof(struct kconfig) );
+           cfg = cfg->next;
+           cfg->token = token_unset;
+           pnt = get_string( pnt, &buffer );
+           cfg->nameindex = get_varnum( buffer );
+           while ( *pnt == ' ' || *pnt == '\t' )
+               pnt++;
+       }
+       break;
+    }
     return;
 }
 
index 0478effedabd24582eb09758ce9f974c192f443d..ecb31b6548920bac921d58ad7bac17b99e62713d 100644 (file)
@@ -14,6 +14,11 @@ enum e_token
     token_choice_item,
     token_comment, 
     token_define_bool,
+    token_define_hex,
+    token_define_int,
+    token_define_string,
+    token_define_tristate,
+    token_dep_bool,
     token_dep_tristate,
     token_else, 
     token_endmenu,
@@ -46,7 +51,8 @@ enum operator
     op_rparen,
     op_constant,
     op_variable,
-    op_kvariable,
+    op_true,
+    op_false,
     op_nuked
 };
 
@@ -55,21 +61,29 @@ enum operator
  * Some operators take strings:
  *
  *   op_constant   "foo"
- *   op_variable   "$ARCH", "$CONFIG_PMAC"
- *   op_kvariable  "$CONFIG_EXPERIMENTAL"
+ *   op_variable   "$ARCH", "$CONFIG_PMAC", "$CONFIG_EXPERIMENTAL"
  *
  * Most "$..." constructs refer to a variable which is defined somewhere
- * in the script, so they become op_kvariable's instead.  Note that it
- * is legal to test variables which are never defined, such as variables
- * that are meaningful only on other architectures.
+ * in the script.  Note that it is legal to test variables which are never
+ * defined, such as variables that are meaningful only on other architectures.
  */
 
 struct condition
 {
-    struct condition * next;
-    enum operator op;
-    const char * str;          /* op_constant, op_variable */
-    struct kconfig * cfg;      /* op_kvariable */
+    struct condition * next;
+    enum operator      op;
+    const char *       str;            /* op_constant */
+    int                        nameindex;      /* op_variable */
+};
+
+/*
+ * Dependency list for dep_bool, dep_tristate
+ */
+
+struct dependency
+{
+    char *             name;
+    struct dependency *        next;
 };
 
 /*
@@ -80,21 +94,28 @@ struct kconfig
 {
     struct kconfig *   next;
     enum e_token       token;
-    char *             optionname;
+    int                        nameindex;
     char *             label;
     char *             value;
     struct condition * cond;
-    char *             depend;         /* token_dep_tristate */
+    struct dependency *        depend;         /* token_dep_tristate */
     struct kconfig *   cfg_parent;     /* token_choice_item */
 
     /* used only in tkgen.c */
-    char               global_written;
     int                        menu_number;
     int                        menu_line;
     struct kconfig *   menu_next;
 };
 
+struct variable
+{
+    char *     name;
+    char       defined;
+    char       global_written;
+};
 
+extern struct variable vartable[];
+extern int max_varnum;
 
 /*
  * Prototypes
@@ -102,3 +123,4 @@ struct kconfig
 
 extern void fix_conditionals ( struct kconfig * scfg );                /* tkcond.c */
 extern void dump_tk_script   ( struct kconfig * scfg );                /* tkgen.c  */
+extern int get_varnum        ( char * name );                  /* tkparse.c */