]> git.neil.brown.name Git - history.git/commitdiff
Import 2.3.34pre2 2.3.34pre2
authorLinus Torvalds <torvalds@linuxfoundation.org>
Fri, 23 Nov 2007 20:29:22 +0000 (15:29 -0500)
committerLinus Torvalds <torvalds@linuxfoundation.org>
Fri, 23 Nov 2007 20:29:22 +0000 (15:29 -0500)
31 files changed:
MAINTAINERS
MAINTAINERS.orig [new file with mode: 0644]
arch/i386/defconfig
drivers/block/ide.c
drivers/block/pdc202xx.c
drivers/net/Makefile
drivers/usb/Config.in
drivers/usb/README.serial
drivers/usb/acm.c
drivers/usb/audio.c
drivers/usb/bitstream.c [deleted file]
drivers/usb/bitstream.h [new file with mode: 0644]
drivers/usb/cpia.c
drivers/usb/cpia.h
drivers/usb/dabusb.c
drivers/usb/ezusb.c
drivers/usb/firmware.c [deleted file]
drivers/usb/firmware.h [new file with mode: 0644]
drivers/usb/hub.c
drivers/usb/keyboard.c
drivers/usb/mouse.c
drivers/usb/ohci-hcd.c
drivers/usb/ohci-hcd.h
drivers/usb/proc_usb.c
drivers/usb/uhci-debug.c
drivers/usb/uhci.c
drivers/usb/uhci.h
drivers/usb/usb-serial.c
drivers/usb/usb.c
drivers/usb/usb_scsi.c
drivers/usb/uss720.c

index f55bdcd42afebc2df320e4efe2403fcade1de270..950ed588f9071768dffd542e11e9150c6612acbb 100644 (file)
@@ -944,7 +944,7 @@ L:  linux-usb@suse.com
 W:     http://www.linux-usb.org
 S:     Supported
 
-USB HUB AND UHCI DRIVERS
+USB HUB
 P:     Johannes Erdfelt
 M:     jerdfelt@sventech.com
 L:     linux-usb@suse.com
@@ -958,6 +958,13 @@ L: linux-usb@suse.com
 S:     Maintained (not yet usable)
 W:     http://suitenine.com/usb/
 
+USB UHCI DRIVER
+P:     Georg Acher
+M:     usb@in.tum.de
+L:     linux-usb@suse.com 
+W:     http://usb.in.tum.de
+S:     Maintained
+       
 VFAT FILESYSTEM:
 P:     Gordon Chaffee
 M:     chaffee@cs.berkeley.edu
diff --git a/MAINTAINERS.orig b/MAINTAINERS.orig
new file mode 100644 (file)
index 0000000..f55bdcd
--- /dev/null
@@ -0,0 +1,1027 @@
+       List of maintainers and how to submit kernel changes
+
+Please try to follow the guidelines below.  This will make things
+easier on the maintainers.  Not all of these guidelines matter for every
+trivial patch so apply some common sense.
+
+1.     Always _test_ your changes, however small, on at least 4 or
+       5 people, preferably many more.
+
+2.     Try to release a few ALPHA test versions to the net. Announce
+       them onto the kernel channel and await results. This is especially
+       important for device drivers, because often that's the only way
+       you will find things like the fact version 3 firmware needs
+       a magic fix you didn't know about, or some clown changed the
+       chips on a board and not its name.  (Don't laugh!  Look at the
+       SMC etherpower for that.)
+
+3.     Make sure your changes compile correctly in multiple
+       configurations. In particular check that changes work both as a
+       module and built into the kernel.
+
+4.     When you are happy with a change make it generally available for
+       testing and await feedback.
+
+5.     Make a patch available to the relevant maintainer in the list. Use
+       'diff -u' to make the patch easy to merge. Be prepared to get your
+       changes sent back with seemingly silly requests about formatting
+       and variable names.  These aren't as silly as they seem. One
+       job the maintainers (and especially Linus) do is to keep things
+       looking the same. Sometimes this means that the clever hack in
+       your driver to get around a problem actually needs to become a
+       generalized kernel feature ready for next time. See
+       Documentation/CodingStyle for guidance here.
+
+       PLEASE try to include any credit lines you want added with the
+       patch. It avoids people being missed off by mistake and makes
+       it easier to know who wants adding and who doesn't.
+
+       PLEASE document known bugs. If it doesn't work for everything
+       or does something very odd once a month document it.
+
+6.     Make sure you have the right to send any changes you make. If you
+       do changes at work you may find your employer owns the patch
+       not you.
+
+7.     Happy hacking.
+
+               -----------------------------------
+
+Maintainers List (try to look for most precise areas first)
+
+Note: For the hard of thinking, this list is meant to remain in alphabetical
+order. If you could add yourselves to it in alphabetical order that would
+so much easier [Ed]
+
+P: Person
+M: Mail patches to
+L: Mailing list that is relevant to this area
+W: Web-page with status/info
+S: Status, one of the following:
+
+       Supported:      Someone is actually paid to look after this.
+       Maintained:     Someone actually looks after it.
+       Odd Fixes:      It has a maintainer but they don't have time to do
+                       much other than throw the odd patch in. See below..
+       Orphan:         No current maintainer [but maybe you could take the
+                       role as you write your new code].
+       Obsolete:       Old code. Something tagged obsolete generally means
+                       it has been replaced by a better system and you
+                       should be using that.
+
+3C501 NETWORK DRIVER
+P:     Alan Cox
+M:     alan@the.3c501.cabal.tm
+L:     linux-net@vger.rutgers.edu
+S:     Maintained
+
+3C505 NETWORK DRIVER
+P:     Philip Blundell
+M:     Philip.Blundell@pobox.com
+L:     linux-net@vger.rutgers.edu
+S:     Maintained
+
+6PACK NETWORK DRIVER FOR AX.25
+P:     Andreas Koensgen
+M:     ajk@iehk.rwth-aachen.de
+L:     linux-hams@vger.rutgers.edu
+S:     Maintained
+
+8390 NETWORK DRIVERS [WD80x3/SMC-ELITE, SMC-ULTRA, NE2000, 3C503, etc.]
+P:     Paul Gortmaker
+M:     p_gortmaker@yahoo.com
+L:     linux-net@vger.rutgers.edu
+S:     Maintained
+
+ACPI
+P:     Andrew Henroid
+M:     andy_henroid@yahoo.com
+L:     acpi@phobos.fs.tum.de
+W:     http://phobos.fs.tum.de/acpi/index.html
+S:     Maintained
+
+AD1816 SOUND DRIVER
+P:     Thorsten Knabe
+M:     Thorsten Knabe <tek@rbg.informatik.tu-darmstadt.de>
+M:     Thorsten Knabe <tek01@hrzpub.tu-darmstadt.de>
+W:     http://www.student.informatik.tu-darmstadt.de/~tek/projects/linux.html
+W:     http://www.tu-darmstadt.de/~tek01/projects/linux.html
+S:     Maintained
+
+ADVANSYS SCSI DRIVER
+P:     Bob Frey
+M:     linux@advansys.com
+W:     http://www.advansys.com/linux.html
+L:     linux-scsi@vger.rutgers.edu
+S:     Maintained
+
+AEDSP16 DRIVER
+P:     Riccardo Facchetti
+M:     fizban@tin.it
+S:     Maintained
+
+AHA152X SCSI DRIVER
+P:     Juergen E. Fischer
+M:     Juergen Fischer <fischer@et-inf.fho-emden.de>
+L:     linux-scsi@vger.rutgers.edu
+S:     Maintained
+
+APM DRIVER
+P:     Stephen Rothwell
+M:     sfr@linuxcare.com
+L:     linux-laptop@vger.rutgers.edu
+W:     http://linuxcare.com.au/apm/
+S:     Supported
+
+APPLETALK NETWORK LAYER
+P:     Jay Schulist
+M:     Jay.Schulist@spacs.k12.wi.us
+L:     linux-atalk@netspace.org
+S:     Maintained
+
+ARM MFM AND FLOPPY DRIVERS
+P:     Dave Gilbert
+M:     linux@treblig.org
+S:     Maintained
+
+ARM PORT
+P:     Russell King
+M:     linux@arm.linux.org.uk
+L:     linux-arm@vger.rutgers.edu
+W:     http://www.arm.linux.org.uk/~rmk/armlinux.html
+S:     Maintained
+
+ARPD SUPPORT
+P:     Jonathan Layes
+M:     layes@loran.com
+L:     linux-net@vger.rutgers.edu
+S:     Maintained
+
+AX.25 NETWORK LAYER
+P:     Matthias Welwarsky
+M:     dg2fef@afthd.tu-darmstadt.de
+L:     linux-hams@vger.rutgers.edu
+S:     Maintained
+
+BAYCOM/HDLCDRV/SOUNDMODEM DRIVERS FOR AX.25
+P:     Thomas Sailer
+M:     sailer@ife.ee.ethz.ch
+L:     linux-hams@vger.rutgers.edu
+W:     http://www.ife.ee.ethz.ch/~sailer/ham/ham.html
+S:     Maintained
+
+BERKSHIRE PRODUCTS PC WATCHDOG DRIVER
+P:     Kenji Hollis
+M:     kenji@bitgate.com
+W:     http://ftp.bitgate.com/pcwd/
+S:     Maintained
+
+BFS FILE SYSTEM
+P:     Tigran A. Aivazian
+M:     tigran@ocston.org
+L:     linux-kernel@vger.rutgers.edu
+W:     http://www.ocston.org/~tigran/patches/bfs
+S:     Maintained
+
+BUSLOGIC SCSI DRIVER
+P:     Leonard N. Zubkoff
+M:     Leonard N. Zubkoff <lnz@dandelion.com>
+L:     linux-scsi@vger.rutgers.edu
+W:     http://www.dandelion.com/Linux/
+S:     Maintained
+
+CIRRUS LOGIC GENERIC FBDEV DRIVER
+P:     Jeff Garzik
+M:     jgarzik@pobox.com
+L:     linux-fbdev@vuser.vu.union.edu
+S:     Maintained
+
+COMPAQ SMART2 RAID DRIVER
+P:     Charles White   
+M:     Charles White <arrays@compaq.com>
+L:     compaqandlinux@yps.org  
+S:     Maintained
+
+COMPUTONE INTELLIPORT MULTIPORT CARD
+P:     Doug McNash
+P:     Michael H. Warfield
+M:     Doug McNash <dmcnash@computone.com>
+M:     Michael H. Warfield <mhw@wittsend.com>
+W:     http://www.computone.com/
+W:     http://www.wittsend.com/computone.html
+L:     linux-computone@lazuli.wittsend.com
+S:     Supported
+
+CONFIGURE, MENUCONFIG, XCONFIG
+P:     Michael Elizabeth Chastain
+M:     mec@shout.net
+L:     linux-kbuild@torque.net
+S:     Maintained
+
+CONFIGURE.HELP
+P:     Axel Boldt
+M:     boldt@math.ucsb.edu
+S:     Maintained
+
+COSA/SRP SYNC SERIAL DRIVER
+P:     Jan "Yenya" Kasprzak
+M:     kas@fi.muni.cz
+W:     http://www.fi.muni.cz/~kas/cosa/
+S:     Maintained
+
+CREDITS FILE
+P:     John A. Martin
+M:     jam@acm.org
+S:     Maintained
+
+CYCLADES 2X SYNC CARD DRIVER
+P:     Arnaldo Carvalho de Melo
+M:     acme@conectiva.com.br
+W:     http://www.conectiva.com.br/~acme
+L:     cycsyn-devel@bazar.conectiva.com.br
+S:     Maintained
+
+CYCLADES ASYNC MUX DRIVER
+P:     Ivan Passos
+M:     Ivan Passos <ivan@cyclades.com>
+W:     http://www.cyclades.com/
+S:     Supported
+
+DAMA SLAVE for AX.25
+P:     Joerg Reuter
+M:     jreuter@poboxes.com
+W:     http://poboxes.com/jreuter/
+W:     http://qsl.net/dl1bke/
+L:     linux-hams@vger.rutgers.edu
+S:     Maintained
+
+DC390/AM53C974 SCSI driver
+P:     Kurt Garloff
+M:     kurt@garloff.de
+W:     http://www.garloff.de/kurt/linux/dc390/
+S:     Maintained
+
+DECnet NETWORK LAYER
+P:     Steven Whitehouse
+M:     SteveW@ACM.org
+W:     http://www.sucs.swan.ac.uk/~rohan/
+W:     http://www-sigproc.eng.cam.ac.uk/~sjw44/
+L:     netdev@oss.sgi.com
+S:     Maintained
+
+DEVICE NUMBER REGISTRY
+P:     H. Peter Anvin
+M:     hpa@zytor.com
+L:     linux-kernel@vger.rutgers.edu
+S:     Maintained
+
+DIGI INTL. EPCA DRIVER
+P:      Chad Schwartz
+M:      support@dgii.com
+M:      chads@dgii.com
+L:      digilnux@dgii.com
+S:      Maintained
+
+DIGI RIGHTSWITCH NETWORK DRIVER
+P:     Rick Richardson
+M:     rick@dgii.com
+L:     linux-net@vger.rutgers.edu
+W:     http://www.dgii.com/linux/
+S:     Maintained
+
+DISKQUOTA:
+P:     Marco van Wieringen
+M:     mvw@planets.elm.net
+L:     linux-kernel@vger.rutgers.edu
+S:     Maintained
+
+DOUBLETALK DRIVER
+P:     James R. Van Zandt
+M:     jrv@vanzandt.mv.com
+L:     blinux-list@redhat.com
+S:     Maintained
+
+EATA-DMA SCSI DRIVER
+P:     Michael Neuffer
+M:     mike@i-Connect.Net
+L:     linux-eata@i-connect.net, linux-scsi@vger.rutgers.edu
+S:     Maintained
+
+EATA ISA/EISA/PCI SCSI DRIVER
+P:     Dario Ballabio
+M:     dario@milano.europe.dg.com
+L:     linux-scsi@vger.rutgers.edu
+S:     Maintained
+
+EATA-PIO SCSI DRIVER
+P:     Michael Neuffer
+M:     mike@i-Connect.Net
+L:     linux-eata@i-connect.net, linux-scsi@vger.rutgers.edu
+S:     Maintained
+
+ETHEREXPRESS-16 NETWORK DRIVER
+P:     Philip Blundell
+M:     Philip.Blundell@pobox.com
+L:     linux-net@vger.rutgers.edu
+S:     Maintained
+
+ETHERTEAM 16I DRIVER
+P:      Mika Kuoppala
+M:      miku@iki.fi
+S:      Maintained
+
+EXT2 FILE SYSTEM
+P:     Remy Card
+M:     Remy.Card@linux.org
+L:     linux-kernel@vger.rutgers.edu
+S:     Maintained
+
+FILE LOCKING (flock() and fcntl()/lockf())
+P:     Andy Walker
+M:     andy@lysaker.kvaerner.no
+L:     linux-kernel@vger.rutgers.edu
+S:     Maintained
+
+FPU EMULATOR
+P:     Bill Metzenthen
+M:     billm@suburbia.net
+W:     http://suburbia.net/~billm/floating-point/emulator/
+S:     Maintained
+
+FRAME RELAY DLCI/FRAD (Sangoma drivers too)
+P:     Mike McLagan
+M:     mike.mclagan@linux.org
+L:     linux-net@vger.rutgers.edu
+S:     Maintained
+
+FTAPE/QIC-117
+P:     Claus-Justus Heine
+M:     claus@momo.math.rwth-aachen.de
+L:     linux-tape@vger.rutgers.edu
+W:     http://www-math.math.rwth-aachen.de/~LBFM/claus/ftape/
+S:     Maintained
+
+FUTURE DOMAIN TMC-16x0 SCSI DRIVER (16-bit)
+P:     Rik Faith
+M:     faith@cs.unc.edu
+L:     linux-scsi@vger.rutgers.edu
+S:     Odd fixes (e.g., new signatures)
+
+GDT SCSI DISK ARRAY CONTROLLER DRIVER
+P:     Achim Leubner
+M:     achim@vortex.de
+L:     linux-scsi@vger.rutgers.edu
+W:     http://www.icp-vortex.com/
+S:     Supported
+
+HAYES ESP SERIAL DRIVER
+P:     Andrew J. Robinson
+M:     arobinso@nyx.net
+L:     linux-kernel@vger.rutgers.edu
+W:     http://www.nyx.net/~arobinso
+S:     Maintained
+
+HFS FILESYSTEM
+P:      Adrian Sun
+M:      asun@cobaltnet.com
+L:      linux-kernel@vger.rutgers.edu
+S:      Maintained
+
+HIGH-SPEED SCC DRIVER FOR AX.25
+P:     Klaus Kudielka
+M:     oe1kib@oe1kib.ampr.org
+L:     linux-hams@vger.rutgers.edu
+S:     Maintained
+
+HIPPI
+P:     Jes Sorensen
+M:     Jes.Sorensen@cern.ch
+L:     linux-hippi@sunsite.auc.dk
+S:     Maintained
+
+HP100: Driver for HP 10/100 Mbit/s Voice Grade Network Adapter Series
+P:     Jaroslav Kysela
+M:     perex@suse.cz
+S:     Maintained
+
+HPFS FILESYSTEM
+P:     Mikulas Patocka
+M:     mikulas@artax.karlin.mff.cuni.cz
+W:     http://artax.karlin.mff.cuni.cz/~mikulas/vyplody/hpfs/index-e.cgi
+S:     Maintained
+
+i386 BOOT CODE
+P:     Riley H. Williams
+M:     rhw@memalpha.cx
+L:     Linux-Kernel@vger.rutgers.edu
+S:     Maintained
+
+IBM MCA SCSI SUBSYSTEM DRIVER
+P:     Michael Lang
+M:     langa2@kph.uni-mainz.de
+W:     http://www.uni-mainz.de/~langm000/linux.html
+S:     Maintained
+
+IBM ServeRAID RAID DRIVER
+P:      Keith Mitchell
+M:      ipslinux@us.ibm.com
+W:      http://www.developer.ibm.com/welcome/netfinity/serveraid_beta.html
+S:      Supported 
+
+IDE DRIVER [GENERAL]
+P:     Andre Hedrick
+M:     andre@suse.com
+L:     linux-kernel@vger.rutgers.edu
+W:     http://linux.kernel.org/pub/linux/kernel/people/hedrick/
+S:     Supported
+
+IDE/ATAPI CDROM DRIVER
+P:     Jens Axboe
+M:     axboe@image.dk
+L:     linux-kernel@vger.rutgers.edu
+W:     http://www.kernel.dk
+S:     Maintained
+
+IDE/ATAPI TAPE/FLOPPY DRIVERS
+P:     Gadi Oxman
+M:     Gadi Oxman <gadio@netvision.net.il>
+L:     linux-kernel@vger.rutgers.edu
+S:     Maintained
+
+INTEL APIC/IOAPIC, LOWLEVEL X86 SMP SUPPORT
+P:     Ingo Molnar
+M:     mingo@redhat.com
+S:     Maintained
+
+IP MASQUERADING:
+P:     Juanjo Ciarlante
+M:     jjciarla@raiz.uncu.edu.ar
+S:     Maintained
+
+IPX/SPX NETWORK LAYER
+P:     Jay Schulist
+M:     Jay Schulist <Jay.Schulist@spacs.k12.wi.us>
+L:     linux-net@vger.rutgers.edu
+S:     Maintained
+
+IRDA SUBSYSTEM
+P:      Dag Brattli
+M:      Dag Brattli <dagb@cs.uit.no>
+L:      linux-irda@pasta.cs.uit.no
+W:      http://www.cs.uit.no/linux-irda/
+S:      Maintained
+
+ISAPNP
+P:     Jaroslav Kysela
+M:     perex@suse.cz
+S:     Maintained
+
+ISDN SUBSYSTEM (general)
+P:     Fritz Elfert
+M:     fritz@isdn4linux.de
+L:     isdn4linux@listserv.isdn4linux.de
+W:     http://www.isdn4linux.de
+S:     Maintained
+
+ISDN SUBSYSTEM (card drivers)
+P:     Karsten Keil
+M:     kkeil@suse.de
+L:     isdn4linux@listserv.isdn4linux.de
+W:     http://www.isdn4linux.de
+S:     Maintained
+
+JOYSTICK DRIVER
+P:     Vojtech Pavlik
+M:     vojtech@suse.cz
+L:     linux-joystick@atrey.karlin.mff.cuni.cz
+W:     http://www.suse.cz/development/joystick/
+S:     Maintained
+
+KERNEL AUTOMOUNTER (AUTOFS)
+P:     H. Peter Anvin
+M:     hpa@zytor.com
+L:     autofs@linux.kernel.org
+S:     Maintained
+
+KERNEL NFSD
+P:     G. Allen Morris III
+M:     gam3@acm.org
+L:     nfs-devel@linux.kernel.org (Linux NFS)
+W:     http://csua.berkeley.edu/~gam3/knfsd
+S:     Maintained
+
+LAPB module
+P:     Henner Eisen
+M:     eis@baty.hanse.de
+L:     linux-x25@vger.rutgers.edu
+S:     Maintained
+
+LINUX FOR POWERPC
+P:     Cort Dougan
+M:     cort@ppc.kernel.org
+W:     http://www.ppc.kernel.org/
+S:     Maintained
+
+LINUX FOR POWER MACINTOSH
+P:     Paul Mackerras
+M:     paulus@linuxcare.com
+W:     http://www.linuxppc.org/
+L:     linuxppc-dev@lists.linuxppc.org
+S:     Maintained
+
+M68K
+P:     Jes Sorensen
+M:     Jes.Sorensen@cern.ch
+W:     http://www.clark.net/pub/lawrencc/linux/index.html
+L:     linux-m68k@lists.linux-m68k.org
+S:     Maintained
+
+M68K ON APPLE MACINTOSH
+P:     Alan Cox
+M:     Alan.Cox@linux.org
+W:     http://www.mac.linux-m68k.org/home.html
+L:     linux-mac68k@wave.lm.com
+S:     As time permits [Michael confess, you are the mac68k maintainer 8)]
+
+M68K ON HP9000/300
+P:     Philip Blundell
+M:     philb@gnu.org
+W:     http://www.tazenda.demon.co.uk/phil/linux-hp
+S:     Maintained
+
+MIPS
+P:     Ralf Baechle
+M:     ralf@gnu.ai.mit.edu
+W:     http://lena.fnet.fr/
+L:     linux-mips@fnet.fr
+S:     Maintained
+
+MISCELLANEOUS MCA-SUPPORT
+P:     David Weinehall
+M:     tao@acc.umu.se (personal)
+W:     http://www.acc.umu.se/~tao/
+W:     http://www.acc.umu.se/~mcalinux/
+L:     linux-kernel@vger.rutgers.edu
+S:     Maintained
+
+MODULE SUPPORT [GENERAL], KERNELD
+P:     Richard Henderson
+M:     richard@gnu.ai.mit.edu
+L:     linux-kernel@vger.rutgers.edu
+S:     Maintained
+
+MOUSE AND MISC DEVICES [GENERAL]
+P:     Alessandro Rubini
+M:     rubini@ipvvis.unipv.it
+L:     linux-kernel@vger.rutgers.edu
+S:     Maintained
+
+MTRR AND SIMILAR SUPPORT [i386]
+P:     Richard Gooch
+M:     rgooch@atnf.csiro.au
+L:     linux-kernel@vger.rutgers.edu
+W:     http://www.atnf.csiro.au/~rgooch/linux/kernel-patches.html
+S:     Maintained
+
+MULTISOUND SOUND DRIVER
+P:     Andrew Veliath
+M:     andrewtv@usa.net
+S:     Maintained
+
+NCP FILESYSTEM
+P:     Petr Vandrovec
+M:     vandrove@vc.cvut.cz
+P:     Volker Lendecke
+M:     vl@kki.org
+L:     linware@sh.cvut.cz
+S:     Maintained
+
+NETFILTER
+P:     Rusty Russell
+M:     Rusty.Russell@rustcorp.com.au
+W:     http://www.samba.org/netfilter/
+W:     http://netfilter.kernelnotes.org
+W:     http://antarctica.penguincomputing.com/~netfilter/
+L:     netfilter@lists.samba.org
+S:     Supported
+
+NETROM NETWORK LAYER
+P:     Tomi Manninen
+M:     Tomi.Manninen@hut.fi
+L:     linux-hams@vger.rutgers.edu
+S:     Maintained
+
+NETWORK BLOCK DEVICE
+P:     Pavel Machek
+M:     pavel@atrey.karlin.mff.cuni.cz
+S:     Maintained
+
+NETWORKING [GENERAL]
+P:     Networking Teak
+M:     netdev@oss.sgi.com
+L:     linux-net@vger.rutgers.edu
+W:     http://www.uk.linux.org/NetNews.html (2.0 only)
+S:     Maintained
+
+NETWORKING [IPv4/IPv6]
+P:     David S. Miller
+M:     davem@redhat.com
+P:     Andi Kleen
+M:     ak@muc.de
+P:     Alexey Kuznetsov
+M:     kuznet@ms2.inr.ac.ru
+L:     netdev@oss.sgi.com
+S:     Maintained
+
+NFS CLIENT
+P:      Trond Myklebust
+M:      trond.myklebust@fys.uio.no
+L:      linux-kernel@vger.rutgers.edu
+S:      Maintained
+
+NI5010 NETWORK DRIVER
+P:     Jan-Pascal van Best and Andreas Mohr
+M:     jvbest@qv3pluto.leidenuniv.nl (Best)
+M:     100.30936@germany.net (Mohr)
+L:     linux-net@vger.rutgers.edu
+S:     Maintained
+
+NON-IDE/NON-SCSI CDROM DRIVERS [GENERAL] (come on, crew - mark your responsibility)
+P:     Eberhard Moenkeberg
+M:     emoenke@gwdg.de
+L:     linux-kernel@vger.rutgers.edu
+S:     Maintained
+
+OLYMPIC NETWORK DRIVER
+P:     Peter De Shrijver
+M:     p2@ace.ulyssis.sutdent.kuleuven.ac.be   
+P:     Mike Phillips
+M:     phillim@amtrak.com
+L:     linux-net@vger.rutgers.edu
+L:     linux-tr@emissary.aus-etc.com
+W:     http://www.linuxtr.net
+S:     Maintained
+
+OPL3-SA2, SA3, and SAx DRIVER
+P:     Scott Murray
+M:     scottm@interlog.com
+L:     linux-sound@vger.rutgers.edu
+S:     Maintained
+
+PARALLEL PORT SUPPORT
+P:     Phil Blundell
+M:     Philip.Blundell@pobox.com
+P:     Tim Waugh
+M:     tim@cyberelk.demon.co.uk
+P:     David Campbell
+M:     campbell@torque.net
+P:     Andrea Arcangeli
+M:     andrea@e-mind.com
+L:     linux-parport@torque.net
+W:     http://www.cyberelk.demon.co.uk/parport.html
+S:     Maintained
+
+PARIDE DRIVERS FOR PARALLEL PORT IDE DEVICES
+P:     Grant Guenther
+M:     grant@torque.net
+L:     linux-parport@torque.net
+W:     http://www.torque.net/linux-pp.html
+S:     Maintained
+
+PCI ID DATABASE
+P:     Jens Maurer
+M:     jmaurer@cck.uni-kl.de
+S:     Maintained
+
+PCI SOUND DRIVERS (ES1370, ES1371 and SONICVIBES)
+P:     Thomas Sailer
+M:     sailer@ife.ee.ethz.ch
+L:     linux-sound@vger.rutgers.edu
+W:     http://www.ife.ee.ethz.ch/~sailer/linux/pciaudio.html
+S:     Maintained
+
+PCI SUBSYSTEM
+P:     Martin Mares
+M:     mj@suse.cz
+L:     linux-kernel@vger.rutgers.edu
+S:     Maintained
+
+PCMCIA SUBSYSTEM
+P:     David Hinds
+M:     dhinds@zen.stanford.edu
+L:     linux-kernel@vger.rutgers.edu
+W:     http://pcmcia.sourceforge.org
+S:     Maintained
+
+PCNET32 NETWORK DRIVER
+P:     Thomas Bogendörfer
+M:     tsbogend@alpha.franken.de
+L:     linux-net@vger.rutgers.edu
+S:     Maintained
+
+PNP SUPPORT
+P:     Tom Lees
+M:     tom@lpsg.demon.co.uk
+L:     pnp-users@ferret.lmh.ox.ac.uk
+L:     pnp-devel@ferret.lmh.ox.ac.uk
+W:     http://www-jcr.lmh.ox.ac.uk/~pnp/
+S:     Maintained
+
+PPP PROTOCOL DRIVERS AND COMPRESSORS
+P:     Al Longyear
+M:     longyear@pobox.com
+L:     linux-ppp@vger.rutgers.edu
+S:     Maintained
+
+PROMISE DC4030 CACHING DISK CONTROLLER DRIVER
+P:     Peter Denison
+M:     promise@pnd-pc.demon.co.uk
+W:     http://www.pnd-pc.demon.co.uk/promise/
+S:     Maintained
+
+RAYLINK/WEBGEAR 802.11 WIRELESS LAN DRIVER
+P:     Corey Thomas
+M:     corey@world.std.com
+L:     linux-kernel@vger.rutgers.edu
+S:     Maintained
+
+REAL TIME CLOCK DRIVER
+P:     Paul Gortmaker
+M:     p_gortmaker@yahoo.com
+L:     linux-kernel@vger.rutgers.edu
+S:     Maintained
+
+ROSE NETWORK LAYER
+P:     Frederic Rible
+M:     frible@teaser.fr
+L:     linux-hams@vger.rutgers.edu
+S:     Maintained
+
+RISCOM8 DRIVER
+P:     Dmitry Gorodchanin
+M:     pgmdsg@ibi.com
+L:     linux-kernel@vger.rutgers.edu
+S:     Maintained
+
+SBPCD CDROM DRIVER
+P:     Eberhard Moenkeberg
+M:     emoenke@gwdg.de
+L:     linux-kernel@vger.rutgers.edu
+S:     Maintained
+
+SCSI CDROM DRIVER
+P:     Jens Axboe
+M:     axboe@image.dk
+L:     linux-scsi@vger.rutgers.edu
+W:     http://www.kernel.dk
+S:     Maintained
+
+SCSI SG DRIVER
+P:     Doug Gilbert
+M:     dgilbert@interlog.com
+L:     linux-scsi@vger.rutgers.edu
+W:     http://www.torque.net/sg
+S:     Maintained
+
+SCSI SUBSYSTEM
+L:     linux-scsi@vger.rutgers.edu
+S:     Unmaintained
+
+SCSI TAPE DRIVER
+P:     Kai Mdkisara
+M:     Kai.Makisara@metla.fi
+L:     linux-scsi@vger.rutgers.edu
+S:     Maintained
+
+SGI VISUAL WORKSTATION 320 AND 540
+P:     Bent Hagemark
+M:     bh@sgi.com
+P:     Ingo Molnar
+M:     mingo@redhat.com
+S:     Maintained
+
+SIS 900/7016 FAST ETHERNET DRIVER
+P:     Ollie Lho
+M:     ollie@sis.com.tw
+L:     linux-net@vger.rutgers.edu
+S:     Supported
+
+SMB FILESYSTEM
+P:     Andrew Tridgell
+M:     tridge@samba.org
+W:     http://samba.org/
+L:     samba@samba.org
+S:     Maintained
+
+SMP: (except SPARC)
+P:     Linus Torvalds
+M:     torvalds@transmeta.com
+L:     linux-smp@vger.rutgers.edu
+S:     Maintained
+
+SONIC NETWORK DRIVER
+P:     Thomas Bogendoerfer
+M:     tsbogend@alpha.franken.de
+L:     linux-net@vger.rutgers.edu
+S:     Maintained
+
+SOUND
+P:     Alan Cox
+M:     alan@redhat.com
+S:     Supported
+
+SPARC:
+P:     David S. Miller
+M:     davem@redhat.com
+P:     Eddie C. Dost
+M:     ecd@skynet.be
+P:     Jakub Jelinek
+M:     jj@sunsite.ms.mff.cuni.cz
+P:     Anton Blanchard
+M:     anton@progsoc.uts.edu.au
+L:     sparclinux@vger.rutgers.edu
+L:     ultralinux@vger.rutgers.edu
+W:     http://ultra.linux.cz
+W:     http://www.geog.ubc.ca/s_linux.html
+S:     Maintained
+
+SPECIALIX IO8+ MULTIPORT SERIAL CARD DRIVER
+P:     Roger Wolff
+M:     R.E.Wolff@BitWizard.nl
+M:     io8-linux@specialix.co.uk
+L:     linux-kernel@vger.rutgers.edu ?
+S:     Supported
+
+SPX NETWORK LAYER
+P:     Jay Schulist
+M:     Jay.Schulist@spacs.k12.wi.us
+L:     linux-net@vger.rutgers.edu
+S:     Supported
+
+STALLION TECHNOLOGIES MULTIPORT SERIAL BOARDS
+M:     support@stallion.oz.au
+W:     http://www.stallion.com
+S:     Supported
+
+STARMODE RADIO IP (STRIP) PROTOCOL DRIVER
+W:     http://mosquitonet.Stanford.EDU/strip.html
+S:     Unsupported ?
+
+SUPERH
+P:     Niibe Yutaka
+M:     gniibe@chroot.org
+P:     Kazumoto Kojima
+M:     kkojima@rr.iij4u.or.jp
+L:     linux-sh@m17n.org
+W:     http://www.m17n.org/linux-sh/
+W:     http://www.rr.iij4u.or.jp/~kkojima/linux-sh4.html
+S:     Maintained
+
+SVGA HANDLING
+P:     Martin Mares
+M:     mj@atrey.karlin.mff.cuni.cz
+L:     linux-video@atrey.karlin.mff.cuni.cz
+S:     Maintained
+
+SYSV FILESYSTEM
+P:     Krzysztof G. Baranowski
+M:     kgb@manjak.knm.org.pl
+S:     Maintained
+
+TLAN NETWORK DRIVER
+P:     Torben Mathiasen
+M:     torben.mathiasen@compaq.com
+L:     tlan@vuser.vu.union.edu
+S:     Maintained
+
+TOKEN-RING NETWORK DRIVER
+P:     Paul Norton
+M:     pnorton@ieee.org
+L:     linux-net@vger.rutgers.edu
+L:     linux-tr@linuxtr.net
+S:     Maintained
+
+TMS380 TOKEN-RING NETWORK DRIVER
+P:     Adam Fritzler
+M:     mid@auk.cx
+L:     linux-tr@linuxtr.net
+W:     http://www.auk.cx/tms380tr/
+S:     Maintained
+
+U14-34F SCSI DRIVER
+P:     Dario Ballabio
+M:     dario@milano.europe.dg.com
+L:     linux-scsi@vger.rutgers.edu
+S:     Maintained
+
+UDF FILESYSTEM
+P:     Ben Fennema
+M:     bfennema@falcon.csc.calpoly.edu
+P:     Dave Boynton
+M:     dave@trylinux.com
+L:     linux_udf@hootie.lvld.hp.com
+W:     http://www.trylinux.com/projects/udf/index.html
+S:     Maintained
+
+UMSDOS FILESYSTEM
+P:     Matija Nalis
+M:     Matija Nalis <mnalis-umsdos@voyager.hr>
+L:     linux-kernel@vger.rutgers.edu
+W:     http://www.voyager.hr/~mnalis/umsdos/
+S:     Maintained
+
+UNIFORM CDROM DRIVER
+P:     Jens Axboe
+M:     axboe@image.dk
+L:     linux-kernel@vger.rutgers.edu
+W:     http://www.kernel.dk
+S:     Maintained
+
+USB SUBSYSTEM
+P:     Randy Dunlap
+M:     randy.dunlap@intel.com
+L:     linux-usb@suse.com
+W:     http://www.linux-usb.org
+S:     Supported
+
+USB HUB AND UHCI DRIVERS
+P:     Johannes Erdfelt
+M:     jerdfelt@sventech.com
+L:     linux-usb@suse.com
+S:     Maintained
+
+USB OHCI DRIVER
+P:     Gregory P. Smith
+M:     greg@electricrain.com
+M:     greg@suitenine.com
+L:     linux-usb@suse.com
+S:     Maintained (not yet usable)
+W:     http://suitenine.com/usb/
+
+VFAT FILESYSTEM:
+P:     Gordon Chaffee
+M:     chaffee@cs.berkeley.edu
+L:     linux-kernel@vger.rutgers.edu
+W:     http://bmrc.berkeley.edu/people/chaffee
+S:     Maintained
+
+VIA 82Cxxx AUDIO DRIVER
+P:     Jeff Garzik
+M:     jgarzik@pobox.com
+S:     Maintained
+
+VIDEO FOR LINUX
+P:     Alan Cox
+M:     Alan.Cox@linux.org
+W:     http://roadrunner.swansea.linux.org.uk/v4l.shtml
+S:     Maintained
+
+WAN ROUTER & SANGOMA WANPIPE DRIVERS & API (X.25, FRAME RELAY, PPP, CISCO HDLC)
+P:     Jaspreet Singh
+M:     jaspreet@sangoma.com
+M:     dm@sangoma.com
+W:     http://www.sangoma.com
+S:     Supported
+
+WAVELAN NETWORK DRIVER & WIRELESS EXTENSIONS
+P:     Jean Tourrilhes
+M:     jt@hpl.hp.com
+W:     http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/
+S:     Maintained
+
+WD7000 SCSI DRIVER
+P:     Miroslav Zagorac
+M:     zaga@fly.cc.fer.hr
+L:     linux-scsi@vger.rutgers.edu
+S:     Maintained
+
+X.25 NETWORK LAYER
+P:     Henner Eisen
+M:     eis@baty.hanse.de
+L:     linux-x25@vger.rutgers.edu
+S:     Maintained
+
+Z85230 SYNCHRONOUS DRIVER
+P:     Alan Cox
+M:     alan@redhat.com
+W:     http://roadrunner.swansea.linux.org.uk/synchronous.shtml
+S:     Maintained
+
+Z8530 DRIVER FOR AX.25
+P:     Joerg Reuter
+M:     jreuter@poboxes.com
+W:     http://poboxes.com/jreuter/
+W:     http://qsl.net/dl1bke/
+L:     linux-hams@vger.rutgers.edu
+S:     Maintained
+
+ZR36120 VIDEO FOR LINUX DRIVER
+P:     Pauline Middelink
+M:     middelin@polyware.nl
+W:     http://www.polyware.nl/~middelin/En/hobbies.html
+W:     http://www.polyware.nl/~middelin/hobbies.html
+S:     Maintained
+
+THE REST
+P:     Linus Torvalds
+S:     Buried alive in reporters
index 8d1e2a67fd5c4581530f6010c1a1c2bece03db23..6d4079af311dedb1c44dee887b4fa250df7dd479 100644 (file)
@@ -106,7 +106,6 @@ CONFIG_BLK_DEV_IDEPCI=y
 # CONFIG_BLK_DEV_OFFBOARD is not set
 # CONFIG_BLK_DEV_AEC6210 is not set
 CONFIG_BLK_DEV_PIIX=y
-# CONFIG_BLK_DEV_PIIX_TUNING is not set
 # CONFIG_IDE_CHIPSETS is not set
 # CONFIG_BLK_CPQ_DA is not set
 
@@ -348,6 +347,11 @@ CONFIG_SERIAL=y
 CONFIG_UNIX98_PTYS=y
 CONFIG_UNIX98_PTY_COUNT=256
 
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
 #
 # Mice
 #
index f23eb1b1a05a75f179b194449ac79881f9a3ae54..f09c528eb8d3dabab37908fe04e1e67d9a2ccb1d 100644 (file)
@@ -2805,7 +2805,6 @@ int __init ide_setup (char *s)
                                drive->scsi = 1;
                                goto done;
 #else
-#warning ide scsi-emulation selected but no SCSI-subsystem in kernel
                                drive->scsi = 0;
                                goto bad_option;
 #endif /* defined(CONFIG_BLK_DEV_IDESCSI) && defined(CONFIG_SCSI) */
index f588dc9c2260021c61b730e0e033e08b988c5f61..dfd8830a2fd8e6262a8361dac4db7ef58d12a01c 100644 (file)
@@ -78,6 +78,7 @@
  *  Released under terms of General Public License
  */
 
+#include <linux/config.h>
 #include <linux/types.h>
 #include <linux/kernel.h>
 #include <linux/delay.h>
index 950ccbd39353a4cd6075bef8cdecaa3b544348af..3ed924cf7102497321738a41a1baec76d720f379 100644 (file)
@@ -50,8 +50,7 @@ endif
 
 ifeq ($(CONFIG_SK98LIN),y)
 SUB_DIRS += sk98lin
-MOD_IN_SUB_DIRS += sk98lin
-L_OBJS += sk98lin/sk98lin.o
+obj-y += sk98lin/sk98lin.o
 else
   ifeq ($(CONFIG_SK98LIN),m)
   MOD_IN_SUB_DIRS += sk98lin
index 6e9dca77d7a9d7c5a2d212fbd76bbbc613fa47eb..5d56a88d235b1133cb138c85c99b288aeb872726 100644 (file)
@@ -2,7 +2,7 @@
 # USB device configuration
 #
 mainmenu_option next_comment
-comment 'Support for USB'
+comment 'USB support'
 
 tristate 'Support for USB' CONFIG_USB
 if [ ! "$CONFIG_USB" = "n" ]; then
@@ -15,7 +15,7 @@ comment 'USB Controllers'
 
 comment 'Miscellaneous USB options'
    if [ "$CONFIG_PROC_FS" != "n" ]; then
-      bool '  Preliminary /proc/bus/usb support' CONFIG_USB_PROC
+      bool '  /proc/bus/usb support' CONFIG_USB_PROC
    fi
    dep_tristate '  EZUSB Firmware downloader' CONFIG_USB_EZUSB $CONFIG_USB
 
index 0b59e0d1bb3b34ffb04debdf188f0432eefff563..053f18d2e79295bf80bd991212392f3a437b582a 100644 (file)
@@ -1,6 +1,6 @@
 This serial driver currently only works with the Belkin and Peracom USB 
 Serial devices. It should also work for the Etek converter, but I do 
-not know the vendor id, and device id of that device (if anyone does, 
+not know the vendor id and device id of that device (if anyone does, 
 please let me know.)
 
 If your device is not compatible with the above models, you can try
@@ -19,17 +19,15 @@ data from the converter. However, since I do not have a spec for the Belkin,
 Peracom, and eTek devices, and the raw dumps from the Win98 driver are 
 confusing, and eTek keeps giving me the run around, no control signals are 
 currently handled, and the data will most likely come through on a baud
-rate that you are not expecting.
-
-The major number that the driver uses is 240 (in the local/experimental
-range.) It will stay there until some agreements are reached on how to
-handle the configuration problem that USB provides.
-
-To use the driver, create the following nodes:
-mknod /dev/ttyUSB0 c 240 0
-mknod /dev/ttyUSB1 c 240 1
-mknod /dev/ttyUSB2 c 240 2
-mknod /dev/ttyUSB3 c 240 3
+rate that you are not expecting. So if you have these devices, do not 
+expect the correct data to show up at either end. 
+
+The major number that the driver uses is 188 so to use the driver, create
+the following nodes:
+mknod /dev/ttyUSB0 c 188 0
+mknod /dev/ttyUSB1 c 188 1
+mknod /dev/ttyUSB2 c 188 2
+mknod /dev/ttyUSB3 c 188 3
 
 then plug in a device and use your friendly terminal program to see what
 happens.
index 8fca7562cf04704afd03446d599945d43695c47e..e7d0e4aacb2f2b7a53a25da5fe5a6f813c242c00 100644 (file)
@@ -139,7 +139,7 @@ static int acm_irq(int state, void *__buffer, int count, void *dev_id)
 {
        unsigned char *data;
        struct acm_state *acm = (struct acm_state *)dev_id;
-        devrequest *dr;
+       devrequest *dr;
 
        info("ACM_USB_IRQ\n");
 
@@ -153,13 +153,13 @@ static int acm_irq(int state, void *__buffer, int count, void *dev_id)
        if (!acm->active)
                return 1;
 
-        dr = __buffer;
+       dr = __buffer;
        data = __buffer;
        data += sizeof(dr);
  
 #if 0
-        printk("reqtype: %02X\n",dr->requesttype);
-        printk("request: %02X\n",dr->request);
+       printk("reqtype: %02X\n",dr->requesttype);
+       printk("request: %02X\n",dr->request);
        printk("wValue: %02X\n",dr->value);
        printk("wIndex: %02X\n",dr->index);
        printk("wLength: %02X\n",dr->length);
@@ -414,7 +414,7 @@ static void * acm_probe(struct usb_device *dev, unsigned int ifnum)
        /* Only use CDC */
        if (dev->descriptor.bDeviceClass != 2 ||
            dev->descriptor.bDeviceSubClass != 0 ||
-            dev->descriptor.bDeviceProtocol != 0)
+           dev->descriptor.bDeviceProtocol != 0)
                return NULL;
 
 #define IFCLASS(if) ((if->bInterfaceClass << 24) | (if->bInterfaceSubClass << 16) | (if->bInterfaceProtocol << 8) | (if->bNumEndpoints))
index 21449fef9acfc3556ede0cc74159a638be02d471..6471b0db50f41c573c8d2f90e7394f150ebc6024 100644 (file)
@@ -1,61 +1,61 @@
 /*****************************************************************************/
 
 /*
- *      audio.c  --  USB Audio Class driver
+ *     audio.c  --  USB Audio Class driver
  *
- *      Copyright (C) 1999
- *          Alan Cox (alan@lxorguk.ukuu.org.uk)
- *          Thomas Sailer (sailer@ife.ee.ethz.ch)
+ *     Copyright (C) 1999
+ *         Alan Cox (alan@lxorguk.ukuu.org.uk)
+ *         Thomas Sailer (sailer@ife.ee.ethz.ch)
  *
- *      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.
  *
  *
  * 1999-09-07:  Alan Cox
- *              Parsing Audio descriptor patch
+ *             Parsing Audio descriptor patch
  * 1999-09-08:  Thomas Sailer
- *              Added OSS compatible data io functions; both parts of the
- *              driver remain to be glued together
+ *             Added OSS compatible data io functions; both parts of the
+ *             driver remain to be glued together
  * 1999-09-10:  Thomas Sailer
- *              Beautified the driver. Added sample format conversions.
- *              Still not properly glued with the parsing code.
- *              The parsing code seems to have its problems btw,
- *              Since it parses all available configs but doesn't
- *              store which iface/altsetting belongs to which config.
+ *             Beautified the driver. Added sample format conversions.
+ *             Still not properly glued with the parsing code.
+ *             The parsing code seems to have its problems btw,
+ *             Since it parses all available configs but doesn't
+ *             store which iface/altsetting belongs to which config.
  * 1999-09-20:  Thomas Sailer
- *              Threw out Alan's parsing code and implemented my own one.
- *              You cannot reasonnably linearly parse audio descriptors,
- *              especially the AudioClass descriptors have to be considered
- *              pointer lists. Mixer parsing untested, due to lack of device.
- *              First stab at synch pipe implementation, the Dallas USB DAC
- *              wants to use an Asynch out pipe. usb_audio_state now basically
- *              only contains lists of mixer and wave devices. We can therefore
- *              now have multiple mixer/wave devices per USB device.
+ *             Threw out Alan's parsing code and implemented my own one.
+ *             You cannot reasonnably linearly parse audio descriptors,
+ *             especially the AudioClass descriptors have to be considered
+ *             pointer lists. Mixer parsing untested, due to lack of device.
+ *             First stab at synch pipe implementation, the Dallas USB DAC
+ *             wants to use an Asynch out pipe. usb_audio_state now basically
+ *             only contains lists of mixer and wave devices. We can therefore
+ *             now have multiple mixer/wave devices per USB device.
  * 1999-10-28:  Thomas Sailer
- *              Converted to URB API. Fixed a taskstate/wakeup semantics mistake
- *              that made the driver consume all available CPU cycles.
- *              Now runs stable on UHCI-Acher/Fliegl/Sailer.
+ *             Converted to URB API. Fixed a taskstate/wakeup semantics mistake
+ *             that made the driver consume all available CPU cycles.
+ *             Now runs stable on UHCI-Acher/Fliegl/Sailer.
  * 1999-10-31:  Thomas Sailer
- *              Audio can now be unloaded if it is not in use by any mixer
- *              or dsp client (formerly you had to disconnect the audio devices
- *              from the USB port)
- *              Finally, about three months after ordering, my "Maxxtro SPK222"
- *              speakers arrived, isn't disdata a great mail order company 8-)
- *              Parse class specific endpoint descriptor of the audiostreaming
- *              interfaces and take the endpoint attributes from there.
- *              Unbelievably, the Philips USB DAC has a sampling rate range
- *              of over a decade, yet does not support the sampling rate control!
- *              No wonder it sounds so bad, has very audible sampling rate
- *              conversion distortion. Don't try to listen to it using
- *              decent headphones!
- *              "Let's make things better" -> but please Philips start with your
- *              own stuff!!!!
+ *             Audio can now be unloaded if it is not in use by any mixer
+ *             or dsp client (formerly you had to disconnect the audio devices
+ *             from the USB port)
+ *             Finally, about three months after ordering, my "Maxxtro SPK222"
+ *             speakers arrived, isn't disdata a great mail order company 8-)
+ *             Parse class specific endpoint descriptor of the audiostreaming
+ *             interfaces and take the endpoint attributes from there.
+ *             Unbelievably, the Philips USB DAC has a sampling rate range
+ *             of over a decade, yet does not support the sampling rate control!
+ *             No wonder it sounds so bad, has very audible sampling rate
+ *             conversion distortion. Don't try to listen to it using
+ *             decent headphones!
+ *             "Let's make things better" -> but please Philips start with your
+ *             own stuff!!!!
  * 1999-11-02:  It takes the Philips boxes several seconds to acquire synchronisation
- *              that means they won't play short sounds. Should probably maintain
- *              the ISO datastream even if there's nothing to play.
- *              Fix counting the total_bytes counter, RealPlayer G2 depends on it.
+ *             that means they won't play short sounds. Should probably maintain
+ *             the ISO datastream even if there's nothing to play.
+ *             Fix counting the total_bytes counter, RealPlayer G2 depends on it.
  *
  */
 
@@ -257,15 +257,15 @@ struct usb_audiodev {
        struct usb_audio_state *state;
        int remove_pending;
        
-        /* soundcore stuff */
-        int dev_audio;
+       /* soundcore stuff */
+       int dev_audio;
 
        /* wave stuff */
-        mode_t open_mode;
+       mode_t open_mode;
        spinlock_t lock;         /* DMA buffer access spinlock */
 
        struct usbin {
-               unsigned int interface;  /* Interface number */
+               int interface;           /* Interface number, -1 means not used */
                unsigned int format;     /* USB data format */
                unsigned int datapipe;   /* the data input pipe */
                unsigned int syncpipe;   /* the synchronisation pipe - 0 for anything but adaptive IN mode */
@@ -282,7 +282,7 @@ struct usb_audiodev {
        } usbin;
 
        struct usbout {
-               unsigned int interface;  /* Interface number */
+               int interface;           /* Interface number, -1 means not used */
                unsigned int format;     /* USB data format */
                unsigned int datapipe;   /* the data input pipe */
                unsigned int syncpipe;   /* the synchronisation pipe - 0 for anything but asynchronous OUT mode */
@@ -309,13 +309,13 @@ struct usb_mixerdev {
        struct list_head list;
        struct usb_audio_state *state;
 
-        /* soundcore stuff */
-        int dev_mixer;
+       /* soundcore stuff */
+       int dev_mixer;
 
        unsigned char iface;  /* interface number of the AudioControl interface */
 
        /* USB format descriptions */
-        unsigned int numch, modcnt;
+       unsigned int numch, modcnt;
 
        /* mixch is last and gets allocated dynamically */
        struct mixerchannel ch[0];
@@ -345,27 +345,27 @@ struct usb_audio_state {
 
 extern inline unsigned ld2(unsigned int x)
 {
-        unsigned r = 0;
-        
-        if (x >= 0x10000) {
-                x >>= 16;
-                r += 16;
-        }
-        if (x >= 0x100) {
-                x >>= 8;
-                r += 8;
-        }
-        if (x >= 0x10) {
-                x >>= 4;
-                r += 4;
-        }
-        if (x >= 4) {
-                x >>= 2;
-                r += 2;
-        }
-        if (x >= 2)
-                r++;
-        return r;
+       unsigned r = 0;
+       
+       if (x >= 0x10000) {
+               x >>= 16;
+               r += 16;
+       }
+       if (x >= 0x100) {
+               x >>= 8;
+               r += 8;
+       }
+       if (x >= 0x10) {
+               x >>= 4;
+               r += 4;
+       }
+       if (x >= 4) {
+               x >>= 2;
+               r += 2;
+       }
+       if (x >= 2)
+               r++;
+       return r;
 }
 
 /* --------------------------------------------------------------------- */
@@ -392,38 +392,38 @@ static void dmabuf_release(struct dmabuf *db)
                free_page((unsigned long)p);
                db->sgbuf[nr] = NULL;
        }
-        db->mapped = db->ready = 0;
+       db->mapped = db->ready = 0;
 }
 
 static int dmabuf_init(struct dmabuf *db)
 {
-        unsigned int nr, bytepersec, bufs;
+       unsigned int nr, bytepersec, bufs;
        void *p;
 
        /* initialize some fields */
-        db->rdptr = db->wrptr = db->total_bytes = db->count = db->error = 0;
+       db->rdptr = db->wrptr = db->total_bytes = db->count = db->error = 0;
        /* calculate required buffer size */
        bytepersec = db->srate << AFMT_BYTESSHIFT(db->format);
        bufs = 1U << DMABUFSHIFT;
-        if (db->ossfragshift) {
-                if ((1000 << db->ossfragshift) < bytepersec)
-                        db->fragshift = ld2(bytepersec/1000);
-                else
-                        db->fragshift = db->ossfragshift;
-        } else {
-                db->fragshift = ld2(bytepersec/100/(db->subdivision ? db->subdivision : 1));
-                if (db->fragshift < 3)
-                        db->fragshift = 3;
-        }
-        db->numfrag = bufs >> db->fragshift;
-        while (db->numfrag < 4 && db->fragshift > 3) {
-                db->fragshift--;
-                db->numfrag = bufs >> db->fragshift;
-        }
-        db->fragsize = 1 << db->fragshift;
-        if (db->ossmaxfrags >= 4 && db->ossmaxfrags < db->numfrag)
-                db->numfrag = db->ossmaxfrags;
-        db->dmasize = db->numfrag << db->fragshift;
+       if (db->ossfragshift) {
+               if ((1000 << db->ossfragshift) < bytepersec)
+                       db->fragshift = ld2(bytepersec/1000);
+               else
+                       db->fragshift = db->ossfragshift;
+       } else {
+               db->fragshift = ld2(bytepersec/100/(db->subdivision ? db->subdivision : 1));
+               if (db->fragshift < 3)
+                       db->fragshift = 3;
+       }
+       db->numfrag = bufs >> db->fragshift;
+       while (db->numfrag < 4 && db->fragshift > 3) {
+               db->fragshift--;
+               db->numfrag = bufs >> db->fragshift;
+       }
+       db->fragsize = 1 << db->fragshift;
+       if (db->ossmaxfrags >= 4 && db->ossmaxfrags < db->numfrag)
+               db->numfrag = db->ossmaxfrags;
+       db->dmasize = db->numfrag << db->fragshift;
        for(nr = 0; nr < NRSGBUF; nr++) {
                if (!db->sgbuf[nr]) {
                        p = (void *)get_free_page(GFP_KERNEL);
@@ -437,12 +437,12 @@ static int dmabuf_init(struct dmabuf *db)
                        break;
        }
        db->bufsize = nr << PAGE_SHIFT;
-        db->ready = 1;
+       db->ready = 1;
        printk(KERN_DEBUG "dmabuf_init: bytepersec %d bufs %d ossfragshift %d ossmaxfrags %d "
               "fragshift %d fragsize %d numfrag %d dmasize %d bufsize %d\n",
               bytepersec, bufs, db->ossfragshift, db->ossmaxfrags, db->fragshift, db->fragsize,
               db->numfrag, db->dmasize, db->bufsize);
-        return 0;
+       return 0;
 }
 
 static int dmabuf_mmap(struct dmabuf *db, unsigned long start, unsigned long size, pgprot_t prot)
@@ -566,13 +566,13 @@ static int dmabuf_copyout_user(struct dmabuf *db, unsigned int ptr, void *buffer
 static void usbin_stop(struct usb_audiodev *as)
 {
        struct usbin *u = &as->usbin;
-        unsigned long flags;
+       unsigned long flags;
        unsigned int i, notkilled = 1;
 
-        spin_lock_irqsave(&as->lock, flags);
+       spin_lock_irqsave(&as->lock, flags);
        u->flags &= ~FLG_RUNNING;
        i = u->flags;
-        spin_unlock_irqrestore(&as->lock, flags);
+       spin_unlock_irqrestore(&as->lock, flags);
        while (i & (FLG_URB0RUNNING|FLG_URB1RUNNING|FLG_SYNC0RUNNING|FLG_SYNC1RUNNING)) {
                set_current_state(notkilled ? TASK_INTERRUPTIBLE : TASK_UNINTERRUPTIBLE);
                schedule_timeout(1);
@@ -1025,20 +1025,20 @@ static int usbin_start(struct usb_audiodev *as)
                                u->flags &= ~FLG_RUNNING;
                }
        }
-        spin_unlock_irqrestore(&as->lock, flags);
+       spin_unlock_irqrestore(&as->lock, flags);
        return 0;
 }
 
 static void usbout_stop(struct usb_audiodev *as)
 {
        struct usbout *u = &as->usbout;
-        unsigned long flags;
+       unsigned long flags;
        unsigned int i, notkilled = 1;
 
-        spin_lock_irqsave(&as->lock, flags);
+       spin_lock_irqsave(&as->lock, flags);
        u->flags &= ~FLG_RUNNING;
        i = u->flags;
-        spin_unlock_irqrestore(&as->lock, flags);
+       spin_unlock_irqrestore(&as->lock, flags);
        while (i & (FLG_URB0RUNNING|FLG_URB1RUNNING|FLG_SYNC0RUNNING|FLG_SYNC1RUNNING)) {
                set_current_state(notkilled ? TASK_INTERRUPTIBLE : TASK_UNINTERRUPTIBLE);
                schedule_timeout(1);
@@ -1502,7 +1502,7 @@ static int usbout_start(struct usb_audiodev *as)
                                u->flags &= ~FLG_RUNNING;
                }
        }
-        spin_unlock_irqrestore(&as->lock, flags);
+       spin_unlock_irqrestore(&as->lock, flags);
        return 0;
 }
 
@@ -1531,10 +1531,10 @@ static unsigned int find_format(struct audioformat *afp, unsigned int nr, unsign
 
 static int set_format_in(struct usb_audiodev *as)
 {
-        struct usb_device *dev = as->state->usbdev;
-        struct usb_config_descriptor *config = dev->actconfig;
-        struct usb_interface_descriptor *alts;
-        struct usb_interface *iface;   
+       struct usb_device *dev = as->state->usbdev;
+       struct usb_config_descriptor *config = dev->actconfig;
+       struct usb_interface_descriptor *alts;
+       struct usb_interface *iface;    
        struct usbin *u = &as->usbin;
        struct dmabuf *d = &u->dma;
        struct audioformat *fmt;
@@ -1611,10 +1611,10 @@ static int set_format_in(struct usb_audiodev *as)
 
 static int set_format_out(struct usb_audiodev *as)
 {
-        struct usb_device *dev = as->state->usbdev;
-        struct usb_config_descriptor *config = dev->actconfig;
-        struct usb_interface_descriptor *alts;
-        struct usb_interface *iface;   
+       struct usb_device *dev = as->state->usbdev;
+       struct usb_config_descriptor *config = dev->actconfig;
+       struct usb_interface_descriptor *alts;
+       struct usb_interface *iface;    
        struct usbout *u = &as->usbout;
        struct dmabuf *d = &u->dma;
        struct audioformat *fmt;
@@ -1761,13 +1761,13 @@ static int wrmixer(struct usb_mixerdev *ms, unsigned mixch, unsigned value)
        ch->value = v1 | (v2 << 8);
        v1 = (v1 * v3) / 100 + ch->minval;
        v2 = (v2 * v3) / 100 + ch->minval;
-        switch (ch->selector) {
-        case 0:  /* mixer unit request */
+       switch (ch->selector) {
+       case 0:  /* mixer unit request */
                data[0] = v1;
                data[1] = v1 >> 8;
-                if (usb_control_msg(dev, usb_sndctrlpipe(dev, 0), SET_CUR, USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_OUT,
-                                    (ch->chnum << 8) | 1, ms->iface | (ch->unitid << 8), data, 2, HZ) < 0)
-                        goto err;
+               if (usb_control_msg(dev, usb_sndctrlpipe(dev, 0), SET_CUR, USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_OUT,
+                                   (ch->chnum << 8) | 1, ms->iface | (ch->unitid << 8), data, 2, HZ) < 0)
+                       goto err;
                if (!(ch->flags & (MIXFLG_STEREOIN | MIXFLG_STEREOOUT)))
                        return 0;
                data[0] = v2;
@@ -1775,16 +1775,16 @@ static int wrmixer(struct usb_mixerdev *ms, unsigned mixch, unsigned value)
                if (usb_control_msg(dev, usb_sndctrlpipe(dev, 0), SET_CUR, USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_OUT,
                                    ((ch->chnum + !!(ch->flags & MIXFLG_STEREOIN)) << 8) | (1 + !!(ch->flags & MIXFLG_STEREOOUT)),
                                    ms->iface | (ch->unitid << 8), data, 2, HZ) < 0)
-                        goto err;
+                       goto err;
                return 0;
 
-                /* various feature unit controls */
-        case VOLUME_CONTROL:
+               /* various feature unit controls */
+       case VOLUME_CONTROL:
                data[0] = v1;
                data[1] = v1 >> 8;
-                if (usb_control_msg(dev, usb_sndctrlpipe(dev, 0), SET_CUR, USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_OUT,
-                                    (ch->selector << 8) | ch->chnum, ms->iface | (ch->unitid << 8), data, 2, HZ) < 0)
-                        goto err;
+               if (usb_control_msg(dev, usb_sndctrlpipe(dev, 0), SET_CUR, USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_OUT,
+                                   (ch->selector << 8) | ch->chnum, ms->iface | (ch->unitid << 8), data, 2, HZ) < 0)
+                       goto err;
                if (ch->chnum == 0)
                        return 0;
                data[0] = v2;
@@ -1793,14 +1793,14 @@ static int wrmixer(struct usb_mixerdev *ms, unsigned mixch, unsigned value)
                                    (ch->selector << 8) | (ch->chnum + 1), ms->iface | (ch->unitid << 8), data, 2, HZ) < 0)
                        goto err;
                return 0;
-                
-        case BASS_CONTROL:
-        case MID_CONTROL:
-        case TREBLE_CONTROL:
+               
+       case BASS_CONTROL:
+       case MID_CONTROL:
+       case TREBLE_CONTROL:
                data[0] = v1 >> 8;
                if (usb_control_msg(dev, usb_sndctrlpipe(dev, 0), SET_CUR, USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_OUT,
-                                    (ch->selector << 8) | ch->chnum, ms->iface | (ch->unitid << 8), data, 1, HZ) < 0)
-                        goto err;
+                                   (ch->selector << 8) | ch->chnum, ms->iface | (ch->unitid << 8), data, 1, HZ) < 0)
+                       goto err;
                if (ch->chnum == 0)
                        return 0;
                data[0] = v2 >> 8;
@@ -1808,15 +1808,15 @@ static int wrmixer(struct usb_mixerdev *ms, unsigned mixch, unsigned value)
                                    (ch->selector << 8) | (ch->chnum + 1), ms->iface | (ch->unitid << 8), data, 1, HZ) < 0)
                        goto err;
                return 0;
-               
-        default:
-                return -1;
-        }
-        return 0;
+              
+       default:
+               return -1;
+       }
+       return 0;
 
  err:
-        printk(KERN_ERR "usbaudio: mixer request device %u if %u unit %u ch %u selector %u failed\n", 
-               dev->devnum, ms->iface, ch->unitid, ch->chnum, ch->selector);
+       printk(KERN_ERR "usbaudio: mixer request device %u if %u unit %u ch %u selector %u failed\n", 
+              dev->devnum, ms->iface, ch->unitid, ch->chnum, ch->selector);
        return -1;
 }
 
@@ -1838,7 +1838,7 @@ static void release(struct usb_audio_state *s)
                return;
        }
        up(&open_sem);
-        wake_up(&open_wait);
+       wake_up(&open_wait);
        while (!list_empty(&s->audiolist)) {
                as = list_entry(s->audiolist.next, struct usb_audiodev, list);
                list_del(&as->list);
@@ -1860,33 +1860,33 @@ static void release(struct usb_audio_state *s)
 
 extern inline int prog_dmabuf_in(struct usb_audiodev *as)
 {
-        usbin_stop(as);
-        return dmabuf_init(&as->usbin.dma);
+       usbin_stop(as);
+       return dmabuf_init(&as->usbin.dma);
 }
 
 extern inline int prog_dmabuf_out(struct usb_audiodev *as)
 {
-        usbout_stop(as);
-        return dmabuf_init(&as->usbout.dma);
+       usbout_stop(as);
+       return dmabuf_init(&as->usbout.dma);
 }
 
 /* --------------------------------------------------------------------- */
 
 static loff_t usb_audio_llseek(struct file *file, loff_t offset, int origin)
 {
-        return -ESPIPE;
+       return -ESPIPE;
 }
 
 /* --------------------------------------------------------------------- */
 
 static int usb_audio_open_mixdev(struct inode *inode, struct file *file)
 {
-        int minor = MINOR(inode->i_rdev);
+       int minor = MINOR(inode->i_rdev);
        struct list_head *devs, *mdevs;
        struct usb_mixerdev *ms;
-        struct usb_audio_state *s;
+       struct usb_audio_state *s;
 
-        down(&open_sem);
+       down(&open_sem);
        for (devs = audiodevs.next; devs != &audiodevs; devs = devs->next) {
                s = list_entry(devs, struct usb_audio_state, audiodev);
                for (mdevs = s->mixerlist.next; mdevs != &s->mixerlist; mdevs = mdevs->next) {
@@ -1903,186 +1903,189 @@ static int usb_audio_open_mixdev(struct inode *inode, struct file *file)
                up(&open_sem);
                return -EIO;
        }
-        file->private_data = ms;
+       file->private_data = ms;
        s->count++;
 
        MOD_INC_USE_COUNT;
        up(&open_sem);
-        return 0;
+       return 0;
 }
 
 static int usb_audio_release_mixdev(struct inode *inode, struct file *file)
 {
-        struct usb_mixerdev *ms = (struct usb_mixerdev *)file->private_data;
+       struct usb_mixerdev *ms = (struct usb_mixerdev *)file->private_data;
        struct usb_audio_state *s = ms->state;
 
        down(&open_sem);
        release(s);
-        MOD_DEC_USE_COUNT;
-        return 0;
+       MOD_DEC_USE_COUNT;
+       return 0;
 }
 
 static int usb_audio_ioctl_mixdev(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
 {
        struct usb_mixerdev *ms = (struct usb_mixerdev *)file->private_data;
-        int i, j, val;
-
-        if (cmd == SOUND_MIXER_INFO) {
-                mixer_info info;
-                strncpy(info.id, "USB_AUDIO", sizeof(info.id));
-                strncpy(info.name, "USB Audio Class Driver", sizeof(info.name));
-                info.modify_counter = ms->modcnt;
-                if (copy_to_user((void *)arg, &info, sizeof(info)))
-                        return -EFAULT;
-                return 0;
-        }
-        if (cmd == SOUND_OLD_MIXER_INFO) {
-                _old_mixer_info info;
-                strncpy(info.id, "USB_AUDIO", sizeof(info.id));
-                strncpy(info.name, "USB Audio Class Driver", sizeof(info.name));
-                if (copy_to_user((void *)arg, &info, sizeof(info)))
-                        return -EFAULT;
-                return 0;
-        }
-        if (cmd == OSS_GETVERSION)
-                return put_user(SOUND_VERSION, (int *)arg);
-        if (_IOC_TYPE(cmd) != 'M' || _IOC_SIZE(cmd) != sizeof(int))
-                return -EINVAL;
-        if (_IOC_DIR(cmd) == _IOC_READ) {
-                switch (_IOC_NR(cmd)) {
-                case SOUND_MIXER_RECSRC: /* Arg contains a bit for each recording source */
+       int i, j, val;
+
+       if (!ms->state->usbdev)
+               return -ENODEV;
+  
+       if (cmd == SOUND_MIXER_INFO) {
+               mixer_info info;
+               strncpy(info.id, "USB_AUDIO", sizeof(info.id));
+               strncpy(info.name, "USB Audio Class Driver", sizeof(info.name));
+               info.modify_counter = ms->modcnt;
+               if (copy_to_user((void *)arg, &info, sizeof(info)))
+                       return -EFAULT;
+               return 0;
+       }
+       if (cmd == SOUND_OLD_MIXER_INFO) {
+               _old_mixer_info info;
+               strncpy(info.id, "USB_AUDIO", sizeof(info.id));
+               strncpy(info.name, "USB Audio Class Driver", sizeof(info.name));
+               if (copy_to_user((void *)arg, &info, sizeof(info)))
+                       return -EFAULT;
+               return 0;
+       }
+       if (cmd == OSS_GETVERSION)
+               return put_user(SOUND_VERSION, (int *)arg);
+       if (_IOC_TYPE(cmd) != 'M' || _IOC_SIZE(cmd) != sizeof(int))
+               return -EINVAL;
+       if (_IOC_DIR(cmd) == _IOC_READ) {
+               switch (_IOC_NR(cmd)) {
+               case SOUND_MIXER_RECSRC: /* Arg contains a bit for each recording source */
                        /* don't know how to handle this yet */
-                        return put_user(0, (int *)arg);
-                        
-                case SOUND_MIXER_DEVMASK: /* Arg contains a bit for each supported device */
-                        for (val = i = 0; i < ms->numch; i++)
+                       return put_user(0, (int *)arg);
+                       
+               case SOUND_MIXER_DEVMASK: /* Arg contains a bit for each supported device */
+                       for (val = i = 0; i < ms->numch; i++)
                                val |= 1 << ms->ch[i].osschannel;
-                        return put_user(val, (int *)arg);
+                       return put_user(val, (int *)arg);
 
-                case SOUND_MIXER_RECMASK: /* Arg contains a bit for each supported recording source */
+               case SOUND_MIXER_RECMASK: /* Arg contains a bit for each supported recording source */
                        /* don't know how to handle this yet */
-                        return put_user(0, (int *)arg);
-                        
-                case SOUND_MIXER_STEREODEVS: /* Mixer channels supporting stereo */
-                        for (val = i = 0; i < ms->numch; i++)
+                       return put_user(0, (int *)arg);
+                       
+               case SOUND_MIXER_STEREODEVS: /* Mixer channels supporting stereo */
+                       for (val = i = 0; i < ms->numch; i++)
                                if (ms->ch[i].flags & (MIXFLG_STEREOIN | MIXFLG_STEREOOUT))
                                        val |= 1 << ms->ch[i].osschannel;
-                        return put_user(val, (int *)arg);
-                        
-                case SOUND_MIXER_CAPS:
-                        return put_user(0, (int *)arg);
-
-                default:
-                        i = _IOC_NR(cmd);
-                        if (i >= SOUND_MIXER_NRDEVICES)
-                                return -EINVAL;
+                       return put_user(val, (int *)arg);
+                       
+               case SOUND_MIXER_CAPS:
+                       return put_user(0, (int *)arg);
+
+               default:
+                       i = _IOC_NR(cmd);
+                       if (i >= SOUND_MIXER_NRDEVICES)
+                               return -EINVAL;
                        for (j = 0; j < ms->numch; j++) {
                                if (ms->ch[j].osschannel == i) {
                                        return put_user(ms->ch[j].value, (int *)arg);
                                }
                        }
                        return -EINVAL;
-                }
-        }
-        if (_IOC_DIR(cmd) != (_IOC_READ|_IOC_WRITE)) 
-                return -EINVAL;
-        ms->modcnt++;
-        switch (_IOC_NR(cmd)) {
-        case SOUND_MIXER_RECSRC: /* Arg contains a bit for each recording source */
-                get_user_ret(val, (int *)arg, -EFAULT);
-                /* set recording source: val */
-                return 0;
-
-        default:
-                i = _IOC_NR(cmd);
-                if (i >= SOUND_MIXER_NRDEVICES)
-                        return -EINVAL;
+               }
+       }
+       if (_IOC_DIR(cmd) != (_IOC_READ|_IOC_WRITE)) 
+               return -EINVAL;
+       ms->modcnt++;
+       switch (_IOC_NR(cmd)) {
+       case SOUND_MIXER_RECSRC: /* Arg contains a bit for each recording source */
+               get_user_ret(val, (int *)arg, -EFAULT);
+               /* set recording source: val */
+               return 0;
+
+       default:
+               i = _IOC_NR(cmd);
+               if (i >= SOUND_MIXER_NRDEVICES)
+                       return -EINVAL;
                for (j = 0; j < ms->numch && ms->ch[j].osschannel != i; j++);
                if (j >= ms->numch)
                        return -EINVAL;
-                get_user_ret(val, (int *)arg, -EFAULT);
+               get_user_ret(val, (int *)arg, -EFAULT);
                if (wrmixer(ms, j, val))
                        return -EIO;
-                return put_user(ms->ch[j].value, (int *)arg);
-        }
+               return put_user(ms->ch[j].value, (int *)arg);
+       }
 }
 
 static /*const*/ struct file_operations usb_mixer_fops = {
-        &usb_audio_llseek,
-        NULL,  /* read */
-        NULL,  /* write */
-        NULL,  /* readdir */
-        NULL,  /* poll */
-        &usb_audio_ioctl_mixdev,
-        NULL,  /* mmap */
-        &usb_audio_open_mixdev,
-        NULL,   /* flush */
-        &usb_audio_release_mixdev,
-        NULL,  /* fsync */
-        NULL,  /* fasync */
-        NULL,  /* check_media_change */
-        NULL,  /* revalidate */
-        NULL,  /* lock */
+       &usb_audio_llseek,
+       NULL,  /* read */
+       NULL,  /* write */
+       NULL,  /* readdir */
+       NULL,  /* poll */
+       &usb_audio_ioctl_mixdev,
+       NULL,  /* mmap */
+       &usb_audio_open_mixdev,
+       NULL,   /* flush */
+       &usb_audio_release_mixdev,
+       NULL,  /* fsync */
+       NULL,  /* fasync */
+       NULL,  /* check_media_change */
+       NULL,  /* revalidate */
+       NULL,  /* lock */
 };
 
 /* --------------------------------------------------------------------- */
 
 static int drain_out(struct usb_audiodev *as, int nonblock)
 {
-        DECLARE_WAITQUEUE(wait, current);
-        unsigned long flags;
-        int count, tmo;
-        
-        if (as->usbout.dma.mapped || !as->usbout.dma.ready)
-                return 0;
-        add_wait_queue(&as->usbout.dma.wait, &wait);
-        for (;;) {
+       DECLARE_WAITQUEUE(wait, current);
+       unsigned long flags;
+       int count, tmo;
+       
+       if (as->usbout.dma.mapped || !as->usbout.dma.ready)
+               return 0;
+       add_wait_queue(&as->usbout.dma.wait, &wait);
+       for (;;) {
                __set_current_state(TASK_INTERRUPTIBLE);
                spin_lock_irqsave(&as->lock, flags);
-                count = as->usbout.dma.count;
-                spin_unlock_irqrestore(&as->lock, flags);
-                if (count <= 0)
-                        break;
-                if (signal_pending(current))
-                        break;
-                if (nonblock) {
-                        remove_wait_queue(&as->usbout.dma.wait, &wait);
-                        set_current_state(TASK_RUNNING);
-                        return -EBUSY;
-                }
-                tmo = 3 * HZ * count / as->usbout.dma.srate;
+               count = as->usbout.dma.count;
+               spin_unlock_irqrestore(&as->lock, flags);
+               if (count <= 0)
+                       break;
+               if (signal_pending(current))
+                       break;
+               if (nonblock) {
+                       remove_wait_queue(&as->usbout.dma.wait, &wait);
+                       set_current_state(TASK_RUNNING);
+                       return -EBUSY;
+               }
+               tmo = 3 * HZ * count / as->usbout.dma.srate;
                tmo >>= AFMT_BYTESSHIFT(as->usbout.dma.format);
-                if (!schedule_timeout(tmo + 1)) {
-                        printk(KERN_DEBUG "usbaudio: dma timed out??\n");
+               if (!schedule_timeout(tmo + 1)) {
+                       printk(KERN_DEBUG "usbaudio: dma timed out??\n");
                        break;
                }
-        }
-        remove_wait_queue(&as->usbout.dma.wait, &wait);
-        set_current_state(TASK_RUNNING);
-        if (signal_pending(current))
-                return -ERESTARTSYS;
-        return 0;
+       }
+       remove_wait_queue(&as->usbout.dma.wait, &wait);
+       set_current_state(TASK_RUNNING);
+       if (signal_pending(current))
+               return -ERESTARTSYS;
+       return 0;
 }
 
 /* --------------------------------------------------------------------- */
 
 static ssize_t usb_audio_read(struct file *file, char *buffer, size_t count, loff_t *ppos)
 {
-        struct usb_audiodev *as = (struct usb_audiodev *)file->private_data;
+       struct usb_audiodev *as = (struct usb_audiodev *)file->private_data;
        DECLARE_WAITQUEUE(wait, current);
-        ssize_t ret = 0;
-        unsigned long flags;
-        unsigned int ptr;
-        int cnt, err;
-
-        if (ppos != &file->f_pos)
-                return -ESPIPE;
-        if (as->usbin.dma.mapped)
-                return -ENXIO;
-        if (!as->usbin.dma.ready && (ret = prog_dmabuf_in(as)))
-                return ret;
-        if (!access_ok(VERIFY_WRITE, buffer, count))
-                return -EFAULT;
+       ssize_t ret = 0;
+       unsigned long flags;
+       unsigned int ptr;
+       int cnt, err;
+
+       if (ppos != &file->f_pos)
+               return -ESPIPE;
+       if (as->usbin.dma.mapped)
+               return -ENXIO;
+       if (!as->usbin.dma.ready && (ret = prog_dmabuf_in(as)))
+               return ret;
+       if (!access_ok(VERIFY_WRITE, buffer, count))
+               return -EFAULT;
        add_wait_queue(&as->usbin.dma.wait, &wait);
        while (count > 0) {
                spin_lock_irqsave(&as->lock, flags);
@@ -2094,25 +2097,25 @@ static ssize_t usb_audio_read(struct file *file, char *buffer, size_t count, lof
                spin_unlock_irqrestore(&as->lock, flags);
                if (cnt > count)
                        cnt = count;
-                if (cnt <= 0) {
+               if (cnt <= 0) {
                        if (usbin_start(as)) {
                                if (!ret)
                                        ret = -ENODEV;
                                break;
                        }
-                        if (file->f_flags & O_NONBLOCK) {
+                       if (file->f_flags & O_NONBLOCK) {
                                if (!ret)
                                        ret = -EAGAIN;
                                break;
                        }
                        schedule();
-                        if (signal_pending(current)) {
-                                if (!ret)
-                                        ret = -ERESTARTSYS;
-                                break;
+                       if (signal_pending(current)) {
+                               if (!ret)
+                                       ret = -ERESTARTSYS;
+                               break;
                        }
                        continue;
-                }
+               }
                if ((err = dmabuf_copyout_user(&as->usbin.dma, ptr, buffer, cnt))) {
                        if (!ret)
                                ret = err;
@@ -2129,64 +2132,64 @@ static ssize_t usb_audio_read(struct file *file, char *buffer, size_t count, lof
                buffer += cnt;
                ret += cnt;
        }
-        __set_current_state(TASK_RUNNING);
-        remove_wait_queue(&as->usbin.dma.wait, &wait);
+       __set_current_state(TASK_RUNNING);
+       remove_wait_queue(&as->usbin.dma.wait, &wait);
        return ret;
 }
 
 static ssize_t usb_audio_write(struct file *file, const char *buffer, size_t count, loff_t *ppos)
 {
-        struct usb_audiodev *as = (struct usb_audiodev *)file->private_data;
+       struct usb_audiodev *as = (struct usb_audiodev *)file->private_data;
        DECLARE_WAITQUEUE(wait, current);
-        ssize_t ret = 0;
-        unsigned long flags;
-        unsigned int ptr;
-        int cnt, err;
-
-        if (ppos != &file->f_pos)
-                return -ESPIPE;
-        if (as->usbout.dma.mapped)
-                return -ENXIO;
-        if (!as->usbout.dma.ready && (ret = prog_dmabuf_out(as)))
-                return ret;
-        if (!access_ok(VERIFY_READ, buffer, count))
-                return -EFAULT;
+       ssize_t ret = 0;
+       unsigned long flags;
+       unsigned int ptr;
+       int cnt, err;
+
+       if (ppos != &file->f_pos)
+               return -ESPIPE;
+       if (as->usbout.dma.mapped)
+               return -ENXIO;
+       if (!as->usbout.dma.ready && (ret = prog_dmabuf_out(as)))
+               return ret;
+       if (!access_ok(VERIFY_READ, buffer, count))
+               return -EFAULT;
        add_wait_queue(&as->usbout.dma.wait, &wait);
-        while (count > 0) {
+       while (count > 0) {
 #if 0
                printk(KERN_DEBUG "usb_audio_write: count %u dma: count %u rdptr %u wrptr %u dmasize %u fragsize %u flags 0x%02x taskst 0x%x\n",
                       count, as->usbout.dma.count, as->usbout.dma.rdptr, as->usbout.dma.wrptr, as->usbout.dma.dmasize, as->usbout.dma.fragsize,
                       as->usbout.flags, current->state);
 #endif
-                spin_lock_irqsave(&as->lock, flags);
-                if (as->usbout.dma.count < 0) {
-                        as->usbout.dma.count = 0;
-                        as->usbout.dma.rdptr = as->usbout.dma.wrptr;
-                }
-                ptr = as->usbout.dma.wrptr;
-                cnt = as->usbout.dma.dmasize - as->usbout.dma.count;
+               spin_lock_irqsave(&as->lock, flags);
+               if (as->usbout.dma.count < 0) {
+                       as->usbout.dma.count = 0;
+                       as->usbout.dma.rdptr = as->usbout.dma.wrptr;
+               }
+               ptr = as->usbout.dma.wrptr;
+               cnt = as->usbout.dma.dmasize - as->usbout.dma.count;
                /* set task state early to avoid wakeup races */
                if (cnt <= 0)
                        __set_current_state(TASK_INTERRUPTIBLE);
-                spin_unlock_irqrestore(&as->lock, flags);
-                if (cnt > count)
-                        cnt = count;
-                if (cnt <= 0) {
+               spin_unlock_irqrestore(&as->lock, flags);
+               if (cnt > count)
+                       cnt = count;
+               if (cnt <= 0) {
                        if (usbout_start(as)) {
                                if (!ret)
                                        ret = -ENODEV;
                                break;
                        }
-                        if (file->f_flags & O_NONBLOCK) {
+                       if (file->f_flags & O_NONBLOCK) {
                                if (!ret)
                                        ret = -EAGAIN;
                                break;
                        }
                        schedule();
-                        if (signal_pending(current)) {
-                                if (!ret)
-                                        ret = -ERESTARTSYS;
-                                break;
+                       if (signal_pending(current)) {
+                               if (!ret)
+                                       ret = -ERESTARTSYS;
+                               break;
                        }
                        continue;
                }
@@ -2198,142 +2201,142 @@ static ssize_t usb_audio_write(struct file *file, const char *buffer, size_t cou
                ptr += cnt;
                if (ptr >= as->usbout.dma.dmasize)
                        ptr -= as->usbout.dma.dmasize;
-                spin_lock_irqsave(&as->lock, flags);
-                as->usbout.dma.wrptr = ptr;
-                as->usbout.dma.count += cnt;
-                spin_unlock_irqrestore(&as->lock, flags);
-                count -= cnt;
-                buffer += cnt;
-                ret += cnt;
+               spin_lock_irqsave(&as->lock, flags);
+               as->usbout.dma.wrptr = ptr;
+               as->usbout.dma.count += cnt;
+               spin_unlock_irqrestore(&as->lock, flags);
+               count -= cnt;
+               buffer += cnt;
+               ret += cnt;
                if (usbout_start(as)) {
                        if (!ret)
                                ret = -ENODEV;
                        break;
                }
-        }
-        __set_current_state(TASK_RUNNING);
-        remove_wait_queue(&as->usbout.dma.wait, &wait);
+       }
+       __set_current_state(TASK_RUNNING);
+       remove_wait_queue(&as->usbout.dma.wait, &wait);
        return ret;
 }
 
 static unsigned int usb_audio_poll(struct file *file, struct poll_table_struct *wait)
 {
-        struct usb_audiodev *as = (struct usb_audiodev *)file->private_data;
-        unsigned long flags;
-        unsigned int mask = 0;
+       struct usb_audiodev *as = (struct usb_audiodev *)file->private_data;
+       unsigned long flags;
+       unsigned int mask = 0;
 
-        if (file->f_mode & FMODE_WRITE) {
+       if (file->f_mode & FMODE_WRITE) {
                if (!as->usbout.dma.ready)
                        prog_dmabuf_out(as);
-                poll_wait(file, &as->usbout.dma.wait, wait);
+               poll_wait(file, &as->usbout.dma.wait, wait);
        }
-        if (file->f_mode & FMODE_READ) {
+       if (file->f_mode & FMODE_READ) {
                if (!as->usbin.dma.ready)
                        prog_dmabuf_in(as);
-                poll_wait(file, &as->usbin.dma.wait, wait);
-       }
-        spin_lock_irqsave(&as->lock, flags);
-        if (file->f_mode & FMODE_READ) {
-                if (as->usbin.dma.count >= (signed)as->usbin.dma.fragsize)
-                        mask |= POLLIN | POLLRDNORM;
-        }
-        if (file->f_mode & FMODE_WRITE) {
-                if (as->usbout.dma.mapped) {
-                        if (as->usbout.dma.count >= (signed)as->usbout.dma.fragsize) 
-                                mask |= POLLOUT | POLLWRNORM;
-                } else {
-                        if ((signed)as->usbout.dma.dmasize >= as->usbout.dma.count + (signed)as->usbout.dma.fragsize)
-                                mask |= POLLOUT | POLLWRNORM;
-                }
-        }
-        spin_unlock_irqrestore(&as->lock, flags);
-        return mask;
+               poll_wait(file, &as->usbin.dma.wait, wait);
+       }
+       spin_lock_irqsave(&as->lock, flags);
+       if (file->f_mode & FMODE_READ) {
+               if (as->usbin.dma.count >= (signed)as->usbin.dma.fragsize)
+                       mask |= POLLIN | POLLRDNORM;
+       }
+       if (file->f_mode & FMODE_WRITE) {
+               if (as->usbout.dma.mapped) {
+                       if (as->usbout.dma.count >= (signed)as->usbout.dma.fragsize) 
+                               mask |= POLLOUT | POLLWRNORM;
+               } else {
+                       if ((signed)as->usbout.dma.dmasize >= as->usbout.dma.count + (signed)as->usbout.dma.fragsize)
+                               mask |= POLLOUT | POLLWRNORM;
+               }
+       }
+       spin_unlock_irqrestore(&as->lock, flags);
+       return mask;
 }
 
 static int usb_audio_mmap(struct file *file, struct vm_area_struct *vma)
 {
-        struct usb_audiodev *as = (struct usb_audiodev *)file->private_data;
-        struct dmabuf *db;
-        int ret;
-
-        if (vma->vm_flags & VM_WRITE) {
-                if ((ret = prog_dmabuf_out(as)) != 0)
-                        return ret;
-                db = &as->usbout.dma;
-        } else if (vma->vm_flags & VM_READ) {
-                if ((ret = prog_dmabuf_in(as)) != 0)
-                        return ret;
-                db = &as->usbin.dma;
-        } else
-                return -EINVAL;
+       struct usb_audiodev *as = (struct usb_audiodev *)file->private_data;
+       struct dmabuf *db;
+       int ret;
+
+       if (vma->vm_flags & VM_WRITE) {
+               if ((ret = prog_dmabuf_out(as)) != 0)
+                       return ret;
+               db = &as->usbout.dma;
+       } else if (vma->vm_flags & VM_READ) {
+               if ((ret = prog_dmabuf_in(as)) != 0)
+                       return ret;
+               db = &as->usbin.dma;
+       } else
+               return -EINVAL;
 #if LINUX_VERSION_CODE > KERNEL_VERSION(2,3,22)
-        if (vma->vm_pgoff != 0)
-                return -EINVAL;
+       if (vma->vm_pgoff != 0)
+               return -EINVAL;
 #endif
        return dmabuf_mmap(db,  vma->vm_start, vma->vm_end - vma->vm_start, vma->vm_page_prot);
 }
 
 static int usb_audio_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
 {
-        struct usb_audiodev *as = (struct usb_audiodev *)file->private_data;
+       struct usb_audiodev *as = (struct usb_audiodev *)file->private_data;
        struct usb_audio_state *s = as->state;
-        unsigned long flags;
-        audio_buf_info abinfo;
-        count_info cinfo;
-        int val, val2, mapped, ret;
+       unsigned long flags;
+       audio_buf_info abinfo;
+       count_info cinfo;
+       int val, val2, mapped, ret;
 
        if (!s->usbdev)
                return -EIO;
-        mapped = ((file->f_mode & FMODE_WRITE) && as->usbout.dma.mapped) ||
-                ((file->f_mode & FMODE_READ) && as->usbin.dma.mapped);
-        switch (cmd) {
-        case OSS_GETVERSION:
-                return put_user(SOUND_VERSION, (int *)arg);
-
-        case SNDCTL_DSP_SYNC:
-                if (file->f_mode & FMODE_WRITE)
-                        return drain_out(as, 0/*file->f_flags & O_NONBLOCK*/);
-                return 0;
-
-        case SNDCTL_DSP_SETDUPLEX:
-                return 0;
-
-        case SNDCTL_DSP_GETCAPS:
-                return put_user(DSP_CAP_DUPLEX | DSP_CAP_REALTIME | DSP_CAP_TRIGGER | 
+       mapped = ((file->f_mode & FMODE_WRITE) && as->usbout.dma.mapped) ||
+               ((file->f_mode & FMODE_READ) && as->usbin.dma.mapped);
+       switch (cmd) {
+       case OSS_GETVERSION:
+               return put_user(SOUND_VERSION, (int *)arg);
+
+       case SNDCTL_DSP_SYNC:
+               if (file->f_mode & FMODE_WRITE)
+                       return drain_out(as, 0/*file->f_flags & O_NONBLOCK*/);
+               return 0;
+
+       case SNDCTL_DSP_SETDUPLEX:
+               return 0;
+
+       case SNDCTL_DSP_GETCAPS:
+               return put_user(DSP_CAP_DUPLEX | DSP_CAP_REALTIME | DSP_CAP_TRIGGER | 
                                DSP_CAP_MMAP | DSP_CAP_BATCH, (int *)arg);
 
-        case SNDCTL_DSP_RESET:
-                if (file->f_mode & FMODE_WRITE) {
-                        usbout_stop(as);
-                        as->usbout.dma.rdptr = as->usbout.dma.wrptr = as->usbout.dma.count = as->usbout.dma.total_bytes = 0;
-                }
-                if (file->f_mode & FMODE_READ) {
-                        usbin_stop(as);
-                        as->usbin.dma.rdptr = as->usbin.dma.wrptr = as->usbin.dma.count = as->usbin.dma.total_bytes = 0;
-                }
-                return 0;
-
-        case SNDCTL_DSP_SPEED:
-                get_user_ret(val, (int *)arg, -EFAULT);
-                if (val >= 0) {
-                        if (val < 4000)
-                                val = 4000;
-                        if (val > 100000)
-                                val = 100000;
+       case SNDCTL_DSP_RESET:
+               if (file->f_mode & FMODE_WRITE) {
+                       usbout_stop(as);
+                       as->usbout.dma.rdptr = as->usbout.dma.wrptr = as->usbout.dma.count = as->usbout.dma.total_bytes = 0;
+               }
+               if (file->f_mode & FMODE_READ) {
+                       usbin_stop(as);
+                       as->usbin.dma.rdptr = as->usbin.dma.wrptr = as->usbin.dma.count = as->usbin.dma.total_bytes = 0;
+               }
+               return 0;
+
+       case SNDCTL_DSP_SPEED:
+               get_user_ret(val, (int *)arg, -EFAULT);
+               if (val >= 0) {
+                       if (val < 4000)
+                               val = 4000;
+                       if (val > 100000)
+                               val = 100000;
                        if (set_format(as, file->f_mode, AFMT_QUERY, val))
                                return -EIO;
-                }
-                return put_user((file->f_mode & FMODE_READ) ? as->usbin.dma.srate : as->usbout.dma.srate, (int *)arg);
+               }
+               return put_user((file->f_mode & FMODE_READ) ? as->usbin.dma.srate : as->usbout.dma.srate, (int *)arg);
 
-        case SNDCTL_DSP_STEREO:
+       case SNDCTL_DSP_STEREO:
                val2 = (file->f_mode & FMODE_READ) ? as->usbin.dma.format : as->usbout.dma.format;
                if (set_format(as, file->f_mode, val2 | AFMT_STEREO, 0))
                        return -EIO;
-                return 0;
+               return 0;
 
-        case SNDCTL_DSP_CHANNELS:
-                get_user_ret(val, (int *)arg, -EFAULT);
-                if (val != 0) {
+       case SNDCTL_DSP_CHANNELS:
+               get_user_ret(val, (int *)arg, -EFAULT);
+               if (val != 0) {
                        val2 = (file->f_mode & FMODE_READ) ? as->usbin.dma.format : as->usbout.dma.format;
                        if (val == 1)
                                val2 &= ~AFMT_STEREO;
@@ -2343,14 +2346,14 @@ static int usb_audio_ioctl(struct inode *inode, struct file *file, unsigned int
                                return -EIO;
                }
                val2 = (file->f_mode & FMODE_READ) ? as->usbin.dma.format : as->usbout.dma.format;
-                return put_user(AFMT_ISSTEREO(val2) ? 2 : 1, (int *)arg);
+               return put_user(AFMT_ISSTEREO(val2) ? 2 : 1, (int *)arg);
 
-        case SNDCTL_DSP_GETFMTS: /* Returns a mask */
-                return put_user(AFMT_U8 | AFMT_U16_LE | AFMT_U16_BE |
+       case SNDCTL_DSP_GETFMTS: /* Returns a mask */
+               return put_user(AFMT_U8 | AFMT_U16_LE | AFMT_U16_BE |
                                AFMT_S8 | AFMT_S16_LE | AFMT_S16_BE, (int *)arg);
 
-        case SNDCTL_DSP_SETFMT: /* Selects ONE fmt*/
-                get_user_ret(val, (int *)arg, -EFAULT);
+       case SNDCTL_DSP_SETFMT: /* Selects ONE fmt*/
+               get_user_ret(val, (int *)arg, -EFAULT);
                if (val != AFMT_QUERY) {
                        if (hweight32(val) != 1)
                                return -EINVAL;
@@ -2361,178 +2364,178 @@ static int usb_audio_ioctl(struct inode *inode, struct file *file, unsigned int
                        val |= val2 & AFMT_STEREO;
                        if (set_format(as, file->f_mode, val, 0))
                                return -EIO;
-                }
+               }
                val2 = (file->f_mode & FMODE_READ) ? as->usbin.dma.format : as->usbout.dma.format;
-                return put_user(val2 & ~AFMT_STEREO, (int *)arg);
-
-        case SNDCTL_DSP_POST:
-                return 0;
-
-        case SNDCTL_DSP_GETTRIGGER:
-                val = 0;
-                if (file->f_mode & FMODE_READ && as->usbin.flags & FLG_RUNNING) 
-                        val |= PCM_ENABLE_INPUT;
-                if (file->f_mode & FMODE_WRITE && as->usbout.flags & FLG_RUNNING) 
-                        val |= PCM_ENABLE_OUTPUT;
-                return put_user(val, (int *)arg);
-
-        case SNDCTL_DSP_SETTRIGGER:
-                get_user_ret(val, (int *)arg, -EFAULT);
-                if (file->f_mode & FMODE_READ) {
-                        if (val & PCM_ENABLE_INPUT) {
-                                if (!as->usbin.dma.ready && (ret = prog_dmabuf_in(as)))
-                                        return ret;
+               return put_user(val2 & ~AFMT_STEREO, (int *)arg);
+
+       case SNDCTL_DSP_POST:
+               return 0;
+
+       case SNDCTL_DSP_GETTRIGGER:
+               val = 0;
+               if (file->f_mode & FMODE_READ && as->usbin.flags & FLG_RUNNING) 
+                       val |= PCM_ENABLE_INPUT;
+               if (file->f_mode & FMODE_WRITE && as->usbout.flags & FLG_RUNNING) 
+                       val |= PCM_ENABLE_OUTPUT;
+               return put_user(val, (int *)arg);
+
+       case SNDCTL_DSP_SETTRIGGER:
+               get_user_ret(val, (int *)arg, -EFAULT);
+               if (file->f_mode & FMODE_READ) {
+                       if (val & PCM_ENABLE_INPUT) {
+                               if (!as->usbin.dma.ready && (ret = prog_dmabuf_in(as)))
+                                       return ret;
                                if (usbin_start(as))
                                        return -ENODEV;
-                        } else
-                                usbin_stop(as);
-                }
-                if (file->f_mode & FMODE_WRITE) {
-                        if (val & PCM_ENABLE_OUTPUT) {
-                                if (!as->usbout.dma.ready && (ret = prog_dmabuf_out(as)))
-                                        return ret;
+                       } else
+                               usbin_stop(as);
+               }
+               if (file->f_mode & FMODE_WRITE) {
+                       if (val & PCM_ENABLE_OUTPUT) {
+                               if (!as->usbout.dma.ready && (ret = prog_dmabuf_out(as)))
+                                       return ret;
                                if (usbout_start(as))
                                        return -ENODEV;
-                        } else
-                                usbout_stop(as);
-                }
-                return 0;
-
-        case SNDCTL_DSP_GETOSPACE:
-                if (!(file->f_mode & FMODE_WRITE))
-                        return -EINVAL;
-                if (!(as->usbout.flags & FLG_RUNNING) && (val = prog_dmabuf_out(as)) != 0)
-                        return val;
-                spin_lock_irqsave(&as->lock, flags);
-                abinfo.fragsize = as->usbout.dma.fragsize;
-                abinfo.bytes = as->usbout.dma.dmasize - as->usbout.dma.count;
-                abinfo.fragstotal = as->usbout.dma.numfrag;
-                abinfo.fragments = abinfo.bytes >> as->usbout.dma.fragshift;      
-                spin_unlock_irqrestore(&as->lock, flags);
-                return copy_to_user((void *)arg, &abinfo, sizeof(abinfo)) ? -EFAULT : 0;
-
-        case SNDCTL_DSP_GETISPACE:
-                if (!(file->f_mode & FMODE_READ))
-                        return -EINVAL;
-                if (!(as->usbin.flags & FLG_RUNNING) && (val = prog_dmabuf_in(as)) != 0)
-                        return val;
-                spin_lock_irqsave(&as->lock, flags);
-                abinfo.fragsize = as->usbin.dma.fragsize;
-                abinfo.bytes = as->usbin.dma.count;
-                abinfo.fragstotal = as->usbin.dma.numfrag;
-                abinfo.fragments = abinfo.bytes >> as->usbin.dma.fragshift;      
-                spin_unlock_irqrestore(&as->lock, flags);
-                return copy_to_user((void *)arg, &abinfo, sizeof(abinfo)) ? -EFAULT : 0;
-                
-        case SNDCTL_DSP_NONBLOCK:
-                file->f_flags |= O_NONBLOCK;
-                return 0;
-
-        case SNDCTL_DSP_GETODELAY:
-                if (!(file->f_mode & FMODE_WRITE))
-                        return -EINVAL;
-                spin_lock_irqsave(&as->lock, flags);
-                val = as->usbout.dma.count;
-                spin_unlock_irqrestore(&as->lock, flags);
-                return put_user(val, (int *)arg);
-
-        case SNDCTL_DSP_GETIPTR:
-                if (!(file->f_mode & FMODE_READ))
-                        return -EINVAL;
-                spin_lock_irqsave(&as->lock, flags);
-                cinfo.bytes = as->usbin.dma.total_bytes;
-                cinfo.blocks = as->usbin.dma.count >> as->usbin.dma.fragshift;
-                cinfo.ptr = as->usbin.dma.wrptr;
-                if (as->usbin.dma.mapped)
-                        as->usbin.dma.count &= as->usbin.dma.fragsize-1;
-                spin_unlock_irqrestore(&as->lock, flags);
-                return copy_to_user((void *)arg, &cinfo, sizeof(cinfo));
-
-        case SNDCTL_DSP_GETOPTR:
-                if (!(file->f_mode & FMODE_WRITE))
-                        return -EINVAL;
-                spin_lock_irqsave(&as->lock, flags);
-                cinfo.bytes = as->usbout.dma.total_bytes;
-                cinfo.blocks = as->usbout.dma.count >> as->usbout.dma.fragshift;
-                cinfo.ptr = as->usbout.dma.rdptr;
-                if (as->usbout.dma.mapped)
-                        as->usbout.dma.count &= as->usbout.dma.fragsize-1;
-                spin_unlock_irqrestore(&as->lock, flags);
-                return copy_to_user((void *)arg, &cinfo, sizeof(cinfo));
+                       } else
+                               usbout_stop(as);
+               }
+               return 0;
+
+       case SNDCTL_DSP_GETOSPACE:
+               if (!(file->f_mode & FMODE_WRITE))
+                       return -EINVAL;
+               if (!(as->usbout.flags & FLG_RUNNING) && (val = prog_dmabuf_out(as)) != 0)
+                       return val;
+               spin_lock_irqsave(&as->lock, flags);
+               abinfo.fragsize = as->usbout.dma.fragsize;
+               abinfo.bytes = as->usbout.dma.dmasize - as->usbout.dma.count;
+               abinfo.fragstotal = as->usbout.dma.numfrag;
+               abinfo.fragments = abinfo.bytes >> as->usbout.dma.fragshift;      
+               spin_unlock_irqrestore(&as->lock, flags);
+               return copy_to_user((void *)arg, &abinfo, sizeof(abinfo)) ? -EFAULT : 0;
+
+       case SNDCTL_DSP_GETISPACE:
+               if (!(file->f_mode & FMODE_READ))
+                       return -EINVAL;
+               if (!(as->usbin.flags & FLG_RUNNING) && (val = prog_dmabuf_in(as)) != 0)
+                       return val;
+               spin_lock_irqsave(&as->lock, flags);
+               abinfo.fragsize = as->usbin.dma.fragsize;
+               abinfo.bytes = as->usbin.dma.count;
+               abinfo.fragstotal = as->usbin.dma.numfrag;
+               abinfo.fragments = abinfo.bytes >> as->usbin.dma.fragshift;      
+               spin_unlock_irqrestore(&as->lock, flags);
+               return copy_to_user((void *)arg, &abinfo, sizeof(abinfo)) ? -EFAULT : 0;
+               
+       case SNDCTL_DSP_NONBLOCK:
+               file->f_flags |= O_NONBLOCK;
+               return 0;
+
+       case SNDCTL_DSP_GETODELAY:
+               if (!(file->f_mode & FMODE_WRITE))
+                       return -EINVAL;
+               spin_lock_irqsave(&as->lock, flags);
+               val = as->usbout.dma.count;
+               spin_unlock_irqrestore(&as->lock, flags);
+               return put_user(val, (int *)arg);
+
+       case SNDCTL_DSP_GETIPTR:
+               if (!(file->f_mode & FMODE_READ))
+                       return -EINVAL;
+               spin_lock_irqsave(&as->lock, flags);
+               cinfo.bytes = as->usbin.dma.total_bytes;
+               cinfo.blocks = as->usbin.dma.count >> as->usbin.dma.fragshift;
+               cinfo.ptr = as->usbin.dma.wrptr;
+               if (as->usbin.dma.mapped)
+                       as->usbin.dma.count &= as->usbin.dma.fragsize-1;
+               spin_unlock_irqrestore(&as->lock, flags);
+               return copy_to_user((void *)arg, &cinfo, sizeof(cinfo));
+
+       case SNDCTL_DSP_GETOPTR:
+               if (!(file->f_mode & FMODE_WRITE))
+                       return -EINVAL;
+               spin_lock_irqsave(&as->lock, flags);
+               cinfo.bytes = as->usbout.dma.total_bytes;
+               cinfo.blocks = as->usbout.dma.count >> as->usbout.dma.fragshift;
+               cinfo.ptr = as->usbout.dma.rdptr;
+               if (as->usbout.dma.mapped)
+                       as->usbout.dma.count &= as->usbout.dma.fragsize-1;
+               spin_unlock_irqrestore(&as->lock, flags);
+               return copy_to_user((void *)arg, &cinfo, sizeof(cinfo));
 
        case SNDCTL_DSP_GETBLKSIZE:
-                if (file->f_mode & FMODE_WRITE) {
-                        if ((val = prog_dmabuf_out(as)))
-                                return val;
-                        return put_user(as->usbout.dma.fragsize, (int *)arg);
-                }
-                if ((val = prog_dmabuf_in(as)))
-                        return val;
-                return put_user(as->usbin.dma.fragsize, (int *)arg);
-
-        case SNDCTL_DSP_SETFRAGMENT:
-                get_user_ret(val, (int *)arg, -EFAULT);
-                if (file->f_mode & FMODE_READ) {
-                        as->usbin.dma.ossfragshift = val & 0xffff;
-                        as->usbin.dma.ossmaxfrags = (val >> 16) & 0xffff;
-                        if (as->usbin.dma.ossfragshift < 4)
-                                as->usbin.dma.ossfragshift = 4;
-                        if (as->usbin.dma.ossfragshift > 15)
-                                as->usbin.dma.ossfragshift = 15;
-                        if (as->usbin.dma.ossmaxfrags < 4)
-                                as->usbin.dma.ossmaxfrags = 4;
-                }
-                if (file->f_mode & FMODE_WRITE) {
-                        as->usbout.dma.ossfragshift = val & 0xffff;
-                        as->usbout.dma.ossmaxfrags = (val >> 16) & 0xffff;
-                        if (as->usbout.dma.ossfragshift < 4)
-                                as->usbout.dma.ossfragshift = 4;
-                        if (as->usbout.dma.ossfragshift > 15)
-                                as->usbout.dma.ossfragshift = 15;
-                        if (as->usbout.dma.ossmaxfrags < 4)
-                                as->usbout.dma.ossmaxfrags = 4;
-                }
-                return 0;
-
-        case SNDCTL_DSP_SUBDIVIDE:
-                if ((file->f_mode & FMODE_READ && as->usbin.dma.subdivision) ||
-                    (file->f_mode & FMODE_WRITE && as->usbout.dma.subdivision))
-                        return -EINVAL;
-                get_user_ret(val, (int *)arg, -EFAULT);
-                if (val != 1 && val != 2 && val != 4)
-                        return -EINVAL;
-                if (file->f_mode & FMODE_READ)
-                        as->usbin.dma.subdivision = val;
-                if (file->f_mode & FMODE_WRITE)
-                        as->usbout.dma.subdivision = val;
-                return 0;
-
-        case SOUND_PCM_READ_RATE:
-                return put_user((file->f_mode & FMODE_READ) ? as->usbin.dma.srate : as->usbout.dma.srate, (int *)arg);
-
-        case SOUND_PCM_READ_CHANNELS:
+               if (file->f_mode & FMODE_WRITE) {
+                       if ((val = prog_dmabuf_out(as)))
+                               return val;
+                       return put_user(as->usbout.dma.fragsize, (int *)arg);
+               }
+               if ((val = prog_dmabuf_in(as)))
+                       return val;
+               return put_user(as->usbin.dma.fragsize, (int *)arg);
+
+       case SNDCTL_DSP_SETFRAGMENT:
+               get_user_ret(val, (int *)arg, -EFAULT);
+               if (file->f_mode & FMODE_READ) {
+                       as->usbin.dma.ossfragshift = val & 0xffff;
+                       as->usbin.dma.ossmaxfrags = (val >> 16) & 0xffff;
+                       if (as->usbin.dma.ossfragshift < 4)
+                               as->usbin.dma.ossfragshift = 4;
+                       if (as->usbin.dma.ossfragshift > 15)
+                               as->usbin.dma.ossfragshift = 15;
+                       if (as->usbin.dma.ossmaxfrags < 4)
+                               as->usbin.dma.ossmaxfrags = 4;
+               }
+               if (file->f_mode & FMODE_WRITE) {
+                       as->usbout.dma.ossfragshift = val & 0xffff;
+                       as->usbout.dma.ossmaxfrags = (val >> 16) & 0xffff;
+                       if (as->usbout.dma.ossfragshift < 4)
+                               as->usbout.dma.ossfragshift = 4;
+                       if (as->usbout.dma.ossfragshift > 15)
+                               as->usbout.dma.ossfragshift = 15;
+                       if (as->usbout.dma.ossmaxfrags < 4)
+                               as->usbout.dma.ossmaxfrags = 4;
+               }
+               return 0;
+
+       case SNDCTL_DSP_SUBDIVIDE:
+               if ((file->f_mode & FMODE_READ && as->usbin.dma.subdivision) ||
+                   (file->f_mode & FMODE_WRITE && as->usbout.dma.subdivision))
+                       return -EINVAL;
+               get_user_ret(val, (int *)arg, -EFAULT);
+               if (val != 1 && val != 2 && val != 4)
+                       return -EINVAL;
+               if (file->f_mode & FMODE_READ)
+                       as->usbin.dma.subdivision = val;
+               if (file->f_mode & FMODE_WRITE)
+                       as->usbout.dma.subdivision = val;
+               return 0;
+
+       case SOUND_PCM_READ_RATE:
+               return put_user((file->f_mode & FMODE_READ) ? as->usbin.dma.srate : as->usbout.dma.srate, (int *)arg);
+
+       case SOUND_PCM_READ_CHANNELS:
                val2 = (file->f_mode & FMODE_READ) ? as->usbin.dma.format : as->usbout.dma.format;
-                return put_user(AFMT_ISSTEREO(val2) ? 2 : 1, (int *)arg);
+               return put_user(AFMT_ISSTEREO(val2) ? 2 : 1, (int *)arg);
 
-        case SOUND_PCM_READ_BITS:
+       case SOUND_PCM_READ_BITS:
                val2 = (file->f_mode & FMODE_READ) ? as->usbin.dma.format : as->usbout.dma.format;
                return put_user(AFMT_IS16BIT(val2) ? 16 : 8, (int *)arg);
 
-        case SOUND_PCM_WRITE_FILTER:
-        case SNDCTL_DSP_SETSYNCRO:
-        case SOUND_PCM_READ_FILTER:
-                return -EINVAL;
-        }
-        return -ENOIOCTLCMD;
+       case SOUND_PCM_WRITE_FILTER:
+       case SNDCTL_DSP_SETSYNCRO:
+       case SOUND_PCM_READ_FILTER:
+               return -EINVAL;
+       }
+       return -ENOIOCTLCMD;
 }
 
 static int usb_audio_open(struct inode *inode, struct file *file)
 {
-        int minor = MINOR(inode->i_rdev);
+       int minor = MINOR(inode->i_rdev);
        DECLARE_WAITQUEUE(wait, current);
        struct list_head *devs, *adevs;
        struct usb_audiodev *as;
-        struct usb_audio_state *s;
+       struct usb_audio_state *s;
 
        for (;;) {
                down(&open_sem);
@@ -2557,88 +2560,85 @@ static int usb_audio_open(struct inode *inode, struct file *file)
                        break;
                if (file->f_flags & O_NONBLOCK) {
                        up(&open_sem);
-                        return -EBUSY;
-                }
+                       return -EBUSY;
+               }
                __set_current_state(TASK_INTERRUPTIBLE);
                add_wait_queue(&open_wait, &wait);
-                up(&open_sem);
+               up(&open_sem);
                schedule();
                __set_current_state(TASK_RUNNING);
                remove_wait_queue(&open_wait, &wait);
-                if (signal_pending(current))
-                        return -ERESTARTSYS;
-        }
+               if (signal_pending(current))
+                       return -ERESTARTSYS;
+       }
        if (file->f_mode & FMODE_READ)
-                as->usbin.dma.ossfragshift = as->usbin.dma.ossmaxfrags = as->usbin.dma.subdivision = 0;
+               as->usbin.dma.ossfragshift = as->usbin.dma.ossmaxfrags = as->usbin.dma.subdivision = 0;
        if (file->f_mode & FMODE_WRITE)
-                as->usbout.dma.ossfragshift = as->usbout.dma.ossmaxfrags = as->usbout.dma.subdivision = 0;
+               as->usbout.dma.ossfragshift = as->usbout.dma.ossmaxfrags = as->usbout.dma.subdivision = 0;
        if (set_format(as, file->f_mode, ((minor & 0xf) == SND_DEV_DSP16) ? AFMT_S16_LE : AFMT_U8 /* AFMT_ULAW */, 8000)) {
                up(&open_sem);
                return -EIO;
        }
-        file->private_data = as;
-        as->open_mode |= file->f_mode & (FMODE_READ | FMODE_WRITE);
+       file->private_data = as;
+       as->open_mode |= file->f_mode & (FMODE_READ | FMODE_WRITE);
        s->count++;
        as->remove_pending=0;
        MOD_INC_USE_COUNT;
-        up(&open_sem);
-        return 0;
+       up(&open_sem);
+       return 0;
 }
 
 static int usb_audio_release(struct inode *inode, struct file *file)
 {
-        struct usb_audiodev *as = (struct usb_audiodev *)file->private_data;
+       struct usb_audiodev *as = (struct usb_audiodev *)file->private_data;
        struct usb_audio_state *s = as->state;
-       struct usb_device *dev = as->state->usbdev;
-       struct usb_config_descriptor *config=0;
+       struct usb_device *dev = s->usbdev;
        struct usb_interface *iface;
 
-       if (s->usbdev)
-               config = dev->actconfig;
-        if (file->f_mode & FMODE_WRITE)
-                drain_out(as, file->f_flags & O_NONBLOCK);
-        down(&open_sem);
-        if (file->f_mode & FMODE_WRITE) {
-                usbout_stop(as);
-               if (s->usbdev) {
-                       iface = &config->interface[as->usbout.interface];
-                       usb_set_interface(s->usbdev, iface->altsetting->bInterfaceNumber, 0);
-               }
-                dmabuf_release(&as->usbout.dma);
+       if (file->f_mode & FMODE_WRITE)
+               drain_out(as, file->f_flags & O_NONBLOCK);
+       down(&open_sem);
+       if (file->f_mode & FMODE_WRITE) {
+               usbout_stop(as);
+               if (dev && as->usbout.interface >= 0) {
+                       iface = &dev->actconfig->interface[as->usbout.interface];
+                       usb_set_interface(dev, iface->altsetting->bInterfaceNumber, 0);
+               }
+               dmabuf_release(&as->usbout.dma);
                usbout_release(as);
-        }
-        if (file->f_mode & FMODE_READ) {
-                usbin_stop(as);
-               if (s->usbdev) {
-                       iface = &config->interface[as->usbin.interface];
-                       usb_set_interface(s->usbdev, iface->altsetting->bInterfaceNumber, 0);
-               }
-                dmabuf_release(&as->usbin.dma);
+       }
+       if (file->f_mode & FMODE_READ) {
+               usbin_stop(as);
+               if (dev && as->usbin.interface >= 0) {
+                       iface = &dev->actconfig->interface[as->usbin.interface];
+                       usb_set_interface(dev, iface->altsetting->bInterfaceNumber, 0);
+               }
+               dmabuf_release(&as->usbin.dma);
                usbin_release(as);
-        }
-        as->open_mode &= (~file->f_mode) & (FMODE_READ|FMODE_WRITE);
+       }
+       as->open_mode &= (~file->f_mode) & (FMODE_READ|FMODE_WRITE);
        release(s);
-        wake_up(&open_wait);
-        MOD_DEC_USE_COUNT;
-        return 0;
+       wake_up(&open_wait);
+       MOD_DEC_USE_COUNT;
+       return 0;
 }
 
 static /*const*/ struct file_operations usb_audio_fops = {
-        &usb_audio_llseek,
-        &usb_audio_read,
-        &usb_audio_write,
-        NULL,  /* readdir */
-        &usb_audio_poll,
-        &usb_audio_ioctl,
-        &usb_audio_mmap,
-        &usb_audio_open,
-        NULL,   /* flush */
-        &usb_audio_release,
-        NULL,  /* fsync */
-        NULL,  /* fasync */
-        NULL,  /* check_media_change */
-        NULL,  /* revalidate */
-        NULL,  /* lock */
+       &usb_audio_llseek,
+       &usb_audio_read,
+       &usb_audio_write,
+       NULL,  /* readdir */
+       &usb_audio_poll,
+       &usb_audio_ioctl,
+       &usb_audio_mmap,
+       &usb_audio_open,
+       NULL,   /* flush */
+       &usb_audio_release,
+       NULL,  /* fsync */
+       NULL,  /* fasync */
+       NULL,  /* check_media_change */
+       NULL,  /* revalidate */
+       NULL,  /* lock */
 };
 
 /* --------------------------------------------------------------------- */
@@ -3327,7 +3327,7 @@ static void usb_audio_featureunit(struct consmixstate *state, unsigned char *ftr
                printk(KERN_DEBUG "usbaudio: unmuting feature unit %u interface %u\n", ftr[3], state->ctrlif);
                data[0] = 0;
                if (usb_control_msg(dev, usb_sndctrlpipe(dev, 0), SET_CUR, USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_OUT,
-                                    (MUTE_CONTROL << 8) | 0xff, state->ctrlif | (ftr[3] << 8), data, 1, HZ) < 0)
+                                   (MUTE_CONTROL << 8) | 0xff, state->ctrlif | (ftr[3] << 8), data, 1, HZ) < 0)
                        printk(KERN_WARNING "usbaudio: failure to unmute feature unit %u interface %u\n", ftr[3], state->ctrlif);
        }
 #endif
@@ -3625,7 +3625,7 @@ static void usb_audio_disconnect(struct usb_device *dev, void *ptr)
        struct usb_audiodev *as;
        struct usb_mixerdev *ms;
        
-        down(&open_sem);
+       down(&open_sem);
        list_del(&s->audiodev);
        INIT_LIST_HEAD(&s->audiodev);
        s->usbdev = NULL;
@@ -3652,7 +3652,7 @@ static void usb_audio_disconnect(struct usb_device *dev, void *ptr)
        aud->irq_handle = NULL;
 #endif
        release(s);
-        wake_up(&open_wait);
+       wake_up(&open_wait);
 }
 
 int usb_audio_init(void)
diff --git a/drivers/usb/bitstream.c b/drivers/usb/bitstream.c
deleted file mode 100644 (file)
index 5d272b1..0000000
+++ /dev/null
@@ -1,1508 +0,0 @@
-static unsigned char bitstream[] = {
-0x00,0x09,0x0F,0xF0,0x0F,0xF0,0x0F,0xF0,
-0x0F,0xF0,0x00,0x00,0x01,0x61,0x00,0x0D,
-0x64,0x61,0x62,0x75,0x73,0x62,0x74,0x72,
-0x2E,0x6E,0x63,0x64,0x00,0x62,0x00,0x0B,
-0x73,0x31,0x30,0x78,0x6C,0x76,0x71,0x31,
-0x30,0x30,0x00,0x63,0x00,0x0B,0x31,0x39,
-0x39,0x39,0x2F,0x30,0x39,0x2F,0x32,0x34,
-0x00,0x64,0x00,0x09,0x31,0x30,0x3A,0x34,
-0x32,0x3A,0x34,0x36,0x00,0x65,0x00,0x00,
-0x2E,0xC0,0xFF,0x20,0x17,0x5F,0x9F,0x5B,
-0xFE,0xFB,0xBB,0xB7,0xBB,0xBB,0xFB,0xBF,
-0xAF,0xEF,0xFB,0xDF,0xB7,0xFB,0xFB,0x7F,
-0xBF,0xB7,0xEF,0xF2,0xFF,0xFB,0xFE,0xFF,
-0xFF,0xEF,0xFF,0xFE,0xFF,0xBF,0xFF,0xFF,
-0xFF,0xFF,0xAF,0xFF,0xFA,0xFF,0xFF,0xFF,
-0xC9,0xFF,0xFF,0xFF,0xDF,0xFF,0xFF,0xFF,
-0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
-0xFF,0xFF,0xFF,0xFB,0xFF,0xA3,0xFF,0xFB,
-0xFE,0xFF,0xBF,0xEF,0xE3,0xFE,0xFF,0xBF,
-0xE3,0xFE,0xFF,0xBF,0x6F,0xFB,0xF6,0xFF,
-0xBF,0xFF,0x47,0xFF,0xFF,0x9F,0xEE,0xF9,
-0xFE,0xCF,0x9F,0xEF,0xFB,0xCF,0x9B,0xEE,
-0xF8,0xFE,0xEF,0x8F,0xEE,0xFB,0xFE,0x0B,
-0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
-0xFF,0xFF,0xBF,0xFF,0xFF,0xFB,0xFF,0xFF,
-0xBF,0xFF,0xFF,0xFC,0x17,0xFF,0xFF,0xFF,
-0xFF,0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0x7F,
-0xFF,0xFF,0xFB,0xFF,0xFF,0x7F,0xFF,0xFF,
-0xFC,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
-0xFF,0xFF,0xFF,0xFB,0xFF,0xFF,0xFF,0xFF,
-0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0x5F,0xFF,
-0xFF,0xFD,0xFF,0xFF,0xDB,0xFF,0xFD,0xFF,
-0x77,0xFF,0xFD,0xFF,0xFF,0xDF,0xFE,0xFD,
-0xFF,0xFF,0xF2,0xFF,0xFF,0xFF,0xFF,0xFF,
-0xFF,0xFD,0xFF,0xFF,0xFF,0xFD,0xFF,0xFF,
-0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE1,
-0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
-0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0xFF,0xFF,
-0xFF,0xFF,0xFF,0xFF,0xE3,0xFF,0xFF,0xFF,
-0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xBF,
-0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
-0xFF,0x67,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
-0x7F,0xFF,0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,
-0xFF,0xFF,0xDF,0xFF,0xFF,0xFF,0x2F,0xFF,
-0xF3,0xFD,0xFF,0x7F,0xDE,0xF7,0xFD,0xFF,
-0x7F,0xF7,0x7D,0xFF,0x7F,0xDF,0xF7,0xBD,
-0xFF,0x7F,0xFF,0x1F,0xFF,0xEF,0xFB,0xFE,
-0xFF,0xBF,0xEF,0xFB,0xFE,0xFF,0xEF,0xFB,
-0xFE,0xFF,0xBF,0xEF,0xFB,0xFE,0xFF,0xFF,
-0x3F,0xFE,0x7F,0x9F,0xE7,0xF9,0xFE,0x7F,
-0x9F,0xE7,0xFA,0x7F,0x9F,0xE7,0xF9,0xFE,
-0x7F,0x9F,0xE7,0xFF,0xFC,0x7F,0xBF,0xBF,
-0xEF,0xFB,0xFE,0xFF,0xBF,0xEF,0xFB,0xB7,
-0xBF,0xEF,0xFB,0xFE,0xFF,0xBF,0xEF,0xFB,
-0xFF,0xE0,0xFD,0xF9,0xFE,0x7F,0x9F,0xE7,
-0xF9,0xFE,0x7F,0x9D,0xF9,0xFE,0x7D,0x9D,
-0xE7,0xF9,0xFE,0x7F,0x9F,0xED,0xED,0xFF,
-0xFD,0xFF,0x7F,0xDF,0xF7,0xFD,0xFF,0x7F,
-0xDF,0xFD,0xFF,0x7F,0xDF,0xF7,0xFD,0xFF,
-0x7F,0xDF,0xFF,0x9B,0xFF,0xEF,0xFB,0xFE,
-0xFB,0xBF,0xEF,0xBB,0xFE,0xFF,0xAF,0xBB,
-0xBE,0xFF,0xBF,0xEF,0xFB,0xFE,0xFF,0xFF,
-0xB7,0xBF,0xDB,0xF6,0xBD,0xBF,0x6B,0xDB,
-0xF6,0xF9,0xBF,0x5B,0xD6,0xF9,0xBF,0x6F,
-0xDB,0xF6,0xFD,0xBF,0xFF,0x0E,0xFF,0xFF,
-0xFF,0xFF,0x5F,0xFF,0xF7,0xFF,0xFF,0x7F,
-0xF7,0xBD,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
-0xFF,0xDF,0x9F,0xFF,0xFF,0xFF,0xFE,0xFF,
-0xFF,0xEF,0xFE,0xFE,0xFF,0xFF,0x77,0xFF,
-0xFB,0xFB,0xFF,0xFF,0xFF,0xFF,0xF8,0x3F,
-0xFF,0xFD,0xFF,0xFF,0xFF,0xFD,0xFF,0xFF,
-0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
-0xFF,0xFF,0xFF,0xF4,0x7F,0xFF,0xFE,0xFD,
-0xBE,0xFF,0xDF,0xFE,0xFF,0xFF,0xEF,0x7F,
-0xFF,0xCF,0xFF,0xCF,0xFF,0xFF,0xFF,0xDF,
-0xE6,0xFF,0xFF,0x7F,0xDF,0xF7,0xDD,0x7F,
-0x7F,0xDF,0xF7,0xFF,0x7F,0xDF,0xD7,0xFD,
-0xFF,0x7F,0xDF,0xF7,0xFF,0xCD,0xFF,0xF2,
-0xFF,0xFF,0x4F,0x7F,0xF4,0xFF,0xFF,0xFF,
-0xE7,0xEF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
-0xFF,0xFF,0xBB,0xFF,0xEF,0xFF,0xFE,0xFF,
-0xFF,0xFF,0xEF,0xFF,0xFF,0xEF,0xFF,0xFB,
-0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x65,
-0xEF,0xFF,0xFF,0x7F,0xFF,0xFD,0xEF,0xFF,
-0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,
-0xFF,0xFF,0xFF,0xFE,0xCF,0xDF,0xFE,0xFF,
-0xFF,0xFB,0xFF,0xFF,0xFF,0xFF,0xF3,0xFF,
-0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
-0xFE,0xDF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
-0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
-0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xBF,0xFF,
-0xFF,0xFF,0xE3,0x7F,0xFF,0xFF,0xFF,0xFF,
-0xFF,0xFF,0xEF,0xEB,0xFF,0xFE,0xBF,0xFF,
-0xEB,0xFF,0xFC,0x7F,0xFF,0xFF,0xFF,0xEE,
-0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xDD,0xFF,
-0xD6,0xFF,0xFD,0xBF,0xFF,0xFB,0xFF,0xFE,
-0xFD,0xFF,0xFF,0xFD,0xEF,0xFF,0xFF,0xFF,
-0xFF,0xFF,0xFF,0xDE,0xFF,0xFF,0xFF,0xFF,
-0xFF,0xFF,0xBF,0xFF,0xFD,0xFF,0x7F,0xBF,
-0xFF,0x5F,0xDF,0xFF,0xFF,0xBF,0x77,0xFF,
-0xFF,0xFF,0x7F,0xD7,0xFF,0xFF,0xFF,0xFF,
-0xFF,0xC3,0xFF,0xFF,0xFF,0xFF,0xDF,0xEF,
-0xFF,0xFF,0xFE,0xFB,0xFF,0xFF,0xDF,0xBF,
-0xFF,0xFF,0xFF,0xFF,0xED,0xFF,0xB7,0xFF,
-0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
-0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
-0xFF,0xFF,0xFF,0xAF,0x7F,0xFF,0xFF,0xFF,
-0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
-0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
-0xDF,0xBF,0xDF,0xF3,0xFD,0xFB,0xFF,0x5B,
-0xFD,0xFF,0xBF,0xEF,0xF7,0xFF,0xFF,0x7D,
-0xFF,0xFF,0xFF,0xFF,0xF8,0x3B,0xFF,0xBF,
-0x6F,0xFF,0xFE,0xFF,0xBF,0xFF,0xEB,0x7D,
-0xFF,0xEF,0xFB,0xFE,0xFF,0xFF,0xFF,0xFF,
-0xFF,0xF2,0x7F,0xFC,0xFF,0x3F,0xDF,0xED,
-0xFE,0xFF,0xFF,0xFF,0xFF,0xEF,0x5F,0xF7,
-0xB5,0xFF,0xEF,0xFF,0xFF,0xFF,0xE0,0x3F,
-0x9F,0x9E,0xFF,0xFF,0xEF,0xFF,0xDF,0xFF,
-0xBF,0x5F,0xBF,0xCF,0xF3,0xFF,0xFF,0xFF,
-0xFF,0xFF,0xFF,0x69,0xAF,0x33,0xFD,0xFF,
-0xFB,0xFF,0xFF,0xFF,0xFF,0xFC,0xFF,0x7F,
-0xD9,0xFF,0xDF,0xFF,0xFF,0xFF,0xFF,0xF5,
-0xA3,0xDF,0x6E,0xDE,0xFF,0xFF,0xBD,0xFF,
-0xFF,0xFE,0xFF,0xFF,0xFF,0xFE,0xE7,0xFD,
-0xFF,0xFF,0xFF,0xF9,0xEF,0xC6,0xFE,0xB7,
-0xAD,0xE5,0xF9,0xFF,0xFF,0xFF,0xCF,0xFF,
-0xFF,0xFF,0xCD,0xFB,0x7F,0xFF,0xFF,0xFF,
-0xF9,0xF6,0x0F,0xDF,0xEC,0xCF,0x7F,0xFF,
-0xFB,0x7F,0xFF,0xFF,0xFF,0xFD,0xFF,0xFE,
-0xF9,0xFD,0x7F,0xFF,0x7F,0xFF,0xF9,0x5B,
-0xFF,0x73,0xDC,0xFD,0x7B,0xDF,0xFF,0xFF,
-0xFF,0x7B,0xFF,0xFF,0xF7,0x53,0xD6,0xFF,
-0xFF,0xFF,0xFF,0xD8,0x9F,0xFE,0xFF,0xEF,
-0x7F,0xEE,0xFF,0xFF,0xFF,0xFB,0xED,0xED,
-0xFD,0xFF,0xFE,0xFF,0xFF,0xFB,0x7F,0xFF,
-0xE2,0x7F,0xFF,0x6F,0xD8,0x57,0xF7,0xFF,
-0xFF,0xFF,0xDF,0xFF,0xE8,0xFF,0xFF,0xFD,
-0xFF,0xFF,0xFC,0x7F,0xFF,0xE4,0xFF,0xFB,
-0xEF,0xFB,0xFE,0xDF,0xB7,0xED,0xFF,0xFE,
-0xDF,0x7F,0xFF,0xFE,0x7F,0xB7,0xFF,0xFF,
-0xFF,0xFF,0x89,0xFF,0xFF,0xCF,0xF3,0xFE,
-0x7F,0xFF,0xEF,0xFF,0xFE,0x7E,0x7F,0xFB,
-0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF1,
-0xFF,0xEB,0x7A,0xD5,0xBF,0x6F,0xDB,0xBE,
-0xFD,0xB7,0xD8,0xF6,0xE5,0xBF,0x6F,0xFB,
-0xFE,0xF5,0xBD,0x7E,0x06,0xFF,0xDF,0xF7,
-0xFB,0xF6,0xFF,0x3F,0xFF,0xDB,0xFF,0xFF,
-0x6F,0xFB,0xF7,0xFF,0xFF,0xFF,0xFB,0xFE,
-0xF7,0xAF,0xFF,0xB7,0xED,0xEF,0xF7,0xFE,
-0xFF,0xFF,0xDF,0xFF,0xFE,0xFF,0xEF,0xFF,
-0xFF,0xFF,0xFF,0xBF,0xF7,0xFC,0x1F,0xEE,
-0xFB,0xFE,0xBD,0xFF,0x7F,0x5F,0xD7,0xFD,
-0xFB,0x43,0xFF,0xFF,0xFD,0xFF,0x5F,0xFF,
-0xF7,0xFF,0xF9,0x3F,0xFF,0xCF,0xF3,0xFD,
-0xF7,0x7E,0xEF,0xA7,0xF9,0xFE,0x8F,0xA7,
-0xE9,0xF3,0x7E,0x9F,0xFB,0xF8,0xFF,0xFF,
-0x3F,0xFD,0x7F,0x5F,0xDF,0xFD,0xFF,0xFF,
-0x5F,0xFF,0xFD,0x5F,0xFF,0xFF,0x7F,0xFD,
-0x7F,0xFD,0x9F,0xFF,0xE0,0xFF,0xFA,0xF8,
-0xBE,0x6F,0x9F,0xE6,0xF8,0xBE,0x3F,0x9A,
-0xF9,0xBE,0x6F,0x9F,0xE2,0xF9,0xFE,0x6F,
-0x9F,0xF9,0xFF,0xF5,0xFD,0x7F,0xCF,0xDF,
-0xFD,0xFD,0x7F,0xFF,0xF5,0xFF,0xFF,0xFF,
-0xF7,0xF5,0xFD,0x0F,0xDB,0xFF,0xD3,0xFF,
-0xEB,0xFA,0xFF,0xFF,0xBF,0xFF,0xFA,0xFF,
-0xFF,0xCB,0xFB,0xFE,0xFF,0xFF,0xEB,0xFA,
-0xFE,0xFF,0xFF,0xB7,0xFF,0xFF,0xFF,0xFF,
-0xBF,0xFF,0xDF,0xF5,0xFF,0xFF,0xD7,0xFF,
-0xFF,0xFF,0xDF,0xD7,0xF5,0xFF,0x7F,0xFE,
-0x4F,0xFF,0xFD,0xFF,0x7F,0x7F,0xFF,0xAD,
-0xEB,0xFB,0xFF,0xAD,0xFF,0xFF,0xFF,0xFF,
-0xAF,0xEB,0xFB,0xFF,0xFC,0x0D,0xFF,0xFF,
-0xDF,0xD2,0xFD,0xFF,0xFF,0xFD,0xF6,0xFF,
-0xFF,0x7F,0xFF,0xFF,0x1F,0xFF,0xFF,0xFF,
-0xFF,0xFB,0x3F,0x7D,0xEB,0x32,0xFE,0xBF,
-0x2F,0xEB,0xFA,0xAE,0xBD,0xE0,0xFA,0x7E,
-0xBF,0xAD,0xEB,0xFA,0xFE,0xBF,0xF5,0x7F,
-0xFF,0xDE,0xFE,0xE3,0xFB,0xFF,0xFF,0xFF,
-0xDF,0xEF,0x4F,0xDF,0xFF,0x7F,0xDF,0xFF,
-0xF7,0xFF,0xFF,0xF8,0x7F,0xFF,0xFF,0xEF,
-0xFB,0xFF,0xFF,0xFF,0xEF,0xFF,0xFF,0xDF,
-0xED,0xFB,0xDF,0xFF,0xBF,0xFF,0xFF,0xFF,
-0x81,0xFF,0xFF,0xFF,0xFF,0x3F,0xFF,0xFF,
-0xFF,0xFF,0xFE,0xDD,0xFE,0xEF,0xFD,0xFF,
-0xFF,0xFB,0xFE,0xF7,0xFF,0x93,0xFD,0xFB,
-0x7E,0xFF,0xFE,0x87,0xE9,0xFF,0x7F,0xB3,
-0x9F,0xFE,0xFE,0xFF,0xAF,0xFD,0xFE,0x7E,
-0x3F,0xFE,0x67,0xFF,0xFF,0xF7,0xFF,0xFF,
-0xFC,0xF7,0xDF,0xFD,0xFF,0x7F,0xFF,0xFF,
-0x7F,0x6D,0xFF,0xFF,0xFE,0xFF,0xFF,0x2F,
-0xFF,0xBF,0xFF,0xFF,0xEE,0xFF,0xBE,0xFF,
-0xFF,0xFE,0xFF,0xEF,0xFF,0xFF,0xFE,0xFF,
-0xEF,0xFF,0xFF,0xFA,0x5F,0xFF,0xFF,0xFB,
-0xFF,0xFF,0xEF,0xFF,0xFB,0xFE,0xFD,0xFF,
-0xFE,0xFF,0xFB,0xFF,0xFF,0xFF,0x7F,0xFF,
-0xFE,0xBF,0xDF,0xFF,0xFB,0xFF,0xFF,0xF7,
-0xFC,0xFD,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,
-0xFF,0xFF,0xFF,0xFF,0xFF,0xF2,0x7F,0xFF,
-0xFF,0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0xFF,
-0xF3,0xFF,0xFF,0xFF,0xEF,0xFB,0xFF,0xFF,
-0xFF,0xDF,0xE2,0xFF,0xFF,0xFB,0xFF,0xFF,
-0xFF,0xFF,0xFF,0xFF,0xFB,0xE7,0xFF,0xFD,
-0xFF,0xFF,0xFF,0xBF,0xFF,0xFF,0xFF,0xED,
-0xEF,0xFD,0xFF,0xFF,0xDF,0xD7,0xF5,0xFD,
-0x7F,0x5D,0xFD,0xFF,0x7F,0xDF,0x97,0xF4,
-0xFD,0x7B,0x5F,0xFF,0xC9,0xFF,0xFB,0xFE,
-0xFF,0xBF,0xFF,0x5F,0xFF,0xFF,0xF7,0xFF,
-0xEF,0xFD,0xFF,0xEF,0xFF,0xFF,0xFF,0xFF,
-0xFF,0xF7,0xFF,0xD7,0xFD,0x7D,0x7F,0xFF,
-0xFF,0xFF,0xFF,0xEF,0xDF,0xF7,0xFD,0xFF,
-0xBB,0xFF,0xFF,0x7F,0xFF,0xFE,0xE3,0xFF,
-0xF9,0xFE,0x7F,0xBF,0xEF,0xFB,0xFE,0xFF,
-0xBF,0xF9,0xFE,0xFF,0x9F,0xEF,0xF9,0xFE,
-0xFF,0xBF,0xF3,0xDA,0xFF,0x37,0xCD,0xF3,
-0x7C,0xDF,0x37,0xCD,0xF3,0x7F,0x37,0xCD,
-0xF3,0x7C,0xDF,0x37,0xCC,0xF3,0x7F,0x5A,
-0xBD,0xF6,0xFD,0xBF,0x6F,0xDB,0xF6,0xFD,
-0xBF,0x6F,0xDE,0xFD,0xBF,0x6F,0xDB,0xF6,
-0xFD,0xBF,0x6F,0xFE,0xF1,0x6F,0xEB,0x7A,
-0xDE,0xB7,0xAD,0xEB,0x7A,0xDE,0xB7,0xAF,
-0x7A,0xDE,0xB7,0xAD,0xEB,0x7A,0xDE,0xB7,
-0xFF,0x7E,0xFF,0xFE,0xCD,0xB3,0x6C,0xDB,
-0x36,0xCD,0xB3,0x6C,0xDE,0xCD,0xB3,0x6C,
-0xDB,0x36,0xCD,0xB3,0x6C,0xDF,0xC9,0xBF,
-0xF7,0xBD,0xEF,0x7A,0x9E,0xA7,0xA9,0xEA,
-0x7A,0xB7,0xBD,0xEA,0x7B,0xDE,0xA7,0xBD,
-0xCA,0x72,0x8D,0x91,0xFF,0xEF,0xFB,0xFE,
-0xFF,0xBF,0xEF,0xFB,0xFE,0xF7,0xEF,0xFB,
-0xFE,0xFF,0xBF,0xEF,0xFB,0xFE,0xFF,0xFE,
-0x87,0xFF,0xF6,0xFD,0xBF,0x6F,0xDB,0xF6,
-0xFD,0xBF,0x6F,0xF6,0xFD,0xBF,0x6F,0xDB,
-0xF6,0xFD,0xBF,0x6F,0xFE,0x4F,0xFF,0xBF,
-0xEF,0xBB,0xEE,0xFB,0xBE,0xEF,0xBB,0xEF,
-0xBE,0xEF,0xBB,0xEE,0xFB,0xBE,0xEF,0xBB,
-0xEF,0xFC,0x5F,0xFF,0xFF,0xFF,0x3F,0xCF,
-0xF3,0xFC,0xFF,0x3F,0xCF,0xFC,0xFF,0x3F,
-0xCF,0xF3,0xFC,0xFF,0x3F,0xCF,0xFD,0x9F,
-0xFE,0xBF,0xAF,0xEB,0xFA,0xFE,0xBF,0xAF,
-0xEB,0xFE,0xBF,0xAF,0xEB,0xFA,0xFE,0xBF,
-0xAF,0xEB,0xFF,0xE1,0x6F,0xFD,0xFF,0x7F,
-0xDF,0xF7,0xFD,0xFF,0x7F,0xDF,0xFD,0xFF,
-0x7F,0xDF,0xF7,0xFD,0xFF,0x7F,0xDF,0xFF,
-0x7A,0xBF,0xFB,0xFE,0xDF,0xB7,0xED,0xFB,
-0x7E,0xDF,0xB7,0xFB,0x7E,0xDF,0xB7,0xED,
-0xFB,0x7E,0xDF,0xB7,0xFF,0xC9,0xFF,0xFF,
-0xBF,0xEF,0xFB,0xFE,0xFF,0xBF,0xEF,0xFB,
-0xFF,0xBF,0xEF,0xFB,0xFE,0xFF,0xBF,0xEE,
-0xFB,0xFE,0xBB,0xFF,0xFE,0xFF,0xBF,0xEF,
-0xFB,0xFE,0xFF,0xBF,0xEF,0xFE,0xFF,0xBF,
-0xEF,0xFB,0xFE,0xFF,0x3F,0xCF,0xFF,0xE7,
-0xFE,0xFF,0xF5,0xFD,0x77,0x5D,0xD7,0x35,
-0xDD,0x77,0xD7,0xF5,0xCD,0x7B,0x5D,0xD7,
-0xF5,0xDD,0x77,0xFE,0x27,0xFF,0xFF,0x8B,
-0xE2,0xF8,0xBE,0x2F,0x8B,0xE2,0xF9,0xAF,
-0x8B,0xE2,0xF8,0xBE,0x2F,0x8B,0xE2,0xF9,
-0xFE,0x1F,0xFF,0x5F,0xD7,0xF5,0xFD,0x7F,
-0x5F,0xD7,0xF5,0xFF,0x5F,0xD7,0xF5,0xFD,
-0x7F,0x5F,0xD7,0xF5,0xFF,0xFA,0x3F,0xFE,
-0xBF,0xAF,0xEB,0xFA,0xFE,0xBF,0xAF,0xEB,
-0xEC,0xBF,0xAF,0xEB,0xFA,0xFE,0xBF,0xAF,
-0xEB,0xFF,0xFE,0x7F,0xFD,0x7F,0xFF,0xFF,
-0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
-0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE6,
-0xFF,0xFA,0xDF,0xF7,0xFD,0xFF,0x7F,0xDF,
-0xF7,0xFC,0xFF,0xDF,0xF7,0xFD,0xFF,0x7F,
-0xDF,0xF7,0xFD,0xFF,0xF5,0xFF,0xFF,0xFF,
-0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFB,0xFF,
-0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
-0xFF,0x02,0xFF,0xFE,0xBF,0xAB,0xEB,0xFA,
-0xBE,0xBF,0x23,0xEB,0xDE,0x1F,0xAF,0xEA,
-0xFA,0xFE,0xAF,0xAF,0xEB,0xFD,0x97,0xFF,
-0xF3,0xFC,0x7B,0x1F,0xCF,0xF1,0xFC,0x7F,
-0x1F,0xF1,0xFC,0x77,0x1F,0xCD,0xF1,0xFC,
-0xFF,0x1F,0xFE,0x87,0xFF,0xAF,0xEF,0xFA,
-0xFE,0xFF,0xAF,0xEF,0xFA,0xFD,0xBF,0x2B,
-0xFB,0x7E,0xBF,0xBF,0xEB,0xFB,0xFB,0xFB,
-0xDF,0xFF,0xFB,0xF7,0xFF,0xFF,0x7F,0xF7,
-0xF7,0xFF,0xFD,0xDF,0xFE,0xFC,0xDF,0xFF,
-0xDF,0xFF,0xFD,0xFF,0xDA,0xBF,0xFF,0xBB,
-0xEF,0xFB,0xF9,0xFF,0xBE,0xEF,0xFB,0xFB,
-0xBF,0xEF,0xFB,0xFE,0xFF,0xBF,0xEF,0xFB,
-0xFF,0xF7,0x7F,0xFD,0xD7,0xFF,0xFF,0x7F,
-0xFF,0xFF,0xFF,0xFE,0xF7,0xFF,0xFE,0xFF,
-0xF7,0xFF,0xFF,0x7F,0xFF,0xFF,0xEC,0xFF,
-0xFF,0xFE,0xDF,0xBF,0xFF,0xFB,0xFE,0xFF,
-0xBB,0x68,0xAE,0x1F,0xAE,0xFB,0xFB,0xFF,
-0xFF,0xBF,0xFF,0xD5,0xFF,0x7F,0xFF,0xFF,
-0xF7,0xFE,0xFE,0xFF,0xBF,0xEF,0x9F,0xFD,
-0x7F,0xFF,0xCB,0xFF,0xFF,0xDF,0xFF,0xFF,
-0xBB,0xF7,0xBF,0xFF,0xFF,0xFF,0xFF,0xDF,
-0xFF,0xBF,0xFB,0xFF,0xFF,0xFF,0xDE,0x3F,
-0xFF,0xFF,0xFF,0xFF,0xFF,0xA7,0xFF,0xFF,
-0xFF,0xFF,0xEF,0xFF,0x7F,0xFB,0xFD,0xFB,
-0x7F,0xFF,0xFF,0xFF,0xFF,0xCF,0xF3,0x7C,
-0xFF,0x7F,0x8D,0x7F,0xFF,0xFF,0xFF,0xFF,
-0xFB,0xFF,0xF7,0xFB,0xFE,0xFD,0xFF,0xFF,
-0xFF,0xFF,0xF7,0xFD,0xFF,0x7F,0xFD,0x1F,
-0xFD,0xFF,0xFF,0xFF,0xFF,0xBF,0xDF,0xFF,
-0xFF,0xFE,0x5C,0xFF,0x6D,0xFF,0x7F,0xAB,
-0xE7,0xF1,0xFF,0xFD,0x9F,0xFF,0xFF,0xAD,
-0xEB,0x7A,0x3F,0x1F,0xFF,0xFF,0xFE,0xBF,
-0xAF,0xF3,0xDE,0xF5,0xFF,0x8F,0xFB,0xDF,
-0xE6,0x7F,0xFF,0xDF,0xF3,0xFD,0xFF,0x7E,
-0xFF,0xFF,0xFF,0xFF,0xFF,0xFD,0xF7,0xF3,
-0x7F,0xDF,0xF7,0xEF,0xFF,0xF6,0x3F,0x9F,
-0xDF,0xFF,0xFF,0xEE,0xFF,0xFF,0xEF,0xFB,
-0xFF,0xFF,0xF9,0xFB,0xFE,0x4F,0xBF,0xEF,
-0xBB,0xFF,0x69,0xAF,0xAF,0xFC,0xFF,0x3F,
-0xDD,0xFF,0xFC,0xBF,0x8F,0xFF,0xFD,0xF3,
-0xBF,0xED,0x9E,0xFC,0xBF,0x6F,0xF5,0xD3,
-0xDF,0xFF,0xDB,0xD6,0xF5,0xEF,0xFD,0xFE,
-0xFF,0xB9,0xFF,0x1F,0xD2,0xA9,0xAF,0xFF,
-0xDB,0xF7,0xBF,0xEF,0x46,0xFF,0xFF,0xAD,
-0xEB,0x7A,0xDF,0xEF,0xF7,0xFF,0x7F,0xF7,
-0x9F,0xED,0xFF,0x7F,0xFF,0xAD,0xEB,0x7F,
-0xF5,0x6F,0xFF,0xFD,0xFB,0xD6,0xF4,0xF7,
-0xFB,0xF9,0x7E,0x7F,0xFF,0x5F,0xC2,0xFE,
-0xBF,0xFD,0xFB,0x33,0xDF,0xF9,0x5B,0xFF,
-0xFF,0xDD,0x67,0x7D,0xCF,0xEF,0xDB,0xEC,
-0xFF,0x77,0xDD,0xF7,0xFD,0xFF,0xFF,0xDE,
-0xA7,0xBF,0xD4,0x9F,0xFF,0xFF,0xBF,0xEF,
-0xFE,0xFF,0xDF,0xEF,0xBB,0xFF,0xFF,0xEF,
-0xEB,0xFA,0xFF,0xEF,0xBD,0xFB,0xFF,0xE2,
-0x7F,0xFF,0xDF,0xDF,0xF7,0xFD,0xBF,0xBB,
-0x73,0xF7,0xFD,0x7F,0xDF,0xDE,0xF7,0xBF,
-0xEA,0xDB,0xF6,0xFF,0xD6,0xFF,0xFF,0x66,
-0xFF,0xBE,0xFF,0xBF,0x6B,0xD9,0xF6,0xDF,
-0xFF,0xFB,0x7E,0x7F,0xB7,0x7E,0xFF,0xFE,
-0xFF,0xCD,0xFF,0xFE,0x7F,0xFF,0xFC,0xFD,
-0x3F,0xFB,0xFB,0xF7,0xFF,0xFF,0xFB,0xF6,
-0x7D,0xFE,0x7F,0xFF,0xFC,0xFF,0xB9,0xFF,
-0xF9,0xFA,0xFE,0xBF,0xAF,0x5B,0xD6,0xED,
-0xAD,0x7B,0xF6,0xF9,0xBF,0xEF,0xF8,0xFA,
-0xFE,0xBF,0xFE,0xE6,0xFF,0xFF,0xF7,0xFD,
-0xFF,0x7F,0xBF,0xEF,0xF3,0xFF,0xFF,0x6F,
-0xF7,0xFE,0xFF,0xFF,0xF7,0xFD,0xFE,0xF7,
-0xEF,0xFF,0xFB,0xEF,0xFB,0x7E,0xDE,0xFE,
-0xFF,0xBF,0xFF,0xFE,0xFF,0xFF,0xFB,0xFF,
-0xFF,0xEF,0xFB,0x6F,0xFC,0x1F,0xFE,0xE7,
-0xFF,0xFF,0xFF,0xEF,0xFF,0xD3,0xB4,0xBB,
-0xFF,0xFF,0xFD,0xBF,0x6F,0xE3,0xFE,0xFF,
-0xBF,0xFC,0xBF,0xF7,0xCF,0xF7,0xFD,0xFF,
-0x2F,0xDF,0xAB,0xEA,0xFF,0xDF,0xE7,0xEA,
-0x9A,0xAF,0xEF,0xFB,0xFE,0xFF,0xF5,0x3F,
-0xFD,0x7E,0xFF,0xD7,0xF5,0xFB,0xFF,0xFD,
-0xF7,0xFF,0x7F,0xFE,0xF7,0xFD,0xFF,0xD7,
-0xFF,0xD7,0x7F,0xEE,0x7F,0xFA,0x79,0xFE,
-0x2F,0x8B,0xE6,0xF9,0xFE,0x3F,0x9E,0xF9,
-0xBE,0x2F,0x0B,0xE7,0xF9,0xFE,0x2F,0x9F,
-0xFD,0xFF,0xFE,0x7D,0x7F,0x5F,0xD7,0xFF,
-0xFF,0x7F,0xFF,0xFD,0xFF,0x7F,0x5F,0x97,
-0xFF,0xFD,0x7F,0x5F,0xFF,0xE3,0xFF,0xFF,
-0xFA,0xFE,0xBF,0xAF,0xFB,0xFB,0xFF,0xFF,
-0xCF,0xEB,0xFE,0xBF,0xAF,0xFF,0xFA,0xFE,
-0xBF,0xFF,0x87,0xFF,0xFF,0xF5,0xFF,0xFF,
-0xFF,0xFF,0xFD,0xFF,0x7F,0xFF,0xFF,0xFF,
-0xFB,0xFF,0xFF,0xF5,0xFF,0xFF,0xFE,0x0F,
-0xFF,0xFD,0xEB,0xFF,0xFF,0xF7,0xFF,0xEF,
-0x7B,0xDF,0xFE,0xFF,0xFF,0xDF,0xF7,0xFD,
-0xEB,0x7F,0xDF,0xFF,0x5F,0xFF,0xFF,0xFF,
-0xFF,0xFD,0xBF,0xFF,0x7E,0xFA,0xBF,0xC7,
-0xDB,0xF7,0xBD,0x3F,0xFB,0xFF,0xF6,0xFF,
-0xFA,0xAF,0xFF,0xEB,0xFA,0xFE,0x3F,0x2F,
-0xEA,0xFA,0x3E,0xAD,0xC9,0xBA,0xF6,0xAD,
-0xAF,0xEB,0xFA,0xF6,0xBF,0xFE,0x7F,0xFF,
-0xFF,0xFD,0xFF,0xF1,0x7F,0x3F,0xCF,0xF1,
-0xEF,0xFF,0x7F,0xFF,0xBC,0xDF,0xDF,0xF7,
-0xDD,0xFF,0xE0,0x7F,0xFF,0xFF,0xFE,0xFF,
-0xFA,0xEC,0xBB,0x7F,0x5F,0xFF,0xFB,0xEC,
-0xFF,0xEF,0xB7,0xFF,0xF7,0xFF,0xFF,0xB5,
-0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0xEE,0xDF,
-0x5F,0xDF,0xDE,0xFF,0xAE,0xE7,0x77,0xFF,
-0xFF,0xDF,0xF7,0xFF,0xE3,0xFF,0xFA,0xBB,
-0xFE,0xFF,0xAF,0xFD,0xFB,0xFE,0xBF,0xAB,
-0xF9,0xFE,0xFF,0xBF,0x7F,0xBF,0xFE,0xBD,
-0xFE,0xD7,0xFF,0x9F,0xFD,0xFF,0xBE,0xEF,
-0xFF,0xEE,0xFD,0xBB,0x5B,0xEF,0xFF,0x7F,
-0xEF,0xFF,0xEF,0xFF,0x7F,0xFF,0x4F,0xFF,
-0xEF,0xFB,0xBC,0xFC,0xFF,0xFF,0xFF,0xFE,
-0xFE,0xFD,0xFA,0xFE,0xFB,0xFF,0xFD,0xF3,
-0xFB,0xFF,0xF8,0x5F,0xFF,0xFF,0xD7,0xF5,
-0xFD,0xDF,0xEF,0xFF,0xF3,0xDC,0x5F,0xCE,
-0xF5,0xBD,0xFF,0xFF,0xD7,0xFF,0xFF,0xF9,
-0x3F,0xFF,0xDF,0xF7,0xFF,0xFE,0xFF,0xFD,
-0xFF,0xFB,0xFF,0xF7,0xB9,0x7D,0xFE,0xDF,
-0xFF,0xFF,0xFF,0xFF,0xF9,0x7F,0xFF,0xFE,
-0xFF,0xFF,0x7F,0xFF,0xFE,0xFF,0xFF,0xF7,
-0xF6,0xFF,0xBF,0xF1,0xF8,0xFF,0xFF,0xFF,
-0xFF,0xE0,0xFF,0xFF,0xFF,0xFF,0xF9,0xFF,
-0xFF,0xFF,0xFF,0xFF,0xEF,0xEF,0xFF,0xFF,
-0x9B,0xFB,0x7F,0xFF,0xFF,0xFF,0xC1,0xFF,
-0xDF,0xFF,0x3F,0x5F,0xD7,0xBF,0xEF,0xBB,
-0xDE,0xEE,0xFF,0x7F,0xDF,0xFF,0xFE,0xF5,
-0x7F,0xDF,0xFF,0x99,0xFF,0xFF,0xFA,0xFF,
-0xBF,0xFD,0xEB,0x7A,0xFF,0xB7,0xFE,0xFE,
-0xFF,0xFF,0xEF,0xFF,0xFF,0xFD,0xBF,0xFF,
-0x97,0xFF,0xFD,0xF7,0xFF,0x7F,0xF7,0xFF,
-0xFF,0xFD,0x5F,0xFE,0xF3,0xF9,0xDF,0xDF,
-0xFF,0xFF,0xFC,0xFF,0xFF,0x83,0xFF,0xFF,
-0xFE,0xFF,0x9E,0xEC,0xFB,0xEE,0xFF,0x9F,
-0xBF,0xEF,0xFF,0xFE,0xED,0x7B,0xFF,0xFF,
-0xFF,0xF1,0x5A,0xFF,0xFF,0xFD,0xFF,0x7C,
-0x69,0x3B,0xDF,0xFF,0x7F,0x1F,0xDF,0xFF,
-0xFD,0xBA,0xFF,0xFF,0xFB,0xFF,0x5B,0xBD,
-0xFF,0xFF,0xFF,0xFF,0xD7,0xB6,0xED,0xE9,
-0xFF,0xD6,0xBD,0x6F,0x5F,0xFB,0xFF,0xEF,
-0xFF,0x5F,0xFE,0xF6,0x6F,0xFF,0xFF,0xFF,
-0xFF,0xF7,0xEB,0x7A,0xDF,0xFF,0x9F,0x7F,
-0x7F,0xFF,0xB7,0xFF,0xFF,0xFE,0xDF,0xFF,
-0x6C,0xFF,0xFB,0xFF,0xBB,0x6F,0xEB,0xFE,
-0xCC,0xF7,0xA5,0xFA,0x5C,0xF5,0x75,0xBB,
-0xB7,0xDF,0xFE,0x6F,0x5F,0xC5,0xBF,0xFD,
-0x7B,0xFE,0xFF,0x95,0xE7,0x29,0xCF,0x4F,
-0xF5,0x91,0xEE,0x6B,0xDF,0xEF,0xFD,0x54,
-0xF5,0xBD,0xB1,0xFF,0xEF,0xEE,0xFB,0xBE,
-0xBF,0xAF,0xFE,0xDE,0xBD,0x6F,0xDA,0xF2,
-0xFF,0xAF,0xBE,0xFF,0xFF,0xFD,0x7E,0xA7,
-0xFF,0xF7,0xFF,0xBF,0xEF,0x7B,0xF6,0xFD,
-0xBD,0x4A,0xF2,0x85,0x85,0xBF,0x5B,0xFE,
-0xB5,0xFD,0xFA,0xFF,0x4F,0xFF,0xFE,0xDF,
-0xFF,0xED,0xFF,0xBF,0xFF,0xBF,0x7F,0xFE,
-0xFF,0xB7,0x6D,0xFF,0xF7,0xBF,0xBF,0xEF,
-0xFD,0x1F,0xFF,0xFE,0x7D,0xFF,0x67,0xFF,
-0xFF,0xFF,0x3F,0x7F,0xFE,0xBF,0xFF,0xE7,
-0xDF,0xE7,0xFF,0xEF,0x6B,0xFC,0x1F,0xFF,
-0xBF,0xEF,0xFB,0xFE,0xDE,0xBF,0xAF,0xFA,
-0xFF,0xB6,0xEF,0xF9,0xFE,0xFF,0x8F,0xEF,
-0xDB,0xEF,0xAB,0x6F,0xFB,0xFE,0xFF,0xFF,
-0xEF,0xFD,0xFF,0x7F,0xFF,0xFF,0xDE,0xFF,
-0xFF,0xEF,0xFF,0xFF,0xFF,0x3F,0xFF,0x6C,
-0xFF,0xBF,0xFB,0xFF,0xFE,0xFF,0xFB,0xFE,
-0xDF,0xFF,0xFF,0xEF,0xFF,0xFF,0xBF,0xFF,
-0xFF,0xFE,0xFB,0xFF,0xD5,0x7F,0xFF,0xFF,
-0xEF,0xFB,0xFF,0xFF,0xBF,0xEF,0x43,0xB5,
-0xFD,0x6F,0xCF,0xD6,0xBE,0x3F,0x7F,0xDB,
-0xFE,0xC3,0xFF,0xFD,0xFF,0xAF,0xEB,0xFB,
-0xFC,0xFF,0x3E,0xEF,0xE8,0xFA,0xBD,0xCD,
-0xAA,0xFE,0xFE,0x7D,0xCF,0xFF,0xB7,0xFF,
-0xF7,0xFF,0xFF,0xFF,0xFD,0xFF,0x75,0xCD,
-0x52,0xD7,0xFD,0xFB,0xF7,0xDD,0xFB,0xEF,
-0xEB,0xFF,0xFF,0x4F,0xFF,0xBF,0x9F,0xE7,
-0xF9,0xFC,0x7F,0x8B,0xC3,0xF9,0xAF,0x8F,
-0xE7,0xE9,0xBE,0x7F,0x9F,0xE6,0xF9,0xFC,
-0x5F,0xFF,0xFF,0xF7,0xFD,0xFF,0x7A,0x5F,
-0xD7,0xED,0xFF,0xFF,0xD7,0xFF,0xDD,0x7F,
-0xE7,0xFF,0xFC,0xFF,0xFC,0x3F,0xFF,0xFF,
-0xFF,0xFB,0xFF,0xFE,0xBF,0xAF,0xFF,0xFD,
-0xFF,0xEF,0xFF,0xEB,0xFF,0xFF,0xFF,0xFF,
-0xFF,0xF7,0x7F,0xFF,0x7F,0xDF,0xFF,0xFD,
-0xFD,0x7F,0xFE,0xF7,0xFD,0x7F,0xDF,0xFF,
-0xFD,0xFF,0xFF,0xDF,0xFB,0xFF,0xEE,0xFF,
-0xFB,0xFF,0xF7,0xFD,0xFF,0x7A,0xDF,0xF5,
-0xFD,0xFA,0xDF,0xF7,0xFC,0xFF,0x7F,0xDF,
-0xBF,0xED,0xFF,0xC9,0xFF,0xDF,0xFF,0xBF,
-0x2F,0xFB,0xFF,0xBC,0xAD,0xFF,0xF7,0xFF,
-0xFF,0xEF,0xD3,0xFF,0x7D,0xBF,0x6F,0xFF,
-0xFA,0xFF,0xFE,0xBF,0xAE,0xEA,0xFA,0xBE,
-0xAD,0xA5,0xEB,0xCE,0xBF,0xA7,0xEB,0x5A,
-0xDE,0xBD,0xAF,0x6B,0xFD,0x57,0xFF,0xFF,
-0xF4,0x7F,0x1F,0x7F,0xFD,0xFF,0x7F,0x36,
-0xF0,0xDF,0x79,0xFF,0xFF,0xFF,0xF7,0xFD,
-0xBF,0xFF,0x87,0xFF,0xFB,0xF3,0xFC,0xFF,
-0xFF,0xFF,0xFF,0x7E,0xFF,0xBF,0xDF,0xFF,
-0xFF,0xFF,0xFF,0xFF,0xFD,0xBF,0xF8,0x9F,
-0xFF,0xFF,0xFF,0xFF,0xBF,0xFF,0xFF,0xFD,
-0xF7,0xFC,0xBD,0xFF,0xFE,0xFF,0xFF,0xFF,
-0xFF,0xFF,0xFB,0xF9,0xBF,0xFF,0xFF,0xEB,
-0xE2,0xFE,0xFF,0xBF,0xEF,0xA9,0xBA,0x2F,
-0xEB,0xF9,0xFE,0x77,0xDF,0xF7,0xFF,0xFF,
-0xF9,0x7F,0xFF,0xFF,0x7F,0xEF,0xD7,0xFF,
-0xFD,0xFF,0xFB,0xF5,0xFF,0xBF,0x6F,0xDF,
-0xFF,0xFF,0xFD,0xFF,0xFF,0xF0,0xFF,0xFF,
-0xFF,0x3F,0xCF,0xFF,0xBA,0xEE,0x9B,0xBF,
-0xEE,0xD7,0xFE,0xCD,0xEF,0xFF,0xDF,0xBF,
-0xFF,0xFF,0xC5,0xFF,0xFF,0xFD,0x7F,0x4F,
-0xFD,0xF6,0xD9,0xFF,0x4F,0xD6,0xFD,0xBF,
-0x6E,0xFF,0xFF,0xF4,0x7F,0xFF,0x7F,0x8B,
-0xFF,0xFF,0xFF,0xFF,0xF7,0xFF,0xF9,0xFE,
-0x37,0xFF,0xD9,0xFB,0xF5,0xAF,0xFD,0xFF,
-0xFF,0xFB,0xFF,0xFF,0x07,0xFF,0xFF,0xFF,
-0xFB,0xF7,0xFF,0xFD,0xFF,0x7C,0xFA,0x7E,
-0x4F,0xFC,0xDF,0x1D,0xC7,0xFF,0xFF,0xFF,
-0xFF,0xAE,0xFF,0xFF,0xFF,0xFF,0xFD,0xFB,
-0xFF,0xFF,0xFE,0xFE,0xFC,0xFF,0x7F,0x7F,
-0xBF,0xEF,0xFE,0xFF,0xFF,0xFF,0x5F,0xFD,
-0xFF,0xFF,0xFF,0xFD,0x6F,0x5A,0xD7,0x7B,
-0xBE,0x5F,0xFE,0x39,0xFF,0xF7,0xFF,0xF7,
-0xFD,0xFE,0xAA,0x1F,0xFF,0xFF,0xFF,0xFF,
-0xFE,0xFE,0xAB,0xAF,0xFD,0xFE,0xBF,0xFF,
-0xF7,0xFF,0x7F,0xFE,0x8F,0xE3,0xFB,0xEE,
-0x7F,0xFF,0xFF,0xFF,0xFF,0xEB,0xFB,0xFF,
-0xFD,0xBF,0xEF,0xDF,0xFF,0xFF,0xFF,0xFF,
-0xFF,0xFF,0xFF,0xFB,0xE4,0x3F,0xFF,0xDF,
-0xFF,0xFF,0xFF,0xFF,0xF3,0xEF,0xBB,0xFB,
-0xBF,0xEF,0xBB,0xFF,0xD7,0xBF,0xFF,0xFF,
-0xFF,0x29,0xAF,0xF7,0xFF,0xFF,0xFB,0xFF,
-0xFB,0xE6,0xFF,0x0F,0xFB,0x3F,0xDF,0x0F,
-0xFF,0xAF,0xFF,0xFF,0xFF,0xF5,0xC3,0xDF,
-0x5F,0xFF,0xFF,0xFF,0xFE,0x6B,0xCA,0xBE,
-0xBC,0xFF,0x9F,0xF2,0xBF,0xFF,0xFE,0xFA,
-0xFF,0xFF,0xEF,0x16,0xFF,0xFF,0xFF,0xFF,
-0xFF,0xFC,0xDF,0x97,0xFD,0x79,0xFF,0x37,
-0xE7,0x7F,0xFF,0xFF,0xB5,0xFF,0xFF,0xF6,
-0x2F,0xFF,0xFD,0xFB,0xFE,0xFF,0xFF,0xFD,
-0x5F,0x57,0x5F,0xFF,0xDB,0x52,0xDF,0xFF,
-0xFD,0xBF,0xFF,0xFF,0xFC,0xDB,0xFF,0x7B,
-0xB5,0xFD,0x7F,0xFF,0x71,0x9C,0x6E,0xFF,
-0xF6,0x35,0xA5,0x9B,0xFF,0xFF,0xFD,0xFF,
-0xFF,0xDB,0x9E,0x7F,0xFE,0xEF,0xFB,0xFF,
-0xFF,0xBD,0xEF,0xFF,0xDE,0xB7,0xF9,0x4B,
-0xFF,0xF5,0xEF,0xFF,0xFF,0xFF,0xE8,0x7E,
-0xFF,0xEA,0xDF,0xF7,0xFF,0xFD,0x69,0x5B,
-0xFC,0x9F,0xEF,0x78,0xD6,0xFF,0xEB,0xEF,
-0xFF,0xFF,0xFF,0xE8,0xFF,0xFF,0xED,0xFF,
-0xFF,0xFF,0xFF,0xE3,0xF9,0xF6,0xBF,0xFF,
-0xFF,0xFE,0xDF,0xFF,0x7F,0xFF,0xFF,0xFF,
-0xD1,0xFF,0xFF,0xE7,0xFF,0xFF,0xFF,0xFF,
-0xE7,0xF9,0xFF,0xBF,0x7F,0xD9,0xFF,0xFD,
-0xFE,0x7F,0xFF,0xFE,0xFF,0xF9,0xFF,0xFB,
-0xD6,0xDF,0xBF,0xEF,0x5B,0xD6,0xFF,0xBF,
-0xFB,0xF6,0xFF,0xBF,0xEF,0xF8,0xF6,0xDD,
-0xBE,0xFE,0x16,0xFF,0xBF,0xEF,0xFF,0xFE,
-0xFF,0xBF,0xEF,0xFF,0xFF,0xFF,0x6F,0xFB,
-0xFF,0xFF,0xFF,0x6F,0xF3,0xFF,0xF7,0xEF,
-0xFB,0xFF,0xBF,0xFF,0xEF,0xFE,0xFF,0xBF,
-0xFF,0xFF,0xFF,0xBE,0xBF,0xFF,0xEF,0xFF,
-0x7F,0xEF,0xFF,0xFD,0x17,0xFB,0x7B,0xFF,
-0xFF,0xFD,0x7F,0xDB,0xF6,0xF4,0x7F,0xFA,
-0xFE,0xF5,0xBF,0xEB,0xE3,0xF7,0xFF,0xFF,
-0xE9,0xBF,0xFF,0xAF,0xF7,0xFD,0xF3,0x7E,
-0x8F,0xA3,0xEA,0xFF,0xCB,0xF3,0xEE,0xFF,
-0xBF,0xEF,0xF7,0xF9,0xFF,0xFE,0x7F,0xFF,
-0xFF,0xFF,0xFF,0xF5,0xFB,0xF6,0xFF,0xF5,
-0x2F,0xFE,0xFB,0xD7,0xBF,0xFF,0xBE,0xDF,
-0x9F,0xFF,0xF0,0xFF,0xFF,0xF9,0xFE,0x7F,
-0x8F,0xA3,0xF8,0xFE,0x6F,0x9F,0xF9,0xF6,
-0x2F,0x9F,0xE7,0xF9,0xFE,0x2F,0x9F,0xE1,
-0xFF,0xFF,0xFF,0x7F,0xDF,0xF7,0xF5,0xFD,
-0x7F,0x7F,0xF5,0xFF,0x9F,0x5F,0xFB,0xFE,
-0xFF,0x7F,0xFF,0xFF,0xCB,0xFF,0xFF,0xFB,
-0xFE,0xFF,0xBF,0xAF,0xFB,0xFE,0xFF,0xDF,
-0xFE,0xFE,0xBF,0xF7,0xFF,0xFF,0xFF,0xFF,
-0xFF,0xC7,0xFF,0xFF,0xFD,0xFF,0x7F,0xDD,
-0xF7,0xFD,0xFF,0xFF,0xD7,0xFF,0xFD,0x7F,
-0xFF,0xFB,0xFD,0xFF,0xFF,0xFE,0xEF,0x7F,
-0xFD,0xEF,0xFB,0xFE,0xFB,0xFD,0xFF,0x7F,
-0xDF,0xFD,0xFF,0x7A,0xDF,0xF7,0xFD,0xFF,
-0xFF,0xFF,0xFF,0x1F,0xFF,0xFF,0xD3,0xF7,
-0xFF,0xFF,0x6F,0xDB,0xFF,0xFF,0xEF,0xCB,
-0xF4,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,
-0x29,0xFF,0xE8,0xDA,0x76,0x9F,0xAF,0x6A,
-0xDA,0xFE,0x35,0xEB,0xDA,0xD6,0xBF,0xAB,
-0xEB,0x7A,0xDE,0xBF,0xD7,0x7F,0xFF,0xFE,
-0xFF,0xBF,0xEF,0xFD,0xDF,0x77,0xBF,0xFD,
-0x37,0xEF,0xFF,0xEF,0xFF,0x3F,0xFF,0xFF,
-0xFF,0xFE,0x7F,0xFF,0xFF,0xFF,0xF7,0x7E,
-0xDF,0xFF,0xFF,0xFF,0xFA,0xB7,0x7F,0xFF,
-0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0x89,0xFF,
-0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
-0xFF,0x9F,0xFB,0xFF,0xFF,0xFF,0xE7,0xFF,
-0xFF,0xFF,0xFF,0xAA,0xFF,0xAB,0xFB,0xFA,
-0xEF,0xBF,0xFF,0xDF,0xFA,0x7B,0xB9,0xFE,
-0xFE,0xFF,0xFD,0xFF,0xF7,0xFE,0x3F,0xFF,
-0xB7,0xFF,0xF7,0xEE,0xFF,0x7F,0xEF,0xFF,
-0xFF,0x7F,0xFF,0x1F,0xFB,0xFF,0xBF,0xFB,
-0xFE,0xFF,0xBD,0xFF,0xFF,0x2F,0xFF,0xBF,
-0xFF,0x7F,0xDF,0xFA,0xFF,0xFF,0xFC,0xEE,
-0xF5,0xF3,0xBE,0xFB,0x0F,0xEF,0xF3,0xBE,
-0xEF,0xFC,0x5F,0xFF,0x5A,0xFF,0xF7,0xDF,
-0xFF,0xFF,0xFE,0xD5,0xFC,0x5F,0xFB,0xF2,
-0xFF,0xFF,0x2F,0xBB,0xF3,0xFF,0xFF,0xBF,
-0xFF,0xEF,0xFF,0xEF,0xFF,0xFF,0xFF,0xFF,
-0xBF,0xFF,0xFF,0xFD,0x7B,0xFF,0xDF,0xB9,
-0xFF,0xFB,0xFF,0xD8,0x7F,0xFF,0xFF,0xFF,
-0xFB,0xFF,0xFC,0x7F,0x1F,0xBF,0xE0,0xDF,
-0xF7,0xEF,0xFF,0xFD,0x7F,0xFE,0xDF,0xFF,
-0xE0,0xFF,0xFF,0xFD,0xEF,0xFB,0xFF,0xFE,
-0xF7,0xDF,0xFF,0xEB,0x5F,0xFF,0xF7,0xFF,
-0xFF,0xFF,0xFF,0xBF,0xFF,0xFD,0xFF,0xFD,
-0xFF,0xFF,0xFF,0xF7,0xFD,0xFF,0x3B,0xDC,
-0xFD,0x6D,0x7B,0x5F,0x57,0xF5,0xFD,0x7F,
-0x5F,0xFF,0xB1,0xFF,0xEB,0xFF,0xFF,0xFF,
-0xFB,0xFB,0xFE,0xFF,0xBF,0xFB,0xBE,0xFF,
-0xBF,0xEF,0xFB,0xFE,0xFF,0xAF,0xFE,0xF7,
-0xDF,0xDF,0xFF,0xFF,0xFF,0x7F,0xCF,0xF3,
-0xF8,0xFF,0xD7,0xFB,0xFF,0x5F,0xBF,0xF7,
-0xFB,0xFF,0x7F,0xFE,0x23,0xFF,0xFF,0xFE,
-0x7F,0xF3,0xFF,0xFB,0xFE,0xFF,0xFF,0xF3,
-0xFF,0xFF,0xF5,0xF9,0xFF,0x3F,0xFF,0xFF,
-0xF0,0x9A,0xFF,0xBE,0x7F,0xFF,0xFC,0xF9,
-0xFF,0xFD,0xAF,0xEB,0xFE,0xBF,0xFF,0xCF,
-0xF3,0xFE,0x7F,0xFF,0xFF,0x5B,0xBD,0xFF,
-0xBC,0xEB,0xFF,0xD7,0xD4,0xAF,0xAF,0xFD,
-0xFF,0xCF,0xF7,0xFD,0xFF,0x7F,0xDF,0xF7,
-0xFD,0xFE,0xFF,0x6F,0xFF,0xFB,0xFF,0xFF,
-0xFF,0xFD,0x7F,0x5E,0xFD,0xBF,0xDB,0xF6,
-0xFD,0xBF,0x6F,0xFB,0xEE,0xFD,0xFF,0x7A,
-0xFF,0xFA,0xFB,0xFF,0x3F,0xFB,0xB7,0x5F,
-0xD6,0xF7,0x1F,0x71,0xDC,0x77,0x1D,0xC7,
-0x31,0xDC,0x77,0xDF,0xF9,0xBF,0xF5,0x5B,
-0xF4,0xD7,0x9D,0xAE,0xFF,0xBF,0xFD,0xBF,
-0xDB,0xF6,0xFD,0xBF,0x6F,0xDB,0xF6,0xFE,
-0x3D,0x81,0xFF,0xEB,0xFE,0xFE,0xFE,0xFF,
-0xEB,0x7A,0xDF,0x7D,0x77,0x7D,0xF5,0x79,
-0xDF,0x57,0xDD,0xF5,0x7D,0x7E,0xE6,0xFF,
-0xD6,0x3F,0xBF,0x7F,0xFF,0xD4,0xF5,0x3F,
-0xBF,0xFB,0xBE,0xEF,0xB3,0xEE,0xFB,0x9E,
-0xEF,0xBB,0xFE,0x8B,0xFF,0xFE,0xDF,0xB7,
-0xED,0xFF,0xF7,0xFD,0xFE,0xFF,0xEF,0xBB,
-0xEE,0xFF,0xBE,0xEF,0xBB,0xEE,0xEB,0xFC,
-0x1F,0xFF,0xFF,0xFD,0xFF,0xE7,0xFF,0xF7,
-0xFD,0xFF,0xEF,0xFE,0xFF,0xBF,0xEF,0xFB,
-0xFE,0xFF,0xBF,0xEB,0xFA,0x1F,0xFF,0xB7,
-0xEF,0x5B,0xFE,0xFF,0xAF,0xEB,0xDD,0xE7,
-0xDE,0x77,0x9D,0xE7,0x79,0xDE,0x77,0x9D,
-0xBF,0xE6,0x6F,0xFF,0xFE,0xFF,0xBF,0xEF,
-0xFB,0xFE,0xFD,0xBF,0x6F,0xF6,0xFD,0xBF,
-0x6F,0xDB,0xF6,0xFD,0xBF,0xFF,0x7E,0xFF,
-0xFF,0xFB,0xFE,0xFE,0xFF,0xEF,0xFB,0xFD,
-0xEF,0x7E,0xF7,0xBD,0xEF,0x7B,0xDE,0xF7,
-0xBD,0xEF,0xFF,0xD5,0xFF,0xBF,0xFF,0xEF,
-0xFE,0xFF,0xFC,0x3F,0x0F,0xE7,0xFE,0x7F,
-0x9F,0xE7,0xF9,0xFE,0x7F,0x9F,0xE7,0xFE,
-0xF3,0xFF,0xFE,0xDF,0xAD,0xDF,0x67,0xEE,
-0xFB,0xBF,0xEF,0xFE,0xFF,0xBF,0xEF,0xFB,
-0xFE,0xFF,0xBF,0xEF,0xFF,0x23,0xFF,0xFF,
-0xFF,0xFF,0x7F,0xFF,0xF3,0xBC,0xDB,0xFE,
-0xFB,0xFF,0xFB,0xBE,0xF7,0xFB,0xFF,0x7F,
-0xDF,0xFF,0xCF,0xFB,0xFF,0x9F,0xE3,0xF9,
-0xBE,0x3F,0x8F,0xE7,0x79,0xFF,0x9D,0xE7,
-0xF9,0xFE,0x7F,0x9F,0xE7,0xF9,0xFE,0x5F,
-0xFF,0xCF,0xF7,0xFF,0xFF,0xFF,0xDF,0xF7,
-0xFE,0x7F,0xE7,0xF9,0xFE,0x7F,0xFF,0xFF,
-0xFB,0xFE,0xFF,0xFF,0xBF,0xFF,0xBF,0xBF,
-0xFF,0xFE,0xFF,0xBF,0xEF,0xFF,0xFD,0xFF,
-0xFF,0xFF,0xFF,0xFF,0xFF,0xF7,0xFD,0xFF,
-0xFF,0x3F,0xFF,0xBF,0xFF,0xF7,0xFF,0xFF,
-0x7F,0xDF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
-0xFF,0xFF,0xFF,0xFF,0xFF,0xE8,0xEF,0xFF,
-0x5F,0xF7,0xBF,0xF9,0xFE,0xDF,0xB7,0xFD,
-0xFF,0xDF,0xF7,0xFD,0xFF,0x7F,0xDF,0xF7,
-0xFD,0xFF,0xDD,0xFF,0xF2,0xFF,0xBF,0xFF,
-0xFF,0xBF,0xFF,0xFF,0x2F,0xF2,0xFF,0xBF,
-0x2F,0x7B,0xD2,0xF7,0xBF,0x2F,0xFF,0xBB,
-0xFF,0xEE,0x8F,0xAF,0xEB,0xFA,0xFE,0x3F,
-0xA7,0x69,0xCE,0x8F,0xA4,0xEA,0xFA,0xEE,
-0xB7,0xAE,0xEB,0xFD,0xC7,0xFF,0xF7,0xF7,
-0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x3E,0xF3,
-0x74,0xFF,0x3F,0x4F,0xFF,0xE7,0xFF,0x3F,
-0xFE,0xA7,0xFF,0xFF,0xDF,0xF7,0xB7,0xFF,
-0xF7,0xFF,0xBA,0xEF,0x37,0xEB,0xFB,0xFE,
-0xBF,0xFB,0xFE,0xF3,0xFF,0xF9,0xDF,0xFF,
-0xBF,0xFF,0xFF,0xFF,0xBF,0xFF,0xFF,0xFF,
-0xFD,0xDF,0xFF,0xFD,0xFF,0xFF,0xFB,0xFE,
-0xFD,0xFF,0xFB,0xBF,0xFE,0x3F,0xED,0xFF,
-0xDF,0xBE,0x3D,0xA7,0xFB,0xFA,0x3F,0xE6,
-0xE1,0xFE,0xFE,0x3F,0xEF,0xE3,0xDF,0xF5,
-0x7F,0xFE,0xFF,0x7E,0xFF,0xFF,0xFF,0xFF,
-0xEF,0x6F,0xF6,0xFF,0x7D,0xEF,0xD7,0xDE,
-0xFF,0x7D,0xEF,0xFF,0xF2,0xFF,0xFF,0xFF,
-0xFF,0xFF,0xFF,0x7B,0xDE,0xFB,0xE6,0xEE,
-0xEF,0x37,0x6E,0xF3,0x7E,0xEB,0x37,0xEF,
-0xFF,0xC1,0xFF,0xFE,0xFF,0xF7,0xEF,0xFF,
-0xFF,0xFF,0xBF,0x3F,0xD2,0xDF,0xBF,0x2F,
-0x7B,0xE2,0xFF,0xFE,0x3B,0xBD,0xDB,0xFF,
-0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xEF,0xFE,
-0xFF,0xFB,0xFF,0xFF,0xBF,0xFF,0xFB,0xDF,
-0xFF,0xBF,0xFF,0xB7,0xFF,0xFF,0xBF,0xEF,
-0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0xFF,
-0x7F,0xFF,0x1F,0xEF,0xF1,0xFD,0xFF,0xF6,
-0xAF,0xFF,0xFF,0xFF,0xFF,0xFF,0xEF,0xFF,
-0xFF,0xFF,0xFE,0x9F,0xFF,0xFF,0xFF,0x77,
-0xEF,0xF7,0xFB,0xFF,0xFE,0x5F,0xFF,0xFF,
-0xBF,0xCF,0xFB,0xF7,0xDD,0xF7,0xF5,0xFF,
-0x5F,0xD5,0xF5,0xFD,0x7F,0x5F,0xD7,0xF5,
-0xFF,0xFB,0x0F,0xFF,0xFF,0xA9,0xEA,0x7A,
-0xFF,0xAF,0x8F,0xFE,0xDF,0xAF,0xEF,0xFB,
-0xFE,0xFF,0xBF,0xEF,0xFB,0xDF,0xE5,0x5F,
-0xFF,0xFF,0xFF,0xFF,0xFF,0xBD,0x57,0xFF,
-0xFF,0x6F,0x77,0xBF,0xF7,0xFB,0xFF,0x7F,
-0xBF,0xF7,0xFF,0xFC,0xBF,0xFF,0x9F,0xFF,
-0xFF,0xEF,0xFF,0xFE,0xFF,0xFF,0xFF,0x1F,
-0xCF,0xFF,0xFC,0xFF,0xFF,0xFF,0xFF,0xFB,
-0x65,0xAF,0xF3,0x7C,0xFF,0x3F,0xDF,0xFF,
-0xFD,0xE9,0xFE,0x7F,0xE7,0xFF,0xFE,0x7F,
-0xFF,0xFF,0xFF,0xFF,0xFD,0xE3,0xDF,0xFB,
-0xDB,0xF6,0xFD,0xEF,0x5B,0xFB,0xFF,0xDF,
-0xFC,0xFF,0x3F,0xDF,0xF3,0xFD,0xFF,0x7F,
-0xDF,0xEF,0x66,0xFF,0xDF,0xAD,0xEB,0x7A,
-0xDE,0xF7,0xF7,0xE7,0xD9,0xFD,0x9F,0x67,
-0xD9,0xF6,0x7D,0x9F,0xE7,0xDF,0xF5,0x47,
-0xFD,0x65,0x5B,0xD6,0xF4,0xFE,0xFF,0xEF,
-0xFF,0x6D,0xF6,0xDD,0xB7,0x6D,0xDB,0x76,
-0xDC,0xB7,0x7D,0xFA,0x9B,0xF6,0x6D,0x9D,
-0x67,0x59,0xDF,0xF7,0xDD,0xFF,0xEB,0xFE,
-0xBF,0xAF,0xEB,0xFA,0xFE,0xBF,0xAF,0xE3,
-0xD1,0x9F,0xFF,0xBD,0xBF,0xEF,0xFE,0xF7,
-0xBF,0xBF,0xF7,0xD7,0x7F,0xDD,0xF7,0x9D,
-0xDF,0x7F,0xDF,0xF7,0xFF,0xE0,0x7F,0xFD,
-0xC1,0xDF,0xF7,0xFD,0xC7,0x7F,0x7F,0xFB,
-0xFF,0xBB,0xEC,0xFB,0x3E,0xFF,0xBF,0xEC,
-0xFB,0xFF,0xD8,0x7F,0xBF,0x6C,0xFF,0xBE,
-0xFF,0xBF,0xED,0xFF,0xEF,0xFE,0xFB,0xBF,
-0xEF,0xFB,0xFE,0xFF,0xBF,0xEE,0xFF,0xC5,
-0xFF,0xAF,0x6F,0xFF,0xFC,0xFD,0x3F,0xE7,
-0xFF,0xFE,0xFF,0xEF,0xFB,0xFE,0xFF,0xBF,
-0xEF,0xFB,0xFE,0xBF,0x89,0xFE,0xFA,0xBA,
-0xFE,0xBF,0xAF,0xFB,0xF6,0xF5,0xD9,0x7D,
-0x97,0x65,0xD9,0x74,0x5D,0x97,0x65,0xD3,
-0xFE,0xD6,0xFF,0xBF,0xF7,0xFD,0xFF,0x7F,
-0xBF,0xCF,0xFB,0xFE,0xFF,0xEF,0xFB,0xFE,
-0xFF,0xBF,0xEF,0xFB,0xFF,0xF6,0x8F,0xFB,
-0xFF,0xEF,0xFB,0x7E,0xDB,0xFE,0xFF,0xBE,
-0xEF,0xEE,0xFB,0xBE,0xEF,0xBB,0xEE,0xFB,
-0xBE,0xFF,0xFF,0xDF,0xFF,0x43,0xFF,0xFF,
-0xFB,0xEF,0x5F,0xB7,0xFE,0x7F,0xE7,0xF9,
-0xFE,0x7F,0x9F,0xE7,0xF9,0xFE,0x7F,0xF9,
-0xBF,0xFE,0xAF,0x77,0xFD,0xFF,0x2F,0xAF,
-0xA7,0xFE,0xFF,0xEF,0xFB,0xFE,0xFF,0xBF,
-0xEF,0xFB,0xFE,0xFF,0xF1,0x7F,0xEF,0xDF,
-0xFF,0x97,0xF5,0xEF,0xFF,0xDF,0xFF,0xFF,
-0xBF,0xFF,0xBF,0xFF,0xFF,0xFE,0xFF,0xFF,
-0xFF,0xE0,0xFF,0xFF,0xF9,0xFE,0x2F,0x8B,
-0xE3,0xF8,0xBE,0x77,0x9F,0xF9,0xDA,0x77,
-0x9D,0xE7,0x79,0xDE,0x77,0x9F,0xDD,0xFF,
-0xFD,0xFD,0x7F,0x5F,0xD7,0xFD,0xFF,0x7F,
-0xE7,0xFE,0x7F,0x97,0xE7,0xFB,0xFE,0xFF,
-0xBF,0xEF,0xFF,0xAB,0xFF,0xEF,0xFA,0xFE,
-0xBF,0xAF,0xFF,0xFA,0xFF,0xFF,0xDF,0xFF,
-0xFB,0xFF,0xF7,0xFD,0xFF,0x7F,0xDF,0xFF,
-0x67,0xFF,0xF7,0xF5,0xFF,0xFF,0xFF,0xDF,
-0xFD,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
-0xFF,0xFF,0xFF,0xFF,0xFF,0xEF,0xFF,0xBD,
-0xEB,0xFF,0xFF,0xF7,0xAD,0xEB,0xFF,0xDF,
-0xFD,0xFF,0x3F,0xDF,0xF7,0xFD,0xFF,0x7F,
-0xDF,0xFF,0x5F,0xFF,0xF7,0xFF,0xFF,0xFD,
-0xBF,0xFF,0xCB,0xF4,0xFF,0x7F,0xD3,0xF7,
-0xFD,0x3F,0x7F,0xD3,0xF7,0xFF,0xFC,0x3F,
-0xFF,0xEA,0xFA,0xBE,0xAF,0xAB,0xEB,0xBA,
-0xF4,0x95,0x6B,0x52,0xD4,0xAD,0x2F,0x4A,
-0xD2,0xF6,0xBF,0xD2,0x7F,0xF7,0x3F,0xFF,
-0xFF,0xF3,0x7F,0xFF,0xFF,0xF7,0xFF,0xBA,
-0xDF,0xFB,0xFD,0xFF,0xBF,0xFF,0xFB,0xFF,
-0xF8,0x7F,0xEA,0xFF,0xFE,0xFE,0xDF,0xFF,
-0xF7,0xFF,0x7F,0xBB,0xFF,0xFF,0xBF,0xDF,
-0xFB,0xFF,0xFF,0xBF,0xFF,0xB1,0x7F,0xFF,
-0xFB,0xEF,0xFF,0xFF,0xFF,0xFF,0xFF,0xBF,
-0xCF,0xFE,0xFF,0xFF,0xEF,0xFF,0xF7,0xFF,
-0xFF,0xFF,0xF1,0xFF,0x69,0xBE,0xFA,0xBF,
-0xAF,0xE2,0xFF,0xFE,0xFD,0xAF,0xF3,0xFE,
-0xFF,0xBF,0xEF,0xFB,0xFC,0xFF,0xFF,0x07,
-0xFD,0x95,0xDB,0xDF,0x7F,0xDF,0xAF,0xFF,
-0xF7,0xAF,0x36,0xFE,0xBF,0x65,0xEB,0xF6,
-0xFE,0x9F,0x6F,0xFE,0x07,0xFF,0xCF,0xFF,
-0xF8,0xFE,0xFF,0xCF,0xFF,0xF6,0xFA,0xE7,
-0xFB,0xFE,0xFF,0xBB,0xED,0xF9,0xFF,0xFF,
-0xFF,0x5F,0xFF,0xFF,0xFF,0x75,0xFF,0xEF,
-0x7E,0xFD,0xE0,0xE8,0x5E,0xD3,0xE5,0xF9,
-0x3E,0x5F,0xD7,0xF7,0xFF,0xFA,0x2F,0xFB,
-0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0x7F,
-0x7F,0xD7,0xF5,0x7D,0x5F,0x57,0xD5,0xF5,
-0xEF,0xFF,0xF3,0x7F,0xFC,0x7F,0xFF,0xC7,
-0xF1,0xFF,0xFF,0x1F,0xCF,0xB0,0xFF,0x3F,
-0xCF,0xF3,0xFC,0xFF,0x3F,0xCE,0xFF,0xE4,
-0xFF,0xDF,0x7F,0xFE,0xF7,0xBB,0xFF,0xFF,
-0xDF,0xEF,0xEE,0xFF,0xBF,0xEF,0xFB,0xFE,
-0xBF,0xBF,0xEF,0xFF,0xD1,0xFF,0xFF,0xFF,
-0xFD,0xFB,0xFF,0xFD,0xFF,0xFB,0x9F,0xE9,
-0xFE,0x7F,0x9F,0xE7,0xF9,0xFE,0x7F,0xBF,
-0xFF,0xB3,0xFF,0xFF,0xF7,0xFF,0xFF,0xAF,
-0xF7,0xFF,0xB6,0x3F,0xEB,0xFA,0xFE,0xBF,
-0xAF,0xEB,0xFA,0xFE,0xBF,0xFE,0xA7,0xFF,
-0xFF,0xFF,0xFF,0xFF,0xF7,0xFF,0xFF,0xFF,
-0xFE,0x9F,0xF7,0xF9,0xFF,0x7F,0x9F,0xE7,
-0xFF,0xFF,0xFE,0xAF,0x6F,0xFF,0xFF,0xFF,
-0x9F,0xFF,0xDF,0xFF,0x7D,0x5F,0xDD,0xFF,
-0xFB,0xBF,0xE7,0xBB,0xFF,0xFB,0xDF,0x6D,
-0x5F,0x7E,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
-0xEB,0xF7,0xFF,0xE7,0xEF,0xF7,0xFF,0xFF,
-0x7F,0xFF,0xF7,0xFF,0xFC,0x8F,0xFF,0xEF,
-0xFD,0xFE,0xFF,0xBE,0xF4,0xF2,0x7D,0xD7,
-0xCF,0xFF,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,
-0xFF,0xCF,0x6B,0xFF,0xBF,0x3F,0xFB,0xF2,
-0xFC,0x7F,0xEB,0xFF,0x9F,0xFA,0xFF,0xFF,
-0x3F,0xFF,0xF3,0xFF,0xFF,0xFD,0x70,0xF7,
-0xFF,0xFF,0xBF,0xFF,0xFB,0xD7,0xFE,0xF5,
-0x77,0xFF,0x15,0xDD,0x77,0xFD,0xFF,0x7F,
-0xDF,0xF7,0xFB,0xCD,0xBF,0xFF,0xFD,0xFF,
-0xFF,0xDF,0x37,0xCD,0xF9,0xEC,0xFE,0xEF,
-0xBB,0xF4,0xFB,0x3F,0x4F,0xB3,0xFF,0xFD,
-0xCB,0xFF,0xE9,0x7E,0x54,0x9F,0xE5,0x4B,
-0xB7,0xFF,0xDD,0x7D,0xC7,0x71,0xDD,0x77,
-0x5D,0xD7,0x75,0xCD,0x7F,0xD6,0xFF,0xD3,
-0xF6,0xF9,0x3F,0x6D,0x95,0xAF,0x7F,0xFE,
-0xFF,0xEF,0xFB,0xFE,0xFF,0xBF,0xEF,0xFB,
-0xFE,0xF6,0xC7,0xFF,0xAD,0x7B,0xCA,0xFF,
-0xBF,0xBF,0xEF,0xFD,0xE3,0xDF,0xB7,0xED,
-0xFB,0x7E,0xDF,0x37,0xED,0xE3,0xFB,0xDF,
-0xFF,0x52,0x5C,0x15,0xFD,0xCF,0x7F,0xDF,
-0xFE,0xEF,0xEF,0xFB,0xFE,0xFF,0xBF,0xEC,
-0x7B,0xFE,0xFF,0xFE,0x3E,0x7F,0xDA,0xF7,
-0xFD,0xFF,0x7F,0xFF,0xFF,0xFB,0xEF,0xBB,
-0x6F,0xFB,0xFE,0xFF,0xBF,0xEF,0xFB,0xFF,
-0xF7,0x7D,0xFF,0xD8,0xFF,0xFD,0xBF,0x7F,
-0xFB,0xFF,0xFF,0x9F,0xFB,0xFE,0x7F,0x9F,
-0xE7,0xF9,0xFE,0x7F,0x9F,0xEA,0x7F,0xF6,
-0xBF,0xBD,0x6A,0x5A,0xF6,0xE5,0xBF,0x77,
-0x5F,0x6D,0xDD,0x77,0x5D,0xD7,0x75,0xDD,
-0x77,0xFF,0xA5,0xBF,0xCF,0xFB,0xFF,0xFF,
-0xBF,0xCF,0xFB,0xFD,0xFF,0xBF,0xF3,0xFE,
-0xFF,0xBF,0xEF,0xFB,0xFE,0xFF,0xFD,0xAB,
-0xFF,0xBF,0xBF,0xFF,0xFB,0xFF,0x7F,0xEF,
-0xFF,0xBE,0xFB,0xEE,0xFB,0xBE,0xEF,0xBB,
-0xEE,0xFB,0xBF,0xFF,0xB5,0xFF,0xD0,0xBC,
-0xFD,0x2F,0x4B,0xF7,0xFF,0xFF,0x9F,0xF9,
-0xFE,0x7F,0x9F,0xE7,0xF9,0xFE,0x7F,0x9F,
-0xFA,0x8F,0xFD,0xAB,0xFA,0xDA,0xBF,0xAF,
-0xB3,0xFD,0xFF,0xBF,0xFB,0xFE,0xFF,0xBF,
-0xEF,0xFB,0xFE,0xF7,0xBF,0xFF,0x9F,0xFF,
-0x77,0xF7,0xBD,0xFD,0x77,0xDF,0xFF,0x7E,
-0xDF,0xED,0xBB,0xFE,0xFF,0xBE,0xEF,0xFB,
-0xFE,0xFF,0xFA,0x3F,0xFF,0xBE,0x6F,0x8F,
-0xE6,0xF9,0xFE,0x7F,0x9F,0xC7,0xFE,0x7F,
-0x9F,0xE7,0xF9,0xFE,0x7F,0x9F,0xE7,0xFB,
-0x7F,0xFF,0x7F,0xCF,0xFF,0xFD,0xFF,0xFF,
-0xDF,0xFB,0xAF,0xBF,0xEF,0xFF,0xFE,0xFF,
-0x9F,0xEF,0xFB,0xFF,0xFC,0xFF,0xFB,0xFE,
-0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xF7,
-0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
-0xFF,0xF5,0xFF,0xFF,0xFF,0x3F,0xDF,0xF7,
-0xFF,0xFF,0x7F,0xEF,0xFE,0xFF,0xBF,0xFF,
-0xFB,0xFF,0xFF,0xBF,0xEF,0xFF,0xB3,0x7F,
-0xFF,0x7B,0x5E,0xF7,0xFD,0xFF,0x7B,0x7F,
-0xF7,0xFF,0x7F,0xDF,0xF7,0xFD,0xFF,0x7F,
-0xDF,0xF7,0xFF,0x17,0xFF,0xFF,0xFF,0x7F,
-0xFF,0xFF,0xDD,0xF6,0xFC,0xBF,0xCB,0xF2,
-0xBC,0xBF,0x2F,0xCB,0xF2,0xFC,0xBF,0xFE,
-0x8F,0xFF,0xFA,0x7E,0xBF,0xA7,0xEB,0xDA,
-0xFC,0xBF,0xAF,0x7A,0xFE,0xBF,0xAF,0xEA,
-0xFA,0xFE,0xBF,0xAF,0xF4,0xDF,0xFE,0xFF,
-0xF3,0x3C,0x7F,0x3E,0xFF,0xCF,0xF8,0xBF,
-0x8F,0xE3,0xF8,0xFE,0x3F,0x8F,0xE7,0xE8,
-0xFF,0xFC,0x9F,0xFF,0xFF,0xCF,0xEB,0xB3,
-0xE7,0xFB,0x7B,0xF3,0xFE,0xFF,0xCF,0xDB,
-0xFB,0xFB,0xBF,0x6F,0x6F,0xDF,0xEC,0x7F,
-0xFF,0xFF,0xF7,0xFD,0xFD,0xFF,0xFF,0xFF,
-0xFF,0xB2,0xBF,0xFF,0xDE,0xFD,0xBD,0xEF,
-0xFB,0xF6,0xDF,0xEA,0xE7,0xDB,0xFE,0xBB,
-0xFF,0xEB,0xFB,0xBF,0x9F,0x8F,0xE8,0xFE,
-0x3F,0x8F,0xA3,0xF8,0xFE,0x3F,0x8F,0xFF,
-0xF8,0x7E,0xFD,0xFD,0x7F,0xFF,0xFB,0xCD,
-0xFF,0xFD,0xFF,0x5F,0xEF,0xFD,0xFF,0xFF,
-0xDF,0xF7,0xFD,0xFF,0xBE,0x90,0xFF,0xFF,
-0xEE,0xFF,0x3F,0xBF,0xF3,0xBB,0xFE,0xB7,
-0xAB,0xFA,0xFE,0xAF,0xAD,0xEA,0xFA,0xDE,
-0xAB,0xFF,0x63,0xFF,0xFE,0xF2,0xFF,0xB3,
-0xFF,0xDF,0xEE,0x7D,0xFF,0x03,0xF1,0xF4,
-0x3F,0x1F,0xC3,0xF1,0xEC,0x7F,0xFE,0x6F,
-0xFF,0xFB,0xFB,0xFF,0x9F,0xFF,0xBF,0xFF,
-0x7B,0x5F,0xFD,0xFF,0xDF,0xF7,0xFD,0xFD,
-0x7F,0x7F,0xDF,0xFE,0xCF,0xFB,0xFF,0xFF,
-0xAF,0xFB,0xFF,0x1F,0xEF,0xA5,0xFD,0xBF,
-0xDF,0xFB,0x7D,0xFF,0xBF,0xDF,0xFB,0xFF,
-0xFD,0x3B,0xFF,0xFF,0xFF,0xFF,0xFF,0xFD,
-0xAF,0xF3,0xFF,0xFB,0x7F,0xBF,0xD7,0xFB,
-0xBF,0x7F,0xBB,0xF7,0xFF,0xF8,0x7F,0xFF,
-0xFA,0x5F,0xD7,0xFF,0xDF,0x7F,0xEF,0xFF,
-0xFF,0x7F,0xDB,0xF7,0xFD,0xFF,0x7F,0xDF,
-0xB7,0xFB,0xEC,0xFF,0xFF,0xF7,0xBF,0xEF,
-0xFD,0xFC,0xFB,0xFF,0xEF,0xF0,0xFE,0x3F,
-0x8F,0xE3,0xF8,0xFE,0x3F,0x8F,0xEF,0x8D,
-0xFF,0xFF,0xEF,0x7F,0xBF,0xFF,0xFB,0xFF,
-0xDB,0xBF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
-0xFF,0xFF,0xFF,0xEF,0xD8,0xFF,0x2E,0x7F,
-0xBE,0xEF,0xFE,0x6E,0xFF,0xBF,0xF9,0xFF,
-0xFF,0xF3,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
-0xFC,0x66,0xBE,0x47,0xF3,0x7F,0xDF,0xFE,
-0x87,0x9F,0xFF,0xFF,0xFF,0xFF,0xE7,0xFF,
-0xFF,0xFF,0xFF,0xFF,0xFF,0xD6,0x6F,0x7C,
-0xFB,0x4F,0xD2,0xFF,0xFD,0x2B,0xFE,0xFF,
-0xFF,0xFD,0x5F,0xD7,0xD5,0xF5,0x7D,0xFF,
-0xFF,0xFF,0xBF,0x9B,0xFF,0xFF,0xDF,0xB7,
-0xFF,0xFF,0xDF,0xFF,0x3F,0xCF,0xFE,0x7F,
-0xBF,0xEF,0xFB,0xFC,0xFF,0x3F,0xFF,0xD9,
-0xBF,0xFE,0x97,0xEC,0x8F,0xB7,0xFE,0x9B,
-0x7D,0xFD,0xB7,0xDD,0x77,0x1D,0xC7,0x71,
-0xDD,0x77,0x5D,0xD7,0xF3,0x6F,0xFD,0x3F,
-0x73,0xDD,0xAF,0xFD,0x7A,0xFF,0xFF,0xAF,
-0xFE,0xFD,0xBF,0xEF,0xFB,0xFE,0xFF,0xBF,
-0xEF,0x66,0x7F,0xFF,0xFF,0xBF,0xBF,0xFF,
-0xFB,0xFF,0xF7,0xDF,0xFD,0xFB,0x7D,0xDF,
-0xB7,0xCD,0xF3,0x7C,0x5F,0x3F,0x91,0x3F,
-0xFF,0x3D,0xEF,0x7B,0xFF,0xFC,0xFF,0xCA,
-0xEF,0xFE,0xFF,0xBD,0xEF,0xFB,0x1E,0xE7,
-0xBB,0xEC,0x7F,0xB3,0xFF,0xFD,0x9F,0xFF,
-0xFF,0xFE,0xFF,0xFF,0x7F,0xBF,0xFB,0xFE,
-0xFF,0xBF,0xEF,0xFB,0xEE,0xFB,0xBF,0xDF,
-0x67,0xFF,0xFF,0xBF,0xEF,0xDB,0xFF,0xBC,
-0xFE,0x7F,0xFB,0xFF,0x9F,0xEF,0xF9,0xFE,
-0x7F,0x9F,0xE7,0xF9,0xFE,0x87,0xFF,0xEE,
-0xFB,0xBE,0xE5,0xBF,0xEF,0xF9,0xD7,0x65,
-0xF7,0xDD,0xE7,0x7D,0xDF,0x77,0x5D,0xD7,
-0x7F,0xF8,0x9B,0xFE,0xFF,0xBF,0xEF,0xFB,
-0xFF,0xFF,0xBF,0xEF,0xFB,0xFF,0x7F,0xCF,
-0xF3,0xFC,0xFF,0xBF,0xEF,0xFF,0xDB,0x3F,
-0xEF,0xFB,0xFE,0xFF,0xDF,0xFF,0xFE,0xFB,
-0xBB,0xEF,0xBF,0xEF,0xBB,0xEE,0xFB,0xBE,
-0xEF,0xBB,0xFF,0xFC,0x7F,0xFD,0x3B,0x5B,
-0xD6,0xE5,0xFD,0x4F,0xC3,0xFB,0xFF,0xBF,
-0xEF,0xFB,0xFE,0xFF,0xBF,0xEF,0xFB,0xFF,
-0xB4,0xFF,0xFA,0xBC,0x8F,0xB2,0xE9,0xD2,
-0x2E,0xCF,0xFB,0xFF,0xBF,0xEF,0xFB,0xFE,
-0xFF,0xBF,0xEF,0xFB,0xFF,0xEC,0xFF,0xFD,
-0xFD,0x7F,0xDF,0xF7,0xE4,0xDF,0x5F,0xFF,
-0xFF,0xFB,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
-0xFF,0xFF,0xC3,0xFF,0xEF,0xE6,0xF8,0xFE,
-0x3F,0x8B,0x83,0xF9,0xFE,0x7F,0xE7,0xF9,
-0xFE,0x7F,0x9F,0xE7,0xF9,0xFE,0x7F,0x17,
-0xFD,0xFF,0xFF,0xFF,0x7F,0x5F,0xF7,0x2C,
-0xFF,0xFF,0xFF,0xFE,0x7F,0xFF,0xE7,0xF9,
-0xFE,0x7F,0x9F,0xFE,0x2F,0xFF,0xFF,0xEF,
-0xFF,0xFE,0xBF,0xEF,0xAD,0xFF,0xFF,0x7F,
-0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
-0xFE,0xDF,0xFF,0xDF,0xFF,0xFD,0xFD,0x7F,
-0xDF,0xF7,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
-0xFF,0xFF,0xFF,0xFF,0xFF,0xFA,0x3F,0xFE,
-0xF7,0xFD,0xEF,0x7A,0xFF,0xB1,0xBD,0xFF,
-0x7F,0xF7,0xFD,0xFF,0x7F,0xDF,0xF7,0xFD,
-0xFF,0x7F,0xF3,0x27,0xFF,0xDF,0xFF,0xDD,
-0xFF,0xFC,0x9B,0xFF,0xCB,0xFC,0xBF,0x2F,
-0xCB,0xF2,0xFC,0xBF,0x2F,0xC9,0xFF,0xDE,
-0xFF,0xDF,0xAF,0xEB,0xDA,0xFE,0xBB,0xAF,
-0xEB,0xF8,0xF7,0xAF,0xE8,0xFA,0xFE,0xBF,
-0xAF,0xEB,0xF2,0xFF,0xFD,0xFF,0xFF,0xEF,
-0xBD,0xD7,0xBF,0xFF,0xFF,0xDE,0x8F,0xB8,
-0xDE,0x37,0x8D,0xA3,0x78,0xDA,0x3F,0x8F,
-0xFF,0xA1,0xFF,0xFF,0xFB,0xFB,0xFF,0xFF,
-0xFF,0xFF,0xA7,0xBD,0xFB,0x76,0xFD,0xBF,
-0xEF,0xDB,0xFE,0xBB,0xBF,0xFE,0x27,0x7F,
-0xFF,0xFE,0xFE,0xFD,0xF5,0xFF,0xEF,0xF5,
-0xDF,0x1F,0xE7,0xFD,0xFF,0x7F,0xDF,0xF7,
-0xFD,0xFF,0xFF,0xCD,0xFD,0xAE,0xFF,0xFA,
-0x3E,0x3F,0xAB,0xFD,0xF8,0x7E,0x8F,0xE3,
-0xF8,0xFE,0x3E,0x8F,0xE3,0xF8,0xFF,0xFE,
-0x1F,0xEF,0xDF,0xBF,0xFE,0xDE,0xDF,0xD9,
-0xFF,0xDF,0xBC,0xFF,0xFF,0x7F,0xFF,0xEF,
-0xFD,0x7F,0xDF,0xF7,0xF9,0x3F,0xFE,0xFF,
-0xFF,0x6F,0xFE,0xDE,0xBF,0xF7,0xED,0xEA,
-0xFD,0x8F,0x83,0xF8,0xEA,0x3F,0x8F,0xEF,
-0xFF,0xF4,0x7F,0xFF,0xEF,0xEF,0x7B,0xF3,
-0xF1,0x5F,0xFF,0xFF,0xF1,0x3B,0x7F,0xDF,
-0xF7,0xFD,0xFF,0xFF,0xFF,0xFF,0xE0,0xFF,
-0xFF,0xFF,0xF7,0xFF,0x6F,0xFF,0x7F,0xFF,
-0xFF,0xF7,0xDE,0xF7,0xBF,0xEF,0xFB,0xF7,
-0xFD,0xFF,0xFF,0xF5,0xFA,0xFF,0xFF,0xFB,
-0xE7,0xFF,0xF3,0xF8,0x7F,0xF3,0xDF,0xFF,
-0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0xEF,
-0xBB,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFD,
-0xFF,0x7F,0xFF,0x9F,0xFF,0xFF,0xFF,0xFF,
-0xFF,0xFF,0xFF,0xCF,0xFF,0x37,0xFF,0xFF,
-0x7F,0xDF,0x77,0x5D,0xE7,0xFC,0xFF,0xBF,
-0xF7,0xF5,0xFB,0xFF,0xFF,0xD7,0xF5,0xFB,
-0xFF,0xFF,0x45,0xFD,0x7F,0xEA,0xFD,0xBE,
-0xBF,0xDF,0xF7,0xFF,0xFF,0xDB,0xFB,0xFE,
-0xFF,0xBF,0xEF,0xFF,0xFF,0xFF,0xFB,0x5F,
-0x7F,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,
-0xFF,0xFE,0xFF,0xEF,0xFD,0xFF,0x7F,0xDF,
-0xFF,0xEF,0xFB,0xF8,0x0F,0xF3,0xFF,0xF9,
-0x2E,0xFB,0xFE,0xFC,0xF3,0xEF,0xFF,0xFF,
-0xBF,0xFF,0xFB,0xE7,0xFF,0xFE,0x7E,0xFF,
-0xC0,0x6B,0xCF,0xFF,0x34,0xDF,0xF1,0xFD,
-0xFF,0xEF,0xFF,0xFF,0xFF,0xDF,0xF7,0xFD,
-0xCF,0x7F,0x9C,0xFD,0xFD,0x6C,0xF7,0xFF,
-0xF6,0xFD,0xEB,0x2B,0x9F,0xFF,0xFC,0xFE,
-0x7E,0xFF,0xFF,0xFF,0xFF,0xD7,0xF3,0xF7,
-0xFF,0xFB,0xE1,0xBF,0xFF,0xEB,0x7A,0xDE,
-0xD7,0xFB,0xFF,0xF9,0xFE,0xFF,0xFF,0xF3,
-0xDE,0x7F,0xFD,0xE7,0x7F,0xFF,0xFD,0xBB,
-0xFF,0xFF,0x7E,0xCC,0xF6,0xAF,0x5F,0x7F,
-0xFE,0xF4,0x7D,0xF7,0xFD,0xBB,0x6E,0xDB,
-0xB7,0xFF,0xF7,0xDF,0x66,0xFF,0xFF,0xF7,
-0x3D,0xCF,0xDE,0xBD,0xFF,0xFF,0xDE,0xDB,
-0x8D,0xF7,0x7E,0xDF,0xB7,0xEF,0x7F,0xFF,
-0xF6,0x87,0xFF,0xFF,0xEF,0xFE,0xDE,0xBF,
-0xFF,0xFF,0xFF,0xBB,0xEF,0xFD,0xFF,0x7B,
-0xDE,0xF7,0x3F,0xFF,0xBF,0xFB,0xDB,0xFF,
-0xF2,0xB6,0xFD,0xBD,0x7F,0xE7,0xFF,0xFF,
-0xFF,0x6F,0xF7,0xFF,0xFF,0xFF,0xFE,0x77,
-0xFF,0xBF,0xF8,0xAF,0xFF,0xDF,0xBF,0xFF,
-0xBF,0x7F,0xFB,0xFF,0xFF,0xFF,0xDB,0xFE,
-0xFF,0xBF,0xFF,0xFA,0xFF,0xFD,0xFF,0xF6,
-0x7F,0xFF,0x9F,0xFF,0xFF,0x3F,0xEF,0xF8,
-0xEE,0x7E,0x9F,0xBA,0xFE,0xBF,0x8F,0xEF,
-0xFE,0xFE,0xF9,0xFF,0xFA,0x7F,0xFE,0x7E,
-0xBF,0xAF,0xFB,0x96,0xFD,0x9F,0xEF,0x5E,
-0x65,0xBE,0xEF,0x5B,0xB6,0xFF,0xBE,0xE3,
-0xFF,0xB5,0xBF,0xFF,0xFD,0xFF,0x7F,0xFF,
-0xEF,0xDF,0xFE,0xFF,0xBF,0xFB,0xFE,0xFF,
-0xBF,0xCF,0xFF,0xFF,0xFF,0xFD,0x9B,0xFF,
-0xFE,0xFB,0xFE,0xDF,0xFF,0x7F,0xFF,0xF7,
-0xFE,0xFF,0xDF,0xFB,0xFB,0xFE,0xFF,0xFF,
-0xFF,0xFF,0xFF,0xB7,0xFE,0xFA,0xFF,0xAB,
-0xEF,0xFF,0xFD,0xB5,0x7B,0x7F,0xFB,0xF7,
-0xFD,0xFF,0xFF,0xDD,0xFF,0xEF,0x8F,0xFF,
-0x2F,0xFF,0xFB,0x7C,0xFF,0x3F,0xDF,0x73,
-0xEB,0xFE,0x3F,0xFF,0xEF,0xFB,0xFE,0xFF,
-0xEF,0xFD,0xFF,0xBF,0xFD,0x0F,0xFF,0xFF,
-0xFF,0xF5,0xF9,0xFF,0x7F,0xD7,0xFD,0xFF,
-0xDF,0xFF,0xF7,0xFB,0xFF,0x7F,0xBF,0xFF,
-0xFF,0xF0,0x9F,0xFF,0xFE,0x7F,0x8B,0xE3,
-0xF9,0xDE,0x27,0x9B,0xE6,0xBE,0x7F,0x9B,
-0xC3,0xF8,0xDE,0x7F,0x9D,0xE7,0xFE,0x7F,
-0xFF,0xFF,0x5F,0xD7,0xFF,0xFF,0xFF,0x4F,
-0xFB,0xFF,0xFF,0x7F,0xFF,0xAF,0xFF,0x9F,
-0x7F,0xFB,0xFF,0xE8,0xFF,0xFF,0xFE,0xBF,
-0xAF,0xFF,0xFF,0xFE,0xBF,0xEF,0xF7,0xFF,
-0xBF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF7,0xFF,
-0xFC,0xFF,0xFF,0xFD,0x7F,0xFF,0xFF,0xFF,
-0xFD,0x3F,0xCF,0xFF,0xFF,0xFF,0xFF,0xF7,
-0xFF,0xFD,0x7F,0xFF,0xFF,0x93,0xFF,0xFF,
-0x7A,0xDF,0xF7,0xFF,0xFF,0x7B,0x7F,0xB7,
-0xEF,0xFF,0xFF,0xFD,0xBF,0xFD,0xFB,0xFF,
-0xF7,0xFF,0xD7,0xFF,0xFF,0xFF,0xFC,0x9F,
-0x6F,0xCB,0xFF,0xF4,0xBB,0xDF,0xD6,0xFD,
-0xBF,0x2F,0xD3,0xF7,0xFF,0xDF,0xFF,0xCF,
-0xFF,0xFA,0xBE,0xBD,0xAF,0x6A,0xDA,0xBE,
-0xBB,0xAB,0x3A,0xBE,0x2D,0xAE,0xEB,0xDA,
-0xF6,0x3F,0xAD,0xF5,0xDD,0xFF,0xCF,0xF1,
-0xFF,0xF9,0x7F,0xFF,0x73,0xFE,0xFF,0xCF,
-0xC3,0xF4,0xF7,0x2F,0xF3,0xFF,0xFC,0xFF,
-0x7C,0x1F,0xFF,0x3F,0x4F,0xFF,0x7E,0xFF,
-0xEF,0xBD,0xF6,0xFE,0xFF,0x2B,0xEF,0xDC,
-0xFB,0xFD,0xFF,0xFB,0xFF,0xEA,0x7B,0xFF,
-0xFF,0xFF,0xFF,0xFF,0xFB,0xF7,0xDF,0xFF,
-0xE3,0x7D,0xFF,0xB7,0xFF,0xBF,0xFF,0xFF,
-0xDF,0xFF,0xF8,0xFF,0xBF,0xFF,0xBF,0xEB,
-0xE7,0xFA,0xFE,0x3D,0xBF,0xE9,0xFC,0xBF,
-0xFF,0xFA,0xFB,0xFE,0xFF,0xFF,0xFF,0xD9,
-0xFF,0xFF,0xFF,0xF6,0x7F,0xFF,0xF6,0x7D,
-0xFF,0xDF,0xCF,0xFD,0xBF,0xFB,0xEF,0x7E,
-0xFF,0x7F,0xFF,0xFF,0xD3,0xFF,0xFD,0xFB,
-0xFF,0xFB,0xFF,0xFF,0xFF,0xEF,0xFF,0xBF,
-0xFE,0xFF,0xF7,0xEF,0xFF,0xFF,0xFF,0xFB,
-0xFF,0x87,0xFF,0xFD,0xFF,0xFF,0xFF,0xFF,
-0x7B,0xFE,0xFF,0xFE,0x3B,0xF7,0xF7,0xFF,
-0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0xFF,
-0xFF,0xFF,0xFF,0xFB,0xFF,0xFF,0xFF,0xF7,
-0xFF,0xFF,0xAD,0xFF,0xFE,0xF7,0xFF,0xFF,
-0x5F,0xFF,0xFF,0xDF,0xFF,0xFD,0xFF,0xF5,
-0xFF,0xDF,0xFF,0xBD,0xFF,0xE9,0xFF,0xC7,
-0xF3,0xFF,0xFF,0xF7,0xFF,0xF3,0xFF,0xF8,
-0x3B,0xFF,0xFF,0x7B,0xDF,0xBF,0xFB,0xEF,
-0xFB,0xFF,0xFB,0xF7,0xF7,0xBB,0xFF,0xFF,
-0xFF,0xFF,0xFB,0xFF,0xFE,0x7F,0xF3,0x7F,
-0x5E,0xB7,0xBF,0xFD,0x7F,0xFF,0xF9,0x7F,
-0xFB,0xFF,0xEB,0xFD,0x7F,0x7F,0xFF,0xEF,
-0xFB,0xE0,0x3F,0xFE,0xBF,0xBF,0xDF,0xFF,
-0x7E,0xFF,0xF7,0xFF,0xFF,0xFE,0xBF,0xFF,
-0xDB,0x78,0xFF,0xFF,0xFF,0xEE,0xA1,0xBF,
-0xF5,0xDE,0xFB,0xF7,0xFF,0xFB,0xFF,0xFF,
-0xFF,0xFF,0xFB,0xFF,0xFF,0xD7,0xFF,0xFF,
-0xFF,0xFF,0xEF,0xF0,0xFF,0xFF,0xFF,0xF3,
-0xF7,0xFF,0xEF,0xFF,0xE7,0xCF,0xFF,0xFB,
-0xFF,0xEF,0xFF,0xFF,0x9F,0x9F,0xEF,0xFC,
-0x16,0xBF,0xFE,0xF3,0xE4,0xFF,0xFF,0xC6,
-0xFF,0xE7,0xFF,0xFF,0xFD,0xFF,0xBF,0xFF,
-0xFF,0x3F,0xFF,0xBF,0xD6,0xAF,0x7F,0xFE,
-0x6B,0x7E,0x7F,0xFF,0xAF,0xFF,0xFF,0xBF,
-0xFF,0x5F,0xFF,0xFE,0xFF,0xFF,0xFE,0xFF,
-0xFF,0xBD,0xDB,0xFF,0xFE,0x5F,0xF2,0xFF,
-0xFF,0x5F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
-0xEF,0x7F,0xFF,0xFF,0xFF,0xFF,0xDE,0xBF,
-0xFF,0xFF,0xEF,0xFB,0x77,0xFE,0xBD,0x7F,
-0x5F,0xFF,0xFF,0xFF,0xDF,0x6F,0xED,0xFF,
-0xFD,0xFF,0x7F,0xFD,0x6F,0xFF,0xFF,0x77,
-0xDA,0xCF,0xFD,0x5F,0xFF,0xBF,0xFF,0xFF,
-0xDF,0x7F,0xFF,0xFB,0xFF,0xFF,0xFF,0xFF,
-0x66,0x7F,0xFF,0xFE,0xBF,0xE7,0xBF,0xFA,
-0xFF,0xFE,0xFF,0xFF,0xFF,0xDF,0xFF,0x59,
-0xEF,0xFF,0xEF,0xFB,0x7F,0x89,0xFF,0xFF,
-0xE9,0xFF,0x6F,0xFF,0xF5,0xFF,0xFF,0xFF,
-0xFF,0xFF,0x7F,0xF2,0xF7,0xFF,0xFF,0xEF,
-0xF8,0x7F,0xFB,0xFF,0xFD,0xFF,0xFF,0xD9,
-0xFF,0xEF,0xBB,0xFF,0xFF,0xFF,0xBF,0xEF,
-0xDE,0xFF,0xFF,0x9F,0x7F,0xDF,0xFF,0xF7,
-0xFF,0xFF,0xFF,0xFF,0xDF,0xFF,0xFF,0xAF,
-0xFF,0xFF,0xF7,0x3F,0xEB,0x9F,0xFE,0x7F,
-0x9E,0x7F,0x9F,0xFE,0x87,0xFF,0xED,0xDB,
-0x56,0xFF,0xBF,0xAF,0x0B,0xD2,0xFF,0xEF,
-0xDB,0x6E,0x7D,0xBD,0x6F,0xF8,0xFE,0x3F,
-0xFA,0x5B,0xFF,0xFD,0xBF,0xEF,0xFF,0xBF,
-0x6F,0xDB,0xE6,0xFF,0xFF,0x3F,0xFF,0xDF,
-0xFE,0xFF,0xFF,0xFF,0xFF,0xDA,0x3F,0xFF,
-0xFB,0xFE,0xFE,0xFF,0xFF,0xDF,0xF7,0xBD,
-0xFF,0xFD,0xFF,0xFE,0xFF,0xFB,0xFF,0xFF,
-0xFF,0xFF,0xF1,0x5F,0xFD,0x9F,0xDF,0xFD,
-0xFF,0xFD,0x7F,0xFF,0xFF,0xFF,0xFF,0x76,
-0xFA,0xFF,0xFF,0x7F,0xE3,0xF8,0xFF,0xAE,
-0xFF,0xFB,0x7E,0x9D,0x73,0xFF,0xFA,0x7F,
-0xDF,0xFF,0xFF,0x7F,0xFF,0xFB,0xCD,0xFF,
-0x7F,0xEF,0xFB,0xFF,0xFD,0xFF,0xF7,0x7F,
-0x7F,0xEF,0xFF,0xED,0xFF,0xFF,0xFF,0xB5,
-0xFF,0xBF,0xFF,0xBF,0xFD,0xEF,0xDB,0xF7,
-0xFF,0x93,0xFF,0xEF,0xE2,0xF9,0xBE,0x7F,
-0x8B,0xE7,0xF9,0xFE,0x6B,0xE7,0xF9,0xFE,
-0x7F,0x9F,0xE7,0xF9,0xFE,0x7F,0x47,0xFF,
-0xFF,0xFD,0xFF,0x9F,0xFF,0xD7,0xFF,0xFF,
-0xFF,0xFF,0xF5,0xFF,0x9F,0xFF,0xF7,0xFE,
-0xFF,0xBF,0xFE,0x6F,0xFF,0xFF,0xFB,0xFF,
-0xFF,0xFF,0xAF,0xFF,0xFF,0xFF,0x7F,0xFB,
-0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFD,
-0xDF,0xFF,0xFF,0xF7,0xFF,0xFF,0xFF,0xDF,
-0xFF,0xFF,0xFF,0x5F,0xFF,0xFF,0xFF,0xFF,
-0x5F,0xFB,0xFE,0xFF,0xF8,0x37,0xFF,0xFF,
-0xEF,0xFF,0x7F,0xFE,0xBF,0xFF,0xFF,0xFE,
-0xBF,0xFF,0xFF,0x7F,0xFF,0xBF,0xFD,0xFF,
-0x7F,0xFA,0x7F,0xFF,0xFF,0x6F,0xFF,0xFF,
-0x7D,0xFF,0xCF,0xFF,0xFF,0xFF,0x4F,0xFF,
-0xF2,0xFF,0xFF,0xFF,0xFF,0xFF,0xFA,0xBF,
-0xFF,0xAE,0xEB,0xFA,0xFE,0xBB,0xAD,0xEB,
-0xFA,0xF7,0xAF,0x6B,0xFA,0xF6,0xBF,0x25,
-0xE9,0xF2,0x7F,0x45,0xFF,0xFF,0xFD,0xF7,
-0xF7,0xBF,0xFF,0xDF,0xFF,0xFF,0xBF,0xFB,
-0xFF,0xDF,0xF3,0xFF,0xF7,0x3F,0xCF,0xFF,
-0xA1,0xFF,0xFF,0xBF,0xE7,0xFF,0xFF,0x7F,
-0xFF,0x3D,0xFF,0xFF,0xFF,0xF7,0xFF,0x2F,
-0xFF,0xFB,0xF5,0x7F,0xFE,0x57,0xFF,0xFF,
-0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF7,
-0x3F,0xFF,0xFE,0xFF,0xFF,0xFF,0xFD,0xFE,
-0xF7,0xEE,0xAF,0xFE,0xEE,0xE7,0xFA,0xFF,
-0xFE,0x9D,0xF9,0x5E,0xFE,0xFF,0xEB,0xFF,
-0xFF,0xDF,0xA7,0xFF,0xFF,0xFF,0xFC,0xDB,
-0xFF,0xFF,0xFF,0x7E,0xFB,0xFF,0xFF,0xEF,
-0xFB,0xFD,0xFF,0xDB,0xFF,0xFF,0xFF,0xEF,
-0xFF,0xFF,0xFF,0xFD,0xBF,0xFE,0xBF,0xFF,
-0x6F,0x7F,0xFF,0xF7,0xFF,0xFF,0xF9,0xFF,
-0xF7,0xFF,0xBF,0xDE,0xF7,0xFF,0xFF,0xFF,
-0xFA,0x7F,0xFD,0xBF,0x5F,0xFF,0xFF,0xBF,
-0xFF,0xED,0xFF,0xF7,0xBF,0xFF,0xFF,0xEF,
-0xFF,0xDF,0xFF,0xFF,0xFF,0xE6,0xFF,0xFB,
-0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xF7,0xFF,
-0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xEB,0xFF,
-0xFD,0xFF,0xF5,0xFF,0xF6,0x7F,0xDF,0xBD,
-0xCF,0xFF,0xFF,0xFF,0xFF,0xDF,0xFF,0xFF,
-0xFF,0xF9,0xFF,0xFF,0xFF,0xFF,0xFF,0xE3,
-0xFF,0xEE,0xBF,0xFF,0x7D,0xEF,0xFE,0xFF,
-0xFF,0xFF,0xBF,0xFF,0xFF,0xFF,0xFF,0xFE,
-0xFF,0xFF,0xFF,0xFF,0xE7,0xFF,0xB5,0xAE,
-0xFF,0xFF,0xB6,0xFE,0xBF,0xFF,0xFF,0xBF,
-0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
-0xFF,0x27,0xFF,0xEF,0xFE,0x7F,0xDF,0xFF,
-0x7E,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
-0xFF,0xFF,0xFD,0xFF,0xF7,0xF9,0x9F,0xFF,
-0x5F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,
-0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,
-0xFF,0xFF,0xFF,0x0F,0xFF,0xE7,0xBF,0xFE,
-0xFF,0xBF,0xFF,0xFF,0xFF,0xFF,0xFC,0xBF,
-0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xC4,
-0x6B,0xFF,0x29,0x1F,0xFB,0xAF,0xFF,0xFF,
-0xFF,0xFF,0xFF,0xEF,0x1B,0xFE,0xFF,0xFC,
-0x6F,0xFF,0xFF,0xFD,0x6A,0xF7,0xD7,0xF5,
-0xBF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,
-0xFE,0xBF,0xFF,0xFF,0xFA,0xFF,0xFF,0xF7,
-0xFB,0xDD,0xBF,0xFF,0xE7,0xFF,0xFF,0xFF,
-0xFF,0xFF,0xFF,0xFF,0xFF,0xFD,0x7F,0xFF,
-0xFF,0xF5,0xFF,0xFF,0xF7,0xFD,0xB3,0xEF,
-0xFD,0x7E,0x5D,0xFF,0xFD,0xFF,0xFF,0xFF,
-0xFD,0x7F,0xD2,0xF5,0xFB,0x7E,0xCB,0xB7,
-0xFF,0xFF,0xFF,0xC6,0xFF,0xFD,0xEE,0x63,
-0xFF,0xFF,0xFF,0xFF,0xFF,0xF6,0xFD,0x65,
-0x5B,0xDF,0xFF,0xD5,0xFF,0xFF,0xFF,0xF6,
-0xE7,0xBF,0xF7,0xA9,0xFF,0xFF,0xED,0xFF,
-0xFF,0xFF,0xFF,0xFF,0xEB,0xFF,0xFF,0xFF,
-0xAF,0xFF,0xFF,0xFF,0xF8,0x1B,0xFF,0xE3,
-0xD0,0xBF,0xFF,0xE1,0xFF,0xFF,0xFF,0xFF,
-0xFF,0xD7,0xFF,0xFF,0xFF,0x5F,0xFF,0xFF,
-0xFF,0xFF,0xAF,0xFF,0xDB,0x76,0xBF,0xFF,
-0x7F,0xFF,0xBF,0xEF,0xFE,0xFF,0xBF,0xEF,
-0xFB,0xFE,0xFF,0xFF,0xFF,0xBF,0xF2,0x7F,
-0xFF,0x9F,0xFE,0xBD,0xFE,0x7F,0xFF,0xFF,
-0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
-0xFF,0xF7,0x3F,0xEC,0x7F,0xF6,0x95,0xBB,
-0xEF,0xF8,0xFE,0xFC,0xBF,0x2F,0xDA,0xFC,
-0xBF,0x2F,0xCB,0xF2,0xFC,0xBF,0xEF,0xFF,
-0xA9,0xBF,0xCF,0xFB,0xFF,0xFF,0xFF,0xFE,
-0xDD,0xB7,0x6D,0xF6,0xD9,0xB6,0x6D,0x9B,
-0x76,0xD9,0xBF,0xFB,0xFD,0xA3,0xFF,0xBF,
-0xEF,0xFF,0xEF,0xFF,0xFF,0xFF,0x7F,0xDF,
-0xFD,0xEF,0x7B,0xDE,0xF7,0xFD,0xEF,0x7F,
-0xFF,0xFF,0x05,0xFF,0xFA,0xFE,0x7F,0xEF,
-0xE3,0xFF,0xFF,0xFD,0x7F,0xFF,0xFF,0xFF,
-0xFF,0x5F,0xFF,0xFF,0xFD,0x7F,0xFB,0xAF,
-0xFF,0x63,0xC8,0xFF,0xBF,0xEF,0xFF,0xFF,
-0xFA,0x7F,0xFF,0xFF,0xFF,0xFE,0x9F,0xF7,
-0xFF,0xFA,0xBF,0xFE,0x9F,0xFB,0x7F,0xFF,
-0xFF,0xEF,0xD7,0xFF,0xFF,0xF5,0xFF,0xFF,
-0xFF,0xFF,0xFD,0x7F,0xFF,0xFF,0xBF,0xFF,
-0xF9,0xBF,0xFF,0xBE,0x27,0x9F,0xE7,0xF9,
-0xFE,0x7F,0x8B,0xE7,0xFE,0x7F,0x9F,0xE2,
-0xF9,0xFE,0x7F,0x9F,0xE7,0xF1,0x7F,0xFF,
-0xFF,0xFF,0xFB,0xFE,0xFF,0xFF,0xFF,0xD7,
-0xFF,0xFF,0xFF,0xFF,0xF5,0xFF,0xFF,0xFF,
-0xD7,0xFF,0xFA,0xFF,0xFE,0xFF,0xFF,0xFF,
-0xFD,0xFF,0xFF,0xFF,0xAF,0xF7,0xFF,0xFF,
-0xFF,0xEB,0xFF,0xFF,0xFF,0xAF,0xFF,0xC4,
-0xFF,0xF7,0xFF,0xFF,0xEF,0xFF,0xFF,0xFF,
-0xFF,0x5F,0xFF,0xFF,0xFF,0xFF,0xD7,0xFF,
-0xFF,0xFF,0xFF,0xFF,0xEB,0xFF,0xFB,0x7A,
-0xDF,0xF7,0xFD,0xFF,0xFF,0xFE,0xBF,0xFF,
-0xFF,0x7F,0xFF,0xAF,0xFF,0xFF,0xFF,0xF7,
-0xEF,0xE3,0xFF,0xDD,0xD2,0xFF,0xDF,0xFF,
-0xFF,0xF2,0xFC,0xBF,0xCB,0xF6,0xFD,0xBF,
-0x2F,0xCB,0xFF,0x7F,0xDF,0xDE,0xAF,0xFF,
-0xDA,0xEE,0xBF,0xAF,0xE9,0xFA,0xF4,0xBD,
-0xAF,0x5A,0xAE,0xBB,0xAB,0x6B,0xDA,0xDE,
-0xBF,0xAD,0xD7,0x5E,0xFF,0xFF,0xBF,0xFC,
-0xFF,0xDF,0xFD,0xFF,0xFF,0xFF,0xFF,0xDF,
-0xF7,0xFF,0xFF,0xFF,0xFF,0xFD,0xFF,0xFA,
-0x1F,0xFF,0xFE,0xFB,0xEF,0xBF,0xFD,0xFF,
-0xFD,0xBD,0x77,0xFF,0xFF,0xFF,0xFF,0x9D,
-0xEF,0xFF,0xFF,0xFF,0xEF,0x7D,0xFF,0xFB,
-0xFE,0xEF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF7,
-0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xEE,
-0xBF,0xE4,0xFB,0xFF,0xFE,0x3F,0xFE,0xFF,
-0xFF,0xFF,0xFF,0xAF,0xEA,0xFE,0xBF,0xAF,
-0xEB,0xFA,0xFE,0xFF,0xFF,0xFF,0x55,0xF6,
-0xFF,0xFE,0xF7,0xFF,0x7F,0xFF,0xEB,0xF7,
-0x5F,0xC5,0xFD,0x7F,0x5F,0xD7,0xF5,0xFF,
-0x6F,0xFB,0xFF,0x8A,0xFF,0xFF,0xFF,0xFF,
-0xEB,0xFF,0xFF,0xFF,0xFF,0xFB,0xBF,0xBF,
-0xEF,0xFB,0xFF,0xFF,0xFF,0xFF,0xFB,0xFF,
-0x77,0xDF,0xFB,0xFF,0xFD,0x7F,0xEF,0xFF,
-0xFF,0xFF,0xBF,0x7F,0xFF,0xDF,0xBF,0xFF,
-0xFB,0xFF,0xFF,0xFF,0xFE,0xEF,0xDF,0xFF,
-0xFE,0xFF,0x9F,0xEF,0x7D,0xFF,0xF7,0xFF,
-0x7F,0xFF,0xFF,0xDF,0xF7,0xFD,0xFF,0xEF,
-0xDF,0xFF,0xDF,0xFF,0xFF,0xFF,0xFF,0xFF,
-0xFF,0xFF,0xFF,0xFF,0xFD,0xFF,0xFF,0xFB,
-0xFD,0xFF,0xBF,0xDF,0xD1,0xFF,0xF8,0x3B,
-0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
-0x7E,0xDB,0xFD,0xFF,0x77,0xDB,0xB7,0x7D,
-0xBF,0xFB,0xFF,0xF8,0x7F,0xED,0x7B,0x5E,
-0xFF,0xFE,0xFF,0xFF,0x4F,0xD7,0xFD,0x7F,
-0xDF,0xD7,0xF5,0xFF,0x7F,0xFF,0xFF,0xFF,
-0xF2,0x3F,0xFE,0xFF,0xBF,0xFF,0xFF,0xFF,
-0xFF,0xBF,0xEF,0xFE,0xFF,0x3B,0xEE,0xFF,
-0xFC,0xEF,0xFF,0xFF,0xFF,0x85,0xFF,0xFD,
-0xFE,0xFF,0xF5,0xFF,0xFF,0xFE,0xFF,0xDF,
-0xFB,0xFF,0x5F,0xBF,0xFF,0xFD,0xFF,0xFF,
-0xFF,0xFF,0xA8,0xFF,0xFF,0x9F,0x9E,0xFF,
-0xFF,0xFF,0x7F,0xF3,0xFF,0xFF,0xCF,0xFF,
-0xF7,0xFD,0xFF,0x7F,0xFF,0xFF,0xFC,0x16,
-0xBF,0xCF,0xA3,0xE5,0xEF,0x7F,0xFF,0xF3,
-0xE4,0xFF,0xCF,0x93,0xFC,0xFF,0x3F,0xCF,
-0xFF,0xFF,0xFF,0xD6,0x0F,0x7D,0xBF,0x6E,
-0xFB,0xF4,0xFC,0xAF,0x6D,0xDB,0x77,0xB7,
-0x6D,0xDB,0xF6,0xFD,0xBF,0xFF,0xFF,0xFF,
-0xBF,0x9B,0xFA,0xDE,0xB7,0xB7,0xED,0xF9,
-0x7E,0xB7,0xAC,0xEB,0xD6,0xB3,0xAD,0xEB,
-0x7A,0xDF,0xFF,0xFF,0xFF,0xD8,0xBF,0xFF,
-0xB7,0xED,0x9F,0x6F,0xDD,0xF7,0x68,0xDB,
-0x37,0xB3,0x6C,0xDB,0x36,0xCD,0xB3,0x7F,
-0xFF,0x7F,0xF5,0x6F,0xFD,0xEF,0x79,0x3D,
-0xF7,0x93,0xE4,0x7A,0x9E,0xAD,0xEA,0x7A,
-0x9E,0xF7,0xBD,0xEF,0xFF,0xFF,0xFF,0x76,
-0x7F,0xFB,0xC6,0xFF,0xBB,0xEF,0xDA,0xFE,
-0xFD,0xBF,0xFB,0xFE,0xFF,0xBF,0xEF,0xFB,
-0xFF,0xFF,0xFB,0xFF,0xA5,0xFF,0xFD,0xAB,
-0x6F,0x78,0xDE,0x17,0x8F,0x79,0xDF,0xFD,
-0xFF,0x7F,0xDF,0xF7,0xFD,0xFF,0xFF,0xFB,
-0xFF,0xFB,0xFF,0xEF,0xFB,0xEF,0xFB,0xFE,
-0xFF,0xBB,0xDA,0xF3,0xEF,0x3B,0xCE,0xF3,
-0xBC,0xEF,0x3F,0xCF,0xDF,0xFF,0xB7,0xFF,
-0xFF,0xFF,0xCF,0x73,0xFF,0xBF,0xEF,0xFF,
-0xF3,0xFF,0x3F,0xCF,0xF3,0xFC,0xFF,0x3D,
-0xCF,0x9F,0xFE,0x07,0xFF,0xAF,0xEB,0xFE,
-0xFD,0xBF,0xEF,0xEB,0xFA,0xFF,0xAF,0xEB,
-0xFA,0xFE,0xBF,0xAF,0xFB,0xFE,0x3F,0xFB,
-0x9B,0xFF,0x7F,0xDF,0xFF,0xF3,0xFE,0xFF,
-0xDE,0xF7,0xBF,0x7B,0xDE,0xF7,0xBD,0xEF,
-0x7B,0xFE,0xFF,0xFF,0xDF,0x3F,0xFE,0xFF,
-0xB7,0xFF,0xEF,0xF7,0xFF,0xBF,0xED,0xFE,
-0xDF,0xB7,0xED,0xFB,0x7E,0xDF,0xFF,0xFF,
-0xFF,0xFD,0x5F,0xEF,0xEB,0xFA,0xFE,0xF5,
-0xBF,0x6F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
-0xFF,0xFF,0xFF,0xFE,0xF8,0xFF,0xA8,0xFF,
-0xFF,0xBF,0xEF,0xFB,0x6A,0xFB,0xB7,0xEF,
-0xFB,0xFF,0xBF,0xEF,0xFB,0xFE,0xFF,0xBF,
-0xEF,0xFB,0xFF,0xE0,0xFF,0xFF,0xFD,0x7F,
-0x5C,0xD7,0x7D,0xDF,0xF3,0x5C,0xF5,0xCD,
-0x73,0x5E,0xD7,0xB5,0xFD,0x7F,0xEF,0xFF,
-0xDB,0xFF,0xFF,0xE2,0xF8,0xBE,0x2F,0x8F,
-0xE7,0xF8,0xBE,0x6B,0xE2,0xF8,0xBE,0x2F,
-0x8B,0xE2,0xF9,0xFE,0x7F,0xE7,0xFF,0xD7,
-0xF5,0xFD,0x7F,0xFF,0xF7,0xF5,0xFD,0x7F,
-0xD7,0xF5,0xFD,0x7F,0x5F,0xD7,0xF5,0xFF,
-0xFF,0xFF,0x8F,0xFF,0xAF,0xEB,0xFA,0xFF,
-0xFF,0xBF,0xEB,0xFA,0xFF,0x2F,0xEB,0xFA,
-0xFE,0xBF,0xAF,0xEB,0xFF,0xFF,0xFE,0x5F,
-0xFF,0x5F,0xFF,0xFF,0xFD,0xFF,0xFF,0xD7,
-0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
-0xFF,0xFF,0xFF,0xFF,0xBF,0xFE,0xB7,0xFD,
-0xFF,0x7E,0xDF,0xF7,0xAD,0xFF,0x7F,0xF7,
-0xFD,0xFF,0x7F,0xDF,0xF7,0xFD,0xFF,0x7F,
-0xF6,0x7F,0xFF,0xFF,0xFF,0xDB,0xF6,0xFC,
-0xAF,0xFF,0xFF,0xFF,0xFF,0xF7,0xFF,0xFF,
-0xFF,0xFF,0xFF,0xFF,0xFF,0xEC,0xBF,0xFF,
-0xAF,0xEB,0xFA,0xF6,0xAB,0x8F,0xEB,0xFA,
-0xF7,0xA5,0xEB,0xFA,0xBE,0xBF,0xAF,0xEB,
-0xFA,0xFF,0x6D,0xFF,0xFF,0x7F,0xDF,0x33,
-0xDD,0xFF,0x7F,0xFE,0xF7,0xFC,0x7F,0xFB,
-0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xA9,
-0xFF,0xFD,0xFF,0xFF,0xFE,0xFF,0xFF,0xDF,
-0xFF,0xFF,0xEF,0xEF,0xFD,0xFF,0x7F,0xFF,
-0xFF,0xFF,0xFF,0xFE,0xA7,0xFF,0xFF,0xFF,
-0x77,0xDF,0xF7,0xFD,0x9F,0x7F,0xFE,0x77,
-0xEF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
-0xFF,0xAF,0xBF,0xAF,0xFF,0xF9,0xBE,0xBF,
-0x8F,0xFB,0xFE,0xFE,0xEF,0xFB,0xFE,0xFF,
-0xBF,0xEF,0xFB,0xFF,0xFF,0xFD,0xDF,0x6F,
-0xEF,0xFF,0x7F,0xFF,0xBF,0xBF,0xDF,0xFF,
-0xFC,0xFF,0xDF,0xF7,0xFD,0xEF,0x7F,0xDF,
-0xFF,0xFF,0xFF,0x3F,0xF6,0xFF,0xCF,0xFF,
-0xDB,0xFB,0xF7,0xFF,0xEB,0x7A,0xFF,0xFF,
-0xFF,0xBF,0xEF,0xFB,0xFF,0xFF,0xFF,0xFE,
-0x6D,0xFD,0xFF,0x5F,0xFB,0xFF,0xFF,0xF7,
-0xFF,0x5F,0xF5,0xFF,0xFF,0xFF,0xFF,0xFF,
-0xFF,0xFF,0xFF,0xFF,0xF8,0xFF,0xFB,0xFF,
-0xFF,0xFD,0xFF,0xFF,0xFF,0xFF,0xE7,0xF6,
-0xBF,0xFF,0xFF,0xFF,0xFF,0xFB,0xFF,0xFF,
-0xFF,0xC9,0xFF,0xFF,0xFF,0xBD,0xFF,0xBF,
-0xAF,0xEF,0xEF,0x3F,0xD1,0xFC,0x7F,0xFB,
-0xC7,0xFF,0xFF,0xFF,0xFF,0xFF,0xE3,0xFF,
-0xFF,0xFF,0xFF,0xFD,0xFF,0xFF,0x77,0xFF,
-0xDF,0xB7,0xFD,0xF7,0xFD,0xF7,0xFF,0xFF,
-0xFF,0xFF,0xFF,0x57,0xFF,0xF7,0xA5,0xFD,
-0x3F,0xDF,0xBF,0xBF,0xFE,0x7F,0xFF,0xFF,
-0xFF,0xDF,0xFA,0xFD,0xFF,0xFF,0xFF,0xFE,
-0x87,0xFF,0xE9,0xFF,0xFE,0xEF,0xBF,0xEF,
-0xFE,0xFE,0xFF,0xEF,0xFF,0xFF,0xFF,0xFF,
-0xFF,0xFF,0xFF,0xFF,0xFA,0x9F,0xFF,0x3F,
-0xFF,0xFD,0xFD,0x57,0xDF,0xFD,0xF3,0xFF,
-0xDF,0xFD,0xFF,0x5F,0xDF,0xF5,0xFD,0xFF,
-0xFF,0xF9,0x8F,0xFF,0xFF,0xFF,0xEE,0x7F,
-0xFF,0xFF,0xBF,0x5E,0xFE,0xEC,0xFB,0x3F,
-0x7F,0x9F,0xEF,0xF9,0xFF,0xFF,0xCD,0x6B,
-0xFF,0xFF,0xFF,0xC5,0xF3,0xFC,0xFA,0x38,
-0xFF,0xAF,0x3F,0xEE,0x7F,0x9F,0xFF,0xD9,
-0xFF,0xFF,0xFD,0x7A,0xF7,0xFF,0xF3,0xFF,
-0xAF,0x6F,0xDB,0xF2,0xB9,0xE9,0xFB,0xFF,
-0xFF,0xFF,0xFE,0xFF,0xFF,0xEF,0xFF,0xFB,
-0xC5,0xBF,0xFF,0xEF,0xFF,0x5E,0xB7,0xAD,
-0xCD,0x79,0x7C,0xFF,0xFF,0xFF,0xFF,0xFF,
-0xFF,0xFF,0xFF,0xFF,0xFD,0x93,0xFF,0xEF,
-0xEA,0xFE,0xBF,0xEF,0x5B,0xD2,0xCD,0xF5,
-0x6D,0x77,0xDF,0xF7,0xFD,0xFF,0x7F,0xDF,
-0xFF,0xFF,0x66,0xFF,0xD5,0x65,0x7D,0x5F,
-0x75,0x9D,0x65,0x7F,0xD6,0xFB,0x4F,0xFF,
-0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF6,0xC7,
-0xFF,0xBF,0xEF,0xFA,0xFE,0xFF,0xBF,0xEB,
-0xFF,0xDF,0xFF,0x7E,0xFF,0xFF,0xEF,0xFD,
-0x7E,0xD7,0xFF,0x78,0xDF,0xFF,0x5F,0xDF,
-0xF5,0xBF,0x7F,0xDF,0xC5,0xFF,0x3F,0xF6,
-0x7E,0xFF,0x0F,0xEF,0xF2,0x3E,0xBF,0xFF,
-0xFB,0x3F,0xFF,0xFB,0x7F,0xFF,0xB3,0xFE,
-0xFB,0xF6,0xFD,0xFF,0xDA,0xF7,0xFD,0xFF,
-0x7F,0xDF,0xF7,0xBF,0xFF,0xFA,0x7F,0xFF,
-0xFF,0xFF,0xFF,0x9F,0xFF,0xF3,0xDC,0xF9,
-0xBF,0xCE,0xE7,0xF9,0xFE,0x7F,0x9F,0xE7,
-0xFF,0xFF,0xE2,0x7F,0xFE,0xFF,0xBF,0xEF,
-0xEB,0xFA,0xFF,0x9F,0x67,0x1E,0xFF,0x8F,
-0xE7,0xF8,0xFE,0x7F,0x8F,0xEF,0xFF,0xBD,
-0xBF,0xFF,0xFB,0xFF,0xFF,0xDF,0xF7,0xFF,
-0xFC,0xFF,0xBF,0xFF,0xFF,0xFF,0xFF,0xFF,
-0xFF,0xFF,0xFF,0xFD,0xB3,0xFF,0xFF,0xEF,
-0xFF,0xFF,0xBF,0xED,0xFF,0xFB,0xEE,0xFE,
-0xFF,0xFF,0xEF,0xFF,0xFE,0xFF,0xFF,0xFF,
-0xFF,0xB5,0xFF,0xB7,0xFD,0xFD,0x6E,0xFF,
-0xFF,0xFE,0xFD,0x2F,0xD8,0xFE,0xBF,0x8F,
-0xEB,0xF9,0xFE,0x3F,0xFF,0xFA,0xCF,0xFF,
-0xE7,0xD9,0xFA,0xBF,0xDF,0x77,0xFC,0xFB,
-0x3F,0xAB,0xFE,0xFF,0xBF,0xEF,0xFB,0xFE,
-0xFF,0xFF,0xEE,0x1F,0xFF,0xDF,0xF7,0xFF,
-0xFF,0xFF,0x5F,0x97,0x35,0xBF,0x5E,0xFE,
-0xBF,0xEF,0xFF,0xF7,0xFD,0xFF,0xFF,0xFA,
-0xBF,0xFF,0xBE,0x6F,0x9F,0xE7,0xF8,0xBE,
-0x2F,0x8B,0x66,0x94,0x7D,0x9D,0xE7,0xF9,
-0xFE,0x7F,0x9F,0xE7,0xF1,0x7F,0xFF,0xFF,
-0xFF,0xF7,0xF5,0xFD,0x7F,0x5F,0xFB,0xFD,
-0x9E,0xFF,0xFB,0xFE,0xFF,0xFF,0xEF,0xFF,
-0xFF,0xA0,0xFF,0xFF,0xFF,0xBF,0xEF,0xEB,
-0xFA,0xFE,0xBF,0xB7,0xF7,0xF7,0xFF,0xFF,
-0xFD,0xFF,0xFF,0xFF,0xFF,0xFF,0xDD,0xFF,
-0xFD,0xFF,0xFF,0xFF,0xD7,0xFF,0xFF,0xFF,
-0x7F,0xF5,0xFF,0xFF,0xEF,0xFF,0xFF,0xFF,
-0xBF,0xFF,0xFF,0xAB,0xFE,0xFB,0xFE,0xFF,
-0xF7,0xAF,0xFF,0xFF,0xDE,0xF7,0xEB,0x5F,
-0xDF,0xF7,0xFD,0xFF,0x7F,0xDF,0xFF,0xFF,
-0xB3,0xFF,0xC9,0xFE,0xFF,0xFF,0xFF,0xFF,
-0xD6,0xFF,0xFF,0xCB,0xFF,0xFF,0xDF,0xFF,
-0xFF,0xFF,0xFF,0xFF,0xFC,0x8F,0xFF,0xBA,
-0xBE,0xBF,0xAF,0xEB,0x78,0xFE,0xB7,0xAD,
-0x3A,0xFE,0xB7,0xAF,0xEB,0x7A,0xFE,0xBF,
-0xAF,0xFF,0x9F,0xFF,0xFF,0xDF,0xFC,0xFF,
-0xFF,0xFE,0xC3,0xFE,0xFF,0xFF,0x33,0xFC,
-0xFF,0xBF,0xDF,0xF3,0xFF,0xFF,0xBB,0x9F,
-0xFF,0xFF,0xFF,0xEB,0xDF,0xFF,0xFF,0xAF,
-0xF7,0x6F,0xF9,0xBF,0xEF,0xFD,0xFF,0xFF,
-0xFF,0xFF,0xFF,0xE3,0x7F,0xFF,0xFF,0xFF,
-0xFB,0xFF,0xFF,0xBF,0xFD,0xFB,0xF7,0xFF,
-0xDF,0xF7,0xFF,0xFE,0xEF,0x5F,0xBD,0xFF,
-0xFA,0xFF,0xF8,0xFF,0xBF,0xAF,0xFB,0xFE,
-0xFE,0x3F,0xEF,0xE8,0xFF,0xDF,0xF3,0xFD,
-0xFF,0xFF,0xFF,0xFF,0xFF,0xED,0xFF,0xFB,
-0xFD,0xFF,0xAF,0xFF,0xFF,0xFE,0xFE,0xBF,
-0xDB,0xFF,0xFF,0xFF,0xBF,0xFF,0xDF,0xFF,
-0xFD,0xFF,0xCB,0xFF,0xFF,0xFF,0xFF,0xFF,
-0xBF,0x6F,0xFF,0x7F,0xB7,0xB3,0xFF,0xFF,
-0xDF,0xFF,0xFB,0xEF,0xFF,0xFF,0xFF,0x07,
-0xFF,0xFB,0xFF,0xFF,0xFF,0xED,0xFF,0xF5,
-0x7C,0xFF,0x7F,0xFE,0xFF,0xFF,0xEF,0xCF,
-0xFF,0xFB,0xFF,0xFF,0x2F,0xFF,0xFF,0xFF,
-0xFF,0xF3,0xFF,0xFB,0xFF,0xFE,0xFF,0xFF,
-0xFF,0xFF,0xFF,0xFF,0xBF,0xFF,0xFF,0xFF,
-0xFD,0x1B,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
-0xFF,0xFF,0xFE,0x7C,0xFF,0xFF,0xFF,0xFF,
-0xEF,0xFF,0xFF,0xFF,0xFF,0xFB,0xBF,0x7F,
-0xFD,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
-0xDB,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFD,
-0xFF,0xFF,0xF0,0x7F,0xFF,0xFF,0xFF,0xFF,
-0xFF,0xFF,0xFF,0xFF,0xFF,0xFB,0xFF,0xDF,
-0xFF,0xFF,0xFF,0xFF,0xFF,0xFD,0xBF,0xFE,
-0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
-0xFF,0xEF,0xFE,0xFF,0xBF,0xFF,0xFF,0xFF,
-0xFF,0xFF,0xEF,0xFA,0xB5,0xFF,0xFF,0xFF,
-0xF7,0xF7,0xFF,0xFF,0xFF,0xFF,0xDF,0xFB,
-0xFC,0xFF,0xFF,0xFE,0xFF,0x7F,0xDF,0xBF,
-0xFF,0xCB,0xBF,0xF9,0xFE,0x7F,0x9F,0xE7,
-0xF9,0xFE,0x7F,0x97,0xE1,0xFE,0x79,0x9F,
-0xE7,0xFD,0xFE,0x7F,0xDF,0xFE,0x37,0xFF,
-0xFB,0xDE,0xDE,0xBD,0xEF,0xF3,0xFE,0xFB,
-0xAF,0xEB,0xFE,0xFF,0xFF,0xCF,0xFF,0xFE,
-0xFF,0xBF,0xFF,0x8F,0xFF,0xEF,0xFB,0xFE,
-0xFF,0xBF,0xE7,0xF9,0x5E,0x7F,0xEF,0xFB,
-0xDA,0xFF,0xBF,0xEF,0xFB,0xFE,0xFF,0xFD,
-0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xDF,
-0xFF,0xFF,0x7F,0xFF,0xFF,0xF7,0xFB,0x7F,
-0xFF,0xFF,0xFF,0xFF,0xFC,0x3F,0xFF,0xBF,
-0xEF,0xFB,0xFE,0xFF,0xBF,0xEF,0x7B,0x7F,
-0xBF,0xEF,0xFB,0xFE,0xFF,0xB5,0xEF,0xFB,
-0xBF,0xFA,0x7F,0xFC,0xFF,0x3F,0xCF,0xF3,
-0xFC,0xFF,0x3F,0xCF,0xBC,0xFF,0x3F,0xEF,
-0xF3,0xFC,0xFE,0x3F,0xCF,0xFF,0xEE,0xEF,
-0xFB,0xFE,0xFF,0xBF,0xEF,0xFB,0x6A,0xD7,
-0xB7,0xFB,0xF8,0xFF,0xB7,0xEF,0xBA,0xFE,
-0xFF,0xBF,0x7F,0xE9,0xFF,0xF9,0x7E,0x5F,
-0x97,0xE5,0xF9,0xFE,0x7F,0xBF,0xF9,0x7E,
-0x5F,0x9F,0xE5,0xFB,0xFE,0x5F,0xB7,0xFF,
-0xA3,0xFF,0xF7,0xFD,0xFF,0x7F,0xDF,0xF7,
-0xFD,0xFF,0x5E,0xF7,0x7D,0xFF,0x77,0xDF,
-0xF7,0xFD,0xFF,0x7F,0xFF,0xD7,0xFF,0xFF,
-0xFF,0xFF,0xFF,0xFF,0xFD,0xDF,0xFB,0x7F,
-0xFF,0xFF,0xEF,0xFF,0xFE,0xFB,0xFF,0xFF,
-0xBF,0xFE,0x8F,0xFF,0xDF,0xF7,0xFD,0xFD,
-0x7F,0xDF,0xF7,0xFD,0x3E,0xDF,0xF5,0xBD,
-0xFF,0x7F,0xDF,0xF7,0xFD,0xF7,0xFF,0x9F,
-0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
-0xFF,0xFD,0xFF,0xBE,0xFF,0xFF,0xFF,0xFF,
-0xFF,0xFF,0xFF,0xFD,0x3F,0xFF,0xDF,0xF7,
-0xFD,0xFF,0x7F,0xDF,0xF7,0xFD,0xFF,0xCF,
-0x77,0xFC,0xFF,0x5F,0xDF,0xF7,0xFD,0xFF,
-0xF4,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
-0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
-0xFF,0xFD,0xFF,0xFF,0xFF,0xEE,0xFF,0xFF,
-0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
-0xED,0xFB,0xFF,0xFF,0xBF,0xFF,0xFF,0xFF,
-0xFF,0xFF,0xE9,0xFF,0xFF,0xFF,0xFF,0xFF,
-0xFF,0xFB,0xFF,0xFF,0xFF,0xD3,0xFF,0xFF,
-0xBF,0x3F,0xFB,0xFF,0xFF,0xFF,0xFB,0xF3,
-0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
-0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0xF7,
-0xFF,0xFF,0xFF,0xFF,0x17,0xFF,0xFF,0xFF,
-0xDF,0xFF,0xFD,0xFF,0xFF,0xFF,0xFF,0xFF,
-0xDF,0xDF,0xFF,0xFD,0xFF,0xFF,0xDF,0xF7,
-0xFF,0x4F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
-0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFD,
-0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0x9F,0xFF,
-0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
-0xFD,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0xFF,
-0xFF,0xFF,0x7A,0x3F,0xFF,0xFF,0xFF,0xFF,
-0xFF,0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0xFF,
-0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF2,
-0x7F,0xFF,0xFB,0xFE,0xFF,0xBF,0xEF,0xF8,
-0xFE,0xFF,0xBF,0xFB,0xFE,0xFF,0x8F,0xEC,
-0xFB,0xFE,0xFF,0xBF,0xF8,0xF7,0xFE,0xFF,
-0xBF,0xEF,0xFB,0xFE,0xFD,0xBF,0xCF,0xEC,
-0xFF,0x3F,0xEF,0xDB,0xF8,0xFF,0xBF,0xCF,
-0xFF,0xF9,0xFF,0xFF,0xBF,0xFF,0xFB,0xFF,
-0xFF,0xFF,0xEF,0xFB,0xDF,0xFF,0xFF,0xFF,
-0xFF,0xFF,0xBF,0xFF,0xFF,0xFF,0xBB,0xFF,
-0xEF,0xFB,0xFE,0xEF,0xBF,0xEE,0xEB,0xFB,
-0xFE,0xFF,0xEF,0xFE,0xEE,0xBF,0xFE,0xEB,
-0xFF,0xEF,0xFF,0x17,0xFF,0x7E,0xEB,0xBB,
-0xFE,0xBF,0xBE,0xFB,0xEF,0x5B,0xF7,0xBD,
-0xFB,0xCF,0xBF,0xBF,0xBB,0xFB,0x7E,0xCC,
-0xEF,0xFF
-};
diff --git a/drivers/usb/bitstream.h b/drivers/usb/bitstream.h
new file mode 100644 (file)
index 0000000..5d272b1
--- /dev/null
@@ -0,0 +1,1508 @@
+static unsigned char bitstream[] = {
+0x00,0x09,0x0F,0xF0,0x0F,0xF0,0x0F,0xF0,
+0x0F,0xF0,0x00,0x00,0x01,0x61,0x00,0x0D,
+0x64,0x61,0x62,0x75,0x73,0x62,0x74,0x72,
+0x2E,0x6E,0x63,0x64,0x00,0x62,0x00,0x0B,
+0x73,0x31,0x30,0x78,0x6C,0x76,0x71,0x31,
+0x30,0x30,0x00,0x63,0x00,0x0B,0x31,0x39,
+0x39,0x39,0x2F,0x30,0x39,0x2F,0x32,0x34,
+0x00,0x64,0x00,0x09,0x31,0x30,0x3A,0x34,
+0x32,0x3A,0x34,0x36,0x00,0x65,0x00,0x00,
+0x2E,0xC0,0xFF,0x20,0x17,0x5F,0x9F,0x5B,
+0xFE,0xFB,0xBB,0xB7,0xBB,0xBB,0xFB,0xBF,
+0xAF,0xEF,0xFB,0xDF,0xB7,0xFB,0xFB,0x7F,
+0xBF,0xB7,0xEF,0xF2,0xFF,0xFB,0xFE,0xFF,
+0xFF,0xEF,0xFF,0xFE,0xFF,0xBF,0xFF,0xFF,
+0xFF,0xFF,0xAF,0xFF,0xFA,0xFF,0xFF,0xFF,
+0xC9,0xFF,0xFF,0xFF,0xDF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFB,0xFF,0xA3,0xFF,0xFB,
+0xFE,0xFF,0xBF,0xEF,0xE3,0xFE,0xFF,0xBF,
+0xE3,0xFE,0xFF,0xBF,0x6F,0xFB,0xF6,0xFF,
+0xBF,0xFF,0x47,0xFF,0xFF,0x9F,0xEE,0xF9,
+0xFE,0xCF,0x9F,0xEF,0xFB,0xCF,0x9B,0xEE,
+0xF8,0xFE,0xEF,0x8F,0xEE,0xFB,0xFE,0x0B,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xBF,0xFF,0xFF,0xFB,0xFF,0xFF,
+0xBF,0xFF,0xFF,0xFC,0x17,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0x7F,
+0xFF,0xFF,0xFB,0xFF,0xFF,0x7F,0xFF,0xFF,
+0xFC,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFB,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0x5F,0xFF,
+0xFF,0xFD,0xFF,0xFF,0xDB,0xFF,0xFD,0xFF,
+0x77,0xFF,0xFD,0xFF,0xFF,0xDF,0xFE,0xFD,
+0xFF,0xFF,0xF2,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFD,0xFF,0xFF,0xFF,0xFD,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE1,
+0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xE3,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xBF,
+0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0x67,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0x7F,0xFF,0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xDF,0xFF,0xFF,0xFF,0x2F,0xFF,
+0xF3,0xFD,0xFF,0x7F,0xDE,0xF7,0xFD,0xFF,
+0x7F,0xF7,0x7D,0xFF,0x7F,0xDF,0xF7,0xBD,
+0xFF,0x7F,0xFF,0x1F,0xFF,0xEF,0xFB,0xFE,
+0xFF,0xBF,0xEF,0xFB,0xFE,0xFF,0xEF,0xFB,
+0xFE,0xFF,0xBF,0xEF,0xFB,0xFE,0xFF,0xFF,
+0x3F,0xFE,0x7F,0x9F,0xE7,0xF9,0xFE,0x7F,
+0x9F,0xE7,0xFA,0x7F,0x9F,0xE7,0xF9,0xFE,
+0x7F,0x9F,0xE7,0xFF,0xFC,0x7F,0xBF,0xBF,
+0xEF,0xFB,0xFE,0xFF,0xBF,0xEF,0xFB,0xB7,
+0xBF,0xEF,0xFB,0xFE,0xFF,0xBF,0xEF,0xFB,
+0xFF,0xE0,0xFD,0xF9,0xFE,0x7F,0x9F,0xE7,
+0xF9,0xFE,0x7F,0x9D,0xF9,0xFE,0x7D,0x9D,
+0xE7,0xF9,0xFE,0x7F,0x9F,0xED,0xED,0xFF,
+0xFD,0xFF,0x7F,0xDF,0xF7,0xFD,0xFF,0x7F,
+0xDF,0xFD,0xFF,0x7F,0xDF,0xF7,0xFD,0xFF,
+0x7F,0xDF,0xFF,0x9B,0xFF,0xEF,0xFB,0xFE,
+0xFB,0xBF,0xEF,0xBB,0xFE,0xFF,0xAF,0xBB,
+0xBE,0xFF,0xBF,0xEF,0xFB,0xFE,0xFF,0xFF,
+0xB7,0xBF,0xDB,0xF6,0xBD,0xBF,0x6B,0xDB,
+0xF6,0xF9,0xBF,0x5B,0xD6,0xF9,0xBF,0x6F,
+0xDB,0xF6,0xFD,0xBF,0xFF,0x0E,0xFF,0xFF,
+0xFF,0xFF,0x5F,0xFF,0xF7,0xFF,0xFF,0x7F,
+0xF7,0xBD,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xDF,0x9F,0xFF,0xFF,0xFF,0xFE,0xFF,
+0xFF,0xEF,0xFE,0xFE,0xFF,0xFF,0x77,0xFF,
+0xFB,0xFB,0xFF,0xFF,0xFF,0xFF,0xF8,0x3F,
+0xFF,0xFD,0xFF,0xFF,0xFF,0xFD,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xF4,0x7F,0xFF,0xFE,0xFD,
+0xBE,0xFF,0xDF,0xFE,0xFF,0xFF,0xEF,0x7F,
+0xFF,0xCF,0xFF,0xCF,0xFF,0xFF,0xFF,0xDF,
+0xE6,0xFF,0xFF,0x7F,0xDF,0xF7,0xDD,0x7F,
+0x7F,0xDF,0xF7,0xFF,0x7F,0xDF,0xD7,0xFD,
+0xFF,0x7F,0xDF,0xF7,0xFF,0xCD,0xFF,0xF2,
+0xFF,0xFF,0x4F,0x7F,0xF4,0xFF,0xFF,0xFF,
+0xE7,0xEF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xBB,0xFF,0xEF,0xFF,0xFE,0xFF,
+0xFF,0xFF,0xEF,0xFF,0xFF,0xEF,0xFF,0xFB,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x65,
+0xEF,0xFF,0xFF,0x7F,0xFF,0xFD,0xEF,0xFF,
+0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFE,0xCF,0xDF,0xFE,0xFF,
+0xFF,0xFB,0xFF,0xFF,0xFF,0xFF,0xF3,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFE,0xDF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xBF,0xFF,
+0xFF,0xFF,0xE3,0x7F,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xEF,0xEB,0xFF,0xFE,0xBF,0xFF,
+0xEB,0xFF,0xFC,0x7F,0xFF,0xFF,0xFF,0xEE,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xDD,0xFF,
+0xD6,0xFF,0xFD,0xBF,0xFF,0xFB,0xFF,0xFE,
+0xFD,0xFF,0xFF,0xFD,0xEF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xDE,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xBF,0xFF,0xFD,0xFF,0x7F,0xBF,
+0xFF,0x5F,0xDF,0xFF,0xFF,0xBF,0x77,0xFF,
+0xFF,0xFF,0x7F,0xD7,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xC3,0xFF,0xFF,0xFF,0xFF,0xDF,0xEF,
+0xFF,0xFF,0xFE,0xFB,0xFF,0xFF,0xDF,0xBF,
+0xFF,0xFF,0xFF,0xFF,0xED,0xFF,0xB7,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xAF,0x7F,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xDF,0xBF,0xDF,0xF3,0xFD,0xFB,0xFF,0x5B,
+0xFD,0xFF,0xBF,0xEF,0xF7,0xFF,0xFF,0x7D,
+0xFF,0xFF,0xFF,0xFF,0xF8,0x3B,0xFF,0xBF,
+0x6F,0xFF,0xFE,0xFF,0xBF,0xFF,0xEB,0x7D,
+0xFF,0xEF,0xFB,0xFE,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xF2,0x7F,0xFC,0xFF,0x3F,0xDF,0xED,
+0xFE,0xFF,0xFF,0xFF,0xFF,0xEF,0x5F,0xF7,
+0xB5,0xFF,0xEF,0xFF,0xFF,0xFF,0xE0,0x3F,
+0x9F,0x9E,0xFF,0xFF,0xEF,0xFF,0xDF,0xFF,
+0xBF,0x5F,0xBF,0xCF,0xF3,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0x69,0xAF,0x33,0xFD,0xFF,
+0xFB,0xFF,0xFF,0xFF,0xFF,0xFC,0xFF,0x7F,
+0xD9,0xFF,0xDF,0xFF,0xFF,0xFF,0xFF,0xF5,
+0xA3,0xDF,0x6E,0xDE,0xFF,0xFF,0xBD,0xFF,
+0xFF,0xFE,0xFF,0xFF,0xFF,0xFE,0xE7,0xFD,
+0xFF,0xFF,0xFF,0xF9,0xEF,0xC6,0xFE,0xB7,
+0xAD,0xE5,0xF9,0xFF,0xFF,0xFF,0xCF,0xFF,
+0xFF,0xFF,0xCD,0xFB,0x7F,0xFF,0xFF,0xFF,
+0xF9,0xF6,0x0F,0xDF,0xEC,0xCF,0x7F,0xFF,
+0xFB,0x7F,0xFF,0xFF,0xFF,0xFD,0xFF,0xFE,
+0xF9,0xFD,0x7F,0xFF,0x7F,0xFF,0xF9,0x5B,
+0xFF,0x73,0xDC,0xFD,0x7B,0xDF,0xFF,0xFF,
+0xFF,0x7B,0xFF,0xFF,0xF7,0x53,0xD6,0xFF,
+0xFF,0xFF,0xFF,0xD8,0x9F,0xFE,0xFF,0xEF,
+0x7F,0xEE,0xFF,0xFF,0xFF,0xFB,0xED,0xED,
+0xFD,0xFF,0xFE,0xFF,0xFF,0xFB,0x7F,0xFF,
+0xE2,0x7F,0xFF,0x6F,0xD8,0x57,0xF7,0xFF,
+0xFF,0xFF,0xDF,0xFF,0xE8,0xFF,0xFF,0xFD,
+0xFF,0xFF,0xFC,0x7F,0xFF,0xE4,0xFF,0xFB,
+0xEF,0xFB,0xFE,0xDF,0xB7,0xED,0xFF,0xFE,
+0xDF,0x7F,0xFF,0xFE,0x7F,0xB7,0xFF,0xFF,
+0xFF,0xFF,0x89,0xFF,0xFF,0xCF,0xF3,0xFE,
+0x7F,0xFF,0xEF,0xFF,0xFE,0x7E,0x7F,0xFB,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF1,
+0xFF,0xEB,0x7A,0xD5,0xBF,0x6F,0xDB,0xBE,
+0xFD,0xB7,0xD8,0xF6,0xE5,0xBF,0x6F,0xFB,
+0xFE,0xF5,0xBD,0x7E,0x06,0xFF,0xDF,0xF7,
+0xFB,0xF6,0xFF,0x3F,0xFF,0xDB,0xFF,0xFF,
+0x6F,0xFB,0xF7,0xFF,0xFF,0xFF,0xFB,0xFE,
+0xF7,0xAF,0xFF,0xB7,0xED,0xEF,0xF7,0xFE,
+0xFF,0xFF,0xDF,0xFF,0xFE,0xFF,0xEF,0xFF,
+0xFF,0xFF,0xFF,0xBF,0xF7,0xFC,0x1F,0xEE,
+0xFB,0xFE,0xBD,0xFF,0x7F,0x5F,0xD7,0xFD,
+0xFB,0x43,0xFF,0xFF,0xFD,0xFF,0x5F,0xFF,
+0xF7,0xFF,0xF9,0x3F,0xFF,0xCF,0xF3,0xFD,
+0xF7,0x7E,0xEF,0xA7,0xF9,0xFE,0x8F,0xA7,
+0xE9,0xF3,0x7E,0x9F,0xFB,0xF8,0xFF,0xFF,
+0x3F,0xFD,0x7F,0x5F,0xDF,0xFD,0xFF,0xFF,
+0x5F,0xFF,0xFD,0x5F,0xFF,0xFF,0x7F,0xFD,
+0x7F,0xFD,0x9F,0xFF,0xE0,0xFF,0xFA,0xF8,
+0xBE,0x6F,0x9F,0xE6,0xF8,0xBE,0x3F,0x9A,
+0xF9,0xBE,0x6F,0x9F,0xE2,0xF9,0xFE,0x6F,
+0x9F,0xF9,0xFF,0xF5,0xFD,0x7F,0xCF,0xDF,
+0xFD,0xFD,0x7F,0xFF,0xF5,0xFF,0xFF,0xFF,
+0xF7,0xF5,0xFD,0x0F,0xDB,0xFF,0xD3,0xFF,
+0xEB,0xFA,0xFF,0xFF,0xBF,0xFF,0xFA,0xFF,
+0xFF,0xCB,0xFB,0xFE,0xFF,0xFF,0xEB,0xFA,
+0xFE,0xFF,0xFF,0xB7,0xFF,0xFF,0xFF,0xFF,
+0xBF,0xFF,0xDF,0xF5,0xFF,0xFF,0xD7,0xFF,
+0xFF,0xFF,0xDF,0xD7,0xF5,0xFF,0x7F,0xFE,
+0x4F,0xFF,0xFD,0xFF,0x7F,0x7F,0xFF,0xAD,
+0xEB,0xFB,0xFF,0xAD,0xFF,0xFF,0xFF,0xFF,
+0xAF,0xEB,0xFB,0xFF,0xFC,0x0D,0xFF,0xFF,
+0xDF,0xD2,0xFD,0xFF,0xFF,0xFD,0xF6,0xFF,
+0xFF,0x7F,0xFF,0xFF,0x1F,0xFF,0xFF,0xFF,
+0xFF,0xFB,0x3F,0x7D,0xEB,0x32,0xFE,0xBF,
+0x2F,0xEB,0xFA,0xAE,0xBD,0xE0,0xFA,0x7E,
+0xBF,0xAD,0xEB,0xFA,0xFE,0xBF,0xF5,0x7F,
+0xFF,0xDE,0xFE,0xE3,0xFB,0xFF,0xFF,0xFF,
+0xDF,0xEF,0x4F,0xDF,0xFF,0x7F,0xDF,0xFF,
+0xF7,0xFF,0xFF,0xF8,0x7F,0xFF,0xFF,0xEF,
+0xFB,0xFF,0xFF,0xFF,0xEF,0xFF,0xFF,0xDF,
+0xED,0xFB,0xDF,0xFF,0xBF,0xFF,0xFF,0xFF,
+0x81,0xFF,0xFF,0xFF,0xFF,0x3F,0xFF,0xFF,
+0xFF,0xFF,0xFE,0xDD,0xFE,0xEF,0xFD,0xFF,
+0xFF,0xFB,0xFE,0xF7,0xFF,0x93,0xFD,0xFB,
+0x7E,0xFF,0xFE,0x87,0xE9,0xFF,0x7F,0xB3,
+0x9F,0xFE,0xFE,0xFF,0xAF,0xFD,0xFE,0x7E,
+0x3F,0xFE,0x67,0xFF,0xFF,0xF7,0xFF,0xFF,
+0xFC,0xF7,0xDF,0xFD,0xFF,0x7F,0xFF,0xFF,
+0x7F,0x6D,0xFF,0xFF,0xFE,0xFF,0xFF,0x2F,
+0xFF,0xBF,0xFF,0xFF,0xEE,0xFF,0xBE,0xFF,
+0xFF,0xFE,0xFF,0xEF,0xFF,0xFF,0xFE,0xFF,
+0xEF,0xFF,0xFF,0xFA,0x5F,0xFF,0xFF,0xFB,
+0xFF,0xFF,0xEF,0xFF,0xFB,0xFE,0xFD,0xFF,
+0xFE,0xFF,0xFB,0xFF,0xFF,0xFF,0x7F,0xFF,
+0xFE,0xBF,0xDF,0xFF,0xFB,0xFF,0xFF,0xF7,
+0xFC,0xFD,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xF2,0x7F,0xFF,
+0xFF,0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0xFF,
+0xF3,0xFF,0xFF,0xFF,0xEF,0xFB,0xFF,0xFF,
+0xFF,0xDF,0xE2,0xFF,0xFF,0xFB,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFB,0xE7,0xFF,0xFD,
+0xFF,0xFF,0xFF,0xBF,0xFF,0xFF,0xFF,0xED,
+0xEF,0xFD,0xFF,0xFF,0xDF,0xD7,0xF5,0xFD,
+0x7F,0x5D,0xFD,0xFF,0x7F,0xDF,0x97,0xF4,
+0xFD,0x7B,0x5F,0xFF,0xC9,0xFF,0xFB,0xFE,
+0xFF,0xBF,0xFF,0x5F,0xFF,0xFF,0xF7,0xFF,
+0xEF,0xFD,0xFF,0xEF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xF7,0xFF,0xD7,0xFD,0x7D,0x7F,0xFF,
+0xFF,0xFF,0xFF,0xEF,0xDF,0xF7,0xFD,0xFF,
+0xBB,0xFF,0xFF,0x7F,0xFF,0xFE,0xE3,0xFF,
+0xF9,0xFE,0x7F,0xBF,0xEF,0xFB,0xFE,0xFF,
+0xBF,0xF9,0xFE,0xFF,0x9F,0xEF,0xF9,0xFE,
+0xFF,0xBF,0xF3,0xDA,0xFF,0x37,0xCD,0xF3,
+0x7C,0xDF,0x37,0xCD,0xF3,0x7F,0x37,0xCD,
+0xF3,0x7C,0xDF,0x37,0xCC,0xF3,0x7F,0x5A,
+0xBD,0xF6,0xFD,0xBF,0x6F,0xDB,0xF6,0xFD,
+0xBF,0x6F,0xDE,0xFD,0xBF,0x6F,0xDB,0xF6,
+0xFD,0xBF,0x6F,0xFE,0xF1,0x6F,0xEB,0x7A,
+0xDE,0xB7,0xAD,0xEB,0x7A,0xDE,0xB7,0xAF,
+0x7A,0xDE,0xB7,0xAD,0xEB,0x7A,0xDE,0xB7,
+0xFF,0x7E,0xFF,0xFE,0xCD,0xB3,0x6C,0xDB,
+0x36,0xCD,0xB3,0x6C,0xDE,0xCD,0xB3,0x6C,
+0xDB,0x36,0xCD,0xB3,0x6C,0xDF,0xC9,0xBF,
+0xF7,0xBD,0xEF,0x7A,0x9E,0xA7,0xA9,0xEA,
+0x7A,0xB7,0xBD,0xEA,0x7B,0xDE,0xA7,0xBD,
+0xCA,0x72,0x8D,0x91,0xFF,0xEF,0xFB,0xFE,
+0xFF,0xBF,0xEF,0xFB,0xFE,0xF7,0xEF,0xFB,
+0xFE,0xFF,0xBF,0xEF,0xFB,0xFE,0xFF,0xFE,
+0x87,0xFF,0xF6,0xFD,0xBF,0x6F,0xDB,0xF6,
+0xFD,0xBF,0x6F,0xF6,0xFD,0xBF,0x6F,0xDB,
+0xF6,0xFD,0xBF,0x6F,0xFE,0x4F,0xFF,0xBF,
+0xEF,0xBB,0xEE,0xFB,0xBE,0xEF,0xBB,0xEF,
+0xBE,0xEF,0xBB,0xEE,0xFB,0xBE,0xEF,0xBB,
+0xEF,0xFC,0x5F,0xFF,0xFF,0xFF,0x3F,0xCF,
+0xF3,0xFC,0xFF,0x3F,0xCF,0xFC,0xFF,0x3F,
+0xCF,0xF3,0xFC,0xFF,0x3F,0xCF,0xFD,0x9F,
+0xFE,0xBF,0xAF,0xEB,0xFA,0xFE,0xBF,0xAF,
+0xEB,0xFE,0xBF,0xAF,0xEB,0xFA,0xFE,0xBF,
+0xAF,0xEB,0xFF,0xE1,0x6F,0xFD,0xFF,0x7F,
+0xDF,0xF7,0xFD,0xFF,0x7F,0xDF,0xFD,0xFF,
+0x7F,0xDF,0xF7,0xFD,0xFF,0x7F,0xDF,0xFF,
+0x7A,0xBF,0xFB,0xFE,0xDF,0xB7,0xED,0xFB,
+0x7E,0xDF,0xB7,0xFB,0x7E,0xDF,0xB7,0xED,
+0xFB,0x7E,0xDF,0xB7,0xFF,0xC9,0xFF,0xFF,
+0xBF,0xEF,0xFB,0xFE,0xFF,0xBF,0xEF,0xFB,
+0xFF,0xBF,0xEF,0xFB,0xFE,0xFF,0xBF,0xEE,
+0xFB,0xFE,0xBB,0xFF,0xFE,0xFF,0xBF,0xEF,
+0xFB,0xFE,0xFF,0xBF,0xEF,0xFE,0xFF,0xBF,
+0xEF,0xFB,0xFE,0xFF,0x3F,0xCF,0xFF,0xE7,
+0xFE,0xFF,0xF5,0xFD,0x77,0x5D,0xD7,0x35,
+0xDD,0x77,0xD7,0xF5,0xCD,0x7B,0x5D,0xD7,
+0xF5,0xDD,0x77,0xFE,0x27,0xFF,0xFF,0x8B,
+0xE2,0xF8,0xBE,0x2F,0x8B,0xE2,0xF9,0xAF,
+0x8B,0xE2,0xF8,0xBE,0x2F,0x8B,0xE2,0xF9,
+0xFE,0x1F,0xFF,0x5F,0xD7,0xF5,0xFD,0x7F,
+0x5F,0xD7,0xF5,0xFF,0x5F,0xD7,0xF5,0xFD,
+0x7F,0x5F,0xD7,0xF5,0xFF,0xFA,0x3F,0xFE,
+0xBF,0xAF,0xEB,0xFA,0xFE,0xBF,0xAF,0xEB,
+0xEC,0xBF,0xAF,0xEB,0xFA,0xFE,0xBF,0xAF,
+0xEB,0xFF,0xFE,0x7F,0xFD,0x7F,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE6,
+0xFF,0xFA,0xDF,0xF7,0xFD,0xFF,0x7F,0xDF,
+0xF7,0xFC,0xFF,0xDF,0xF7,0xFD,0xFF,0x7F,
+0xDF,0xF7,0xFD,0xFF,0xF5,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFB,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0x02,0xFF,0xFE,0xBF,0xAB,0xEB,0xFA,
+0xBE,0xBF,0x23,0xEB,0xDE,0x1F,0xAF,0xEA,
+0xFA,0xFE,0xAF,0xAF,0xEB,0xFD,0x97,0xFF,
+0xF3,0xFC,0x7B,0x1F,0xCF,0xF1,0xFC,0x7F,
+0x1F,0xF1,0xFC,0x77,0x1F,0xCD,0xF1,0xFC,
+0xFF,0x1F,0xFE,0x87,0xFF,0xAF,0xEF,0xFA,
+0xFE,0xFF,0xAF,0xEF,0xFA,0xFD,0xBF,0x2B,
+0xFB,0x7E,0xBF,0xBF,0xEB,0xFB,0xFB,0xFB,
+0xDF,0xFF,0xFB,0xF7,0xFF,0xFF,0x7F,0xF7,
+0xF7,0xFF,0xFD,0xDF,0xFE,0xFC,0xDF,0xFF,
+0xDF,0xFF,0xFD,0xFF,0xDA,0xBF,0xFF,0xBB,
+0xEF,0xFB,0xF9,0xFF,0xBE,0xEF,0xFB,0xFB,
+0xBF,0xEF,0xFB,0xFE,0xFF,0xBF,0xEF,0xFB,
+0xFF,0xF7,0x7F,0xFD,0xD7,0xFF,0xFF,0x7F,
+0xFF,0xFF,0xFF,0xFE,0xF7,0xFF,0xFE,0xFF,
+0xF7,0xFF,0xFF,0x7F,0xFF,0xFF,0xEC,0xFF,
+0xFF,0xFE,0xDF,0xBF,0xFF,0xFB,0xFE,0xFF,
+0xBB,0x68,0xAE,0x1F,0xAE,0xFB,0xFB,0xFF,
+0xFF,0xBF,0xFF,0xD5,0xFF,0x7F,0xFF,0xFF,
+0xF7,0xFE,0xFE,0xFF,0xBF,0xEF,0x9F,0xFD,
+0x7F,0xFF,0xCB,0xFF,0xFF,0xDF,0xFF,0xFF,
+0xBB,0xF7,0xBF,0xFF,0xFF,0xFF,0xFF,0xDF,
+0xFF,0xBF,0xFB,0xFF,0xFF,0xFF,0xDE,0x3F,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xA7,0xFF,0xFF,
+0xFF,0xFF,0xEF,0xFF,0x7F,0xFB,0xFD,0xFB,
+0x7F,0xFF,0xFF,0xFF,0xFF,0xCF,0xF3,0x7C,
+0xFF,0x7F,0x8D,0x7F,0xFF,0xFF,0xFF,0xFF,
+0xFB,0xFF,0xF7,0xFB,0xFE,0xFD,0xFF,0xFF,
+0xFF,0xFF,0xF7,0xFD,0xFF,0x7F,0xFD,0x1F,
+0xFD,0xFF,0xFF,0xFF,0xFF,0xBF,0xDF,0xFF,
+0xFF,0xFE,0x5C,0xFF,0x6D,0xFF,0x7F,0xAB,
+0xE7,0xF1,0xFF,0xFD,0x9F,0xFF,0xFF,0xAD,
+0xEB,0x7A,0x3F,0x1F,0xFF,0xFF,0xFE,0xBF,
+0xAF,0xF3,0xDE,0xF5,0xFF,0x8F,0xFB,0xDF,
+0xE6,0x7F,0xFF,0xDF,0xF3,0xFD,0xFF,0x7E,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFD,0xF7,0xF3,
+0x7F,0xDF,0xF7,0xEF,0xFF,0xF6,0x3F,0x9F,
+0xDF,0xFF,0xFF,0xEE,0xFF,0xFF,0xEF,0xFB,
+0xFF,0xFF,0xF9,0xFB,0xFE,0x4F,0xBF,0xEF,
+0xBB,0xFF,0x69,0xAF,0xAF,0xFC,0xFF,0x3F,
+0xDD,0xFF,0xFC,0xBF,0x8F,0xFF,0xFD,0xF3,
+0xBF,0xED,0x9E,0xFC,0xBF,0x6F,0xF5,0xD3,
+0xDF,0xFF,0xDB,0xD6,0xF5,0xEF,0xFD,0xFE,
+0xFF,0xB9,0xFF,0x1F,0xD2,0xA9,0xAF,0xFF,
+0xDB,0xF7,0xBF,0xEF,0x46,0xFF,0xFF,0xAD,
+0xEB,0x7A,0xDF,0xEF,0xF7,0xFF,0x7F,0xF7,
+0x9F,0xED,0xFF,0x7F,0xFF,0xAD,0xEB,0x7F,
+0xF5,0x6F,0xFF,0xFD,0xFB,0xD6,0xF4,0xF7,
+0xFB,0xF9,0x7E,0x7F,0xFF,0x5F,0xC2,0xFE,
+0xBF,0xFD,0xFB,0x33,0xDF,0xF9,0x5B,0xFF,
+0xFF,0xDD,0x67,0x7D,0xCF,0xEF,0xDB,0xEC,
+0xFF,0x77,0xDD,0xF7,0xFD,0xFF,0xFF,0xDE,
+0xA7,0xBF,0xD4,0x9F,0xFF,0xFF,0xBF,0xEF,
+0xFE,0xFF,0xDF,0xEF,0xBB,0xFF,0xFF,0xEF,
+0xEB,0xFA,0xFF,0xEF,0xBD,0xFB,0xFF,0xE2,
+0x7F,0xFF,0xDF,0xDF,0xF7,0xFD,0xBF,0xBB,
+0x73,0xF7,0xFD,0x7F,0xDF,0xDE,0xF7,0xBF,
+0xEA,0xDB,0xF6,0xFF,0xD6,0xFF,0xFF,0x66,
+0xFF,0xBE,0xFF,0xBF,0x6B,0xD9,0xF6,0xDF,
+0xFF,0xFB,0x7E,0x7F,0xB7,0x7E,0xFF,0xFE,
+0xFF,0xCD,0xFF,0xFE,0x7F,0xFF,0xFC,0xFD,
+0x3F,0xFB,0xFB,0xF7,0xFF,0xFF,0xFB,0xF6,
+0x7D,0xFE,0x7F,0xFF,0xFC,0xFF,0xB9,0xFF,
+0xF9,0xFA,0xFE,0xBF,0xAF,0x5B,0xD6,0xED,
+0xAD,0x7B,0xF6,0xF9,0xBF,0xEF,0xF8,0xFA,
+0xFE,0xBF,0xFE,0xE6,0xFF,0xFF,0xF7,0xFD,
+0xFF,0x7F,0xBF,0xEF,0xF3,0xFF,0xFF,0x6F,
+0xF7,0xFE,0xFF,0xFF,0xF7,0xFD,0xFE,0xF7,
+0xEF,0xFF,0xFB,0xEF,0xFB,0x7E,0xDE,0xFE,
+0xFF,0xBF,0xFF,0xFE,0xFF,0xFF,0xFB,0xFF,
+0xFF,0xEF,0xFB,0x6F,0xFC,0x1F,0xFE,0xE7,
+0xFF,0xFF,0xFF,0xEF,0xFF,0xD3,0xB4,0xBB,
+0xFF,0xFF,0xFD,0xBF,0x6F,0xE3,0xFE,0xFF,
+0xBF,0xFC,0xBF,0xF7,0xCF,0xF7,0xFD,0xFF,
+0x2F,0xDF,0xAB,0xEA,0xFF,0xDF,0xE7,0xEA,
+0x9A,0xAF,0xEF,0xFB,0xFE,0xFF,0xF5,0x3F,
+0xFD,0x7E,0xFF,0xD7,0xF5,0xFB,0xFF,0xFD,
+0xF7,0xFF,0x7F,0xFE,0xF7,0xFD,0xFF,0xD7,
+0xFF,0xD7,0x7F,0xEE,0x7F,0xFA,0x79,0xFE,
+0x2F,0x8B,0xE6,0xF9,0xFE,0x3F,0x9E,0xF9,
+0xBE,0x2F,0x0B,0xE7,0xF9,0xFE,0x2F,0x9F,
+0xFD,0xFF,0xFE,0x7D,0x7F,0x5F,0xD7,0xFF,
+0xFF,0x7F,0xFF,0xFD,0xFF,0x7F,0x5F,0x97,
+0xFF,0xFD,0x7F,0x5F,0xFF,0xE3,0xFF,0xFF,
+0xFA,0xFE,0xBF,0xAF,0xFB,0xFB,0xFF,0xFF,
+0xCF,0xEB,0xFE,0xBF,0xAF,0xFF,0xFA,0xFE,
+0xBF,0xFF,0x87,0xFF,0xFF,0xF5,0xFF,0xFF,
+0xFF,0xFF,0xFD,0xFF,0x7F,0xFF,0xFF,0xFF,
+0xFB,0xFF,0xFF,0xF5,0xFF,0xFF,0xFE,0x0F,
+0xFF,0xFD,0xEB,0xFF,0xFF,0xF7,0xFF,0xEF,
+0x7B,0xDF,0xFE,0xFF,0xFF,0xDF,0xF7,0xFD,
+0xEB,0x7F,0xDF,0xFF,0x5F,0xFF,0xFF,0xFF,
+0xFF,0xFD,0xBF,0xFF,0x7E,0xFA,0xBF,0xC7,
+0xDB,0xF7,0xBD,0x3F,0xFB,0xFF,0xF6,0xFF,
+0xFA,0xAF,0xFF,0xEB,0xFA,0xFE,0x3F,0x2F,
+0xEA,0xFA,0x3E,0xAD,0xC9,0xBA,0xF6,0xAD,
+0xAF,0xEB,0xFA,0xF6,0xBF,0xFE,0x7F,0xFF,
+0xFF,0xFD,0xFF,0xF1,0x7F,0x3F,0xCF,0xF1,
+0xEF,0xFF,0x7F,0xFF,0xBC,0xDF,0xDF,0xF7,
+0xDD,0xFF,0xE0,0x7F,0xFF,0xFF,0xFE,0xFF,
+0xFA,0xEC,0xBB,0x7F,0x5F,0xFF,0xFB,0xEC,
+0xFF,0xEF,0xB7,0xFF,0xF7,0xFF,0xFF,0xB5,
+0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0xEE,0xDF,
+0x5F,0xDF,0xDE,0xFF,0xAE,0xE7,0x77,0xFF,
+0xFF,0xDF,0xF7,0xFF,0xE3,0xFF,0xFA,0xBB,
+0xFE,0xFF,0xAF,0xFD,0xFB,0xFE,0xBF,0xAB,
+0xF9,0xFE,0xFF,0xBF,0x7F,0xBF,0xFE,0xBD,
+0xFE,0xD7,0xFF,0x9F,0xFD,0xFF,0xBE,0xEF,
+0xFF,0xEE,0xFD,0xBB,0x5B,0xEF,0xFF,0x7F,
+0xEF,0xFF,0xEF,0xFF,0x7F,0xFF,0x4F,0xFF,
+0xEF,0xFB,0xBC,0xFC,0xFF,0xFF,0xFF,0xFE,
+0xFE,0xFD,0xFA,0xFE,0xFB,0xFF,0xFD,0xF3,
+0xFB,0xFF,0xF8,0x5F,0xFF,0xFF,0xD7,0xF5,
+0xFD,0xDF,0xEF,0xFF,0xF3,0xDC,0x5F,0xCE,
+0xF5,0xBD,0xFF,0xFF,0xD7,0xFF,0xFF,0xF9,
+0x3F,0xFF,0xDF,0xF7,0xFF,0xFE,0xFF,0xFD,
+0xFF,0xFB,0xFF,0xF7,0xB9,0x7D,0xFE,0xDF,
+0xFF,0xFF,0xFF,0xFF,0xF9,0x7F,0xFF,0xFE,
+0xFF,0xFF,0x7F,0xFF,0xFE,0xFF,0xFF,0xF7,
+0xF6,0xFF,0xBF,0xF1,0xF8,0xFF,0xFF,0xFF,
+0xFF,0xE0,0xFF,0xFF,0xFF,0xFF,0xF9,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xEF,0xEF,0xFF,0xFF,
+0x9B,0xFB,0x7F,0xFF,0xFF,0xFF,0xC1,0xFF,
+0xDF,0xFF,0x3F,0x5F,0xD7,0xBF,0xEF,0xBB,
+0xDE,0xEE,0xFF,0x7F,0xDF,0xFF,0xFE,0xF5,
+0x7F,0xDF,0xFF,0x99,0xFF,0xFF,0xFA,0xFF,
+0xBF,0xFD,0xEB,0x7A,0xFF,0xB7,0xFE,0xFE,
+0xFF,0xFF,0xEF,0xFF,0xFF,0xFD,0xBF,0xFF,
+0x97,0xFF,0xFD,0xF7,0xFF,0x7F,0xF7,0xFF,
+0xFF,0xFD,0x5F,0xFE,0xF3,0xF9,0xDF,0xDF,
+0xFF,0xFF,0xFC,0xFF,0xFF,0x83,0xFF,0xFF,
+0xFE,0xFF,0x9E,0xEC,0xFB,0xEE,0xFF,0x9F,
+0xBF,0xEF,0xFF,0xFE,0xED,0x7B,0xFF,0xFF,
+0xFF,0xF1,0x5A,0xFF,0xFF,0xFD,0xFF,0x7C,
+0x69,0x3B,0xDF,0xFF,0x7F,0x1F,0xDF,0xFF,
+0xFD,0xBA,0xFF,0xFF,0xFB,0xFF,0x5B,0xBD,
+0xFF,0xFF,0xFF,0xFF,0xD7,0xB6,0xED,0xE9,
+0xFF,0xD6,0xBD,0x6F,0x5F,0xFB,0xFF,0xEF,
+0xFF,0x5F,0xFE,0xF6,0x6F,0xFF,0xFF,0xFF,
+0xFF,0xF7,0xEB,0x7A,0xDF,0xFF,0x9F,0x7F,
+0x7F,0xFF,0xB7,0xFF,0xFF,0xFE,0xDF,0xFF,
+0x6C,0xFF,0xFB,0xFF,0xBB,0x6F,0xEB,0xFE,
+0xCC,0xF7,0xA5,0xFA,0x5C,0xF5,0x75,0xBB,
+0xB7,0xDF,0xFE,0x6F,0x5F,0xC5,0xBF,0xFD,
+0x7B,0xFE,0xFF,0x95,0xE7,0x29,0xCF,0x4F,
+0xF5,0x91,0xEE,0x6B,0xDF,0xEF,0xFD,0x54,
+0xF5,0xBD,0xB1,0xFF,0xEF,0xEE,0xFB,0xBE,
+0xBF,0xAF,0xFE,0xDE,0xBD,0x6F,0xDA,0xF2,
+0xFF,0xAF,0xBE,0xFF,0xFF,0xFD,0x7E,0xA7,
+0xFF,0xF7,0xFF,0xBF,0xEF,0x7B,0xF6,0xFD,
+0xBD,0x4A,0xF2,0x85,0x85,0xBF,0x5B,0xFE,
+0xB5,0xFD,0xFA,0xFF,0x4F,0xFF,0xFE,0xDF,
+0xFF,0xED,0xFF,0xBF,0xFF,0xBF,0x7F,0xFE,
+0xFF,0xB7,0x6D,0xFF,0xF7,0xBF,0xBF,0xEF,
+0xFD,0x1F,0xFF,0xFE,0x7D,0xFF,0x67,0xFF,
+0xFF,0xFF,0x3F,0x7F,0xFE,0xBF,0xFF,0xE7,
+0xDF,0xE7,0xFF,0xEF,0x6B,0xFC,0x1F,0xFF,
+0xBF,0xEF,0xFB,0xFE,0xDE,0xBF,0xAF,0xFA,
+0xFF,0xB6,0xEF,0xF9,0xFE,0xFF,0x8F,0xEF,
+0xDB,0xEF,0xAB,0x6F,0xFB,0xFE,0xFF,0xFF,
+0xEF,0xFD,0xFF,0x7F,0xFF,0xFF,0xDE,0xFF,
+0xFF,0xEF,0xFF,0xFF,0xFF,0x3F,0xFF,0x6C,
+0xFF,0xBF,0xFB,0xFF,0xFE,0xFF,0xFB,0xFE,
+0xDF,0xFF,0xFF,0xEF,0xFF,0xFF,0xBF,0xFF,
+0xFF,0xFE,0xFB,0xFF,0xD5,0x7F,0xFF,0xFF,
+0xEF,0xFB,0xFF,0xFF,0xBF,0xEF,0x43,0xB5,
+0xFD,0x6F,0xCF,0xD6,0xBE,0x3F,0x7F,0xDB,
+0xFE,0xC3,0xFF,0xFD,0xFF,0xAF,0xEB,0xFB,
+0xFC,0xFF,0x3E,0xEF,0xE8,0xFA,0xBD,0xCD,
+0xAA,0xFE,0xFE,0x7D,0xCF,0xFF,0xB7,0xFF,
+0xF7,0xFF,0xFF,0xFF,0xFD,0xFF,0x75,0xCD,
+0x52,0xD7,0xFD,0xFB,0xF7,0xDD,0xFB,0xEF,
+0xEB,0xFF,0xFF,0x4F,0xFF,0xBF,0x9F,0xE7,
+0xF9,0xFC,0x7F,0x8B,0xC3,0xF9,0xAF,0x8F,
+0xE7,0xE9,0xBE,0x7F,0x9F,0xE6,0xF9,0xFC,
+0x5F,0xFF,0xFF,0xF7,0xFD,0xFF,0x7A,0x5F,
+0xD7,0xED,0xFF,0xFF,0xD7,0xFF,0xDD,0x7F,
+0xE7,0xFF,0xFC,0xFF,0xFC,0x3F,0xFF,0xFF,
+0xFF,0xFB,0xFF,0xFE,0xBF,0xAF,0xFF,0xFD,
+0xFF,0xEF,0xFF,0xEB,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xF7,0x7F,0xFF,0x7F,0xDF,0xFF,0xFD,
+0xFD,0x7F,0xFE,0xF7,0xFD,0x7F,0xDF,0xFF,
+0xFD,0xFF,0xFF,0xDF,0xFB,0xFF,0xEE,0xFF,
+0xFB,0xFF,0xF7,0xFD,0xFF,0x7A,0xDF,0xF5,
+0xFD,0xFA,0xDF,0xF7,0xFC,0xFF,0x7F,0xDF,
+0xBF,0xED,0xFF,0xC9,0xFF,0xDF,0xFF,0xBF,
+0x2F,0xFB,0xFF,0xBC,0xAD,0xFF,0xF7,0xFF,
+0xFF,0xEF,0xD3,0xFF,0x7D,0xBF,0x6F,0xFF,
+0xFA,0xFF,0xFE,0xBF,0xAE,0xEA,0xFA,0xBE,
+0xAD,0xA5,0xEB,0xCE,0xBF,0xA7,0xEB,0x5A,
+0xDE,0xBD,0xAF,0x6B,0xFD,0x57,0xFF,0xFF,
+0xF4,0x7F,0x1F,0x7F,0xFD,0xFF,0x7F,0x36,
+0xF0,0xDF,0x79,0xFF,0xFF,0xFF,0xF7,0xFD,
+0xBF,0xFF,0x87,0xFF,0xFB,0xF3,0xFC,0xFF,
+0xFF,0xFF,0xFF,0x7E,0xFF,0xBF,0xDF,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFD,0xBF,0xF8,0x9F,
+0xFF,0xFF,0xFF,0xFF,0xBF,0xFF,0xFF,0xFD,
+0xF7,0xFC,0xBD,0xFF,0xFE,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFB,0xF9,0xBF,0xFF,0xFF,0xEB,
+0xE2,0xFE,0xFF,0xBF,0xEF,0xA9,0xBA,0x2F,
+0xEB,0xF9,0xFE,0x77,0xDF,0xF7,0xFF,0xFF,
+0xF9,0x7F,0xFF,0xFF,0x7F,0xEF,0xD7,0xFF,
+0xFD,0xFF,0xFB,0xF5,0xFF,0xBF,0x6F,0xDF,
+0xFF,0xFF,0xFD,0xFF,0xFF,0xF0,0xFF,0xFF,
+0xFF,0x3F,0xCF,0xFF,0xBA,0xEE,0x9B,0xBF,
+0xEE,0xD7,0xFE,0xCD,0xEF,0xFF,0xDF,0xBF,
+0xFF,0xFF,0xC5,0xFF,0xFF,0xFD,0x7F,0x4F,
+0xFD,0xF6,0xD9,0xFF,0x4F,0xD6,0xFD,0xBF,
+0x6E,0xFF,0xFF,0xF4,0x7F,0xFF,0x7F,0x8B,
+0xFF,0xFF,0xFF,0xFF,0xF7,0xFF,0xF9,0xFE,
+0x37,0xFF,0xD9,0xFB,0xF5,0xAF,0xFD,0xFF,
+0xFF,0xFB,0xFF,0xFF,0x07,0xFF,0xFF,0xFF,
+0xFB,0xF7,0xFF,0xFD,0xFF,0x7C,0xFA,0x7E,
+0x4F,0xFC,0xDF,0x1D,0xC7,0xFF,0xFF,0xFF,
+0xFF,0xAE,0xFF,0xFF,0xFF,0xFF,0xFD,0xFB,
+0xFF,0xFF,0xFE,0xFE,0xFC,0xFF,0x7F,0x7F,
+0xBF,0xEF,0xFE,0xFF,0xFF,0xFF,0x5F,0xFD,
+0xFF,0xFF,0xFF,0xFD,0x6F,0x5A,0xD7,0x7B,
+0xBE,0x5F,0xFE,0x39,0xFF,0xF7,0xFF,0xF7,
+0xFD,0xFE,0xAA,0x1F,0xFF,0xFF,0xFF,0xFF,
+0xFE,0xFE,0xAB,0xAF,0xFD,0xFE,0xBF,0xFF,
+0xF7,0xFF,0x7F,0xFE,0x8F,0xE3,0xFB,0xEE,
+0x7F,0xFF,0xFF,0xFF,0xFF,0xEB,0xFB,0xFF,
+0xFD,0xBF,0xEF,0xDF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFB,0xE4,0x3F,0xFF,0xDF,
+0xFF,0xFF,0xFF,0xFF,0xF3,0xEF,0xBB,0xFB,
+0xBF,0xEF,0xBB,0xFF,0xD7,0xBF,0xFF,0xFF,
+0xFF,0x29,0xAF,0xF7,0xFF,0xFF,0xFB,0xFF,
+0xFB,0xE6,0xFF,0x0F,0xFB,0x3F,0xDF,0x0F,
+0xFF,0xAF,0xFF,0xFF,0xFF,0xF5,0xC3,0xDF,
+0x5F,0xFF,0xFF,0xFF,0xFE,0x6B,0xCA,0xBE,
+0xBC,0xFF,0x9F,0xF2,0xBF,0xFF,0xFE,0xFA,
+0xFF,0xFF,0xEF,0x16,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFC,0xDF,0x97,0xFD,0x79,0xFF,0x37,
+0xE7,0x7F,0xFF,0xFF,0xB5,0xFF,0xFF,0xF6,
+0x2F,0xFF,0xFD,0xFB,0xFE,0xFF,0xFF,0xFD,
+0x5F,0x57,0x5F,0xFF,0xDB,0x52,0xDF,0xFF,
+0xFD,0xBF,0xFF,0xFF,0xFC,0xDB,0xFF,0x7B,
+0xB5,0xFD,0x7F,0xFF,0x71,0x9C,0x6E,0xFF,
+0xF6,0x35,0xA5,0x9B,0xFF,0xFF,0xFD,0xFF,
+0xFF,0xDB,0x9E,0x7F,0xFE,0xEF,0xFB,0xFF,
+0xFF,0xBD,0xEF,0xFF,0xDE,0xB7,0xF9,0x4B,
+0xFF,0xF5,0xEF,0xFF,0xFF,0xFF,0xE8,0x7E,
+0xFF,0xEA,0xDF,0xF7,0xFF,0xFD,0x69,0x5B,
+0xFC,0x9F,0xEF,0x78,0xD6,0xFF,0xEB,0xEF,
+0xFF,0xFF,0xFF,0xE8,0xFF,0xFF,0xED,0xFF,
+0xFF,0xFF,0xFF,0xE3,0xF9,0xF6,0xBF,0xFF,
+0xFF,0xFE,0xDF,0xFF,0x7F,0xFF,0xFF,0xFF,
+0xD1,0xFF,0xFF,0xE7,0xFF,0xFF,0xFF,0xFF,
+0xE7,0xF9,0xFF,0xBF,0x7F,0xD9,0xFF,0xFD,
+0xFE,0x7F,0xFF,0xFE,0xFF,0xF9,0xFF,0xFB,
+0xD6,0xDF,0xBF,0xEF,0x5B,0xD6,0xFF,0xBF,
+0xFB,0xF6,0xFF,0xBF,0xEF,0xF8,0xF6,0xDD,
+0xBE,0xFE,0x16,0xFF,0xBF,0xEF,0xFF,0xFE,
+0xFF,0xBF,0xEF,0xFF,0xFF,0xFF,0x6F,0xFB,
+0xFF,0xFF,0xFF,0x6F,0xF3,0xFF,0xF7,0xEF,
+0xFB,0xFF,0xBF,0xFF,0xEF,0xFE,0xFF,0xBF,
+0xFF,0xFF,0xFF,0xBE,0xBF,0xFF,0xEF,0xFF,
+0x7F,0xEF,0xFF,0xFD,0x17,0xFB,0x7B,0xFF,
+0xFF,0xFD,0x7F,0xDB,0xF6,0xF4,0x7F,0xFA,
+0xFE,0xF5,0xBF,0xEB,0xE3,0xF7,0xFF,0xFF,
+0xE9,0xBF,0xFF,0xAF,0xF7,0xFD,0xF3,0x7E,
+0x8F,0xA3,0xEA,0xFF,0xCB,0xF3,0xEE,0xFF,
+0xBF,0xEF,0xF7,0xF9,0xFF,0xFE,0x7F,0xFF,
+0xFF,0xFF,0xFF,0xF5,0xFB,0xF6,0xFF,0xF5,
+0x2F,0xFE,0xFB,0xD7,0xBF,0xFF,0xBE,0xDF,
+0x9F,0xFF,0xF0,0xFF,0xFF,0xF9,0xFE,0x7F,
+0x8F,0xA3,0xF8,0xFE,0x6F,0x9F,0xF9,0xF6,
+0x2F,0x9F,0xE7,0xF9,0xFE,0x2F,0x9F,0xE1,
+0xFF,0xFF,0xFF,0x7F,0xDF,0xF7,0xF5,0xFD,
+0x7F,0x7F,0xF5,0xFF,0x9F,0x5F,0xFB,0xFE,
+0xFF,0x7F,0xFF,0xFF,0xCB,0xFF,0xFF,0xFB,
+0xFE,0xFF,0xBF,0xAF,0xFB,0xFE,0xFF,0xDF,
+0xFE,0xFE,0xBF,0xF7,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xC7,0xFF,0xFF,0xFD,0xFF,0x7F,0xDD,
+0xF7,0xFD,0xFF,0xFF,0xD7,0xFF,0xFD,0x7F,
+0xFF,0xFB,0xFD,0xFF,0xFF,0xFE,0xEF,0x7F,
+0xFD,0xEF,0xFB,0xFE,0xFB,0xFD,0xFF,0x7F,
+0xDF,0xFD,0xFF,0x7A,0xDF,0xF7,0xFD,0xFF,
+0xFF,0xFF,0xFF,0x1F,0xFF,0xFF,0xD3,0xF7,
+0xFF,0xFF,0x6F,0xDB,0xFF,0xFF,0xEF,0xCB,
+0xF4,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,
+0x29,0xFF,0xE8,0xDA,0x76,0x9F,0xAF,0x6A,
+0xDA,0xFE,0x35,0xEB,0xDA,0xD6,0xBF,0xAB,
+0xEB,0x7A,0xDE,0xBF,0xD7,0x7F,0xFF,0xFE,
+0xFF,0xBF,0xEF,0xFD,0xDF,0x77,0xBF,0xFD,
+0x37,0xEF,0xFF,0xEF,0xFF,0x3F,0xFF,0xFF,
+0xFF,0xFE,0x7F,0xFF,0xFF,0xFF,0xF7,0x7E,
+0xDF,0xFF,0xFF,0xFF,0xFA,0xB7,0x7F,0xFF,
+0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0x89,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0x9F,0xFB,0xFF,0xFF,0xFF,0xE7,0xFF,
+0xFF,0xFF,0xFF,0xAA,0xFF,0xAB,0xFB,0xFA,
+0xEF,0xBF,0xFF,0xDF,0xFA,0x7B,0xB9,0xFE,
+0xFE,0xFF,0xFD,0xFF,0xF7,0xFE,0x3F,0xFF,
+0xB7,0xFF,0xF7,0xEE,0xFF,0x7F,0xEF,0xFF,
+0xFF,0x7F,0xFF,0x1F,0xFB,0xFF,0xBF,0xFB,
+0xFE,0xFF,0xBD,0xFF,0xFF,0x2F,0xFF,0xBF,
+0xFF,0x7F,0xDF,0xFA,0xFF,0xFF,0xFC,0xEE,
+0xF5,0xF3,0xBE,0xFB,0x0F,0xEF,0xF3,0xBE,
+0xEF,0xFC,0x5F,0xFF,0x5A,0xFF,0xF7,0xDF,
+0xFF,0xFF,0xFE,0xD5,0xFC,0x5F,0xFB,0xF2,
+0xFF,0xFF,0x2F,0xBB,0xF3,0xFF,0xFF,0xBF,
+0xFF,0xEF,0xFF,0xEF,0xFF,0xFF,0xFF,0xFF,
+0xBF,0xFF,0xFF,0xFD,0x7B,0xFF,0xDF,0xB9,
+0xFF,0xFB,0xFF,0xD8,0x7F,0xFF,0xFF,0xFF,
+0xFB,0xFF,0xFC,0x7F,0x1F,0xBF,0xE0,0xDF,
+0xF7,0xEF,0xFF,0xFD,0x7F,0xFE,0xDF,0xFF,
+0xE0,0xFF,0xFF,0xFD,0xEF,0xFB,0xFF,0xFE,
+0xF7,0xDF,0xFF,0xEB,0x5F,0xFF,0xF7,0xFF,
+0xFF,0xFF,0xFF,0xBF,0xFF,0xFD,0xFF,0xFD,
+0xFF,0xFF,0xFF,0xF7,0xFD,0xFF,0x3B,0xDC,
+0xFD,0x6D,0x7B,0x5F,0x57,0xF5,0xFD,0x7F,
+0x5F,0xFF,0xB1,0xFF,0xEB,0xFF,0xFF,0xFF,
+0xFB,0xFB,0xFE,0xFF,0xBF,0xFB,0xBE,0xFF,
+0xBF,0xEF,0xFB,0xFE,0xFF,0xAF,0xFE,0xF7,
+0xDF,0xDF,0xFF,0xFF,0xFF,0x7F,0xCF,0xF3,
+0xF8,0xFF,0xD7,0xFB,0xFF,0x5F,0xBF,0xF7,
+0xFB,0xFF,0x7F,0xFE,0x23,0xFF,0xFF,0xFE,
+0x7F,0xF3,0xFF,0xFB,0xFE,0xFF,0xFF,0xF3,
+0xFF,0xFF,0xF5,0xF9,0xFF,0x3F,0xFF,0xFF,
+0xF0,0x9A,0xFF,0xBE,0x7F,0xFF,0xFC,0xF9,
+0xFF,0xFD,0xAF,0xEB,0xFE,0xBF,0xFF,0xCF,
+0xF3,0xFE,0x7F,0xFF,0xFF,0x5B,0xBD,0xFF,
+0xBC,0xEB,0xFF,0xD7,0xD4,0xAF,0xAF,0xFD,
+0xFF,0xCF,0xF7,0xFD,0xFF,0x7F,0xDF,0xF7,
+0xFD,0xFE,0xFF,0x6F,0xFF,0xFB,0xFF,0xFF,
+0xFF,0xFD,0x7F,0x5E,0xFD,0xBF,0xDB,0xF6,
+0xFD,0xBF,0x6F,0xFB,0xEE,0xFD,0xFF,0x7A,
+0xFF,0xFA,0xFB,0xFF,0x3F,0xFB,0xB7,0x5F,
+0xD6,0xF7,0x1F,0x71,0xDC,0x77,0x1D,0xC7,
+0x31,0xDC,0x77,0xDF,0xF9,0xBF,0xF5,0x5B,
+0xF4,0xD7,0x9D,0xAE,0xFF,0xBF,0xFD,0xBF,
+0xDB,0xF6,0xFD,0xBF,0x6F,0xDB,0xF6,0xFE,
+0x3D,0x81,0xFF,0xEB,0xFE,0xFE,0xFE,0xFF,
+0xEB,0x7A,0xDF,0x7D,0x77,0x7D,0xF5,0x79,
+0xDF,0x57,0xDD,0xF5,0x7D,0x7E,0xE6,0xFF,
+0xD6,0x3F,0xBF,0x7F,0xFF,0xD4,0xF5,0x3F,
+0xBF,0xFB,0xBE,0xEF,0xB3,0xEE,0xFB,0x9E,
+0xEF,0xBB,0xFE,0x8B,0xFF,0xFE,0xDF,0xB7,
+0xED,0xFF,0xF7,0xFD,0xFE,0xFF,0xEF,0xBB,
+0xEE,0xFF,0xBE,0xEF,0xBB,0xEE,0xEB,0xFC,
+0x1F,0xFF,0xFF,0xFD,0xFF,0xE7,0xFF,0xF7,
+0xFD,0xFF,0xEF,0xFE,0xFF,0xBF,0xEF,0xFB,
+0xFE,0xFF,0xBF,0xEB,0xFA,0x1F,0xFF,0xB7,
+0xEF,0x5B,0xFE,0xFF,0xAF,0xEB,0xDD,0xE7,
+0xDE,0x77,0x9D,0xE7,0x79,0xDE,0x77,0x9D,
+0xBF,0xE6,0x6F,0xFF,0xFE,0xFF,0xBF,0xEF,
+0xFB,0xFE,0xFD,0xBF,0x6F,0xF6,0xFD,0xBF,
+0x6F,0xDB,0xF6,0xFD,0xBF,0xFF,0x7E,0xFF,
+0xFF,0xFB,0xFE,0xFE,0xFF,0xEF,0xFB,0xFD,
+0xEF,0x7E,0xF7,0xBD,0xEF,0x7B,0xDE,0xF7,
+0xBD,0xEF,0xFF,0xD5,0xFF,0xBF,0xFF,0xEF,
+0xFE,0xFF,0xFC,0x3F,0x0F,0xE7,0xFE,0x7F,
+0x9F,0xE7,0xF9,0xFE,0x7F,0x9F,0xE7,0xFE,
+0xF3,0xFF,0xFE,0xDF,0xAD,0xDF,0x67,0xEE,
+0xFB,0xBF,0xEF,0xFE,0xFF,0xBF,0xEF,0xFB,
+0xFE,0xFF,0xBF,0xEF,0xFF,0x23,0xFF,0xFF,
+0xFF,0xFF,0x7F,0xFF,0xF3,0xBC,0xDB,0xFE,
+0xFB,0xFF,0xFB,0xBE,0xF7,0xFB,0xFF,0x7F,
+0xDF,0xFF,0xCF,0xFB,0xFF,0x9F,0xE3,0xF9,
+0xBE,0x3F,0x8F,0xE7,0x79,0xFF,0x9D,0xE7,
+0xF9,0xFE,0x7F,0x9F,0xE7,0xF9,0xFE,0x5F,
+0xFF,0xCF,0xF7,0xFF,0xFF,0xFF,0xDF,0xF7,
+0xFE,0x7F,0xE7,0xF9,0xFE,0x7F,0xFF,0xFF,
+0xFB,0xFE,0xFF,0xFF,0xBF,0xFF,0xBF,0xBF,
+0xFF,0xFE,0xFF,0xBF,0xEF,0xFF,0xFD,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xF7,0xFD,0xFF,
+0xFF,0x3F,0xFF,0xBF,0xFF,0xF7,0xFF,0xFF,
+0x7F,0xDF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xE8,0xEF,0xFF,
+0x5F,0xF7,0xBF,0xF9,0xFE,0xDF,0xB7,0xFD,
+0xFF,0xDF,0xF7,0xFD,0xFF,0x7F,0xDF,0xF7,
+0xFD,0xFF,0xDD,0xFF,0xF2,0xFF,0xBF,0xFF,
+0xFF,0xBF,0xFF,0xFF,0x2F,0xF2,0xFF,0xBF,
+0x2F,0x7B,0xD2,0xF7,0xBF,0x2F,0xFF,0xBB,
+0xFF,0xEE,0x8F,0xAF,0xEB,0xFA,0xFE,0x3F,
+0xA7,0x69,0xCE,0x8F,0xA4,0xEA,0xFA,0xEE,
+0xB7,0xAE,0xEB,0xFD,0xC7,0xFF,0xF7,0xF7,
+0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x3E,0xF3,
+0x74,0xFF,0x3F,0x4F,0xFF,0xE7,0xFF,0x3F,
+0xFE,0xA7,0xFF,0xFF,0xDF,0xF7,0xB7,0xFF,
+0xF7,0xFF,0xBA,0xEF,0x37,0xEB,0xFB,0xFE,
+0xBF,0xFB,0xFE,0xF3,0xFF,0xF9,0xDF,0xFF,
+0xBF,0xFF,0xFF,0xFF,0xBF,0xFF,0xFF,0xFF,
+0xFD,0xDF,0xFF,0xFD,0xFF,0xFF,0xFB,0xFE,
+0xFD,0xFF,0xFB,0xBF,0xFE,0x3F,0xED,0xFF,
+0xDF,0xBE,0x3D,0xA7,0xFB,0xFA,0x3F,0xE6,
+0xE1,0xFE,0xFE,0x3F,0xEF,0xE3,0xDF,0xF5,
+0x7F,0xFE,0xFF,0x7E,0xFF,0xFF,0xFF,0xFF,
+0xEF,0x6F,0xF6,0xFF,0x7D,0xEF,0xD7,0xDE,
+0xFF,0x7D,0xEF,0xFF,0xF2,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0x7B,0xDE,0xFB,0xE6,0xEE,
+0xEF,0x37,0x6E,0xF3,0x7E,0xEB,0x37,0xEF,
+0xFF,0xC1,0xFF,0xFE,0xFF,0xF7,0xEF,0xFF,
+0xFF,0xFF,0xBF,0x3F,0xD2,0xDF,0xBF,0x2F,
+0x7B,0xE2,0xFF,0xFE,0x3B,0xBD,0xDB,0xFF,
+0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xEF,0xFE,
+0xFF,0xFB,0xFF,0xFF,0xBF,0xFF,0xFB,0xDF,
+0xFF,0xBF,0xFF,0xB7,0xFF,0xFF,0xBF,0xEF,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0xFF,
+0x7F,0xFF,0x1F,0xEF,0xF1,0xFD,0xFF,0xF6,
+0xAF,0xFF,0xFF,0xFF,0xFF,0xFF,0xEF,0xFF,
+0xFF,0xFF,0xFE,0x9F,0xFF,0xFF,0xFF,0x77,
+0xEF,0xF7,0xFB,0xFF,0xFE,0x5F,0xFF,0xFF,
+0xBF,0xCF,0xFB,0xF7,0xDD,0xF7,0xF5,0xFF,
+0x5F,0xD5,0xF5,0xFD,0x7F,0x5F,0xD7,0xF5,
+0xFF,0xFB,0x0F,0xFF,0xFF,0xA9,0xEA,0x7A,
+0xFF,0xAF,0x8F,0xFE,0xDF,0xAF,0xEF,0xFB,
+0xFE,0xFF,0xBF,0xEF,0xFB,0xDF,0xE5,0x5F,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xBD,0x57,0xFF,
+0xFF,0x6F,0x77,0xBF,0xF7,0xFB,0xFF,0x7F,
+0xBF,0xF7,0xFF,0xFC,0xBF,0xFF,0x9F,0xFF,
+0xFF,0xEF,0xFF,0xFE,0xFF,0xFF,0xFF,0x1F,
+0xCF,0xFF,0xFC,0xFF,0xFF,0xFF,0xFF,0xFB,
+0x65,0xAF,0xF3,0x7C,0xFF,0x3F,0xDF,0xFF,
+0xFD,0xE9,0xFE,0x7F,0xE7,0xFF,0xFE,0x7F,
+0xFF,0xFF,0xFF,0xFF,0xFD,0xE3,0xDF,0xFB,
+0xDB,0xF6,0xFD,0xEF,0x5B,0xFB,0xFF,0xDF,
+0xFC,0xFF,0x3F,0xDF,0xF3,0xFD,0xFF,0x7F,
+0xDF,0xEF,0x66,0xFF,0xDF,0xAD,0xEB,0x7A,
+0xDE,0xF7,0xF7,0xE7,0xD9,0xFD,0x9F,0x67,
+0xD9,0xF6,0x7D,0x9F,0xE7,0xDF,0xF5,0x47,
+0xFD,0x65,0x5B,0xD6,0xF4,0xFE,0xFF,0xEF,
+0xFF,0x6D,0xF6,0xDD,0xB7,0x6D,0xDB,0x76,
+0xDC,0xB7,0x7D,0xFA,0x9B,0xF6,0x6D,0x9D,
+0x67,0x59,0xDF,0xF7,0xDD,0xFF,0xEB,0xFE,
+0xBF,0xAF,0xEB,0xFA,0xFE,0xBF,0xAF,0xE3,
+0xD1,0x9F,0xFF,0xBD,0xBF,0xEF,0xFE,0xF7,
+0xBF,0xBF,0xF7,0xD7,0x7F,0xDD,0xF7,0x9D,
+0xDF,0x7F,0xDF,0xF7,0xFF,0xE0,0x7F,0xFD,
+0xC1,0xDF,0xF7,0xFD,0xC7,0x7F,0x7F,0xFB,
+0xFF,0xBB,0xEC,0xFB,0x3E,0xFF,0xBF,0xEC,
+0xFB,0xFF,0xD8,0x7F,0xBF,0x6C,0xFF,0xBE,
+0xFF,0xBF,0xED,0xFF,0xEF,0xFE,0xFB,0xBF,
+0xEF,0xFB,0xFE,0xFF,0xBF,0xEE,0xFF,0xC5,
+0xFF,0xAF,0x6F,0xFF,0xFC,0xFD,0x3F,0xE7,
+0xFF,0xFE,0xFF,0xEF,0xFB,0xFE,0xFF,0xBF,
+0xEF,0xFB,0xFE,0xBF,0x89,0xFE,0xFA,0xBA,
+0xFE,0xBF,0xAF,0xFB,0xF6,0xF5,0xD9,0x7D,
+0x97,0x65,0xD9,0x74,0x5D,0x97,0x65,0xD3,
+0xFE,0xD6,0xFF,0xBF,0xF7,0xFD,0xFF,0x7F,
+0xBF,0xCF,0xFB,0xFE,0xFF,0xEF,0xFB,0xFE,
+0xFF,0xBF,0xEF,0xFB,0xFF,0xF6,0x8F,0xFB,
+0xFF,0xEF,0xFB,0x7E,0xDB,0xFE,0xFF,0xBE,
+0xEF,0xEE,0xFB,0xBE,0xEF,0xBB,0xEE,0xFB,
+0xBE,0xFF,0xFF,0xDF,0xFF,0x43,0xFF,0xFF,
+0xFB,0xEF,0x5F,0xB7,0xFE,0x7F,0xE7,0xF9,
+0xFE,0x7F,0x9F,0xE7,0xF9,0xFE,0x7F,0xF9,
+0xBF,0xFE,0xAF,0x77,0xFD,0xFF,0x2F,0xAF,
+0xA7,0xFE,0xFF,0xEF,0xFB,0xFE,0xFF,0xBF,
+0xEF,0xFB,0xFE,0xFF,0xF1,0x7F,0xEF,0xDF,
+0xFF,0x97,0xF5,0xEF,0xFF,0xDF,0xFF,0xFF,
+0xBF,0xFF,0xBF,0xFF,0xFF,0xFE,0xFF,0xFF,
+0xFF,0xE0,0xFF,0xFF,0xF9,0xFE,0x2F,0x8B,
+0xE3,0xF8,0xBE,0x77,0x9F,0xF9,0xDA,0x77,
+0x9D,0xE7,0x79,0xDE,0x77,0x9F,0xDD,0xFF,
+0xFD,0xFD,0x7F,0x5F,0xD7,0xFD,0xFF,0x7F,
+0xE7,0xFE,0x7F,0x97,0xE7,0xFB,0xFE,0xFF,
+0xBF,0xEF,0xFF,0xAB,0xFF,0xEF,0xFA,0xFE,
+0xBF,0xAF,0xFF,0xFA,0xFF,0xFF,0xDF,0xFF,
+0xFB,0xFF,0xF7,0xFD,0xFF,0x7F,0xDF,0xFF,
+0x67,0xFF,0xF7,0xF5,0xFF,0xFF,0xFF,0xDF,
+0xFD,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xEF,0xFF,0xBD,
+0xEB,0xFF,0xFF,0xF7,0xAD,0xEB,0xFF,0xDF,
+0xFD,0xFF,0x3F,0xDF,0xF7,0xFD,0xFF,0x7F,
+0xDF,0xFF,0x5F,0xFF,0xF7,0xFF,0xFF,0xFD,
+0xBF,0xFF,0xCB,0xF4,0xFF,0x7F,0xD3,0xF7,
+0xFD,0x3F,0x7F,0xD3,0xF7,0xFF,0xFC,0x3F,
+0xFF,0xEA,0xFA,0xBE,0xAF,0xAB,0xEB,0xBA,
+0xF4,0x95,0x6B,0x52,0xD4,0xAD,0x2F,0x4A,
+0xD2,0xF6,0xBF,0xD2,0x7F,0xF7,0x3F,0xFF,
+0xFF,0xF3,0x7F,0xFF,0xFF,0xF7,0xFF,0xBA,
+0xDF,0xFB,0xFD,0xFF,0xBF,0xFF,0xFB,0xFF,
+0xF8,0x7F,0xEA,0xFF,0xFE,0xFE,0xDF,0xFF,
+0xF7,0xFF,0x7F,0xBB,0xFF,0xFF,0xBF,0xDF,
+0xFB,0xFF,0xFF,0xBF,0xFF,0xB1,0x7F,0xFF,
+0xFB,0xEF,0xFF,0xFF,0xFF,0xFF,0xFF,0xBF,
+0xCF,0xFE,0xFF,0xFF,0xEF,0xFF,0xF7,0xFF,
+0xFF,0xFF,0xF1,0xFF,0x69,0xBE,0xFA,0xBF,
+0xAF,0xE2,0xFF,0xFE,0xFD,0xAF,0xF3,0xFE,
+0xFF,0xBF,0xEF,0xFB,0xFC,0xFF,0xFF,0x07,
+0xFD,0x95,0xDB,0xDF,0x7F,0xDF,0xAF,0xFF,
+0xF7,0xAF,0x36,0xFE,0xBF,0x65,0xEB,0xF6,
+0xFE,0x9F,0x6F,0xFE,0x07,0xFF,0xCF,0xFF,
+0xF8,0xFE,0xFF,0xCF,0xFF,0xF6,0xFA,0xE7,
+0xFB,0xFE,0xFF,0xBB,0xED,0xF9,0xFF,0xFF,
+0xFF,0x5F,0xFF,0xFF,0xFF,0x75,0xFF,0xEF,
+0x7E,0xFD,0xE0,0xE8,0x5E,0xD3,0xE5,0xF9,
+0x3E,0x5F,0xD7,0xF7,0xFF,0xFA,0x2F,0xFB,
+0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0x7F,
+0x7F,0xD7,0xF5,0x7D,0x5F,0x57,0xD5,0xF5,
+0xEF,0xFF,0xF3,0x7F,0xFC,0x7F,0xFF,0xC7,
+0xF1,0xFF,0xFF,0x1F,0xCF,0xB0,0xFF,0x3F,
+0xCF,0xF3,0xFC,0xFF,0x3F,0xCE,0xFF,0xE4,
+0xFF,0xDF,0x7F,0xFE,0xF7,0xBB,0xFF,0xFF,
+0xDF,0xEF,0xEE,0xFF,0xBF,0xEF,0xFB,0xFE,
+0xBF,0xBF,0xEF,0xFF,0xD1,0xFF,0xFF,0xFF,
+0xFD,0xFB,0xFF,0xFD,0xFF,0xFB,0x9F,0xE9,
+0xFE,0x7F,0x9F,0xE7,0xF9,0xFE,0x7F,0xBF,
+0xFF,0xB3,0xFF,0xFF,0xF7,0xFF,0xFF,0xAF,
+0xF7,0xFF,0xB6,0x3F,0xEB,0xFA,0xFE,0xBF,
+0xAF,0xEB,0xFA,0xFE,0xBF,0xFE,0xA7,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xF7,0xFF,0xFF,0xFF,
+0xFE,0x9F,0xF7,0xF9,0xFF,0x7F,0x9F,0xE7,
+0xFF,0xFF,0xFE,0xAF,0x6F,0xFF,0xFF,0xFF,
+0x9F,0xFF,0xDF,0xFF,0x7D,0x5F,0xDD,0xFF,
+0xFB,0xBF,0xE7,0xBB,0xFF,0xFB,0xDF,0x6D,
+0x5F,0x7E,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xEB,0xF7,0xFF,0xE7,0xEF,0xF7,0xFF,0xFF,
+0x7F,0xFF,0xF7,0xFF,0xFC,0x8F,0xFF,0xEF,
+0xFD,0xFE,0xFF,0xBE,0xF4,0xF2,0x7D,0xD7,
+0xCF,0xFF,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xCF,0x6B,0xFF,0xBF,0x3F,0xFB,0xF2,
+0xFC,0x7F,0xEB,0xFF,0x9F,0xFA,0xFF,0xFF,
+0x3F,0xFF,0xF3,0xFF,0xFF,0xFD,0x70,0xF7,
+0xFF,0xFF,0xBF,0xFF,0xFB,0xD7,0xFE,0xF5,
+0x77,0xFF,0x15,0xDD,0x77,0xFD,0xFF,0x7F,
+0xDF,0xF7,0xFB,0xCD,0xBF,0xFF,0xFD,0xFF,
+0xFF,0xDF,0x37,0xCD,0xF9,0xEC,0xFE,0xEF,
+0xBB,0xF4,0xFB,0x3F,0x4F,0xB3,0xFF,0xFD,
+0xCB,0xFF,0xE9,0x7E,0x54,0x9F,0xE5,0x4B,
+0xB7,0xFF,0xDD,0x7D,0xC7,0x71,0xDD,0x77,
+0x5D,0xD7,0x75,0xCD,0x7F,0xD6,0xFF,0xD3,
+0xF6,0xF9,0x3F,0x6D,0x95,0xAF,0x7F,0xFE,
+0xFF,0xEF,0xFB,0xFE,0xFF,0xBF,0xEF,0xFB,
+0xFE,0xF6,0xC7,0xFF,0xAD,0x7B,0xCA,0xFF,
+0xBF,0xBF,0xEF,0xFD,0xE3,0xDF,0xB7,0xED,
+0xFB,0x7E,0xDF,0x37,0xED,0xE3,0xFB,0xDF,
+0xFF,0x52,0x5C,0x15,0xFD,0xCF,0x7F,0xDF,
+0xFE,0xEF,0xEF,0xFB,0xFE,0xFF,0xBF,0xEC,
+0x7B,0xFE,0xFF,0xFE,0x3E,0x7F,0xDA,0xF7,
+0xFD,0xFF,0x7F,0xFF,0xFF,0xFB,0xEF,0xBB,
+0x6F,0xFB,0xFE,0xFF,0xBF,0xEF,0xFB,0xFF,
+0xF7,0x7D,0xFF,0xD8,0xFF,0xFD,0xBF,0x7F,
+0xFB,0xFF,0xFF,0x9F,0xFB,0xFE,0x7F,0x9F,
+0xE7,0xF9,0xFE,0x7F,0x9F,0xEA,0x7F,0xF6,
+0xBF,0xBD,0x6A,0x5A,0xF6,0xE5,0xBF,0x77,
+0x5F,0x6D,0xDD,0x77,0x5D,0xD7,0x75,0xDD,
+0x77,0xFF,0xA5,0xBF,0xCF,0xFB,0xFF,0xFF,
+0xBF,0xCF,0xFB,0xFD,0xFF,0xBF,0xF3,0xFE,
+0xFF,0xBF,0xEF,0xFB,0xFE,0xFF,0xFD,0xAB,
+0xFF,0xBF,0xBF,0xFF,0xFB,0xFF,0x7F,0xEF,
+0xFF,0xBE,0xFB,0xEE,0xFB,0xBE,0xEF,0xBB,
+0xEE,0xFB,0xBF,0xFF,0xB5,0xFF,0xD0,0xBC,
+0xFD,0x2F,0x4B,0xF7,0xFF,0xFF,0x9F,0xF9,
+0xFE,0x7F,0x9F,0xE7,0xF9,0xFE,0x7F,0x9F,
+0xFA,0x8F,0xFD,0xAB,0xFA,0xDA,0xBF,0xAF,
+0xB3,0xFD,0xFF,0xBF,0xFB,0xFE,0xFF,0xBF,
+0xEF,0xFB,0xFE,0xF7,0xBF,0xFF,0x9F,0xFF,
+0x77,0xF7,0xBD,0xFD,0x77,0xDF,0xFF,0x7E,
+0xDF,0xED,0xBB,0xFE,0xFF,0xBE,0xEF,0xFB,
+0xFE,0xFF,0xFA,0x3F,0xFF,0xBE,0x6F,0x8F,
+0xE6,0xF9,0xFE,0x7F,0x9F,0xC7,0xFE,0x7F,
+0x9F,0xE7,0xF9,0xFE,0x7F,0x9F,0xE7,0xFB,
+0x7F,0xFF,0x7F,0xCF,0xFF,0xFD,0xFF,0xFF,
+0xDF,0xFB,0xAF,0xBF,0xEF,0xFF,0xFE,0xFF,
+0x9F,0xEF,0xFB,0xFF,0xFC,0xFF,0xFB,0xFE,
+0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xF7,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xF5,0xFF,0xFF,0xFF,0x3F,0xDF,0xF7,
+0xFF,0xFF,0x7F,0xEF,0xFE,0xFF,0xBF,0xFF,
+0xFB,0xFF,0xFF,0xBF,0xEF,0xFF,0xB3,0x7F,
+0xFF,0x7B,0x5E,0xF7,0xFD,0xFF,0x7B,0x7F,
+0xF7,0xFF,0x7F,0xDF,0xF7,0xFD,0xFF,0x7F,
+0xDF,0xF7,0xFF,0x17,0xFF,0xFF,0xFF,0x7F,
+0xFF,0xFF,0xDD,0xF6,0xFC,0xBF,0xCB,0xF2,
+0xBC,0xBF,0x2F,0xCB,0xF2,0xFC,0xBF,0xFE,
+0x8F,0xFF,0xFA,0x7E,0xBF,0xA7,0xEB,0xDA,
+0xFC,0xBF,0xAF,0x7A,0xFE,0xBF,0xAF,0xEA,
+0xFA,0xFE,0xBF,0xAF,0xF4,0xDF,0xFE,0xFF,
+0xF3,0x3C,0x7F,0x3E,0xFF,0xCF,0xF8,0xBF,
+0x8F,0xE3,0xF8,0xFE,0x3F,0x8F,0xE7,0xE8,
+0xFF,0xFC,0x9F,0xFF,0xFF,0xCF,0xEB,0xB3,
+0xE7,0xFB,0x7B,0xF3,0xFE,0xFF,0xCF,0xDB,
+0xFB,0xFB,0xBF,0x6F,0x6F,0xDF,0xEC,0x7F,
+0xFF,0xFF,0xF7,0xFD,0xFD,0xFF,0xFF,0xFF,
+0xFF,0xB2,0xBF,0xFF,0xDE,0xFD,0xBD,0xEF,
+0xFB,0xF6,0xDF,0xEA,0xE7,0xDB,0xFE,0xBB,
+0xFF,0xEB,0xFB,0xBF,0x9F,0x8F,0xE8,0xFE,
+0x3F,0x8F,0xA3,0xF8,0xFE,0x3F,0x8F,0xFF,
+0xF8,0x7E,0xFD,0xFD,0x7F,0xFF,0xFB,0xCD,
+0xFF,0xFD,0xFF,0x5F,0xEF,0xFD,0xFF,0xFF,
+0xDF,0xF7,0xFD,0xFF,0xBE,0x90,0xFF,0xFF,
+0xEE,0xFF,0x3F,0xBF,0xF3,0xBB,0xFE,0xB7,
+0xAB,0xFA,0xFE,0xAF,0xAD,0xEA,0xFA,0xDE,
+0xAB,0xFF,0x63,0xFF,0xFE,0xF2,0xFF,0xB3,
+0xFF,0xDF,0xEE,0x7D,0xFF,0x03,0xF1,0xF4,
+0x3F,0x1F,0xC3,0xF1,0xEC,0x7F,0xFE,0x6F,
+0xFF,0xFB,0xFB,0xFF,0x9F,0xFF,0xBF,0xFF,
+0x7B,0x5F,0xFD,0xFF,0xDF,0xF7,0xFD,0xFD,
+0x7F,0x7F,0xDF,0xFE,0xCF,0xFB,0xFF,0xFF,
+0xAF,0xFB,0xFF,0x1F,0xEF,0xA5,0xFD,0xBF,
+0xDF,0xFB,0x7D,0xFF,0xBF,0xDF,0xFB,0xFF,
+0xFD,0x3B,0xFF,0xFF,0xFF,0xFF,0xFF,0xFD,
+0xAF,0xF3,0xFF,0xFB,0x7F,0xBF,0xD7,0xFB,
+0xBF,0x7F,0xBB,0xF7,0xFF,0xF8,0x7F,0xFF,
+0xFA,0x5F,0xD7,0xFF,0xDF,0x7F,0xEF,0xFF,
+0xFF,0x7F,0xDB,0xF7,0xFD,0xFF,0x7F,0xDF,
+0xB7,0xFB,0xEC,0xFF,0xFF,0xF7,0xBF,0xEF,
+0xFD,0xFC,0xFB,0xFF,0xEF,0xF0,0xFE,0x3F,
+0x8F,0xE3,0xF8,0xFE,0x3F,0x8F,0xEF,0x8D,
+0xFF,0xFF,0xEF,0x7F,0xBF,0xFF,0xFB,0xFF,
+0xDB,0xBF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xEF,0xD8,0xFF,0x2E,0x7F,
+0xBE,0xEF,0xFE,0x6E,0xFF,0xBF,0xF9,0xFF,
+0xFF,0xF3,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFC,0x66,0xBE,0x47,0xF3,0x7F,0xDF,0xFE,
+0x87,0x9F,0xFF,0xFF,0xFF,0xFF,0xE7,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xD6,0x6F,0x7C,
+0xFB,0x4F,0xD2,0xFF,0xFD,0x2B,0xFE,0xFF,
+0xFF,0xFD,0x5F,0xD7,0xD5,0xF5,0x7D,0xFF,
+0xFF,0xFF,0xBF,0x9B,0xFF,0xFF,0xDF,0xB7,
+0xFF,0xFF,0xDF,0xFF,0x3F,0xCF,0xFE,0x7F,
+0xBF,0xEF,0xFB,0xFC,0xFF,0x3F,0xFF,0xD9,
+0xBF,0xFE,0x97,0xEC,0x8F,0xB7,0xFE,0x9B,
+0x7D,0xFD,0xB7,0xDD,0x77,0x1D,0xC7,0x71,
+0xDD,0x77,0x5D,0xD7,0xF3,0x6F,0xFD,0x3F,
+0x73,0xDD,0xAF,0xFD,0x7A,0xFF,0xFF,0xAF,
+0xFE,0xFD,0xBF,0xEF,0xFB,0xFE,0xFF,0xBF,
+0xEF,0x66,0x7F,0xFF,0xFF,0xBF,0xBF,0xFF,
+0xFB,0xFF,0xF7,0xDF,0xFD,0xFB,0x7D,0xDF,
+0xB7,0xCD,0xF3,0x7C,0x5F,0x3F,0x91,0x3F,
+0xFF,0x3D,0xEF,0x7B,0xFF,0xFC,0xFF,0xCA,
+0xEF,0xFE,0xFF,0xBD,0xEF,0xFB,0x1E,0xE7,
+0xBB,0xEC,0x7F,0xB3,0xFF,0xFD,0x9F,0xFF,
+0xFF,0xFE,0xFF,0xFF,0x7F,0xBF,0xFB,0xFE,
+0xFF,0xBF,0xEF,0xFB,0xEE,0xFB,0xBF,0xDF,
+0x67,0xFF,0xFF,0xBF,0xEF,0xDB,0xFF,0xBC,
+0xFE,0x7F,0xFB,0xFF,0x9F,0xEF,0xF9,0xFE,
+0x7F,0x9F,0xE7,0xF9,0xFE,0x87,0xFF,0xEE,
+0xFB,0xBE,0xE5,0xBF,0xEF,0xF9,0xD7,0x65,
+0xF7,0xDD,0xE7,0x7D,0xDF,0x77,0x5D,0xD7,
+0x7F,0xF8,0x9B,0xFE,0xFF,0xBF,0xEF,0xFB,
+0xFF,0xFF,0xBF,0xEF,0xFB,0xFF,0x7F,0xCF,
+0xF3,0xFC,0xFF,0xBF,0xEF,0xFF,0xDB,0x3F,
+0xEF,0xFB,0xFE,0xFF,0xDF,0xFF,0xFE,0xFB,
+0xBB,0xEF,0xBF,0xEF,0xBB,0xEE,0xFB,0xBE,
+0xEF,0xBB,0xFF,0xFC,0x7F,0xFD,0x3B,0x5B,
+0xD6,0xE5,0xFD,0x4F,0xC3,0xFB,0xFF,0xBF,
+0xEF,0xFB,0xFE,0xFF,0xBF,0xEF,0xFB,0xFF,
+0xB4,0xFF,0xFA,0xBC,0x8F,0xB2,0xE9,0xD2,
+0x2E,0xCF,0xFB,0xFF,0xBF,0xEF,0xFB,0xFE,
+0xFF,0xBF,0xEF,0xFB,0xFF,0xEC,0xFF,0xFD,
+0xFD,0x7F,0xDF,0xF7,0xE4,0xDF,0x5F,0xFF,
+0xFF,0xFB,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xC3,0xFF,0xEF,0xE6,0xF8,0xFE,
+0x3F,0x8B,0x83,0xF9,0xFE,0x7F,0xE7,0xF9,
+0xFE,0x7F,0x9F,0xE7,0xF9,0xFE,0x7F,0x17,
+0xFD,0xFF,0xFF,0xFF,0x7F,0x5F,0xF7,0x2C,
+0xFF,0xFF,0xFF,0xFE,0x7F,0xFF,0xE7,0xF9,
+0xFE,0x7F,0x9F,0xFE,0x2F,0xFF,0xFF,0xEF,
+0xFF,0xFE,0xBF,0xEF,0xAD,0xFF,0xFF,0x7F,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFE,0xDF,0xFF,0xDF,0xFF,0xFD,0xFD,0x7F,
+0xDF,0xF7,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFA,0x3F,0xFE,
+0xF7,0xFD,0xEF,0x7A,0xFF,0xB1,0xBD,0xFF,
+0x7F,0xF7,0xFD,0xFF,0x7F,0xDF,0xF7,0xFD,
+0xFF,0x7F,0xF3,0x27,0xFF,0xDF,0xFF,0xDD,
+0xFF,0xFC,0x9B,0xFF,0xCB,0xFC,0xBF,0x2F,
+0xCB,0xF2,0xFC,0xBF,0x2F,0xC9,0xFF,0xDE,
+0xFF,0xDF,0xAF,0xEB,0xDA,0xFE,0xBB,0xAF,
+0xEB,0xF8,0xF7,0xAF,0xE8,0xFA,0xFE,0xBF,
+0xAF,0xEB,0xF2,0xFF,0xFD,0xFF,0xFF,0xEF,
+0xBD,0xD7,0xBF,0xFF,0xFF,0xDE,0x8F,0xB8,
+0xDE,0x37,0x8D,0xA3,0x78,0xDA,0x3F,0x8F,
+0xFF,0xA1,0xFF,0xFF,0xFB,0xFB,0xFF,0xFF,
+0xFF,0xFF,0xA7,0xBD,0xFB,0x76,0xFD,0xBF,
+0xEF,0xDB,0xFE,0xBB,0xBF,0xFE,0x27,0x7F,
+0xFF,0xFE,0xFE,0xFD,0xF5,0xFF,0xEF,0xF5,
+0xDF,0x1F,0xE7,0xFD,0xFF,0x7F,0xDF,0xF7,
+0xFD,0xFF,0xFF,0xCD,0xFD,0xAE,0xFF,0xFA,
+0x3E,0x3F,0xAB,0xFD,0xF8,0x7E,0x8F,0xE3,
+0xF8,0xFE,0x3E,0x8F,0xE3,0xF8,0xFF,0xFE,
+0x1F,0xEF,0xDF,0xBF,0xFE,0xDE,0xDF,0xD9,
+0xFF,0xDF,0xBC,0xFF,0xFF,0x7F,0xFF,0xEF,
+0xFD,0x7F,0xDF,0xF7,0xF9,0x3F,0xFE,0xFF,
+0xFF,0x6F,0xFE,0xDE,0xBF,0xF7,0xED,0xEA,
+0xFD,0x8F,0x83,0xF8,0xEA,0x3F,0x8F,0xEF,
+0xFF,0xF4,0x7F,0xFF,0xEF,0xEF,0x7B,0xF3,
+0xF1,0x5F,0xFF,0xFF,0xF1,0x3B,0x7F,0xDF,
+0xF7,0xFD,0xFF,0xFF,0xFF,0xFF,0xE0,0xFF,
+0xFF,0xFF,0xF7,0xFF,0x6F,0xFF,0x7F,0xFF,
+0xFF,0xF7,0xDE,0xF7,0xBF,0xEF,0xFB,0xF7,
+0xFD,0xFF,0xFF,0xF5,0xFA,0xFF,0xFF,0xFB,
+0xE7,0xFF,0xF3,0xF8,0x7F,0xF3,0xDF,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0xEF,
+0xBB,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFD,
+0xFF,0x7F,0xFF,0x9F,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xCF,0xFF,0x37,0xFF,0xFF,
+0x7F,0xDF,0x77,0x5D,0xE7,0xFC,0xFF,0xBF,
+0xF7,0xF5,0xFB,0xFF,0xFF,0xD7,0xF5,0xFB,
+0xFF,0xFF,0x45,0xFD,0x7F,0xEA,0xFD,0xBE,
+0xBF,0xDF,0xF7,0xFF,0xFF,0xDB,0xFB,0xFE,
+0xFF,0xBF,0xEF,0xFF,0xFF,0xFF,0xFB,0x5F,
+0x7F,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFE,0xFF,0xEF,0xFD,0xFF,0x7F,0xDF,
+0xFF,0xEF,0xFB,0xF8,0x0F,0xF3,0xFF,0xF9,
+0x2E,0xFB,0xFE,0xFC,0xF3,0xEF,0xFF,0xFF,
+0xBF,0xFF,0xFB,0xE7,0xFF,0xFE,0x7E,0xFF,
+0xC0,0x6B,0xCF,0xFF,0x34,0xDF,0xF1,0xFD,
+0xFF,0xEF,0xFF,0xFF,0xFF,0xDF,0xF7,0xFD,
+0xCF,0x7F,0x9C,0xFD,0xFD,0x6C,0xF7,0xFF,
+0xF6,0xFD,0xEB,0x2B,0x9F,0xFF,0xFC,0xFE,
+0x7E,0xFF,0xFF,0xFF,0xFF,0xD7,0xF3,0xF7,
+0xFF,0xFB,0xE1,0xBF,0xFF,0xEB,0x7A,0xDE,
+0xD7,0xFB,0xFF,0xF9,0xFE,0xFF,0xFF,0xF3,
+0xDE,0x7F,0xFD,0xE7,0x7F,0xFF,0xFD,0xBB,
+0xFF,0xFF,0x7E,0xCC,0xF6,0xAF,0x5F,0x7F,
+0xFE,0xF4,0x7D,0xF7,0xFD,0xBB,0x6E,0xDB,
+0xB7,0xFF,0xF7,0xDF,0x66,0xFF,0xFF,0xF7,
+0x3D,0xCF,0xDE,0xBD,0xFF,0xFF,0xDE,0xDB,
+0x8D,0xF7,0x7E,0xDF,0xB7,0xEF,0x7F,0xFF,
+0xF6,0x87,0xFF,0xFF,0xEF,0xFE,0xDE,0xBF,
+0xFF,0xFF,0xFF,0xBB,0xEF,0xFD,0xFF,0x7B,
+0xDE,0xF7,0x3F,0xFF,0xBF,0xFB,0xDB,0xFF,
+0xF2,0xB6,0xFD,0xBD,0x7F,0xE7,0xFF,0xFF,
+0xFF,0x6F,0xF7,0xFF,0xFF,0xFF,0xFE,0x77,
+0xFF,0xBF,0xF8,0xAF,0xFF,0xDF,0xBF,0xFF,
+0xBF,0x7F,0xFB,0xFF,0xFF,0xFF,0xDB,0xFE,
+0xFF,0xBF,0xFF,0xFA,0xFF,0xFD,0xFF,0xF6,
+0x7F,0xFF,0x9F,0xFF,0xFF,0x3F,0xEF,0xF8,
+0xEE,0x7E,0x9F,0xBA,0xFE,0xBF,0x8F,0xEF,
+0xFE,0xFE,0xF9,0xFF,0xFA,0x7F,0xFE,0x7E,
+0xBF,0xAF,0xFB,0x96,0xFD,0x9F,0xEF,0x5E,
+0x65,0xBE,0xEF,0x5B,0xB6,0xFF,0xBE,0xE3,
+0xFF,0xB5,0xBF,0xFF,0xFD,0xFF,0x7F,0xFF,
+0xEF,0xDF,0xFE,0xFF,0xBF,0xFB,0xFE,0xFF,
+0xBF,0xCF,0xFF,0xFF,0xFF,0xFD,0x9B,0xFF,
+0xFE,0xFB,0xFE,0xDF,0xFF,0x7F,0xFF,0xF7,
+0xFE,0xFF,0xDF,0xFB,0xFB,0xFE,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xB7,0xFE,0xFA,0xFF,0xAB,
+0xEF,0xFF,0xFD,0xB5,0x7B,0x7F,0xFB,0xF7,
+0xFD,0xFF,0xFF,0xDD,0xFF,0xEF,0x8F,0xFF,
+0x2F,0xFF,0xFB,0x7C,0xFF,0x3F,0xDF,0x73,
+0xEB,0xFE,0x3F,0xFF,0xEF,0xFB,0xFE,0xFF,
+0xEF,0xFD,0xFF,0xBF,0xFD,0x0F,0xFF,0xFF,
+0xFF,0xF5,0xF9,0xFF,0x7F,0xD7,0xFD,0xFF,
+0xDF,0xFF,0xF7,0xFB,0xFF,0x7F,0xBF,0xFF,
+0xFF,0xF0,0x9F,0xFF,0xFE,0x7F,0x8B,0xE3,
+0xF9,0xDE,0x27,0x9B,0xE6,0xBE,0x7F,0x9B,
+0xC3,0xF8,0xDE,0x7F,0x9D,0xE7,0xFE,0x7F,
+0xFF,0xFF,0x5F,0xD7,0xFF,0xFF,0xFF,0x4F,
+0xFB,0xFF,0xFF,0x7F,0xFF,0xAF,0xFF,0x9F,
+0x7F,0xFB,0xFF,0xE8,0xFF,0xFF,0xFE,0xBF,
+0xAF,0xFF,0xFF,0xFE,0xBF,0xEF,0xF7,0xFF,
+0xBF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF7,0xFF,
+0xFC,0xFF,0xFF,0xFD,0x7F,0xFF,0xFF,0xFF,
+0xFD,0x3F,0xCF,0xFF,0xFF,0xFF,0xFF,0xF7,
+0xFF,0xFD,0x7F,0xFF,0xFF,0x93,0xFF,0xFF,
+0x7A,0xDF,0xF7,0xFF,0xFF,0x7B,0x7F,0xB7,
+0xEF,0xFF,0xFF,0xFD,0xBF,0xFD,0xFB,0xFF,
+0xF7,0xFF,0xD7,0xFF,0xFF,0xFF,0xFC,0x9F,
+0x6F,0xCB,0xFF,0xF4,0xBB,0xDF,0xD6,0xFD,
+0xBF,0x2F,0xD3,0xF7,0xFF,0xDF,0xFF,0xCF,
+0xFF,0xFA,0xBE,0xBD,0xAF,0x6A,0xDA,0xBE,
+0xBB,0xAB,0x3A,0xBE,0x2D,0xAE,0xEB,0xDA,
+0xF6,0x3F,0xAD,0xF5,0xDD,0xFF,0xCF,0xF1,
+0xFF,0xF9,0x7F,0xFF,0x73,0xFE,0xFF,0xCF,
+0xC3,0xF4,0xF7,0x2F,0xF3,0xFF,0xFC,0xFF,
+0x7C,0x1F,0xFF,0x3F,0x4F,0xFF,0x7E,0xFF,
+0xEF,0xBD,0xF6,0xFE,0xFF,0x2B,0xEF,0xDC,
+0xFB,0xFD,0xFF,0xFB,0xFF,0xEA,0x7B,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFB,0xF7,0xDF,0xFF,
+0xE3,0x7D,0xFF,0xB7,0xFF,0xBF,0xFF,0xFF,
+0xDF,0xFF,0xF8,0xFF,0xBF,0xFF,0xBF,0xEB,
+0xE7,0xFA,0xFE,0x3D,0xBF,0xE9,0xFC,0xBF,
+0xFF,0xFA,0xFB,0xFE,0xFF,0xFF,0xFF,0xD9,
+0xFF,0xFF,0xFF,0xF6,0x7F,0xFF,0xF6,0x7D,
+0xFF,0xDF,0xCF,0xFD,0xBF,0xFB,0xEF,0x7E,
+0xFF,0x7F,0xFF,0xFF,0xD3,0xFF,0xFD,0xFB,
+0xFF,0xFB,0xFF,0xFF,0xFF,0xEF,0xFF,0xBF,
+0xFE,0xFF,0xF7,0xEF,0xFF,0xFF,0xFF,0xFB,
+0xFF,0x87,0xFF,0xFD,0xFF,0xFF,0xFF,0xFF,
+0x7B,0xFE,0xFF,0xFE,0x3B,0xF7,0xF7,0xFF,
+0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0xFF,
+0xFF,0xFF,0xFF,0xFB,0xFF,0xFF,0xFF,0xF7,
+0xFF,0xFF,0xAD,0xFF,0xFE,0xF7,0xFF,0xFF,
+0x5F,0xFF,0xFF,0xDF,0xFF,0xFD,0xFF,0xF5,
+0xFF,0xDF,0xFF,0xBD,0xFF,0xE9,0xFF,0xC7,
+0xF3,0xFF,0xFF,0xF7,0xFF,0xF3,0xFF,0xF8,
+0x3B,0xFF,0xFF,0x7B,0xDF,0xBF,0xFB,0xEF,
+0xFB,0xFF,0xFB,0xF7,0xF7,0xBB,0xFF,0xFF,
+0xFF,0xFF,0xFB,0xFF,0xFE,0x7F,0xF3,0x7F,
+0x5E,0xB7,0xBF,0xFD,0x7F,0xFF,0xF9,0x7F,
+0xFB,0xFF,0xEB,0xFD,0x7F,0x7F,0xFF,0xEF,
+0xFB,0xE0,0x3F,0xFE,0xBF,0xBF,0xDF,0xFF,
+0x7E,0xFF,0xF7,0xFF,0xFF,0xFE,0xBF,0xFF,
+0xDB,0x78,0xFF,0xFF,0xFF,0xEE,0xA1,0xBF,
+0xF5,0xDE,0xFB,0xF7,0xFF,0xFB,0xFF,0xFF,
+0xFF,0xFF,0xFB,0xFF,0xFF,0xD7,0xFF,0xFF,
+0xFF,0xFF,0xEF,0xF0,0xFF,0xFF,0xFF,0xF3,
+0xF7,0xFF,0xEF,0xFF,0xE7,0xCF,0xFF,0xFB,
+0xFF,0xEF,0xFF,0xFF,0x9F,0x9F,0xEF,0xFC,
+0x16,0xBF,0xFE,0xF3,0xE4,0xFF,0xFF,0xC6,
+0xFF,0xE7,0xFF,0xFF,0xFD,0xFF,0xBF,0xFF,
+0xFF,0x3F,0xFF,0xBF,0xD6,0xAF,0x7F,0xFE,
+0x6B,0x7E,0x7F,0xFF,0xAF,0xFF,0xFF,0xBF,
+0xFF,0x5F,0xFF,0xFE,0xFF,0xFF,0xFE,0xFF,
+0xFF,0xBD,0xDB,0xFF,0xFE,0x5F,0xF2,0xFF,
+0xFF,0x5F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xEF,0x7F,0xFF,0xFF,0xFF,0xFF,0xDE,0xBF,
+0xFF,0xFF,0xEF,0xFB,0x77,0xFE,0xBD,0x7F,
+0x5F,0xFF,0xFF,0xFF,0xDF,0x6F,0xED,0xFF,
+0xFD,0xFF,0x7F,0xFD,0x6F,0xFF,0xFF,0x77,
+0xDA,0xCF,0xFD,0x5F,0xFF,0xBF,0xFF,0xFF,
+0xDF,0x7F,0xFF,0xFB,0xFF,0xFF,0xFF,0xFF,
+0x66,0x7F,0xFF,0xFE,0xBF,0xE7,0xBF,0xFA,
+0xFF,0xFE,0xFF,0xFF,0xFF,0xDF,0xFF,0x59,
+0xEF,0xFF,0xEF,0xFB,0x7F,0x89,0xFF,0xFF,
+0xE9,0xFF,0x6F,0xFF,0xF5,0xFF,0xFF,0xFF,
+0xFF,0xFF,0x7F,0xF2,0xF7,0xFF,0xFF,0xEF,
+0xF8,0x7F,0xFB,0xFF,0xFD,0xFF,0xFF,0xD9,
+0xFF,0xEF,0xBB,0xFF,0xFF,0xFF,0xBF,0xEF,
+0xDE,0xFF,0xFF,0x9F,0x7F,0xDF,0xFF,0xF7,
+0xFF,0xFF,0xFF,0xFF,0xDF,0xFF,0xFF,0xAF,
+0xFF,0xFF,0xF7,0x3F,0xEB,0x9F,0xFE,0x7F,
+0x9E,0x7F,0x9F,0xFE,0x87,0xFF,0xED,0xDB,
+0x56,0xFF,0xBF,0xAF,0x0B,0xD2,0xFF,0xEF,
+0xDB,0x6E,0x7D,0xBD,0x6F,0xF8,0xFE,0x3F,
+0xFA,0x5B,0xFF,0xFD,0xBF,0xEF,0xFF,0xBF,
+0x6F,0xDB,0xE6,0xFF,0xFF,0x3F,0xFF,0xDF,
+0xFE,0xFF,0xFF,0xFF,0xFF,0xDA,0x3F,0xFF,
+0xFB,0xFE,0xFE,0xFF,0xFF,0xDF,0xF7,0xBD,
+0xFF,0xFD,0xFF,0xFE,0xFF,0xFB,0xFF,0xFF,
+0xFF,0xFF,0xF1,0x5F,0xFD,0x9F,0xDF,0xFD,
+0xFF,0xFD,0x7F,0xFF,0xFF,0xFF,0xFF,0x76,
+0xFA,0xFF,0xFF,0x7F,0xE3,0xF8,0xFF,0xAE,
+0xFF,0xFB,0x7E,0x9D,0x73,0xFF,0xFA,0x7F,
+0xDF,0xFF,0xFF,0x7F,0xFF,0xFB,0xCD,0xFF,
+0x7F,0xEF,0xFB,0xFF,0xFD,0xFF,0xF7,0x7F,
+0x7F,0xEF,0xFF,0xED,0xFF,0xFF,0xFF,0xB5,
+0xFF,0xBF,0xFF,0xBF,0xFD,0xEF,0xDB,0xF7,
+0xFF,0x93,0xFF,0xEF,0xE2,0xF9,0xBE,0x7F,
+0x8B,0xE7,0xF9,0xFE,0x6B,0xE7,0xF9,0xFE,
+0x7F,0x9F,0xE7,0xF9,0xFE,0x7F,0x47,0xFF,
+0xFF,0xFD,0xFF,0x9F,0xFF,0xD7,0xFF,0xFF,
+0xFF,0xFF,0xF5,0xFF,0x9F,0xFF,0xF7,0xFE,
+0xFF,0xBF,0xFE,0x6F,0xFF,0xFF,0xFB,0xFF,
+0xFF,0xFF,0xAF,0xFF,0xFF,0xFF,0x7F,0xFB,
+0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFD,
+0xDF,0xFF,0xFF,0xF7,0xFF,0xFF,0xFF,0xDF,
+0xFF,0xFF,0xFF,0x5F,0xFF,0xFF,0xFF,0xFF,
+0x5F,0xFB,0xFE,0xFF,0xF8,0x37,0xFF,0xFF,
+0xEF,0xFF,0x7F,0xFE,0xBF,0xFF,0xFF,0xFE,
+0xBF,0xFF,0xFF,0x7F,0xFF,0xBF,0xFD,0xFF,
+0x7F,0xFA,0x7F,0xFF,0xFF,0x6F,0xFF,0xFF,
+0x7D,0xFF,0xCF,0xFF,0xFF,0xFF,0x4F,0xFF,
+0xF2,0xFF,0xFF,0xFF,0xFF,0xFF,0xFA,0xBF,
+0xFF,0xAE,0xEB,0xFA,0xFE,0xBB,0xAD,0xEB,
+0xFA,0xF7,0xAF,0x6B,0xFA,0xF6,0xBF,0x25,
+0xE9,0xF2,0x7F,0x45,0xFF,0xFF,0xFD,0xF7,
+0xF7,0xBF,0xFF,0xDF,0xFF,0xFF,0xBF,0xFB,
+0xFF,0xDF,0xF3,0xFF,0xF7,0x3F,0xCF,0xFF,
+0xA1,0xFF,0xFF,0xBF,0xE7,0xFF,0xFF,0x7F,
+0xFF,0x3D,0xFF,0xFF,0xFF,0xF7,0xFF,0x2F,
+0xFF,0xFB,0xF5,0x7F,0xFE,0x57,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF7,
+0x3F,0xFF,0xFE,0xFF,0xFF,0xFF,0xFD,0xFE,
+0xF7,0xEE,0xAF,0xFE,0xEE,0xE7,0xFA,0xFF,
+0xFE,0x9D,0xF9,0x5E,0xFE,0xFF,0xEB,0xFF,
+0xFF,0xDF,0xA7,0xFF,0xFF,0xFF,0xFC,0xDB,
+0xFF,0xFF,0xFF,0x7E,0xFB,0xFF,0xFF,0xEF,
+0xFB,0xFD,0xFF,0xDB,0xFF,0xFF,0xFF,0xEF,
+0xFF,0xFF,0xFF,0xFD,0xBF,0xFE,0xBF,0xFF,
+0x6F,0x7F,0xFF,0xF7,0xFF,0xFF,0xF9,0xFF,
+0xF7,0xFF,0xBF,0xDE,0xF7,0xFF,0xFF,0xFF,
+0xFA,0x7F,0xFD,0xBF,0x5F,0xFF,0xFF,0xBF,
+0xFF,0xED,0xFF,0xF7,0xBF,0xFF,0xFF,0xEF,
+0xFF,0xDF,0xFF,0xFF,0xFF,0xE6,0xFF,0xFB,
+0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xF7,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xEB,0xFF,
+0xFD,0xFF,0xF5,0xFF,0xF6,0x7F,0xDF,0xBD,
+0xCF,0xFF,0xFF,0xFF,0xFF,0xDF,0xFF,0xFF,
+0xFF,0xF9,0xFF,0xFF,0xFF,0xFF,0xFF,0xE3,
+0xFF,0xEE,0xBF,0xFF,0x7D,0xEF,0xFE,0xFF,
+0xFF,0xFF,0xBF,0xFF,0xFF,0xFF,0xFF,0xFE,
+0xFF,0xFF,0xFF,0xFF,0xE7,0xFF,0xB5,0xAE,
+0xFF,0xFF,0xB6,0xFE,0xBF,0xFF,0xFF,0xBF,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0x27,0xFF,0xEF,0xFE,0x7F,0xDF,0xFF,
+0x7E,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFD,0xFF,0xF7,0xF9,0x9F,0xFF,
+0x5F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,
+0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0x0F,0xFF,0xE7,0xBF,0xFE,
+0xFF,0xBF,0xFF,0xFF,0xFF,0xFF,0xFC,0xBF,
+0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xC4,
+0x6B,0xFF,0x29,0x1F,0xFB,0xAF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xEF,0x1B,0xFE,0xFF,0xFC,
+0x6F,0xFF,0xFF,0xFD,0x6A,0xF7,0xD7,0xF5,
+0xBF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFE,0xBF,0xFF,0xFF,0xFA,0xFF,0xFF,0xF7,
+0xFB,0xDD,0xBF,0xFF,0xE7,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFD,0x7F,0xFF,
+0xFF,0xF5,0xFF,0xFF,0xF7,0xFD,0xB3,0xEF,
+0xFD,0x7E,0x5D,0xFF,0xFD,0xFF,0xFF,0xFF,
+0xFD,0x7F,0xD2,0xF5,0xFB,0x7E,0xCB,0xB7,
+0xFF,0xFF,0xFF,0xC6,0xFF,0xFD,0xEE,0x63,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xF6,0xFD,0x65,
+0x5B,0xDF,0xFF,0xD5,0xFF,0xFF,0xFF,0xF6,
+0xE7,0xBF,0xF7,0xA9,0xFF,0xFF,0xED,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xEB,0xFF,0xFF,0xFF,
+0xAF,0xFF,0xFF,0xFF,0xF8,0x1B,0xFF,0xE3,
+0xD0,0xBF,0xFF,0xE1,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xD7,0xFF,0xFF,0xFF,0x5F,0xFF,0xFF,
+0xFF,0xFF,0xAF,0xFF,0xDB,0x76,0xBF,0xFF,
+0x7F,0xFF,0xBF,0xEF,0xFE,0xFF,0xBF,0xEF,
+0xFB,0xFE,0xFF,0xFF,0xFF,0xBF,0xF2,0x7F,
+0xFF,0x9F,0xFE,0xBD,0xFE,0x7F,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xF7,0x3F,0xEC,0x7F,0xF6,0x95,0xBB,
+0xEF,0xF8,0xFE,0xFC,0xBF,0x2F,0xDA,0xFC,
+0xBF,0x2F,0xCB,0xF2,0xFC,0xBF,0xEF,0xFF,
+0xA9,0xBF,0xCF,0xFB,0xFF,0xFF,0xFF,0xFE,
+0xDD,0xB7,0x6D,0xF6,0xD9,0xB6,0x6D,0x9B,
+0x76,0xD9,0xBF,0xFB,0xFD,0xA3,0xFF,0xBF,
+0xEF,0xFF,0xEF,0xFF,0xFF,0xFF,0x7F,0xDF,
+0xFD,0xEF,0x7B,0xDE,0xF7,0xFD,0xEF,0x7F,
+0xFF,0xFF,0x05,0xFF,0xFA,0xFE,0x7F,0xEF,
+0xE3,0xFF,0xFF,0xFD,0x7F,0xFF,0xFF,0xFF,
+0xFF,0x5F,0xFF,0xFF,0xFD,0x7F,0xFB,0xAF,
+0xFF,0x63,0xC8,0xFF,0xBF,0xEF,0xFF,0xFF,
+0xFA,0x7F,0xFF,0xFF,0xFF,0xFE,0x9F,0xF7,
+0xFF,0xFA,0xBF,0xFE,0x9F,0xFB,0x7F,0xFF,
+0xFF,0xEF,0xD7,0xFF,0xFF,0xF5,0xFF,0xFF,
+0xFF,0xFF,0xFD,0x7F,0xFF,0xFF,0xBF,0xFF,
+0xF9,0xBF,0xFF,0xBE,0x27,0x9F,0xE7,0xF9,
+0xFE,0x7F,0x8B,0xE7,0xFE,0x7F,0x9F,0xE2,
+0xF9,0xFE,0x7F,0x9F,0xE7,0xF1,0x7F,0xFF,
+0xFF,0xFF,0xFB,0xFE,0xFF,0xFF,0xFF,0xD7,
+0xFF,0xFF,0xFF,0xFF,0xF5,0xFF,0xFF,0xFF,
+0xD7,0xFF,0xFA,0xFF,0xFE,0xFF,0xFF,0xFF,
+0xFD,0xFF,0xFF,0xFF,0xAF,0xF7,0xFF,0xFF,
+0xFF,0xEB,0xFF,0xFF,0xFF,0xAF,0xFF,0xC4,
+0xFF,0xF7,0xFF,0xFF,0xEF,0xFF,0xFF,0xFF,
+0xFF,0x5F,0xFF,0xFF,0xFF,0xFF,0xD7,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xEB,0xFF,0xFB,0x7A,
+0xDF,0xF7,0xFD,0xFF,0xFF,0xFE,0xBF,0xFF,
+0xFF,0x7F,0xFF,0xAF,0xFF,0xFF,0xFF,0xF7,
+0xEF,0xE3,0xFF,0xDD,0xD2,0xFF,0xDF,0xFF,
+0xFF,0xF2,0xFC,0xBF,0xCB,0xF6,0xFD,0xBF,
+0x2F,0xCB,0xFF,0x7F,0xDF,0xDE,0xAF,0xFF,
+0xDA,0xEE,0xBF,0xAF,0xE9,0xFA,0xF4,0xBD,
+0xAF,0x5A,0xAE,0xBB,0xAB,0x6B,0xDA,0xDE,
+0xBF,0xAD,0xD7,0x5E,0xFF,0xFF,0xBF,0xFC,
+0xFF,0xDF,0xFD,0xFF,0xFF,0xFF,0xFF,0xDF,
+0xF7,0xFF,0xFF,0xFF,0xFF,0xFD,0xFF,0xFA,
+0x1F,0xFF,0xFE,0xFB,0xEF,0xBF,0xFD,0xFF,
+0xFD,0xBD,0x77,0xFF,0xFF,0xFF,0xFF,0x9D,
+0xEF,0xFF,0xFF,0xFF,0xEF,0x7D,0xFF,0xFB,
+0xFE,0xEF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF7,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xEE,
+0xBF,0xE4,0xFB,0xFF,0xFE,0x3F,0xFE,0xFF,
+0xFF,0xFF,0xFF,0xAF,0xEA,0xFE,0xBF,0xAF,
+0xEB,0xFA,0xFE,0xFF,0xFF,0xFF,0x55,0xF6,
+0xFF,0xFE,0xF7,0xFF,0x7F,0xFF,0xEB,0xF7,
+0x5F,0xC5,0xFD,0x7F,0x5F,0xD7,0xF5,0xFF,
+0x6F,0xFB,0xFF,0x8A,0xFF,0xFF,0xFF,0xFF,
+0xEB,0xFF,0xFF,0xFF,0xFF,0xFB,0xBF,0xBF,
+0xEF,0xFB,0xFF,0xFF,0xFF,0xFF,0xFB,0xFF,
+0x77,0xDF,0xFB,0xFF,0xFD,0x7F,0xEF,0xFF,
+0xFF,0xFF,0xBF,0x7F,0xFF,0xDF,0xBF,0xFF,
+0xFB,0xFF,0xFF,0xFF,0xFE,0xEF,0xDF,0xFF,
+0xFE,0xFF,0x9F,0xEF,0x7D,0xFF,0xF7,0xFF,
+0x7F,0xFF,0xFF,0xDF,0xF7,0xFD,0xFF,0xEF,
+0xDF,0xFF,0xDF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFD,0xFF,0xFF,0xFB,
+0xFD,0xFF,0xBF,0xDF,0xD1,0xFF,0xF8,0x3B,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0x7E,0xDB,0xFD,0xFF,0x77,0xDB,0xB7,0x7D,
+0xBF,0xFB,0xFF,0xF8,0x7F,0xED,0x7B,0x5E,
+0xFF,0xFE,0xFF,0xFF,0x4F,0xD7,0xFD,0x7F,
+0xDF,0xD7,0xF5,0xFF,0x7F,0xFF,0xFF,0xFF,
+0xF2,0x3F,0xFE,0xFF,0xBF,0xFF,0xFF,0xFF,
+0xFF,0xBF,0xEF,0xFE,0xFF,0x3B,0xEE,0xFF,
+0xFC,0xEF,0xFF,0xFF,0xFF,0x85,0xFF,0xFD,
+0xFE,0xFF,0xF5,0xFF,0xFF,0xFE,0xFF,0xDF,
+0xFB,0xFF,0x5F,0xBF,0xFF,0xFD,0xFF,0xFF,
+0xFF,0xFF,0xA8,0xFF,0xFF,0x9F,0x9E,0xFF,
+0xFF,0xFF,0x7F,0xF3,0xFF,0xFF,0xCF,0xFF,
+0xF7,0xFD,0xFF,0x7F,0xFF,0xFF,0xFC,0x16,
+0xBF,0xCF,0xA3,0xE5,0xEF,0x7F,0xFF,0xF3,
+0xE4,0xFF,0xCF,0x93,0xFC,0xFF,0x3F,0xCF,
+0xFF,0xFF,0xFF,0xD6,0x0F,0x7D,0xBF,0x6E,
+0xFB,0xF4,0xFC,0xAF,0x6D,0xDB,0x77,0xB7,
+0x6D,0xDB,0xF6,0xFD,0xBF,0xFF,0xFF,0xFF,
+0xBF,0x9B,0xFA,0xDE,0xB7,0xB7,0xED,0xF9,
+0x7E,0xB7,0xAC,0xEB,0xD6,0xB3,0xAD,0xEB,
+0x7A,0xDF,0xFF,0xFF,0xFF,0xD8,0xBF,0xFF,
+0xB7,0xED,0x9F,0x6F,0xDD,0xF7,0x68,0xDB,
+0x37,0xB3,0x6C,0xDB,0x36,0xCD,0xB3,0x7F,
+0xFF,0x7F,0xF5,0x6F,0xFD,0xEF,0x79,0x3D,
+0xF7,0x93,0xE4,0x7A,0x9E,0xAD,0xEA,0x7A,
+0x9E,0xF7,0xBD,0xEF,0xFF,0xFF,0xFF,0x76,
+0x7F,0xFB,0xC6,0xFF,0xBB,0xEF,0xDA,0xFE,
+0xFD,0xBF,0xFB,0xFE,0xFF,0xBF,0xEF,0xFB,
+0xFF,0xFF,0xFB,0xFF,0xA5,0xFF,0xFD,0xAB,
+0x6F,0x78,0xDE,0x17,0x8F,0x79,0xDF,0xFD,
+0xFF,0x7F,0xDF,0xF7,0xFD,0xFF,0xFF,0xFB,
+0xFF,0xFB,0xFF,0xEF,0xFB,0xEF,0xFB,0xFE,
+0xFF,0xBB,0xDA,0xF3,0xEF,0x3B,0xCE,0xF3,
+0xBC,0xEF,0x3F,0xCF,0xDF,0xFF,0xB7,0xFF,
+0xFF,0xFF,0xCF,0x73,0xFF,0xBF,0xEF,0xFF,
+0xF3,0xFF,0x3F,0xCF,0xF3,0xFC,0xFF,0x3D,
+0xCF,0x9F,0xFE,0x07,0xFF,0xAF,0xEB,0xFE,
+0xFD,0xBF,0xEF,0xEB,0xFA,0xFF,0xAF,0xEB,
+0xFA,0xFE,0xBF,0xAF,0xFB,0xFE,0x3F,0xFB,
+0x9B,0xFF,0x7F,0xDF,0xFF,0xF3,0xFE,0xFF,
+0xDE,0xF7,0xBF,0x7B,0xDE,0xF7,0xBD,0xEF,
+0x7B,0xFE,0xFF,0xFF,0xDF,0x3F,0xFE,0xFF,
+0xB7,0xFF,0xEF,0xF7,0xFF,0xBF,0xED,0xFE,
+0xDF,0xB7,0xED,0xFB,0x7E,0xDF,0xFF,0xFF,
+0xFF,0xFD,0x5F,0xEF,0xEB,0xFA,0xFE,0xF5,
+0xBF,0x6F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFE,0xF8,0xFF,0xA8,0xFF,
+0xFF,0xBF,0xEF,0xFB,0x6A,0xFB,0xB7,0xEF,
+0xFB,0xFF,0xBF,0xEF,0xFB,0xFE,0xFF,0xBF,
+0xEF,0xFB,0xFF,0xE0,0xFF,0xFF,0xFD,0x7F,
+0x5C,0xD7,0x7D,0xDF,0xF3,0x5C,0xF5,0xCD,
+0x73,0x5E,0xD7,0xB5,0xFD,0x7F,0xEF,0xFF,
+0xDB,0xFF,0xFF,0xE2,0xF8,0xBE,0x2F,0x8F,
+0xE7,0xF8,0xBE,0x6B,0xE2,0xF8,0xBE,0x2F,
+0x8B,0xE2,0xF9,0xFE,0x7F,0xE7,0xFF,0xD7,
+0xF5,0xFD,0x7F,0xFF,0xF7,0xF5,0xFD,0x7F,
+0xD7,0xF5,0xFD,0x7F,0x5F,0xD7,0xF5,0xFF,
+0xFF,0xFF,0x8F,0xFF,0xAF,0xEB,0xFA,0xFF,
+0xFF,0xBF,0xEB,0xFA,0xFF,0x2F,0xEB,0xFA,
+0xFE,0xBF,0xAF,0xEB,0xFF,0xFF,0xFE,0x5F,
+0xFF,0x5F,0xFF,0xFF,0xFD,0xFF,0xFF,0xD7,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xBF,0xFE,0xB7,0xFD,
+0xFF,0x7E,0xDF,0xF7,0xAD,0xFF,0x7F,0xF7,
+0xFD,0xFF,0x7F,0xDF,0xF7,0xFD,0xFF,0x7F,
+0xF6,0x7F,0xFF,0xFF,0xFF,0xDB,0xF6,0xFC,
+0xAF,0xFF,0xFF,0xFF,0xFF,0xF7,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xEC,0xBF,0xFF,
+0xAF,0xEB,0xFA,0xF6,0xAB,0x8F,0xEB,0xFA,
+0xF7,0xA5,0xEB,0xFA,0xBE,0xBF,0xAF,0xEB,
+0xFA,0xFF,0x6D,0xFF,0xFF,0x7F,0xDF,0x33,
+0xDD,0xFF,0x7F,0xFE,0xF7,0xFC,0x7F,0xFB,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xA9,
+0xFF,0xFD,0xFF,0xFF,0xFE,0xFF,0xFF,0xDF,
+0xFF,0xFF,0xEF,0xEF,0xFD,0xFF,0x7F,0xFF,
+0xFF,0xFF,0xFF,0xFE,0xA7,0xFF,0xFF,0xFF,
+0x77,0xDF,0xF7,0xFD,0x9F,0x7F,0xFE,0x77,
+0xEF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xAF,0xBF,0xAF,0xFF,0xF9,0xBE,0xBF,
+0x8F,0xFB,0xFE,0xFE,0xEF,0xFB,0xFE,0xFF,
+0xBF,0xEF,0xFB,0xFF,0xFF,0xFD,0xDF,0x6F,
+0xEF,0xFF,0x7F,0xFF,0xBF,0xBF,0xDF,0xFF,
+0xFC,0xFF,0xDF,0xF7,0xFD,0xEF,0x7F,0xDF,
+0xFF,0xFF,0xFF,0x3F,0xF6,0xFF,0xCF,0xFF,
+0xDB,0xFB,0xF7,0xFF,0xEB,0x7A,0xFF,0xFF,
+0xFF,0xBF,0xEF,0xFB,0xFF,0xFF,0xFF,0xFE,
+0x6D,0xFD,0xFF,0x5F,0xFB,0xFF,0xFF,0xF7,
+0xFF,0x5F,0xF5,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xF8,0xFF,0xFB,0xFF,
+0xFF,0xFD,0xFF,0xFF,0xFF,0xFF,0xE7,0xF6,
+0xBF,0xFF,0xFF,0xFF,0xFF,0xFB,0xFF,0xFF,
+0xFF,0xC9,0xFF,0xFF,0xFF,0xBD,0xFF,0xBF,
+0xAF,0xEF,0xEF,0x3F,0xD1,0xFC,0x7F,0xFB,
+0xC7,0xFF,0xFF,0xFF,0xFF,0xFF,0xE3,0xFF,
+0xFF,0xFF,0xFF,0xFD,0xFF,0xFF,0x77,0xFF,
+0xDF,0xB7,0xFD,0xF7,0xFD,0xF7,0xFF,0xFF,
+0xFF,0xFF,0xFF,0x57,0xFF,0xF7,0xA5,0xFD,
+0x3F,0xDF,0xBF,0xBF,0xFE,0x7F,0xFF,0xFF,
+0xFF,0xDF,0xFA,0xFD,0xFF,0xFF,0xFF,0xFE,
+0x87,0xFF,0xE9,0xFF,0xFE,0xEF,0xBF,0xEF,
+0xFE,0xFE,0xFF,0xEF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFA,0x9F,0xFF,0x3F,
+0xFF,0xFD,0xFD,0x57,0xDF,0xFD,0xF3,0xFF,
+0xDF,0xFD,0xFF,0x5F,0xDF,0xF5,0xFD,0xFF,
+0xFF,0xF9,0x8F,0xFF,0xFF,0xFF,0xEE,0x7F,
+0xFF,0xFF,0xBF,0x5E,0xFE,0xEC,0xFB,0x3F,
+0x7F,0x9F,0xEF,0xF9,0xFF,0xFF,0xCD,0x6B,
+0xFF,0xFF,0xFF,0xC5,0xF3,0xFC,0xFA,0x38,
+0xFF,0xAF,0x3F,0xEE,0x7F,0x9F,0xFF,0xD9,
+0xFF,0xFF,0xFD,0x7A,0xF7,0xFF,0xF3,0xFF,
+0xAF,0x6F,0xDB,0xF2,0xB9,0xE9,0xFB,0xFF,
+0xFF,0xFF,0xFE,0xFF,0xFF,0xEF,0xFF,0xFB,
+0xC5,0xBF,0xFF,0xEF,0xFF,0x5E,0xB7,0xAD,
+0xCD,0x79,0x7C,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFD,0x93,0xFF,0xEF,
+0xEA,0xFE,0xBF,0xEF,0x5B,0xD2,0xCD,0xF5,
+0x6D,0x77,0xDF,0xF7,0xFD,0xFF,0x7F,0xDF,
+0xFF,0xFF,0x66,0xFF,0xD5,0x65,0x7D,0x5F,
+0x75,0x9D,0x65,0x7F,0xD6,0xFB,0x4F,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF6,0xC7,
+0xFF,0xBF,0xEF,0xFA,0xFE,0xFF,0xBF,0xEB,
+0xFF,0xDF,0xFF,0x7E,0xFF,0xFF,0xEF,0xFD,
+0x7E,0xD7,0xFF,0x78,0xDF,0xFF,0x5F,0xDF,
+0xF5,0xBF,0x7F,0xDF,0xC5,0xFF,0x3F,0xF6,
+0x7E,0xFF,0x0F,0xEF,0xF2,0x3E,0xBF,0xFF,
+0xFB,0x3F,0xFF,0xFB,0x7F,0xFF,0xB3,0xFE,
+0xFB,0xF6,0xFD,0xFF,0xDA,0xF7,0xFD,0xFF,
+0x7F,0xDF,0xF7,0xBF,0xFF,0xFA,0x7F,0xFF,
+0xFF,0xFF,0xFF,0x9F,0xFF,0xF3,0xDC,0xF9,
+0xBF,0xCE,0xE7,0xF9,0xFE,0x7F,0x9F,0xE7,
+0xFF,0xFF,0xE2,0x7F,0xFE,0xFF,0xBF,0xEF,
+0xEB,0xFA,0xFF,0x9F,0x67,0x1E,0xFF,0x8F,
+0xE7,0xF8,0xFE,0x7F,0x8F,0xEF,0xFF,0xBD,
+0xBF,0xFF,0xFB,0xFF,0xFF,0xDF,0xF7,0xFF,
+0xFC,0xFF,0xBF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFD,0xB3,0xFF,0xFF,0xEF,
+0xFF,0xFF,0xBF,0xED,0xFF,0xFB,0xEE,0xFE,
+0xFF,0xFF,0xEF,0xFF,0xFE,0xFF,0xFF,0xFF,
+0xFF,0xB5,0xFF,0xB7,0xFD,0xFD,0x6E,0xFF,
+0xFF,0xFE,0xFD,0x2F,0xD8,0xFE,0xBF,0x8F,
+0xEB,0xF9,0xFE,0x3F,0xFF,0xFA,0xCF,0xFF,
+0xE7,0xD9,0xFA,0xBF,0xDF,0x77,0xFC,0xFB,
+0x3F,0xAB,0xFE,0xFF,0xBF,0xEF,0xFB,0xFE,
+0xFF,0xFF,0xEE,0x1F,0xFF,0xDF,0xF7,0xFF,
+0xFF,0xFF,0x5F,0x97,0x35,0xBF,0x5E,0xFE,
+0xBF,0xEF,0xFF,0xF7,0xFD,0xFF,0xFF,0xFA,
+0xBF,0xFF,0xBE,0x6F,0x9F,0xE7,0xF8,0xBE,
+0x2F,0x8B,0x66,0x94,0x7D,0x9D,0xE7,0xF9,
+0xFE,0x7F,0x9F,0xE7,0xF1,0x7F,0xFF,0xFF,
+0xFF,0xF7,0xF5,0xFD,0x7F,0x5F,0xFB,0xFD,
+0x9E,0xFF,0xFB,0xFE,0xFF,0xFF,0xEF,0xFF,
+0xFF,0xA0,0xFF,0xFF,0xFF,0xBF,0xEF,0xEB,
+0xFA,0xFE,0xBF,0xB7,0xF7,0xF7,0xFF,0xFF,
+0xFD,0xFF,0xFF,0xFF,0xFF,0xFF,0xDD,0xFF,
+0xFD,0xFF,0xFF,0xFF,0xD7,0xFF,0xFF,0xFF,
+0x7F,0xF5,0xFF,0xFF,0xEF,0xFF,0xFF,0xFF,
+0xBF,0xFF,0xFF,0xAB,0xFE,0xFB,0xFE,0xFF,
+0xF7,0xAF,0xFF,0xFF,0xDE,0xF7,0xEB,0x5F,
+0xDF,0xF7,0xFD,0xFF,0x7F,0xDF,0xFF,0xFF,
+0xB3,0xFF,0xC9,0xFE,0xFF,0xFF,0xFF,0xFF,
+0xD6,0xFF,0xFF,0xCB,0xFF,0xFF,0xDF,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFC,0x8F,0xFF,0xBA,
+0xBE,0xBF,0xAF,0xEB,0x78,0xFE,0xB7,0xAD,
+0x3A,0xFE,0xB7,0xAF,0xEB,0x7A,0xFE,0xBF,
+0xAF,0xFF,0x9F,0xFF,0xFF,0xDF,0xFC,0xFF,
+0xFF,0xFE,0xC3,0xFE,0xFF,0xFF,0x33,0xFC,
+0xFF,0xBF,0xDF,0xF3,0xFF,0xFF,0xBB,0x9F,
+0xFF,0xFF,0xFF,0xEB,0xDF,0xFF,0xFF,0xAF,
+0xF7,0x6F,0xF9,0xBF,0xEF,0xFD,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xE3,0x7F,0xFF,0xFF,0xFF,
+0xFB,0xFF,0xFF,0xBF,0xFD,0xFB,0xF7,0xFF,
+0xDF,0xF7,0xFF,0xFE,0xEF,0x5F,0xBD,0xFF,
+0xFA,0xFF,0xF8,0xFF,0xBF,0xAF,0xFB,0xFE,
+0xFE,0x3F,0xEF,0xE8,0xFF,0xDF,0xF3,0xFD,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xED,0xFF,0xFB,
+0xFD,0xFF,0xAF,0xFF,0xFF,0xFE,0xFE,0xBF,
+0xDB,0xFF,0xFF,0xFF,0xBF,0xFF,0xDF,0xFF,
+0xFD,0xFF,0xCB,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xBF,0x6F,0xFF,0x7F,0xB7,0xB3,0xFF,0xFF,
+0xDF,0xFF,0xFB,0xEF,0xFF,0xFF,0xFF,0x07,
+0xFF,0xFB,0xFF,0xFF,0xFF,0xED,0xFF,0xF5,
+0x7C,0xFF,0x7F,0xFE,0xFF,0xFF,0xEF,0xCF,
+0xFF,0xFB,0xFF,0xFF,0x2F,0xFF,0xFF,0xFF,
+0xFF,0xF3,0xFF,0xFB,0xFF,0xFE,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xBF,0xFF,0xFF,0xFF,
+0xFD,0x1B,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFE,0x7C,0xFF,0xFF,0xFF,0xFF,
+0xEF,0xFF,0xFF,0xFF,0xFF,0xFB,0xBF,0x7F,
+0xFD,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xDB,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFD,
+0xFF,0xFF,0xF0,0x7F,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFB,0xFF,0xDF,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFD,0xBF,0xFE,
+0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xEF,0xFE,0xFF,0xBF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xEF,0xFA,0xB5,0xFF,0xFF,0xFF,
+0xF7,0xF7,0xFF,0xFF,0xFF,0xFF,0xDF,0xFB,
+0xFC,0xFF,0xFF,0xFE,0xFF,0x7F,0xDF,0xBF,
+0xFF,0xCB,0xBF,0xF9,0xFE,0x7F,0x9F,0xE7,
+0xF9,0xFE,0x7F,0x97,0xE1,0xFE,0x79,0x9F,
+0xE7,0xFD,0xFE,0x7F,0xDF,0xFE,0x37,0xFF,
+0xFB,0xDE,0xDE,0xBD,0xEF,0xF3,0xFE,0xFB,
+0xAF,0xEB,0xFE,0xFF,0xFF,0xCF,0xFF,0xFE,
+0xFF,0xBF,0xFF,0x8F,0xFF,0xEF,0xFB,0xFE,
+0xFF,0xBF,0xE7,0xF9,0x5E,0x7F,0xEF,0xFB,
+0xDA,0xFF,0xBF,0xEF,0xFB,0xFE,0xFF,0xFD,
+0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xDF,
+0xFF,0xFF,0x7F,0xFF,0xFF,0xF7,0xFB,0x7F,
+0xFF,0xFF,0xFF,0xFF,0xFC,0x3F,0xFF,0xBF,
+0xEF,0xFB,0xFE,0xFF,0xBF,0xEF,0x7B,0x7F,
+0xBF,0xEF,0xFB,0xFE,0xFF,0xB5,0xEF,0xFB,
+0xBF,0xFA,0x7F,0xFC,0xFF,0x3F,0xCF,0xF3,
+0xFC,0xFF,0x3F,0xCF,0xBC,0xFF,0x3F,0xEF,
+0xF3,0xFC,0xFE,0x3F,0xCF,0xFF,0xEE,0xEF,
+0xFB,0xFE,0xFF,0xBF,0xEF,0xFB,0x6A,0xD7,
+0xB7,0xFB,0xF8,0xFF,0xB7,0xEF,0xBA,0xFE,
+0xFF,0xBF,0x7F,0xE9,0xFF,0xF9,0x7E,0x5F,
+0x97,0xE5,0xF9,0xFE,0x7F,0xBF,0xF9,0x7E,
+0x5F,0x9F,0xE5,0xFB,0xFE,0x5F,0xB7,0xFF,
+0xA3,0xFF,0xF7,0xFD,0xFF,0x7F,0xDF,0xF7,
+0xFD,0xFF,0x5E,0xF7,0x7D,0xFF,0x77,0xDF,
+0xF7,0xFD,0xFF,0x7F,0xFF,0xD7,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFD,0xDF,0xFB,0x7F,
+0xFF,0xFF,0xEF,0xFF,0xFE,0xFB,0xFF,0xFF,
+0xBF,0xFE,0x8F,0xFF,0xDF,0xF7,0xFD,0xFD,
+0x7F,0xDF,0xF7,0xFD,0x3E,0xDF,0xF5,0xBD,
+0xFF,0x7F,0xDF,0xF7,0xFD,0xF7,0xFF,0x9F,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFD,0xFF,0xBE,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFD,0x3F,0xFF,0xDF,0xF7,
+0xFD,0xFF,0x7F,0xDF,0xF7,0xFD,0xFF,0xCF,
+0x77,0xFC,0xFF,0x5F,0xDF,0xF7,0xFD,0xFF,
+0xF4,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFD,0xFF,0xFF,0xFF,0xEE,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xED,0xFB,0xFF,0xFF,0xBF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xE9,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFB,0xFF,0xFF,0xFF,0xD3,0xFF,0xFF,
+0xBF,0x3F,0xFB,0xFF,0xFF,0xFF,0xFB,0xF3,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0xF7,
+0xFF,0xFF,0xFF,0xFF,0x17,0xFF,0xFF,0xFF,
+0xDF,0xFF,0xFD,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xDF,0xDF,0xFF,0xFD,0xFF,0xFF,0xDF,0xF7,
+0xFF,0x4F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFD,
+0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0x9F,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0xFD,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0xFF,
+0xFF,0xFF,0x7A,0x3F,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF2,
+0x7F,0xFF,0xFB,0xFE,0xFF,0xBF,0xEF,0xF8,
+0xFE,0xFF,0xBF,0xFB,0xFE,0xFF,0x8F,0xEC,
+0xFB,0xFE,0xFF,0xBF,0xF8,0xF7,0xFE,0xFF,
+0xBF,0xEF,0xFB,0xFE,0xFD,0xBF,0xCF,0xEC,
+0xFF,0x3F,0xEF,0xDB,0xF8,0xFF,0xBF,0xCF,
+0xFF,0xF9,0xFF,0xFF,0xBF,0xFF,0xFB,0xFF,
+0xFF,0xFF,0xEF,0xFB,0xDF,0xFF,0xFF,0xFF,
+0xFF,0xFF,0xBF,0xFF,0xFF,0xFF,0xBB,0xFF,
+0xEF,0xFB,0xFE,0xEF,0xBF,0xEE,0xEB,0xFB,
+0xFE,0xFF,0xEF,0xFE,0xEE,0xBF,0xFE,0xEB,
+0xFF,0xEF,0xFF,0x17,0xFF,0x7E,0xEB,0xBB,
+0xFE,0xBF,0xBE,0xFB,0xEF,0x5B,0xF7,0xBD,
+0xFB,0xCF,0xBF,0xBF,0xBB,0xFB,0x7E,0xCC,
+0xEF,0xFF
+};
index 46b190e9b955c99ad747266cd9a4e0e4edcc869e..9de66992bbb704c0ba96375d5f923e4ad11fb83b 100644 (file)
@@ -201,12 +201,14 @@ static int usb_cpia_set_sensor_fps(struct usb_device *dev, int sensorbaserate, i
                (sensorbaserate << 8) + sensorclkdivisor, 0, NULL, 0, HZ);
 }
 
+#ifdef NOTUSED
 static int usb_cpia_grab_frame(struct usb_device *dev, int streamstartline)
 {
        return usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
                USB_REQ_CPIA_GRAB_FRAME, USB_TYPE_VENDOR | USB_RECIP_DEVICE,
                streamstartline << 8, 0, NULL, 0, HZ);
 }
+#endif
 
 static int usb_cpia_upload_frame(struct usb_device *dev, int forceupload)
 {
@@ -514,23 +516,24 @@ out:
 /*
  * Make all of the blocks of data contiguous
  */
-static int cpia_compress_isochronous(struct usb_cpia *cpia, struct usb_isoc_desc *isodesc)
+static int cpia_compress_isochronous(struct usb_cpia *cpia, urb_t *urb)
 {
        unsigned char *cdata, *data;
        int i, totlen = 0;
 
-       cdata = isodesc->data;
        data = cpia->scratch + cpia->scratchlen;
-       for (i = 0; i < isodesc->frame_count; i++) {
-               int n = isodesc->frames[i].frame_length;
-               int st = isodesc->frames[i].frame_status;
+       for (i = 0; i < urb->number_of_packets; i++) {
+               int n = urb->iso_frame_desc[i].actual_length;
+               int st = urb->iso_frame_desc[i].status;
+               
+               cdata = urb->transfer_buffer + urb->iso_frame_desc[i].offset;
 
                if (st && debug >= 1)
                        printk(KERN_DEBUG "cpia data error: [%d] len=%d, status=%X\n",
                                i, n, st);
 
                if ((cpia->scratchlen + n) > SCRATCH_BUF_SIZE) {
-                       printk(KERN_DEBUG "cpia: scratch buf overflow!\n");
+                       printk(KERN_DEBUG "cpia: scratch buf overflow!scr_len: %d, n: %d\n",cpia->scratchlen, n );
                        return totlen;
                }
 
@@ -540,30 +543,33 @@ static int cpia_compress_isochronous(struct usb_cpia *cpia, struct usb_isoc_desc
                        totlen += n;
                        cpia->scratchlen += n;
                }
-               cdata += isodesc->frame_size;
        }
 
        return totlen;
 }
 
-static int cpia_isoc_irq(int status, void *__buffer, int len, void *isocdesc)
+static void cpia_isoc_irq(struct urb *urb)
 {
-       void *dev_id = ((struct usb_isoc_desc *)isocdesc)->context;
-       struct usb_cpia *cpia = (struct usb_cpia *)dev_id;
+       int len;
+       struct usb_cpia *cpia = urb->context;
        struct cpia_sbuf *sbuf;
        int i;
 
+#if 0
+printk("cpia_isoc_irq: %p status %d, errcount = %d, length = %d\n", urb, urb->status, urb->error_count, urb->actual_length);
+#endif
+
        if (!cpia->streaming) {
                if (debug >= 1)
                        printk(KERN_DEBUG "cpia: oops, not streaming, but interrupt\n");
-               return 0;
+               return;
        }
        
        sbuf = &cpia->sbuf[cpia->cursbuf];
-       usb_kill_isoc(sbuf->isodesc);
+       // usb_kill_isoc(sbuf->isodesc);
 
        /* Copy the data received into our scratch buffer */
-       len = cpia_compress_isochronous(cpia, sbuf->isodesc);
+       len = cpia_compress_isochronous(cpia, urb);
 
        /* If we don't have a frame we're current working on, complain */
        if (cpia->scratchlen) {
@@ -574,22 +580,23 @@ static int cpia_isoc_irq(int status, void *__buffer, int len, void *isocdesc)
                        cpia_parse_data(cpia);
        }
 
-       for (i = 0; i < FRAMES_PER_DESC; i++)
-               sbuf->isodesc->frames[i].frame_length = FRAME_SIZE_PER_DESC;
-
+       for (i = 0; i < FRAMES_PER_DESC; i++) {
+               sbuf->urb->iso_frame_desc[i].status = 0;
+               sbuf->urb->iso_frame_desc[i].actual_length = 0;
+       }
        /* Move to the next sbuf */
        cpia->cursbuf = (cpia->cursbuf + 1) % CPIA_NUMSBUF;
 
        /* Reschedule this block of Isochronous desc */
-       usb_run_isoc(sbuf->isodesc, cpia->sbuf[cpia->cursbuf].isodesc);
+       // usb_run_isoc(sbuf->isodesc, cpia->sbuf[cpia->cursbuf].isodesc);
 
-       return -1;
+       return;
 }
 
 static int cpia_init_isoc(struct usb_cpia *cpia)
 {
        struct usb_device *dev = cpia->dev;
-       struct usb_isoc_desc *id;
+       urb_t *urb;
        int fx, err;
 
        cpia->compress = 0;
@@ -598,57 +605,63 @@ static int cpia_init_isoc(struct usb_cpia *cpia)
        cpia->scratchlen = 0;
 
        /* Alternate interface 3 is is the biggest frame size */
-       if (usb_set_interface(cpia->dev, 1, 3) < 0) {
+       if (usb_set_interface(cpia->dev, cpia->iface, 3) < 0) {
                printk(KERN_ERR "usb_set_interface error\n");
                return -EBUSY;
        }
 
        /* We double buffer the Iso lists */
-       err = usb_init_isoc(dev, usb_rcvisocpipe(dev, 1), FRAMES_PER_DESC,
-               cpia, &cpia->sbuf[0].isodesc);
-       if (err) {
+//     err = usb_init_isoc(dev, usb_rcvisocpipe(dev, 1), FRAMES_PER_DESC, cpia, &cpia->sbuf[0].isodesc);
+       urb = usb_alloc_urb(FRAMES_PER_DESC);
+       
+       if (!urb) {
                printk(KERN_ERR "cpia_init_isoc: usb_init_isoc ret %d\n",
-                       err);
+                       0);
                return -ENOMEM;
        }
-
-       err = usb_init_isoc(dev, usb_rcvisocpipe(dev, 1), FRAMES_PER_DESC,
-               cpia, &cpia->sbuf[1].isodesc);
-       if (err) {
+       cpia->sbuf[0].urb = urb;
+       urb->dev = dev;
+       urb->context = cpia;
+       urb->pipe = usb_rcvisocpipe(dev, 1);
+       urb->transfer_flags = USB_ISO_ASAP;
+       urb->transfer_buffer = cpia->sbuf[0].data;
+       urb->complete = cpia_isoc_irq;
+       urb->number_of_packets = FRAMES_PER_DESC;
+       urb->transfer_buffer_length = FRAME_SIZE_PER_DESC * FRAMES_PER_DESC;
+       for (fx = 0; fx < FRAMES_PER_DESC; fx++) {
+               urb->iso_frame_desc[fx].offset = FRAME_SIZE_PER_DESC * fx;
+               urb->iso_frame_desc[fx].length = FRAME_SIZE_PER_DESC;
+       }
+       urb = usb_alloc_urb(FRAMES_PER_DESC);
+       if (!urb) {
                printk(KERN_ERR "cpia_init_isoc: usb_init_isoc ret %d\n",
-                       err);
-               usb_free_isoc (cpia->sbuf[0].isodesc);
+                       0);
                return -ENOMEM;
        }
+       cpia->sbuf[1].urb = urb;
+       urb->dev = dev;
+       urb->context = cpia;
+       urb->pipe = usb_rcvisocpipe(dev, 1);
+       urb->transfer_flags = USB_ISO_ASAP;
+       urb->transfer_buffer = cpia->sbuf[1].data;
+       urb->complete = cpia_isoc_irq;
+       urb->number_of_packets = FRAMES_PER_DESC;
+       urb->transfer_buffer_length = FRAME_SIZE_PER_DESC * FRAMES_PER_DESC;
+       for (fx = 0; fx < FRAMES_PER_DESC; fx++) {
+               urb->iso_frame_desc[fx].offset = FRAME_SIZE_PER_DESC * fx;
+               urb->iso_frame_desc[fx].length = FRAME_SIZE_PER_DESC;
+       }
 
-       /* Set the Isoc. desc. parameters. */
-       /* First for desc. [0] */
-       id = cpia->sbuf[0].isodesc;
-       id->start_type = START_ASAP;
-       id->callback_frames = 10;       /* on every 10th frame */
-       id->callback_fn = cpia_isoc_irq;
-       id->data = cpia->sbuf[0].data;
-       id->buf_size = FRAME_SIZE_PER_DESC * FRAMES_PER_DESC;
-       for (fx = 0; fx < FRAMES_PER_DESC; fx++)
-               id->frames[fx].frame_length = FRAME_SIZE_PER_DESC;
-
-       /* and for desc. [1] */
-       id = cpia->sbuf[1].isodesc;
-       id->start_type = 0;             /* will follow the first desc. */
-       id->callback_frames = 10;       /* on every 10th frame */
-       id->callback_fn = cpia_isoc_irq;
-       id->data = cpia->sbuf[1].data;
-       id->buf_size = FRAME_SIZE_PER_DESC * FRAMES_PER_DESC;
-       for (fx = 0; fx < FRAMES_PER_DESC; fx++)
-               id->frames[fx].frame_length = FRAME_SIZE_PER_DESC;
-
-       err = usb_run_isoc(cpia->sbuf[0].isodesc, NULL);
+       cpia->sbuf[1].urb->next = cpia->sbuf[0].urb;
+       cpia->sbuf[0].urb->next = cpia->sbuf[1].urb;
+       
+       err = usb_submit_urb(cpia->sbuf[0].urb);
        if (err)
-               printk(KERN_ERR "cpia_init_isoc: usb_run_isoc ret %d\n",
+               printk(KERN_ERR "cpia_init_isoc: usb_run_isoc(0) ret %d\n",
                        err);
-       err = usb_run_isoc(cpia->sbuf[1].isodesc, cpia->sbuf[0].isodesc);
+       err = usb_submit_urb(cpia->sbuf[1].urb);
        if (err)
-               printk(KERN_ERR "cpia_init_isoc: usb_run_isoc ret %d\n",
+               printk(KERN_ERR "cpia_init_isoc: usb_run_isoc(1) ret %d\n",
                        err);
 
        cpia->streaming = 1;
@@ -668,20 +681,20 @@ static void cpia_stop_isoc(struct usb_cpia *cpia)
        }
 
        /* Set packet size to 0 */
-       if (usb_set_interface(cpia->dev, 1, 0) < 0) {
+       if (usb_set_interface(cpia->dev, cpia->iface, 0) < 0) {
                printk(KERN_ERR "usb_set_interface error\n");
                return /* -EINVAL */;
        }
 
        /* Unschedule all of the iso td's */
-       usb_kill_isoc(cpia->sbuf[1].isodesc);
-       usb_kill_isoc(cpia->sbuf[0].isodesc);
+       usb_unlink_urb(cpia->sbuf[1].urb);
+       usb_unlink_urb(cpia->sbuf[0].urb);
 
        cpia->streaming = 0;
 
        /* Delete them all */
-       usb_free_isoc(cpia->sbuf[1].isodesc);
-       usb_free_isoc(cpia->sbuf[0].isodesc);
+       usb_free_urb(cpia->sbuf[1].urb);
+       usb_free_urb(cpia->sbuf[0].urb);
 }
 
 static int cpia_new_frame(struct usb_cpia *cpia, int framenum)
@@ -1197,12 +1210,8 @@ static int usb_cpia_configure(struct usb_cpia *cpia)
        struct usb_device *dev = cpia->dev;
        unsigned char version[4];
 
-       /* claim interface 1 */
-       usb_driver_claim_interface(&cpia_driver,
-               &dev->actconfig->interface[1], cpia);
-
-       /* Set altsetting 0 on interface 1 */
-       if (usb_set_interface(dev, 1, 0) < 0) {
+       /* Set altsetting 0 */
+       if (usb_set_interface(dev, cpia->iface, 0) < 0) {
                printk(KERN_ERR "usb_set_interface error\n");
                return -EBUSY;
        }
@@ -1273,7 +1282,7 @@ static int usb_cpia_configure(struct usb_cpia *cpia)
 error:
        video_unregister_device(&cpia->vdev);
        usb_driver_release_interface(&cpia_driver,
-               &dev->actconfig->interface[1]);
+               &dev->actconfig->interface[0]);
 
        kfree(cpia);
 
@@ -1314,6 +1323,7 @@ static void * cpia_probe(struct usb_device *dev, unsigned int ifnum)
        memset(cpia, 0, sizeof(*cpia));
 
        cpia->dev = dev;
+       cpia->iface = interface->bInterfaceNumber;
 
        if (!usb_cpia_configure(cpia)) {
            cpia->user=0; 
@@ -1329,7 +1339,7 @@ static void cpia_disconnect(struct usb_device *dev, void *ptr)
        video_unregister_device(&cpia->vdev);
 
        usb_driver_release_interface(&cpia_driver,
-               &cpia->dev->actconfig->interface[1]);
+               &cpia->dev->actconfig->interface[0]);
 
        /* Free the memory */
        kfree(cpia);
index 53ed688ead8dc7738498e72da4d15a10fc03001d..8a834285324f013deaf799aeb980855af06ba377 100644 (file)
@@ -137,7 +137,7 @@ struct usb_device;
 
 struct cpia_sbuf {
        char *data;
-       struct usb_isoc_desc *isodesc;
+       urb_t *urb;
 };
 
 enum {
@@ -179,6 +179,8 @@ struct usb_cpia {
        /* Device structure */
        struct usb_device *dev;
 
+       unsigned char iface;
+
        struct semaphore lock;
        int user;               /* user count for exclusive use */
 
index 264b805e0b753bfcc7725487b844b76d640198f3..e55d28afdb81ee934428c51759e440d5ef4f5bda 100644 (file)
  *
  *
  *
- *  $Id: dabusb.c,v 1.26 1999/12/13 08:40:23 fliegl Exp $
+ *  $Id: dabusb.c,v 1.30 1999/12/17 17:50:58 fliegl Exp $
  *
  */
 
 /*****************************************************************************/
 
-#include <linux/config.h>
 #include <linux/module.h>
 #include <linux/socket.h>
 #include <linux/miscdevice.h>
 #include <linux/list.h>
 #include <linux/vmalloc.h>
 #include <linux/slab.h>
+#include <linux/init.h>
 #include <asm/uaccess.h>
 #include <asm/atomic.h>
-//#include <linux/spinlock.h>
 #include <linux/delay.h>
 
 #include "usb.h"
 
 #include "dabusb.h"
-#include "bitstream.c"
-#include "firmware.c"
+#include "bitstream.h"
+#include "firmware.h"
 /* --------------------------------------------------------------------- */
 
 #define NRDABUSB 4
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,0)
+#define __init 
+#define __exit
+#endif
+
 /*-------------------------------------------------------------------*/
 static dabusb_t dabusb[NRDABUSB];
 static int buffers = 256;
@@ -60,10 +64,8 @@ static int dabusb_add_buf_tail (pdabusb_t s, struct list_head *dst, struct list_
 
        spin_lock_irqsave (&s->lock, flags);
 
-//      printk(KERN_DEBUG MODSTR"dabusb_add_buf_tail %p %p\n",src->next, dst->next);
        if (list_empty (src)) {
                // no elements in source buffer
-               //              printk(KERN_DEBUG MODSTR"source list empty\n");
                ret = -1;
                goto err;
        }
@@ -75,6 +77,7 @@ static int dabusb_add_buf_tail (pdabusb_t s, struct list_head *dst, struct list_
        return ret;
 }
 /*-------------------------------------------------------------------*/
+#ifdef DEBUG
 static void dump_urb (purb_t purb)
 {
        printk ("urb                   :%p\n", purb);
@@ -94,20 +97,24 @@ static void dump_urb (purb_t purb)
        printk ("context               :%p\n", purb->context);
        printk ("complete              :%p\n", purb->complete);
 }
-
+#endif
 /*-------------------------------------------------------------------*/
 static int dabusb_cancel_queue (pdabusb_t s, struct list_head *q)
 {
        unsigned long flags;
        struct list_head *p;
        pbuff_t b;
+
+#ifdef DEBUG
        printk (KERN_DEBUG MODSTR "dabusb_cancel_queue\n");
+#endif
        spin_lock_irqsave (&s->lock, flags);
+
        for (p = q->next; p != q; p = p->next) {
-//              printk("p:%p\n",p);
                b = list_entry (p, buff_t, buff_list);
-//              printk("buff:%p\n",b);
-               //              dump_urb(b->purb);
+#ifdef DEBUG
+               dump_urb(b->purb);
+#endif
                usb_unlink_urb (b->purb);
        }
        spin_unlock_irqrestore (&s->lock, flags);
@@ -119,11 +126,15 @@ static int dabusb_free_queue (struct list_head *q)
        struct list_head *tmp;
        struct list_head *p;
        pbuff_t b;
+
+#ifdef DEBUG
        printk (KERN_DEBUG MODSTR "dabusb_free_queue\n");
+#endif
        for (p = q->next; p != q;) {
-//              printk("%p\n",p);
                b = list_entry (p, buff_t, buff_list);
-//              dump_urb(b->purb);
+#ifdef DEBUG
+               dump_urb(b->purb);
+#endif
                if (b->purb->transfer_buffer)
                        kfree (b->purb->transfer_buffer);
                if (b->purb)
@@ -138,7 +149,9 @@ static int dabusb_free_queue (struct list_head *q)
 /*-------------------------------------------------------------------*/
 static int dabusb_free_buffers (pdabusb_t s)
 {
+#ifdef DEBUG
        printk (KERN_DEBUG MODSTR "dabusb_free_buffers\n");
+#endif
        dabusb_free_queue (&s->free_buff_list);
        dabusb_free_queue (&s->rec_buff_list);
        s->got_mem = 0;
@@ -153,7 +166,10 @@ static void dabusb_iso_complete (purb_t purb)
        int len;
        int dst = 0;
        void *buf = purb->transfer_buffer;
-//      printk(KERN_DEBUG MODSTR"dabusb_iso_complete\n");
+
+#ifdef DEBUG_ALL
+       printk(KERN_DEBUG MODSTR"dabusb_iso_complete\n");
+#endif
        if (purb->status != USB_ST_URB_KILLED) {
                unsigned int pipe = usb_rcvisocpipe (purb->dev, _DABUSB_ISOPIPE);
                int pipesize = usb_maxpacket (purb->dev, pipe, usb_pipeout (pipe));
@@ -188,8 +204,12 @@ static int dabusb_alloc_buffers (pdabusb_t s)
        int transfer_buffer_length = packets * pipesize;
        int i;
        int len = sizeof (urb_t) + packets * sizeof (iso_packet_descriptor_t);
+
+#ifdef DEBUG
        printk (KERN_DEBUG MODSTR "dabusb_alloc_buffers len:%d pipesize:%d packets:%d transfer_buffer_len:%d\n",
                len, pipesize, packets, transfer_buffer_length);
+#endif
+
        while (buffers < (s->total_buffer_size << 10)) {
                b = (pbuff_t) kmalloc (sizeof (buff_t), GFP_KERNEL);
                if (!b) {
@@ -225,13 +245,14 @@ static int dabusb_alloc_buffers (pdabusb_t s)
                        b->purb->iso_frame_desc[i].offset = i * pipesize;
                        b->purb->iso_frame_desc[i].length = pipesize;
                }
-//              dump_urb(b->purb);
+
                buffers += transfer_buffer_length;
                list_add_tail (&b->buff_list, &s->free_buff_list);
        }
        s->got_mem = buffers;
 
        return 0;
+
 err:
        dabusb_free_buffers (s);
        return -ENOMEM;
@@ -239,10 +260,14 @@ err:
 /*-------------------------------------------------------------------*/
 static int dabusb_reset_pipe (struct usb_device *usbdev, unsigned int ep)
 {
+#ifdef DEBUG
        printk (KERN_DEBUG MODSTR "dabusb_reset_pipe\n");
+#endif
        if ((ep & ~0x80) >= 16)
                return -EINVAL;
+
        usb_settoggle (usbdev, ep & 0xf, !(ep & 0x80), 0);
+
        return 0;
 }
 /* --------------------------------------------------------------------- */
@@ -250,9 +275,14 @@ static int dabusb_submit_urb (pdabusb_t s, purb_t purb)
 {
        int ret;
        bulk_completion_context_t context;
+
        init_waitqueue_head (&context.wait);
        purb->context = &context;
-//      dump_urb(purb); 
+
+#ifdef DEBUG_ALL
+       dump_urb(purb);
+#endif
+
        ret = usb_submit_urb (purb);
        if (ret < 0) {
                printk (KERN_DEBUG MODSTR "dabusb_bulk: usb_submit_urb returned %d\n", ret);
@@ -262,6 +292,7 @@ static int dabusb_submit_urb (pdabusb_t s, purb_t purb)
        if (purb->status == USB_ST_URB_PENDING) {
                printk (KERN_ERR MODSTR "dabusb_usb_submit_urb: %p timed out\n", purb);
                usb_unlink_urb (purb);
+               dabusb_reset_pipe(purb->dev, purb->pipe);
                return -ETIMEDOUT;
        }
        return purb->status;
@@ -270,8 +301,11 @@ static int dabusb_submit_urb (pdabusb_t s, purb_t purb)
 static void dabusb_bulk_complete (purb_t purb)
 {
        pbulk_completion_context_t context = purb->context;
-//      printk(KERN_DEBUG MODSTR"dabusb_bulk_complete\n");
-       //      dump_urb(purb);
+
+#ifdef DEBUG_ALL
+       printk(KERN_DEBUG MODSTR"dabusb_bulk_complete\n");
+       dump_urb(purb);
+#endif
        wake_up (&context->wait);
 }
 
@@ -282,7 +316,9 @@ static int dabusb_bulk (pdabusb_t s, pbulk_transfer_t pb)
        urb_t urb;
        unsigned int pipe;
 
-//      printk(KERN_DEBUG MODSTR"dabusb_bulk\n");
+#ifdef DEBUG_ALL
+       printk(KERN_DEBUG MODSTR"dabusb_bulk\n");
+#endif
 
        if (!pb->pipe)
                pipe = usb_rcvbulkpipe (s->usbdev, 2);
@@ -323,7 +359,6 @@ static int dabusb_writemem (pdabusb_t s, int pos, unsigned char *data, int len)
        setup[5] = 0;
        setup[6] = len & 0xff;
        setup[7] = len >> 8;
-//      printk(KERN_DEBUG MODSTR"dabusb_control\n");
 
        memcpy (transfer_buffer, data, len);
 
@@ -342,7 +377,9 @@ static int dabusb_writemem (pdabusb_t s, int pos, unsigned char *data, int len)
 /* --------------------------------------------------------------------- */
 static int dabusb_8051_reset (pdabusb_t s, unsigned char reset_bit)
 {
-       //printk("dabusb_8051_reset: %d\n",reset_bit);
+#ifdef DEBUG
+       printk("dabusb_8051_reset: %d\n",reset_bit);
+#endif
        return dabusb_writemem (s, CPUCS_REG, &reset_bit, 1);
 }
 /* --------------------------------------------------------------------- */
@@ -350,11 +387,15 @@ static int dabusb_loadmem (pdabusb_t s, const char *fname)
 {
        int ret;
        PINTEL_HEX_RECORD ptr = firmware;
-       printk (KERN_DEBUG MODSTR "Enter dabusb_loadmem (internal)\n");
 
+#ifdef DEBUG
+       printk (KERN_DEBUG MODSTR "Enter dabusb_loadmem (internal)\n");
+#endif
        ret = dabusb_8051_reset (s, 1);
        while (ptr->Type == 0) {
-               //printk(KERN_ERR MODSTR"dabusb_writemem: %04X %p %d)\n", ptr->Address, ptr->Data, ptr->Length);
+#ifdef DEBUG_ALL
+               printk(KERN_ERR MODSTR"dabusb_writemem: %04X %p %d)\n", ptr->Address, ptr->Data, ptr->Length);
+#endif
                ret = dabusb_writemem (s, ptr->Address, ptr->Data, ptr->Length);
                if (ret < 0) {
                        printk (KERN_ERR MODSTR "dabusb_writemem failed (%04X %p %d)\n", ptr->Address, ptr->Data, ptr->Length);
@@ -363,7 +404,9 @@ static int dabusb_loadmem (pdabusb_t s, const char *fname)
                ptr++;
        }
        ret = dabusb_8051_reset (s, 0);
+#ifdef DEBUG
        printk (KERN_DEBUG MODSTR "dabusb_loadmem: exit\n");
+#endif
        return ret;
 }
 /* --------------------------------------------------------------------- */
@@ -374,7 +417,10 @@ static int dabusb_fpga_clear (pdabusb_t s, pbulk_transfer_t b)
        b->data[1] = 0;
        b->data[2] = 0;
        b->data[3] = 0;
+
+#ifdef DEBUG
        printk (KERN_DEBUG MODSTR "dabusb_fpga_clear\n");
+#endif
        return dabusb_bulk (s, b);
 }
 /* --------------------------------------------------------------------- */
@@ -385,7 +431,10 @@ static int dabusb_fpga_init (pdabusb_t s, pbulk_transfer_t b)
        b->data[1] = 0;
        b->data[2] = 0;
        b->data[3] = 0;
+
+#ifdef DEBUG
        printk (KERN_DEBUG MODSTR "dabusb_fpga_init\n");
+#endif
        return dabusb_bulk (s, b);
 }
 /* --------------------------------------------------------------------- */
@@ -396,7 +445,9 @@ static int dabusb_fpga_download (pdabusb_t s, const char *fname)
        int ret;
        unsigned char *buf = bitstream;
 
+#ifdef DEBUG
        printk (KERN_DEBUG MODSTR "Enter dabusb_fpga_download (internal)\n");
+#endif
        if (!b) {
                printk (KERN_ERR MODSTR "kmalloc(sizeof(bulk_transfer_t))==NULL\n");
                return -ENOMEM;
@@ -406,8 +457,9 @@ static int dabusb_fpga_download (pdabusb_t s, const char *fname)
        ret = dabusb_fpga_clear (s, b);
        mdelay (10);
        blen = buf[73] + (buf[72] << 8);
+#ifdef DEBUG
        printk (KERN_DEBUG MODSTR "Bitstream len: %i\n", blen);
-
+#endif
        b->data[0] = 0x2b;
        b->data[1] = 0;
        b->data[2] = 0;
@@ -427,7 +479,10 @@ static int dabusb_fpga_download (pdabusb_t s, const char *fname)
 
        ret = dabusb_fpga_init (s, b);
        kfree (b);
+
+#ifdef DEBUG
        printk (KERN_DEBUG MODSTR "exit dabusb_fpga_download\n");
+#endif
        return ret;
 }
 
@@ -438,10 +493,17 @@ static loff_t dabusb_llseek (struct file *file, loff_t offset, int origin)
 
 static int dabusb_stop (pdabusb_t s)
 {
+#ifdef DEBUG
        printk (KERN_DEBUG MODSTR "dabusb_stop\n");
+#endif
+
        s->state = _stopped;
        dabusb_cancel_queue (s, &s->rec_buff_list);
+
+#ifdef DEBUG
        printk (KERN_DEBUG MODSTR "pending_io: %d\n", s->pending_io.counter);
+#endif
+
        s->pending_io.counter = 0;
        return 0;
 }
@@ -449,7 +511,10 @@ static int dabusb_stop (pdabusb_t s)
 static int dabusb_startrek (pdabusb_t s)
 {
        if (!s->got_mem && s->state != _started) {
+#ifdef DEBUG
                printk (KERN_DEBUG MODSTR "dabusb_startrek\n");
+#endif
+
                if (dabusb_alloc_buffers (s) < 0)
                        return -ENOMEM;
                dabusb_stop (s);
@@ -463,10 +528,10 @@ static int dabusb_startrek (pdabusb_t s)
                int ret;
 
                while (!dabusb_add_buf_tail (s, &s->rec_buff_list, &s->free_buff_list)) {
-                       //printk("submitting: end:%p s->rec_buff_list:%p\n", s->rec_buff_list.prev, &s->rec_buff_list);
-
+#ifdef DEBUG_ALL
+                       printk("submitting: end:%p s->rec_buff_list:%p\n", s->rec_buff_list.prev, &s->rec_buff_list);
+#endif
                        end = list_entry (s->rec_buff_list.prev, buff_t, buff_list);
-                       //printk("pipesize:%d number_of_packets:%d\n",pipesize, end->purb->number_of_packets);                  
 
                        ret = usb_submit_urb (end->purb);
                        if (ret) {
@@ -477,7 +542,9 @@ static int dabusb_startrek (pdabusb_t s)
                        else
                                atomic_inc (&s->pending_io);
                }
-               //printk(KERN_DEBUG MODSTR"pending_io: %d\n",s->pending_io.counter);
+#ifdef DEBUG_ALL
+               printk(KERN_DEBUG MODSTR"pending_io: %d\n",s->pending_io.counter);
+#endif
        }
        return 0;
 }
@@ -491,7 +558,9 @@ static ssize_t dabusb_read (struct file *file, char *buf, size_t count, loff_t *
        pbuff_t b;
        purb_t purb = NULL;
 
-       //printk(KERN_DEBUG MODSTR"dabusb_read\n");
+#ifdef DEBUG_ALL
+       printk(KERN_DEBUG MODSTR"dabusb_read\n");
+#endif
 
        if (*ppos)
                return -ESPIPE;
@@ -499,39 +568,36 @@ static ssize_t dabusb_read (struct file *file, char *buf, size_t count, loff_t *
        if (s->remove_pending)
                return -EIO;
 
-//      down(&s->mutex);
-       if (!s->usbdev) {
-//              up(&s->mutex);
+
+       if (!s->usbdev)
                return -EIO;
-       }
 
        while (count > 0) {
                dabusb_startrek (s);
                if (list_empty (&s->rec_buff_list)) {
-                       printk (KERN_ERR MODSTR "shit... rec_buf_list is empty\n");
+                       printk (KERN_ERR MODSTR "error: rec_buf_list is empty\n");
                        goto err;
                }
                b = list_entry (s->rec_buff_list.next, buff_t, buff_list);
                purb = b->purb;
 
                if (purb->status == USB_ST_URB_PENDING) {
-                       //printk("after comp\n");
                        if (file->f_flags & O_NONBLOCK)         // return nonblocking
                         {
                                if (!ret)
                                        ret = -EAGAIN;
                                goto err;
                        }
-                       //printk("before sleep\n");
+
                        interruptible_sleep_on (&s->wait);
-                       //printk("after sleep\n");
+
                        if (signal_pending (current)) {
                                if (!ret)
                                        ret = -ERESTARTSYS;
                                goto err;
                        }
                        if (list_empty (&s->rec_buff_list)) {
-                               printk (KERN_ERR MODSTR "shit... still no buffer available.\n");
+                               printk (KERN_ERR MODSTR "error: still no buffer available.\n");
                                goto err;
                        }
                        s->readptr = 0;
@@ -540,7 +606,6 @@ static ssize_t dabusb_read (struct file *file, char *buf, size_t count, loff_t *
                        ret = -EIO;
                        goto err;
                }
-               //printk("get pointers %d %d %d\n", purb->actual_length, s->readptr, count);            
 
                rem = purb->actual_length - s->readptr;         // set remaining bytes to copy
 
@@ -549,7 +614,9 @@ static ssize_t dabusb_read (struct file *file, char *buf, size_t count, loff_t *
                else
                        cnt = count;
 
-               //printk("copy_to_user:%p %p %d\n",buf, purb->transfer_buffer + s->readptr, cnt);
+#ifdef DEBUG_ALL
+               printk("copy_to_user:%p %p %d\n",buf, purb->transfer_buffer + s->readptr, cnt);
+#endif
 
                if (copy_to_user (buf, purb->transfer_buffer + s->readptr, cnt)) {
                        printk (KERN_ERR MODSTR "read: copy_to_user failed\n");
@@ -565,7 +632,6 @@ static ssize_t dabusb_read (struct file *file, char *buf, size_t count, loff_t *
 
                if (s->readptr == purb->actual_length) {
                        // finished, take next buffer
-                       //printk("next buffer...\n");
                        if (dabusb_add_buf_tail (s, &s->free_buff_list, &s->rec_buff_list))
                                printk (KERN_ERR MODSTR "read: dabusb_add_buf_tail failed");
                        s->readptr = 0;
@@ -583,28 +649,38 @@ static int dabusb_open (struct inode *inode, struct file *file)
        if (devnum < DABUSB_MINOR || devnum > (DABUSB_MINOR + NRDABUSB))
                return -EIO;
 
+       MOD_INC_USE_COUNT;
        s = &dabusb[devnum - DABUSB_MINOR];
+
        printk (KERN_DEBUG MODSTR "dabusb_open\n");
        down (&s->mutex);
+
        while (!s->usbdev || s->opened) {
                up (&s->mutex);
+
                if (file->f_flags & O_NONBLOCK) {
+                       MOD_DEC_USE_COUNT;
                        return -EBUSY;
                }
                schedule_timeout (HZ / 2);
-               if (signal_pending (current))
+
+               if (signal_pending (current)) {
+                       MOD_DEC_USE_COUNT;
                        return -EAGAIN;
+               }
                down (&s->mutex);
        }
        s->opened = 1;
        up (&s->mutex);
+
        if (usb_set_interface (s->usbdev, _DABUSB_IF, 1) < 0) {
                printk (KERN_ERR "dabusb: set_interface failed\n");
+               MOD_DEC_USE_COUNT;
                return -EINVAL;
        }
        file->f_pos = 0;
        file->private_data = s;
-       MOD_INC_USE_COUNT;
+
        return 0;
 }
 
@@ -618,12 +694,14 @@ static int dabusb_release (struct inode *inode, struct file *file)
        dabusb_stop (s);
        dabusb_free_buffers (s);
        up (&s->mutex);
+
        if (!s->remove_pending) {
                if (usb_set_interface (s->usbdev, _DABUSB_IF, 0) < 0)
                        printk (KERN_ERR "dabusb: set_interface failed\n");
        }
        else
                wake_up (&s->remove_ok);
+
        MOD_DEC_USE_COUNT;
        s->opened = 0;
        return 0;
@@ -643,6 +721,7 @@ static int dabusb_ioctl (struct inode *inode, struct file *file, unsigned int cm
                return -EIO;
 
        down (&s->mutex);
+
        if (!s->usbdev) {
                up (&s->mutex);
                return -EIO;
@@ -652,15 +731,18 @@ static int dabusb_ioctl (struct inode *inode, struct file *file, unsigned int cm
 
        case IOCTL_DAB_BULK:
                pbulk = (pbulk_transfer_t) kmalloc (sizeof (bulk_transfer_t), GFP_KERNEL);
+
                if (!pbulk) {
                        ret = -ENOMEM;
                        break;
                }
+
                if (copy_from_user (pbulk, (void *) arg, sizeof (bulk_transfer_t))) {
                        ret = -EFAULT;
                        kfree (pbulk);
                        break;
                }
+
                dabusb_bulk (s, pbulk);
                ret = copy_to_user ((void *) arg, pbulk, sizeof (bulk_transfer_t));
                kfree (pbulk);
@@ -704,6 +786,7 @@ static struct file_operations dabusb_fops =
 static int dabusb_find_struct (void)
 {
        int u;
+
        for (u = 0; u < NRDABUSB; u++) {
                pdabusb_t s = &dabusb[u];
                if (!s->usbdev)
@@ -718,8 +801,10 @@ static void *dabusb_probe (struct usb_device *usbdev, unsigned int ifnum)
        int devnum;
        pdabusb_t s;
 
+#ifdef DEBUG
        printk (KERN_DEBUG MODSTR "dabusb: probe: vendor id 0x%x, device id 0x%x ifnum:%d\n",
          usbdev->descriptor.idVendor, usbdev->descriptor.idProduct, ifnum);
+#endif
 
        /* the 1234:5678 is just a self assigned test ID */
        if ((usbdev->descriptor.idVendor != 0x0547 || usbdev->descriptor.idProduct != 0x2131) &&
@@ -771,7 +856,9 @@ reject:
 static void dabusb_disconnect (struct usb_device *usbdev, void *ptr)
 {
        pdabusb_t s = (pdabusb_t) ptr;
+
        printk (KERN_DEBUG MODSTR "dabusb_disconnect\n");
+
        s->remove_pending = 1;
        wake_up (&s->wait);
        if (s->state == _started)
@@ -793,7 +880,7 @@ static struct usb_driver dabusb_driver =
 
 /* --------------------------------------------------------------------- */
 
-int dabusb_init (void)
+int __init dabusb_init (void)
 {
        unsigned u;
 
@@ -809,18 +896,22 @@ int dabusb_init (void)
                spin_lock_init (&s->lock);
                INIT_LIST_HEAD (&s->free_buff_list);
                INIT_LIST_HEAD (&s->rec_buff_list);
-//              printk("s->free_buff_list:%p\n",&s->free_buff_list);
-               //              printk("s->rec_buff_list:%p\n",&s->rec_buff_list);
        }
+
        /* register misc device */
        usb_register (&dabusb_driver);
+
+#ifdef DEBUG
        printk (KERN_INFO "dabusb_init: driver registered\n");
+#endif
        return 0;
 }
 
-void dabusb_cleanup (void)
+void __exit dabusb_cleanup (void)
 {
+#ifdef DEBUG
        printk (KERN_DEBUG MODSTR "dabusb_cleanup\n");
+#endif
        usb_deregister (&dabusb_driver);
 }
 
@@ -830,12 +921,13 @@ void dabusb_cleanup (void)
 MODULE_AUTHOR ("Deti Fliegl, deti@fliegl.de");
 MODULE_DESCRIPTION ("DAB-USB Interface Driver for Linux (c)1999");
 MODULE_PARM (buffers, "i");
-int init_module (void)
+
+int __init init_module (void)
 {
        return dabusb_init ();
 }
 
-void cleanup_module (void)
+void __exit cleanup_module (void)
 {
        dabusb_cleanup ();
 }
index 90e515d215e0ea47cbd48fe5d37f5f6a266b6853..febc4cc7ebce299d02fddee75605c369753c7ec9 100644 (file)
@@ -36,7 +36,6 @@
 
 /*****************************************************************************/
 #include <linux/version.h>
-#include <linux/config.h>
 #include <linux/module.h>
 #include <linux/socket.h>
 #include <linux/miscdevice.h>
@@ -96,34 +95,34 @@ static void free_async(struct async *as)
 
 extern inline unsigned int ld2(unsigned int x)
 {
-        unsigned int r = 0;
-        
-        if (x >= 0x10000) {
-                x >>= 16;
-                r += 16;
-        }
-        if (x >= 0x100) {
-                x >>= 8;
-                r += 8;
-        }
-        if (x >= 0x10) {
-                x >>= 4;
-                r += 4;
-        }
-        if (x >= 4) {
-                x >>= 2;
-                r += 2;
-        }
-        if (x >= 2)
-                r++;
-        return r;
+       unsigned int r = 0;
+       
+       if (x >= 0x10000) {
+               x >>= 16;
+               r += 16;
+       }
+       if (x >= 0x100) {
+               x >>= 8;
+               r += 8;
+       }
+       if (x >= 0x10) {
+               x >>= 4;
+               r += 4;
+       }
+       if (x >= 4) {
+               x >>= 2;
+               r += 2;
+       }
+       if (x >= 2)
+               r++;
+       return r;
 }
 
 #if 0
 /* why doesn't this work properly on i386? */
 extern inline unsigned int ld2(unsigned int x)
 {
-        unsigned int r;
+       unsigned int r;
 
        __asm__("bsrl %1,%0" : "=r" (r) : "g" (x));
        return r;
@@ -723,7 +722,7 @@ static int ezusb_asynccompl(struct async *as, void *arg)
 static int ezusb_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
 {
        struct ezusb *ez = (struct ezusb *)file->private_data;
-        DECLARE_WAITQUEUE(wait, current);
+       DECLARE_WAITQUEUE(wait, current);
        struct usb_proc_ctrltransfer pctrl;
        struct usb_proc_bulktransfer pbulk;
        struct usb_proc_old_ctrltransfer opctrl;
@@ -976,13 +975,13 @@ static struct file_operations ezusb_fops = {
 static void * ezusb_probe(struct usb_device *usbdev, unsigned int ifnum)
 {
        struct ezusb *ez = &ezusb[0];
-        struct usb_interface_descriptor *interface;
-        struct usb_endpoint_descriptor *endpoint;
+       struct usb_interface_descriptor *interface;
+       struct usb_endpoint_descriptor *endpoint;
 
 #undef KERN_DEBUG
 #define KERN_DEBUG ""
-        printk(KERN_DEBUG "ezusb: probe: vendor id 0x%x, device id 0x%x\n",
-               usbdev->descriptor.idVendor, usbdev->descriptor.idProduct);
+       printk(KERN_DEBUG "ezusb: probe: vendor id 0x%x, device id 0x%x\n",
+              usbdev->descriptor.idVendor, usbdev->descriptor.idProduct);
 
        /* the 1234:5678 is just a self assigned test ID */
        if ((usbdev->descriptor.idVendor != 0x0547 || usbdev->descriptor.idProduct != 0x2131) 
@@ -992,16 +991,16 @@ static void * ezusb_probe(struct usb_device *usbdev, unsigned int ifnum)
            (usbdev->descriptor.idVendor != 0x1234 || usbdev->descriptor.idProduct != 0x5678)
           #endif 
            )
-                return NULL;
+               return NULL;
 
-        /* We don't handle multiple configurations */
-        if (usbdev->descriptor.bNumConfigurations != 1)
-                return NULL;
+       /* We don't handle multiple configurations */
+       if (usbdev->descriptor.bNumConfigurations != 1)
+               return NULL;
 
 #if 0
-        /* We don't handle multiple interfaces */
+       /* We don't handle multiple interfaces */
        if (usbdev->config[0].bNumInterfaces != 1)
-                return NULL;
+               return NULL;
 #endif
 
        down(&ez->mutex);
@@ -1023,7 +1022,7 @@ static void * ezusb_probe(struct usb_device *usbdev, unsigned int ifnum)
        }
        up(&ez->mutex);
        MOD_INC_USE_COUNT;
-        return ez;
+       return ez;
 
  err:
        up(&ez->mutex);
@@ -1044,10 +1043,10 @@ static void ezusb_disconnect(struct usb_device *usbdev, void *ptr)
 }
 
 static struct usb_driver ezusb_driver = {
-        "ezusb",
-        ezusb_probe,
-        ezusb_disconnect,
-        { NULL, NULL },
+       "ezusb",
+       ezusb_probe,
+       ezusb_disconnect,
+       { NULL, NULL },
        &ezusb_fops,
        192
 };
@@ -1069,7 +1068,7 @@ int ezusb_init(void)
        }
        /* register misc device */
        usb_register(&ezusb_driver);
-        printk(KERN_INFO "ezusb: Anchorchip firmware download driver registered\n");
+       printk(KERN_INFO "ezusb: Anchorchip firmware download driver registered\n");
        return 0;
 }
 
diff --git a/drivers/usb/firmware.c b/drivers/usb/firmware.c
deleted file mode 100644 (file)
index e759cef..0000000
+++ /dev/null
@@ -1,3213 +0,0 @@
-//$Id: firmware.c,v 1.4 1999/12/13 14:15:28 fliegl Exp $
-static INTEL_HEX_RECORD firmware[] = {
-{  2,
-   0x0,
-   0,
-   {0x21,0x57}
-},
-{  3,
-   0x3,
-   0,
-   {0x02,0x01,0x66}
-},
-{  3,
-   0xb,
-   0,
-   {0x02,0x01,0x66}
-},
-{  3,
-   0x13,
-   0,
-   {0x02,0x01,0x66}
-},
-{  3,
-   0x1b,
-   0,
-   {0x02,0x01,0x66}
-},
-{  3,
-   0x23,
-   0,
-   {0x02,0x01,0x66}
-},
-{  3,
-   0x2b,
-   0,
-   {0x02,0x01,0x66}
-},
-{  3,
-   0x33,
-   0,
-   {0x02,0x03,0x0f}
-},
-{  3,
-   0x3b,
-   0,
-   {0x02,0x01,0x66}
-},
-{  3,
-   0x43,
-   0,
-   {0x02,0x01,0x00}
-},
-{  3,
-   0x4b,
-   0,
-   {0x02,0x01,0x66}
-},
-{  3,
-   0x53,
-   0,
-   {0x02,0x01,0x66}
-},
-{  3,
-   0x5b,
-   0,
-   {0x02,0x04,0xbd}
-},
-{  3,
-   0x63,
-   0,
-   {0x02,0x01,0x67}
-},
-{  3,
-   0x100,
-   0,
-   {0x02,0x0c,0x5a}
-},
-{  3,
-   0x104,
-   0,
-   {0x02,0x01,0xed}
-},
-{  3,
-   0x108,
-   0,
-   {0x02,0x02,0x51}
-},
-{  3,
-   0x10c,
-   0,
-   {0x02,0x02,0x7c}
-},
-{  3,
-   0x110,
-   0,
-   {0x02,0x02,0xe4}
-},
-{  1,
-   0x114,
-   0,
-   {0x32}
-},
-{  1,
-   0x118,
-   0,
-   {0x32}
-},
-{  3,
-   0x11c,
-   0,
-   {0x02,0x05,0xfd}
-},
-{  3,
-   0x120,
-   0,
-   {0x02,0x00,0x00}
-},
-{  3,
-   0x124,
-   0,
-   {0x02,0x00,0x00}
-},
-{  3,
-   0x128,
-   0,
-   {0x02,0x04,0x3c}
-},
-{  3,
-   0x12c,
-   0,
-   {0x02,0x04,0x6a}
-},
-{  3,
-   0x130,
-   0,
-   {0x02,0x00,0x00}
-},
-{  3,
-   0x134,
-   0,
-   {0x02,0x00,0x00}
-},
-{  3,
-   0x138,
-   0,
-   {0x02,0x00,0x00}
-},
-{  3,
-   0x13c,
-   0,
-   {0x02,0x00,0x00}
-},
-{  3,
-   0x140,
-   0,
-   {0x02,0x00,0x00}
-},
-{  3,
-   0x144,
-   0,
-   {0x02,0x00,0x00}
-},
-{  3,
-   0x148,
-   0,
-   {0x02,0x00,0x00}
-},
-{  3,
-   0x14c,
-   0,
-   {0x02,0x00,0x00}
-},
-{  3,
-   0x150,
-   0,
-   {0x02,0x00,0x00}
-},
-{  3,
-   0x154,
-   0,
-   {0x02,0x00,0x00}
-},
-{  10,
-   0x157,
-   0,
-   {0x75,0x81,0x7f,0xe5,0x82,0x60,0x03,0x02,0x01,0x61}
-},
-{  5,
-   0x161,
-   0,
-   {0x12,0x07,0x6f,0x21,0x64}
-},
-{  1,
-   0x166,
-   0,
-   {0x32}
-},
-{  14,
-   0x167,
-   0,
-   {0xc0,0xd0,0xc0,0x86,0xc0,0x82,0xc0,0x83,0xc0,0xe0,0x90,0x7f,0x97,0xe0}
-},
-{  14,
-   0x175,
-   0,
-   {0x44,0x80,0xf0,0x90,0x7f,0x69,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0}
-},
-{  14,
-   0x183,
-   0,
-   {0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0}
-},
-{  14,
-   0x191,
-   0,
-   {0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0x90,0x7f,0x97,0xe0}
-},
-{  3,
-   0x19f,
-   0,
-   {0x55,0x7f,0xf0}
-},
-{  14,
-   0x1a2,
-   0,
-   {0x90,0x7f,0x9a,0xe0,0x30,0xe4,0x23,0x90,0x7f,0x68,0xf0,0xf0,0xf0,0xf0}
-},
-{  14,
-   0x1b0,
-   0,
-   {0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0}
-},
-{  14,
-   0x1be,
-   0,
-   {0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0}
-},
-{  14,
-   0x1cc,
-   0,
-   {0xe5,0xd8,0xc2,0xe3,0xf5,0xd8,0xd0,0xe0,0xd0,0x83,0xd0,0x82,0xd0,0x86}
-},
-{  3,
-   0x1da,
-   0,
-   {0xd0,0xd0,0x32}
-},
-{  8,
-   0x1dd,
-   0,
-   {0x75,0x86,0x00,0x90,0xff,0xc3,0x7c,0x05}
-},
-{  7,
-   0x1e5,
-   0,
-   {0xa3,0xe5,0x82,0x45,0x83,0x70,0xf9}
-},
-{  1,
-   0x1ec,
-   0,
-   {0x22}
-},
-{  14,
-   0x1ed,
-   0,
-   {0xc0,0xe0,0xc0,0xf0,0xc0,0x82,0xc0,0x83,0xc0,0x02,0xc0,0x03,0xc0,0xd0}
-},
-{  14,
-   0x1fb,
-   0,
-   {0x75,0xd0,0x00,0xc0,0x86,0x75,0x86,0x00,0xe5,0x91,0xc2,0xe4,0xf5,0x91}
-},
-{  13,
-   0x209,
-   0,
-   {0x90,0x88,0x00,0xe0,0xf5,0x41,0x90,0x7f,0xab,0x74,0x02,0xf0,0x90}
-},
-{  9,
-   0x216,
-   0,
-   {0x7f,0xab,0x74,0x02,0xf0,0xe5,0x32,0x60,0x21}
-},
-{  4,
-   0x21f,
-   0,
-   {0x7a,0x00,0x7b,0x00}
-},
-{  11,
-   0x223,
-   0,
-   {0xc3,0xea,0x94,0x18,0xeb,0x64,0x80,0x94,0x80,0x50,0x12}
-},
-{  14,
-   0x22e,
-   0,
-   {0x90,0x7f,0x69,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0x0a,0xba,0x00}
-},
-{  2,
-   0x23c,
-   0,
-   {0x01,0x0b}
-},
-{  2,
-   0x23e,
-   0,
-   {0x80,0xe3}
-},
-{  2,
-   0x240,
-   0,
-   {0xd0,0x86}
-},
-{  14,
-   0x242,
-   0,
-   {0xd0,0xd0,0xd0,0x03,0xd0,0x02,0xd0,0x83,0xd0,0x82,0xd0,0xf0,0xd0,0xe0}
-},
-{  1,
-   0x250,
-   0,
-   {0x32}
-},
-{  14,
-   0x251,
-   0,
-   {0xc0,0xe0,0xc0,0xf0,0xc0,0x82,0xc0,0x83,0xc0,0xd0,0x75,0xd0,0x00,0xc0}
-},
-{  14,
-   0x25f,
-   0,
-   {0x86,0x75,0x86,0x00,0xe5,0x91,0xc2,0xe4,0xf5,0x91,0x90,0x7f,0xab,0x74}
-},
-{  4,
-   0x26d,
-   0,
-   {0x04,0xf0,0xd0,0x86}
-},
-{  11,
-   0x271,
-   0,
-   {0xd0,0xd0,0xd0,0x83,0xd0,0x82,0xd0,0xf0,0xd0,0xe0,0x32}
-},
-{  14,
-   0x27c,
-   0,
-   {0xc0,0xe0,0xc0,0xf0,0xc0,0x82,0xc0,0x83,0xc0,0x02,0xc0,0x03,0xc0,0x04}
-},
-{  14,
-   0x28a,
-   0,
-   {0xc0,0x05,0xc0,0x06,0xc0,0x07,0xc0,0x00,0xc0,0x01,0xc0,0xd0,0x75,0xd0}
-},
-{  13,
-   0x298,
-   0,
-   {0x00,0xc0,0x86,0x75,0x86,0x00,0xe5,0x91,0xc2,0xe4,0xf5,0x91,0x90}
-},
-{  12,
-   0x2a5,
-   0,
-   {0x7f,0xab,0x74,0x08,0xf0,0x75,0x6e,0x00,0x75,0x6f,0x02,0x12}
-},
-{  6,
-   0x2b1,
-   0,
-   {0x11,0x44,0x75,0x70,0x39,0x75}
-},
-{  6,
-   0x2b7,
-   0,
-   {0x71,0x0c,0x75,0x72,0x02,0x12}
-},
-{  12,
-   0x2bd,
-   0,
-   {0x11,0x75,0x90,0x7f,0xd6,0xe4,0xf0,0x75,0xd8,0x20,0xd0,0x86}
-},
-{  14,
-   0x2c9,
-   0,
-   {0xd0,0xd0,0xd0,0x01,0xd0,0x00,0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,0x04}
-},
-{  13,
-   0x2d7,
-   0,
-   {0xd0,0x03,0xd0,0x02,0xd0,0x83,0xd0,0x82,0xd0,0xf0,0xd0,0xe0,0x32}
-},
-{  14,
-   0x2e4,
-   0,
-   {0xc0,0xe0,0xc0,0xf0,0xc0,0x82,0xc0,0x83,0xc0,0xd0,0x75,0xd0,0x00,0xc0}
-},
-{  14,
-   0x2f2,
-   0,
-   {0x86,0x75,0x86,0x00,0xe5,0x91,0xc2,0xe4,0xf5,0x91,0x90,0x7f,0xab,0x74}
-},
-{  4,
-   0x300,
-   0,
-   {0x10,0xf0,0xd0,0x86}
-},
-{  11,
-   0x304,
-   0,
-   {0xd0,0xd0,0xd0,0x83,0xd0,0x82,0xd0,0xf0,0xd0,0xe0,0x32}
-},
-{  14,
-   0x30f,
-   0,
-   {0xc0,0xe0,0xc0,0xf0,0xc0,0x82,0xc0,0x83,0xc0,0x02,0xc0,0x03,0xc0,0x04}
-},
-{  14,
-   0x31d,
-   0,
-   {0xc0,0x05,0xc0,0x06,0xc0,0x07,0xc0,0x00,0xc0,0x01,0xc0,0xd0,0x75,0xd0}
-},
-{  12,
-   0x32b,
-   0,
-   {0x00,0xc0,0x86,0x75,0x86,0x00,0x75,0x6e,0x00,0x75,0x6f,0x02}
-},
-{  7,
-   0x337,
-   0,
-   {0x12,0x11,0x44,0x75,0x70,0x40,0x75}
-},
-{  6,
-   0x33e,
-   0,
-   {0x71,0x0c,0x75,0x72,0x02,0x12}
-},
-{  14,
-   0x344,
-   0,
-   {0x11,0x75,0x90,0x7f,0xd6,0x74,0x02,0xf0,0x90,0x7f,0xd6,0x74,0x06,0xf0}
-},
-{  5,
-   0x352,
-   0,
-   {0x75,0xd8,0x10,0xd0,0x86}
-},
-{  14,
-   0x357,
-   0,
-   {0xd0,0xd0,0xd0,0x01,0xd0,0x00,0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,0x04}
-},
-{  13,
-   0x365,
-   0,
-   {0xd0,0x03,0xd0,0x02,0xd0,0x83,0xd0,0x82,0xd0,0xf0,0xd0,0xe0,0x32}
-},
-{  13,
-   0x372,
-   0,
-   {0x90,0x7f,0xa5,0x74,0x80,0xf0,0x90,0x7f,0xa6,0x74,0x9a,0xf0,0x12}
-},
-{  12,
-   0x37f,
-   0,
-   {0x10,0x1b,0x90,0x7f,0xa6,0xe5,0x42,0xf0,0x12,0x10,0x1b,0x90}
-},
-{  13,
-   0x38b,
-   0,
-   {0x7f,0xa6,0xe5,0x43,0xf0,0x12,0x10,0x1b,0x90,0x7f,0xa5,0x74,0x40}
-},
-{  1,
-   0x398,
-   0,
-   {0xf0}
-},
-{  1,
-   0x399,
-   0,
-   {0x22}
-},
-{  13,
-   0x39a,
-   0,
-   {0x90,0x7f,0xa5,0x74,0x80,0xf0,0x90,0x7f,0xa6,0x74,0x9a,0xf0,0x12}
-},
-{  12,
-   0x3a7,
-   0,
-   {0x10,0x1b,0x90,0x7f,0xa6,0xe5,0x44,0xf0,0x12,0x10,0x1b,0x90}
-},
-{  12,
-   0x3b3,
-   0,
-   {0x7f,0xa6,0xe5,0x45,0xf0,0x12,0x10,0x1b,0x90,0x7f,0xa6,0xe5}
-},
-{  11,
-   0x3bf,
-   0,
-   {0x46,0xf0,0x12,0x10,0x1b,0x90,0x7f,0xa5,0x74,0x40,0xf0}
-},
-{  1,
-   0x3ca,
-   0,
-   {0x22}
-},
-{  10,
-   0x3cb,
-   0,
-   {0x75,0x44,0x02,0x75,0x45,0x00,0x75,0x46,0x00,0x12}
-},
-{  9,
-   0x3d5,
-   0,
-   {0x03,0x9a,0x75,0x42,0x03,0x75,0x43,0x00,0x12}
-},
-{  2,
-   0x3de,
-   0,
-   {0x03,0x72}
-},
-{  1,
-   0x3e0,
-   0,
-   {0x22}
-},
-{  12,
-   0x3e1,
-   0,
-   {0x90,0x88,0x00,0xe5,0x36,0xf0,0x90,0x88,0x00,0x74,0x10,0x25}
-},
-{  9,
-   0x3ed,
-   0,
-   {0x36,0xf0,0x12,0x01,0xdd,0x75,0x42,0x01,0x75}
-},
-{  9,
-   0x3f6,
-   0,
-   {0x43,0x18,0x12,0x03,0x72,0x75,0x44,0x02,0x75}
-},
-{  9,
-   0x3ff,
-   0,
-   {0x45,0x00,0x75,0x46,0x00,0x12,0x03,0x9a,0x75}
-},
-{  8,
-   0x408,
-   0,
-   {0x42,0x03,0x75,0x43,0x44,0x12,0x03,0x72}
-},
-{  1,
-   0x410,
-   0,
-   {0x22}
-},
-{  14,
-   0x411,
-   0,
-   {0xc0,0xe0,0xc0,0xf0,0xc0,0x82,0xc0,0x83,0xc0,0xd0,0x75,0xd0,0x00,0xc0}
-},
-{  14,
-   0x41f,
-   0,
-   {0x86,0x75,0x86,0x00,0xe5,0x91,0xc2,0xe4,0xf5,0x91,0x90,0x7f,0xaa,0x74}
-},
-{  4,
-   0x42d,
-   0,
-   {0x02,0xf0,0xd0,0x86}
-},
-{  11,
-   0x431,
-   0,
-   {0xd0,0xd0,0xd0,0x83,0xd0,0x82,0xd0,0xf0,0xd0,0xe0,0x32}
-},
-{  14,
-   0x43c,
-   0,
-   {0xc0,0xe0,0xc0,0xf0,0xc0,0x82,0xc0,0x83,0xc0,0xd0,0x75,0xd0,0x00,0xc0}
-},
-{  14,
-   0x44a,
-   0,
-   {0x86,0x75,0x86,0x00,0xe5,0x91,0xc2,0xe4,0xf5,0x91,0x90,0x7f,0xa9,0x74}
-},
-{  7,
-   0x458,
-   0,
-   {0x04,0xf0,0x75,0x30,0x01,0xd0,0x86}
-},
-{  11,
-   0x45f,
-   0,
-   {0xd0,0xd0,0xd0,0x83,0xd0,0x82,0xd0,0xf0,0xd0,0xe0,0x32}
-},
-{  14,
-   0x46a,
-   0,
-   {0xc0,0xe0,0xc0,0xf0,0xc0,0x82,0xc0,0x83,0xc0,0xd0,0x75,0xd0,0x00,0xc0}
-},
-{  14,
-   0x478,
-   0,
-   {0x86,0x75,0x86,0x00,0xe5,0x91,0xc2,0xe4,0xf5,0x91,0x90,0x7f,0xaa,0x74}
-},
-{  7,
-   0x486,
-   0,
-   {0x04,0xf0,0x75,0x31,0x01,0xd0,0x86}
-},
-{  11,
-   0x48d,
-   0,
-   {0xd0,0xd0,0xd0,0x83,0xd0,0x82,0xd0,0xf0,0xd0,0xe0,0x32}
-},
-{  14,
-   0x498,
-   0,
-   {0xc0,0xe0,0xc0,0xf0,0xc0,0x82,0xc0,0x83,0xc0,0xd0,0x75,0xd0,0x00,0xc0}
-},
-{  12,
-   0x4a6,
-   0,
-   {0x86,0x75,0x86,0x00,0xe5,0x91,0xc2,0xe5,0xf5,0x91,0xd0,0x86}
-},
-{  11,
-   0x4b2,
-   0,
-   {0xd0,0xd0,0xd0,0x83,0xd0,0x82,0xd0,0xf0,0xd0,0xe0,0x32}
-},
-{  14,
-   0x4bd,
-   0,
-   {0xc0,0xe0,0xc0,0xf0,0xc0,0x82,0xc0,0x83,0xc0,0xd0,0x75,0xd0,0x00,0xc0}
-},
-{  12,
-   0x4cb,
-   0,
-   {0x86,0x75,0x86,0x00,0xe5,0x91,0xc2,0xe7,0xf5,0x91,0xd0,0x86}
-},
-{  11,
-   0x4d7,
-   0,
-   {0xd0,0xd0,0xd0,0x83,0xd0,0x82,0xd0,0xf0,0xd0,0xe0,0x32}
-},
-{  12,
-   0x4e2,
-   0,
-   {0x90,0x7f,0xea,0xe0,0xfa,0x8a,0x20,0x90,0x7f,0x96,0xe4,0xf0}
-},
-{  1,
-   0x4ee,
-   0,
-   {0x22}
-},
-{  7,
-   0x4ef,
-   0,
-   {0x90,0x7f,0xea,0xe0,0xfa,0x8a,0x21}
-},
-{  1,
-   0x4f6,
-   0,
-   {0x22}
-},
-{  14,
-   0x4f7,
-   0,
-   {0x90,0x17,0x13,0xe0,0xfa,0x90,0x17,0x15,0xe0,0xfb,0x74,0x80,0x2a,0xfa}
-},
-{  14,
-   0x505,
-   0,
-   {0x74,0x80,0x2b,0xfb,0xea,0x03,0x03,0x54,0x3f,0xfc,0xea,0xc4,0x23,0x54}
-},
-{  14,
-   0x513,
-   0,
-   {0x1f,0xfa,0x2c,0xfa,0xeb,0x03,0x03,0x54,0x3f,0xfc,0xeb,0xc4,0x23,0x54}
-},
-{  11,
-   0x521,
-   0,
-   {0x1f,0xfb,0x2c,0xfb,0x90,0x17,0x0a,0xe0,0xfc,0x60,0x02}
-},
-{  2,
-   0x52c,
-   0,
-   {0x7a,0x00}
-},
-{  7,
-   0x52e,
-   0,
-   {0x90,0x17,0x0c,0xe0,0xfc,0x60,0x02}
-},
-{  2,
-   0x535,
-   0,
-   {0x7b,0x00}
-},
-{  11,
-   0x537,
-   0,
-   {0xea,0x2b,0xfc,0xc3,0x13,0xf5,0x3a,0x75,0x44,0x02,0x8b}
-},
-{  7,
-   0x542,
-   0,
-   {0x45,0x8a,0x46,0x12,0x03,0x9a,0x75}
-},
-{  9,
-   0x549,
-   0,
-   {0x6e,0x08,0x75,0x6f,0x00,0x12,0x11,0x44,0x75}
-},
-{  4,
-   0x552,
-   0,
-   {0x70,0x47,0x75,0x71}
-},
-{  8,
-   0x556,
-   0,
-   {0x0c,0x75,0x72,0x02,0x12,0x11,0x75,0x85}
-},
-{  5,
-   0x55e,
-   0,
-   {0x3a,0x73,0x12,0x11,0xa0}
-},
-{  1,
-   0x563,
-   0,
-   {0x22}
-},
-{  14,
-   0x564,
-   0,
-   {0x90,0x7f,0x96,0xe0,0xfa,0x90,0x7f,0x96,0x74,0x80,0x65,0x02,0xf0,0x90}
-},
-{  14,
-   0x572,
-   0,
-   {0x7f,0xeb,0xe0,0xfa,0x90,0x7f,0xea,0xe0,0xfb,0x90,0x7f,0xef,0xe0,0xfc}
-},
-{  14,
-   0x580,
-   0,
-   {0x33,0x95,0xe0,0xfd,0x8c,0x05,0x7c,0x00,0x90,0x7f,0xee,0xe0,0xfe,0x33}
-},
-{  14,
-   0x58e,
-   0,
-   {0x95,0xe0,0xff,0xec,0x2e,0xfc,0xed,0x3f,0xfd,0x90,0x7f,0xe9,0xe0,0xfe}
-},
-{  5,
-   0x59c,
-   0,
-   {0xbe,0x01,0x02,0x80,0x03}
-},
-{  3,
-   0x5a1,
-   0,
-   {0x02,0x05,0xf9}
-},
-{  6,
-   0x5a4,
-   0,
-   {0xbc,0x01,0x21,0xbd,0x00,0x1e}
-},
-{  14,
-   0x5aa,
-   0,
-   {0xea,0xc4,0x03,0x54,0xf8,0xfc,0xeb,0x25,0xe0,0xfd,0x2c,0x24,0x00,0xfc}
-},
-{  14,
-   0x5b8,
-   0,
-   {0xe4,0x34,0x17,0xfd,0x90,0x7e,0xc0,0xe0,0xfe,0x8c,0x82,0x8d,0x83,0xf0}
-},
-{  2,
-   0x5c6,
-   0,
-   {0x80,0x31}
-},
-{  14,
-   0x5c8,
-   0,
-   {0xea,0xc4,0x03,0x54,0xf8,0xfa,0xeb,0x25,0xe0,0xfb,0x2a,0xfa,0x24,0x00}
-},
-{  14,
-   0x5d6,
-   0,
-   {0xfb,0xe4,0x34,0x17,0xfc,0x90,0x7e,0xc0,0xe0,0xfd,0x8b,0x82,0x8c,0x83}
-},
-{  14,
-   0x5e4,
-   0,
-   {0xf0,0x74,0x01,0x2a,0x24,0x00,0xfa,0xe4,0x34,0x17,0xfb,0x90,0x7e,0xc1}
-},
-{  7,
-   0x5f2,
-   0,
-   {0xe0,0xfc,0x8a,0x82,0x8b,0x83,0xf0}
-},
-{  3,
-   0x5f9,
-   0,
-   {0x75,0x38,0x01}
-},
-{  1,
-   0x5fc,
-   0,
-   {0x22}
-},
-{  14,
-   0x5fd,
-   0,
-   {0xc0,0xe0,0xc0,0xf0,0xc0,0x82,0xc0,0x83,0xc0,0x02,0xc0,0x03,0xc0,0x04}
-},
-{  14,
-   0x60b,
-   0,
-   {0xc0,0x05,0xc0,0x06,0xc0,0x07,0xc0,0x00,0xc0,0x01,0xc0,0xd0,0x75,0xd0}
-},
-{  13,
-   0x619,
-   0,
-   {0x00,0xc0,0x86,0x75,0x86,0x00,0xe5,0x91,0xc2,0xe4,0xf5,0x91,0x90}
-},
-{  13,
-   0x626,
-   0,
-   {0x7f,0xaa,0x74,0x01,0xf0,0x12,0x05,0x64,0x75,0x37,0x00,0xd0,0x86}
-},
-{  14,
-   0x633,
-   0,
-   {0xd0,0xd0,0xd0,0x01,0xd0,0x00,0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,0x04}
-},
-{  13,
-   0x641,
-   0,
-   {0xd0,0x03,0xd0,0x02,0xd0,0x83,0xd0,0x82,0xd0,0xf0,0xd0,0xe0,0x32}
-},
-{  14,
-   0x64e,
-   0,
-   {0x90,0x7f,0xeb,0xe0,0xfa,0x90,0x7f,0xea,0xe0,0xfb,0x90,0x7f,0xee,0xe0}
-},
-{  14,
-   0x65c,
-   0,
-   {0xfc,0x33,0x95,0xe0,0xfd,0x90,0x7f,0x96,0xe0,0xfe,0x90,0x7f,0x96,0x74}
-},
-{  14,
-   0x66a,
-   0,
-   {0x80,0x65,0x06,0xf0,0x90,0x7f,0x00,0x74,0x01,0xf0,0xea,0xc4,0x03,0x54}
-},
-{  14,
-   0x678,
-   0,
-   {0xf8,0xfe,0xeb,0x25,0xe0,0xfb,0x2e,0xfe,0x24,0x00,0xfb,0xe4,0x34,0x17}
-},
-{  14,
-   0x686,
-   0,
-   {0xff,0x8b,0x82,0x8f,0x83,0xe0,0xfb,0x74,0x01,0x2e,0x24,0x00,0xfe,0xe4}
-},
-{  14,
-   0x694,
-   0,
-   {0x34,0x17,0xff,0x8e,0x82,0x8f,0x83,0xe0,0xfe,0x90,0x7f,0xe9,0xe0,0xff}
-},
-{  3,
-   0x6a2,
-   0,
-   {0xbf,0x81,0x0a}
-},
-{  10,
-   0x6a5,
-   0,
-   {0x90,0x7f,0x00,0xeb,0xf0,0x90,0x7f,0x01,0xee,0xf0}
-},
-{  8,
-   0x6af,
-   0,
-   {0x90,0x7f,0xe9,0xe0,0xfb,0xbb,0x82,0x1a}
-},
-{  3,
-   0x6b7,
-   0,
-   {0xba,0x01,0x0c}
-},
-{  12,
-   0x6ba,
-   0,
-   {0x90,0x7f,0x00,0xe4,0xf0,0x90,0x7f,0x01,0xe4,0xf0,0x80,0x0b}
-},
-{  11,
-   0x6c6,
-   0,
-   {0x90,0x7f,0x00,0xe4,0xf0,0x90,0x7f,0x01,0x74,0xb5,0xf0}
-},
-{  8,
-   0x6d1,
-   0,
-   {0x90,0x7f,0xe9,0xe0,0xfb,0xbb,0x83,0x1b}
-},
-{  3,
-   0x6d9,
-   0,
-   {0xba,0x01,0x0d}
-},
-{  13,
-   0x6dc,
-   0,
-   {0x90,0x7f,0x00,0x74,0x01,0xf0,0x90,0x7f,0x01,0xe4,0xf0,0x80,0x0b}
-},
-{  11,
-   0x6e9,
-   0,
-   {0x90,0x7f,0x00,0xe4,0xf0,0x90,0x7f,0x01,0x74,0x12,0xf0}
-},
-{  8,
-   0x6f4,
-   0,
-   {0x90,0x7f,0xe9,0xe0,0xfb,0xbb,0x84,0x1c}
-},
-{  3,
-   0x6fc,
-   0,
-   {0xba,0x01,0x0d}
-},
-{  13,
-   0x6ff,
-   0,
-   {0x90,0x7f,0x00,0x74,0x01,0xf0,0x90,0x7f,0x01,0xe4,0xf0,0x80,0x0c}
-},
-{  12,
-   0x70c,
-   0,
-   {0x90,0x7f,0x00,0x74,0x80,0xf0,0x90,0x7f,0x01,0x74,0x01,0xf0}
-},
-{  5,
-   0x718,
-   0,
-   {0x90,0x7f,0xb5,0xec,0xf0}
-},
-{  1,
-   0x71d,
-   0,
-   {0x22}
-},
-{  12,
-   0x71e,
-   0,
-   {0x75,0x36,0x0d,0x90,0x88,0x00,0x74,0x1d,0xf0,0x75,0x6b,0x80}
-},
-{  10,
-   0x72a,
-   0,
-   {0x75,0x6c,0x3c,0x12,0x10,0xe2,0x75,0x6b,0x80,0x75}
-},
-{  9,
-   0x734,
-   0,
-   {0x6c,0x0f,0x12,0x10,0xe2,0x75,0x6b,0x80,0x75}
-},
-{  9,
-   0x73d,
-   0,
-   {0x6c,0x06,0x12,0x10,0xe2,0x75,0x6b,0x80,0x75}
-},
-{  7,
-   0x746,
-   0,
-   {0x6c,0x01,0x12,0x10,0xe2,0x7a,0x00}
-},
-{  3,
-   0x74d,
-   0,
-   {0xba,0xff,0x00}
-},
-{  2,
-   0x750,
-   0,
-   {0x50,0x0a}
-},
-{  10,
-   0x752,
-   0,
-   {0xc0,0x02,0x12,0x01,0xdd,0xd0,0x02,0x0a,0x80,0xf1}
-},
-{  10,
-   0x75c,
-   0,
-   {0x75,0x6b,0x80,0x75,0x6c,0x3c,0x12,0x10,0xe2,0x75}
-},
-{  8,
-   0x766,
-   0,
-   {0x6b,0x80,0x75,0x6c,0x0f,0x12,0x10,0xe2}
-},
-{  1,
-   0x76e,
-   0,
-   {0x22}
-},
-{  14,
-   0x76f,
-   0,
-   {0x90,0x7f,0xa1,0xe4,0xf0,0x90,0x7f,0xaf,0x74,0x01,0xf0,0x90,0x7f,0x92}
-},
-{  14,
-   0x77d,
-   0,
-   {0x74,0x02,0xf0,0x75,0x8e,0x31,0x75,0x89,0x21,0x75,0x88,0x00,0x75,0xc8}
-},
-{  14,
-   0x78b,
-   0,
-   {0x00,0x75,0x8d,0x40,0x75,0x98,0x40,0x75,0xc0,0x40,0x75,0x87,0x00,0x75}
-},
-{  9,
-   0x799,
-   0,
-   {0x20,0x00,0x75,0x21,0x00,0x75,0x22,0x00,0x75}
-},
-{  5,
-   0x7a2,
-   0,
-   {0x23,0x00,0x75,0x47,0x00}
-},
-{  7,
-   0x7a7,
-   0,
-   {0xc3,0xe5,0x47,0x94,0x20,0x50,0x11}
-},
-{  13,
-   0x7ae,
-   0,
-   {0xe5,0x47,0x24,0x00,0xf5,0x82,0xe4,0x34,0x17,0xf5,0x83,0xe4,0xf0}
-},
-{  4,
-   0x7bb,
-   0,
-   {0x05,0x47,0x80,0xe8}
-},
-{  9,
-   0x7bf,
-   0,
-   {0xe4,0xf5,0x40,0xf5,0x3f,0xe4,0xf5,0x3c,0xf5}
-},
-{  7,
-   0x7c8,
-   0,
-   {0x3b,0xe4,0xf5,0x3e,0xf5,0x3d,0x75}
-},
-{  11,
-   0x7cf,
-   0,
-   {0x32,0x00,0x75,0x37,0x00,0x75,0x39,0x00,0x90,0x7f,0x93}
-},
-{  14,
-   0x7da,
-   0,
-   {0x74,0x3c,0xf0,0x90,0x7f,0x9c,0x74,0xff,0xf0,0x90,0x7f,0x96,0x74,0x80}
-},
-{  14,
-   0x7e8,
-   0,
-   {0xf0,0x90,0x7f,0x94,0x74,0x70,0xf0,0x90,0x7f,0x9d,0x74,0x8f,0xf0,0x90}
-},
-{  14,
-   0x7f6,
-   0,
-   {0x7f,0x97,0xe4,0xf0,0x90,0x7f,0x95,0x74,0xc2,0xf0,0x90,0x7f,0x98,0x74}
-},
-{  14,
-   0x804,
-   0,
-   {0x28,0xf0,0x90,0x7f,0x9e,0x74,0x28,0xf0,0x90,0x7f,0xf0,0xe4,0xf0,0x90}
-},
-{  14,
-   0x812,
-   0,
-   {0x7f,0xf1,0xe4,0xf0,0x90,0x7f,0xf2,0xe4,0xf0,0x90,0x7f,0xf3,0xe4,0xf0}
-},
-{  14,
-   0x820,
-   0,
-   {0x90,0x7f,0xf4,0xe4,0xf0,0x90,0x7f,0xf5,0xe4,0xf0,0x90,0x7f,0xf6,0xe4}
-},
-{  14,
-   0x82e,
-   0,
-   {0xf0,0x90,0x7f,0xf7,0xe4,0xf0,0x90,0x7f,0xf8,0xe4,0xf0,0x90,0x7f,0xf9}
-},
-{  14,
-   0x83c,
-   0,
-   {0x74,0x38,0xf0,0x90,0x7f,0xfa,0x74,0xa0,0xf0,0x90,0x7f,0xfb,0x74,0xa0}
-},
-{  14,
-   0x84a,
-   0,
-   {0xf0,0x90,0x7f,0xfc,0x74,0xa0,0xf0,0x90,0x7f,0xfd,0x74,0xa0,0xf0,0x90}
-},
-{  14,
-   0x858,
-   0,
-   {0x7f,0xfe,0x74,0xa0,0xf0,0x90,0x7f,0xff,0x74,0xa0,0xf0,0x90,0x7f,0xe0}
-},
-{  14,
-   0x866,
-   0,
-   {0x74,0x03,0xf0,0x90,0x7f,0xe1,0x74,0x01,0xf0,0x90,0x7f,0xdd,0x74,0x80}
-},
-{  11,
-   0x874,
-   0,
-   {0xf0,0x12,0x12,0x43,0x12,0x07,0x1e,0x7a,0x00,0x7b,0x00}
-},
-{  9,
-   0x87f,
-   0,
-   {0xc3,0xea,0x94,0x1e,0xeb,0x94,0x00,0x50,0x17}
-},
-{  12,
-   0x888,
-   0,
-   {0x90,0x88,0x00,0xe0,0xf5,0x47,0x90,0x88,0x0b,0xe0,0xf5,0x47}
-},
-{  9,
-   0x894,
-   0,
-   {0x90,0x7f,0x68,0xf0,0x0a,0xba,0x00,0x01,0x0b}
-},
-{  2,
-   0x89d,
-   0,
-   {0x80,0xe0}
-},
-{  12,
-   0x89f,
-   0,
-   {0x12,0x03,0xe1,0x90,0x7f,0xd6,0xe4,0xf0,0x7a,0x00,0x7b,0x00}
-},
-{  13,
-   0x8ab,
-   0,
-   {0x8a,0x04,0x8b,0x05,0xc3,0xea,0x94,0xe0,0xeb,0x94,0x2e,0x50,0x1a}
-},
-{  14,
-   0x8b8,
-   0,
-   {0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,0x05,0x12,0x01,0xdd,0xd0,0x05,0xd0}
-},
-{  10,
-   0x8c6,
-   0,
-   {0x04,0xd0,0x03,0xd0,0x02,0x0a,0xba,0x00,0x01,0x0b}
-},
-{  2,
-   0x8d0,
-   0,
-   {0x80,0xd9}
-},
-{  13,
-   0x8d2,
-   0,
-   {0x90,0x7f,0xd6,0x74,0x02,0xf0,0x90,0x7f,0xd6,0x74,0x06,0xf0,0x90}
-},
-{  14,
-   0x8df,
-   0,
-   {0x7f,0xde,0x74,0x05,0xf0,0x90,0x7f,0xdf,0x74,0x05,0xf0,0x90,0x7f,0xac}
-},
-{  14,
-   0x8ed,
-   0,
-   {0xe4,0xf0,0x90,0x7f,0xad,0x74,0x05,0xf0,0x75,0xa8,0x80,0x75,0xf8,0x10}
-},
-{  13,
-   0x8fb,
-   0,
-   {0x90,0x7f,0xae,0x74,0x0b,0xf0,0x90,0x7f,0xe2,0x74,0x88,0xf0,0x90}
-},
-{  12,
-   0x908,
-   0,
-   {0x7f,0xab,0x74,0x08,0xf0,0x75,0xe8,0x11,0x75,0x32,0x01,0x75}
-},
-{  12,
-   0x914,
-   0,
-   {0x31,0x00,0x75,0x30,0x00,0xc0,0x04,0xc0,0x05,0x12,0x04,0xf7}
-},
-{  10,
-   0x920,
-   0,
-   {0xd0,0x05,0xd0,0x04,0x75,0x34,0x00,0x75,0x35,0x01}
-},
-{  13,
-   0x92a,
-   0,
-   {0x90,0x7f,0xae,0x74,0x03,0xf0,0x8c,0x02,0xba,0x00,0x02,0x80,0x03}
-},
-{  3,
-   0x937,
-   0,
-   {0x02,0x0a,0x3f}
-},
-{  12,
-   0x93a,
-   0,
-   {0x85,0x33,0x34,0x90,0x7f,0x9d,0x74,0x8f,0xf0,0x90,0x7f,0x97}
-},
-{  14,
-   0x946,
-   0,
-   {0x74,0x08,0xf0,0x90,0x7f,0x9d,0x74,0x88,0xf0,0x90,0x7f,0x9a,0xe0,0xfa}
-},
-{  12,
-   0x954,
-   0,
-   {0x74,0x05,0x5a,0xf5,0x33,0x90,0x7f,0x9d,0x74,0x8f,0xf0,0x90}
-},
-{  13,
-   0x960,
-   0,
-   {0x7f,0x97,0x74,0x02,0xf0,0x90,0x7f,0x9d,0x74,0x82,0xf0,0xe5,0x33}
-},
-{  13,
-   0x96d,
-   0,
-   {0x25,0xe0,0xfa,0x90,0x7f,0x9a,0xe0,0x54,0x05,0xfb,0x4a,0xf5,0x33}
-},
-{  2,
-   0x97a,
-   0,
-   {0x60,0x0c}
-},
-{  12,
-   0x97c,
-   0,
-   {0x90,0x7f,0x96,0xe0,0xfa,0x90,0x7f,0x96,0x74,0x80,0x4a,0xf0}
-},
-{  11,
-   0x988,
-   0,
-   {0x75,0x6e,0x00,0x75,0x6f,0x00,0xc0,0x04,0xc0,0x05,0x12}
-},
-{  14,
-   0x993,
-   0,
-   {0x11,0x44,0xd0,0x05,0xd0,0x04,0x90,0x17,0x13,0xe0,0xfa,0x74,0x80,0x2a}
-},
-{  6,
-   0x9a1,
-   0,
-   {0xfa,0xe5,0x33,0xb4,0x04,0x29}
-},
-{  3,
-   0x9a7,
-   0,
-   {0xba,0xa0,0x00}
-},
-{  2,
-   0x9aa,
-   0,
-   {0x50,0x24}
-},
-{  13,
-   0x9ac,
-   0,
-   {0x90,0x17,0x13,0xe0,0x04,0xfb,0x0b,0x90,0x17,0x13,0xeb,0xf0,0x90}
-},
-{  14,
-   0x9b9,
-   0,
-   {0x17,0x13,0xe0,0xfb,0x90,0x17,0x15,0xf0,0xc0,0x02,0xc0,0x04,0xc0,0x05}
-},
-{  9,
-   0x9c7,
-   0,
-   {0x12,0x04,0xf7,0xd0,0x05,0xd0,0x04,0xd0,0x02}
-},
-{  5,
-   0x9d0,
-   0,
-   {0xe5,0x33,0xb4,0x02,0x26}
-},
-{  6,
-   0x9d5,
-   0,
-   {0xc3,0x74,0x04,0x9a,0x50,0x20}
-},
-{  13,
-   0x9db,
-   0,
-   {0x90,0x17,0x13,0xe0,0xfa,0x1a,0x1a,0x90,0x17,0x13,0xea,0xf0,0x90}
-},
-{  13,
-   0x9e8,
-   0,
-   {0x17,0x13,0xe0,0xfa,0x90,0x17,0x15,0xf0,0xc0,0x04,0xc0,0x05,0x12}
-},
-{  6,
-   0x9f5,
-   0,
-   {0x04,0xf7,0xd0,0x05,0xd0,0x04}
-},
-{  5,
-   0x9fb,
-   0,
-   {0xe5,0x33,0xb4,0x08,0x1d}
-},
-{  4,
-   0xa00,
-   0,
-   {0xe5,0x34,0x70,0x19}
-},
-{  10,
-   0xa04,
-   0,
-   {0x74,0x01,0x25,0x35,0x54,0x0f,0xf5,0x35,0x85,0x35}
-},
-{  12,
-   0xa0e,
-   0,
-   {0x75,0x75,0x76,0x00,0xc0,0x04,0xc0,0x05,0x12,0x13,0xfe,0xd0}
-},
-{  3,
-   0xa1a,
-   0,
-   {0x05,0xd0,0x04}
-},
-{  5,
-   0xa1d,
-   0,
-   {0xe5,0x33,0xb4,0x01,0x1d}
-},
-{  4,
-   0xa22,
-   0,
-   {0xe5,0x34,0x70,0x19}
-},
-{  10,
-   0xa26,
-   0,
-   {0xe5,0x35,0x24,0xff,0x54,0x0f,0xf5,0x35,0x85,0x35}
-},
-{  12,
-   0xa30,
-   0,
-   {0x75,0x75,0x76,0x00,0xc0,0x04,0xc0,0x05,0x12,0x13,0xfe,0xd0}
-},
-{  3,
-   0xa3c,
-   0,
-   {0x05,0xd0,0x04}
-},
-{  14,
-   0xa3f,
-   0,
-   {0xc0,0x04,0xc0,0x05,0x12,0x01,0xdd,0xd0,0x05,0xd0,0x04,0x90,0x7f,0x96}
-},
-{  14,
-   0xa4d,
-   0,
-   {0xe0,0xfa,0x90,0x7f,0x96,0x74,0x7f,0x5a,0xf0,0x90,0x7f,0x97,0x74,0x08}
-},
-{  10,
-   0xa5b,
-   0,
-   {0xf0,0xc3,0xec,0x94,0x00,0xed,0x94,0x02,0x40,0x08}
-},
-{  8,
-   0xa65,
-   0,
-   {0x90,0x7f,0x96,0xe0,0xfa,0x20,0xe6,0x08}
-},
-{  8,
-   0xa6d,
-   0,
-   {0xc3,0xe4,0x9c,0x74,0x08,0x9d,0x50,0x13}
-},
-{  14,
-   0xa75,
-   0,
-   {0x90,0x7f,0x96,0xe0,0xfa,0x90,0x7f,0x96,0x74,0x40,0x65,0x02,0xf0,0x7c}
-},
-{  5,
-   0xa83,
-   0,
-   {0x00,0x7d,0x00,0x80,0x05}
-},
-{  5,
-   0xa88,
-   0,
-   {0x0c,0xbc,0x00,0x01,0x0d}
-},
-{  5,
-   0xa8d,
-   0,
-   {0xe5,0x38,0xb4,0x01,0x0e}
-},
-{  13,
-   0xa92,
-   0,
-   {0xc0,0x04,0xc0,0x05,0x12,0x04,0xf7,0xd0,0x05,0xd0,0x04,0x75,0x38}
-},
-{  1,
-   0xa9f,
-   0,
-   {0x00}
-},
-{  7,
-   0xaa0,
-   0,
-   {0xe5,0x31,0x70,0x03,0x02,0x09,0x2a}
-},
-{  10,
-   0xaa7,
-   0,
-   {0x90,0x7f,0xc9,0xe0,0xfa,0x70,0x03,0x02,0x0c,0x2d}
-},
-{  14,
-   0xab1,
-   0,
-   {0x90,0x7f,0x96,0xe0,0xfa,0x90,0x7f,0x96,0x74,0x80,0x65,0x02,0xf0,0x90}
-},
-{  9,
-   0xabf,
-   0,
-   {0x7d,0xc0,0xe0,0xfa,0xba,0x2c,0x02,0x80,0x03}
-},
-{  3,
-   0xac8,
-   0,
-   {0x02,0x0b,0x36}
-},
-{  5,
-   0xacb,
-   0,
-   {0x75,0x32,0x00,0x7b,0x00}
-},
-{  3,
-   0xad0,
-   0,
-   {0xbb,0x64,0x00}
-},
-{  2,
-   0xad3,
-   0,
-   {0x50,0x1c}
-},
-{  14,
-   0xad5,
-   0,
-   {0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,0x05,0x12,0x01,0xdd,0xd0,0x05,0xd0}
-},
-{  13,
-   0xae3,
-   0,
-   {0x04,0xd0,0x03,0xd0,0x02,0x90,0x88,0x0f,0xe0,0xf5,0x47,0x0b,0x80}
-},
-{  1,
-   0xaf0,
-   0,
-   {0xdf}
-},
-{  13,
-   0xaf1,
-   0,
-   {0xc0,0x02,0xc0,0x04,0xc0,0x05,0x12,0x07,0x1e,0x12,0x03,0xe1,0x12}
-},
-{  12,
-   0xafe,
-   0,
-   {0x04,0xf7,0xd0,0x05,0xd0,0x04,0xd0,0x02,0x75,0x6e,0x00,0x75}
-},
-{  13,
-   0xb0a,
-   0,
-   {0x6f,0x01,0xc0,0x02,0xc0,0x04,0xc0,0x05,0x12,0x11,0x44,0xd0,0x05}
-},
-{  9,
-   0xb17,
-   0,
-   {0xd0,0x04,0xd0,0x02,0x75,0x70,0x4d,0x75,0x71}
-},
-{  11,
-   0xb20,
-   0,
-   {0x0c,0x75,0x72,0x02,0xc0,0x02,0xc0,0x04,0xc0,0x05,0x12}
-},
-{  11,
-   0xb2b,
-   0,
-   {0x11,0x75,0xd0,0x05,0xd0,0x04,0xd0,0x02,0x02,0x0c,0x2d}
-},
-{  3,
-   0xb36,
-   0,
-   {0xba,0x2a,0x3b}
-},
-{  13,
-   0xb39,
-   0,
-   {0x90,0x7f,0x98,0x74,0x20,0xf0,0xc0,0x02,0xc0,0x04,0xc0,0x05,0x12}
-},
-{  14,
-   0xb46,
-   0,
-   {0x01,0xdd,0xd0,0x05,0xd0,0x04,0xd0,0x02,0x90,0x7f,0x98,0x74,0x28,0xf0}
-},
-{  2,
-   0xb54,
-   0,
-   {0x7b,0x00}
-},
-{  3,
-   0xb56,
-   0,
-   {0xbb,0x0a,0x00}
-},
-{  5,
-   0xb59,
-   0,
-   {0x40,0x03,0x02,0x0c,0x2d}
-},
-{  14,
-   0xb5e,
-   0,
-   {0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,0x05,0x12,0x01,0xdd,0xd0,0x05,0xd0}
-},
-{  8,
-   0xb6c,
-   0,
-   {0x04,0xd0,0x03,0xd0,0x02,0x0b,0x80,0xe2}
-},
-{  3,
-   0xb74,
-   0,
-   {0xba,0x2b,0x1a}
-},
-{  8,
-   0xb77,
-   0,
-   {0x90,0x7f,0xc9,0xe0,0xfb,0xbb,0x40,0x12}
-},
-{  14,
-   0xb7f,
-   0,
-   {0xc0,0x02,0xc0,0x04,0xc0,0x05,0x12,0x12,0x05,0xd0,0x05,0xd0,0x04,0xd0}
-},
-{  4,
-   0xb8d,
-   0,
-   {0x02,0x02,0x0c,0x2d}
-},
-{  3,
-   0xb91,
-   0,
-   {0xba,0x10,0x1f}
-},
-{  14,
-   0xb94,
-   0,
-   {0x90,0x7f,0x96,0xe0,0xfb,0x90,0x7f,0x96,0x74,0x80,0x65,0x03,0xf0,0xc0}
-},
-{  14,
-   0xba2,
-   0,
-   {0x02,0xc0,0x04,0xc0,0x05,0x12,0x10,0x3d,0xd0,0x05,0xd0,0x04,0xd0,0x02}
-},
-{  3,
-   0xbb0,
-   0,
-   {0x02,0x0c,0x2d}
-},
-{  3,
-   0xbb3,
-   0,
-   {0xba,0x11,0x12}
-},
-{  14,
-   0xbb6,
-   0,
-   {0xc0,0x02,0xc0,0x04,0xc0,0x05,0x12,0x10,0x6a,0xd0,0x05,0xd0,0x04,0xd0}
-},
-{  4,
-   0xbc4,
-   0,
-   {0x02,0x02,0x0c,0x2d}
-},
-{  3,
-   0xbc8,
-   0,
-   {0xba,0x12,0x12}
-},
-{  14,
-   0xbcb,
-   0,
-   {0xc0,0x02,0xc0,0x04,0xc0,0x05,0x12,0x10,0x8f,0xd0,0x05,0xd0,0x04,0xd0}
-},
-{  4,
-   0xbd9,
-   0,
-   {0x02,0x02,0x0c,0x2d}
-},
-{  3,
-   0xbdd,
-   0,
-   {0xba,0x13,0x0b}
-},
-{  11,
-   0xbe0,
-   0,
-   {0x90,0x7d,0xc1,0xe0,0xfb,0x90,0x88,0x00,0xf0,0x80,0x42}
-},
-{  3,
-   0xbeb,
-   0,
-   {0xba,0x14,0x11}
-},
-{  14,
-   0xbee,
-   0,
-   {0xc0,0x02,0xc0,0x04,0xc0,0x05,0x12,0x11,0xdd,0xd0,0x05,0xd0,0x04,0xd0}
-},
-{  3,
-   0xbfc,
-   0,
-   {0x02,0x80,0x2e}
-},
-{  3,
-   0xbff,
-   0,
-   {0xba,0x15,0x1d}
-},
-{  12,
-   0xc02,
-   0,
-   {0x90,0x7d,0xc1,0xe0,0xf5,0x75,0x90,0x7d,0xc2,0xe0,0xf5,0x76}
-},
-{  14,
-   0xc0e,
-   0,
-   {0xc0,0x02,0xc0,0x04,0xc0,0x05,0x12,0x13,0xfe,0xd0,0x05,0xd0,0x04,0xd0}
-},
-{  3,
-   0xc1c,
-   0,
-   {0x02,0x80,0x0e}
-},
-{  3,
-   0xc1f,
-   0,
-   {0xba,0x16,0x0b}
-},
-{  11,
-   0xc22,
-   0,
-   {0xc0,0x04,0xc0,0x05,0x12,0x13,0xa3,0xd0,0x05,0xd0,0x04}
-},
-{  11,
-   0xc2d,
-   0,
-   {0x90,0x7f,0xc9,0xe4,0xf0,0x75,0x31,0x00,0x02,0x09,0x2a}
-},
-{  1,
-   0xc38,
-   0,
-   {0x22}
-},
-{  7,
-   0xc39,
-   0,
-   {0x53,0x55,0x50,0x45,0x4e,0x44,0x00}
-},
-{  7,
-   0xc40,
-   0,
-   {0x52,0x45,0x53,0x55,0x4d,0x45,0x00}
-},
-{  6,
-   0xc47,
-   0,
-   {0x20,0x56,0x6f,0x6c,0x20,0x00}
-},
-{  13,
-   0xc4d,
-   0,
-   {0x44,0x41,0x42,0x55,0x53,0x42,0x20,0x76,0x31,0x2e,0x30,0x30,0x00}
-},
-{  14,
-   0xc5a,
-   0,
-   {0xc0,0xe0,0xc0,0xf0,0xc0,0x82,0xc0,0x83,0xc0,0x02,0xc0,0x03,0xc0,0x04}
-},
-{  14,
-   0xc68,
-   0,
-   {0xc0,0x05,0xc0,0x06,0xc0,0x07,0xc0,0x00,0xc0,0x01,0xc0,0xd0,0x75,0xd0}
-},
-{  13,
-   0xc76,
-   0,
-   {0x00,0xc0,0x86,0x75,0x86,0x00,0xe5,0x91,0xc2,0xe4,0xf5,0x91,0x90}
-},
-{  14,
-   0xc83,
-   0,
-   {0x7f,0xab,0x74,0x01,0xf0,0x90,0x7f,0xe8,0xe0,0xfa,0x90,0x7f,0xe9,0xe0}
-},
-{  6,
-   0xc91,
-   0,
-   {0xfb,0xbb,0x00,0x02,0x80,0x03}
-},
-{  3,
-   0xc97,
-   0,
-   {0x02,0x0d,0x38}
-},
-{  3,
-   0xc9a,
-   0,
-   {0xba,0x80,0x14}
-},
-{  14,
-   0xc9d,
-   0,
-   {0x90,0x7f,0x00,0x74,0x01,0xf0,0x90,0x7f,0x01,0xe4,0xf0,0x90,0x7f,0xb5}
-},
-{  6,
-   0xcab,
-   0,
-   {0x74,0x02,0xf0,0x02,0x0e,0xcd}
-},
-{  5,
-   0xcb1,
-   0,
-   {0xba,0x82,0x02,0x80,0x03}
-},
-{  3,
-   0xcb6,
-   0,
-   {0x02,0x0d,0x1d}
-},
-{  8,
-   0xcb9,
-   0,
-   {0x90,0x7f,0xec,0xe0,0xfc,0xbc,0x01,0x00}
-},
-{  2,
-   0xcc1,
-   0,
-   {0x40,0x21}
-},
-{  6,
-   0xcc3,
-   0,
-   {0xc3,0x74,0x07,0x9c,0x40,0x1b}
-},
-{  14,
-   0xcc9,
-   0,
-   {0xec,0x24,0xff,0x25,0xe0,0xfd,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x7f,0xf5}
-},
-{  13,
-   0xcd7,
-   0,
-   {0x83,0xe0,0xfd,0x53,0x05,0x01,0x90,0x7f,0x00,0xed,0xf0,0x80,0x2b}
-},
-{  3,
-   0xce4,
-   0,
-   {0xbc,0x81,0x00}
-},
-{  2,
-   0xce7,
-   0,
-   {0x40,0x21}
-},
-{  6,
-   0xce9,
-   0,
-   {0xc3,0x74,0x87,0x9c,0x40,0x1b}
-},
-{  14,
-   0xcef,
-   0,
-   {0xec,0x24,0x7f,0x25,0xe0,0xfc,0x24,0xb6,0xf5,0x82,0xe4,0x34,0x7f,0xf5}
-},
-{  13,
-   0xcfd,
-   0,
-   {0x83,0xe0,0xfc,0x53,0x04,0x01,0x90,0x7f,0x00,0xec,0xf0,0x80,0x05}
-},
-{  5,
-   0xd0a,
-   0,
-   {0x90,0x7f,0x00,0xe4,0xf0}
-},
-{  14,
-   0xd0f,
-   0,
-   {0x90,0x7f,0x01,0xe4,0xf0,0x90,0x7f,0xb5,0x74,0x02,0xf0,0x02,0x0e,0xcd}
-},
-{  5,
-   0xd1d,
-   0,
-   {0xba,0x81,0x02,0x80,0x03}
-},
-{  3,
-   0xd22,
-   0,
-   {0x02,0x0e,0xc5}
-},
-{  14,
-   0xd25,
-   0,
-   {0x90,0x7f,0x00,0xe4,0xf0,0x90,0x7f,0x01,0xe4,0xf0,0x90,0x7f,0xb5,0x74}
-},
-{  5,
-   0xd33,
-   0,
-   {0x02,0xf0,0x02,0x0e,0xcd}
-},
-{  3,
-   0xd38,
-   0,
-   {0xbb,0x01,0x2d}
-},
-{  6,
-   0xd3b,
-   0,
-   {0xba,0x00,0x03,0x02,0x0e,0xcd}
-},
-{  3,
-   0xd41,
-   0,
-   {0xba,0x02,0x11}
-},
-{  13,
-   0xd44,
-   0,
-   {0x75,0x59,0x00,0xc0,0x02,0xc0,0x03,0x12,0x0e,0xf0,0xd0,0x03,0xd0}
-},
-{  4,
-   0xd51,
-   0,
-   {0x02,0x02,0x0e,0xcd}
-},
-{  5,
-   0xd55,
-   0,
-   {0xba,0x21,0x02,0x80,0x03}
-},
-{  3,
-   0xd5a,
-   0,
-   {0x02,0x0e,0xcd}
-},
-{  11,
-   0xd5d,
-   0,
-   {0x75,0x37,0x01,0x90,0x7f,0xc5,0xe4,0xf0,0x02,0x0e,0xcd}
-},
-{  3,
-   0xd68,
-   0,
-   {0xbb,0x03,0x1f}
-},
-{  6,
-   0xd6b,
-   0,
-   {0xba,0x00,0x03,0x02,0x0e,0xcd}
-},
-{  5,
-   0xd71,
-   0,
-   {0xba,0x02,0x02,0x80,0x03}
-},
-{  3,
-   0xd76,
-   0,
-   {0x02,0x0e,0xcd}
-},
-{  13,
-   0xd79,
-   0,
-   {0x75,0x59,0x01,0xc0,0x02,0xc0,0x03,0x12,0x0e,0xf0,0xd0,0x03,0xd0}
-},
-{  4,
-   0xd86,
-   0,
-   {0x02,0x02,0x0e,0xcd}
-},
-{  3,
-   0xd8a,
-   0,
-   {0xbb,0x06,0x54}
-},
-{  5,
-   0xd8d,
-   0,
-   {0xba,0x80,0x02,0x80,0x03}
-},
-{  3,
-   0xd92,
-   0,
-   {0x02,0x0e,0xc5}
-},
-{  8,
-   0xd95,
-   0,
-   {0x90,0x7f,0xeb,0xe0,0xfc,0xbc,0x01,0x15}
-},
-{  12,
-   0xd9d,
-   0,
-   {0x7c,0xfb,0x7d,0x0f,0x8d,0x06,0x7f,0x00,0x90,0x7f,0xd4,0xee}
-},
-{  9,
-   0xda9,
-   0,
-   {0xf0,0x90,0x7f,0xd5,0xec,0xf0,0x02,0x0e,0xcd}
-},
-{  10,
-   0xdb2,
-   0,
-   {0x90,0x7f,0xeb,0xe0,0xfc,0xbc,0x02,0x02,0x80,0x03}
-},
-{  3,
-   0xdbc,
-   0,
-   {0x02,0x0e,0xc5}
-},
-{  10,
-   0xdbf,
-   0,
-   {0x90,0x7f,0xea,0xe0,0xfc,0xbc,0x00,0x02,0x80,0x03}
-},
-{  3,
-   0xdc9,
-   0,
-   {0x02,0x0e,0xc5}
-},
-{  12,
-   0xdcc,
-   0,
-   {0x7c,0x3b,0x7d,0x0f,0x8d,0x06,0x7f,0x00,0x90,0x7f,0xd4,0xee}
-},
-{  9,
-   0xdd8,
-   0,
-   {0xf0,0x90,0x7f,0xd5,0xec,0xf0,0x02,0x0e,0xcd}
-},
-{  6,
-   0xde1,
-   0,
-   {0xbb,0x07,0x03,0x02,0x0e,0xc5}
-},
-{  3,
-   0xde7,
-   0,
-   {0xbb,0x08,0x10}
-},
-{  13,
-   0xdea,
-   0,
-   {0xac,0x48,0x90,0x7f,0x00,0xec,0xf0,0x90,0x7f,0xb5,0x74,0x01,0xf0}
-},
-{  3,
-   0xdf7,
-   0,
-   {0x02,0x0e,0xcd}
-},
-{  3,
-   0xdfa,
-   0,
-   {0xbb,0x09,0x31}
-},
-{  5,
-   0xdfd,
-   0,
-   {0xba,0x00,0x02,0x80,0x03}
-},
-{  3,
-   0xe02,
-   0,
-   {0x02,0x0e,0xc5}
-},
-{  14,
-   0xe05,
-   0,
-   {0x90,0x7f,0xea,0xe0,0xfc,0xc3,0x74,0x01,0x9c,0x50,0x03,0x02,0x0e,0xc5}
-},
-{  8,
-   0xe13,
-   0,
-   {0x90,0x7f,0xea,0xe0,0xfc,0xbc,0x00,0x0a}
-},
-{  10,
-   0xe1b,
-   0,
-   {0x90,0x17,0x21,0xe4,0xf0,0x90,0x17,0x22,0xe4,0xf0}
-},
-{  9,
-   0xe25,
-   0,
-   {0x90,0x7f,0xea,0xe0,0xf5,0x48,0x02,0x0e,0xcd}
-},
-{  3,
-   0xe2e,
-   0,
-   {0xbb,0x0a,0x27}
-},
-{  5,
-   0xe31,
-   0,
-   {0xba,0x81,0x02,0x80,0x03}
-},
-{  3,
-   0xe36,
-   0,
-   {0x02,0x0e,0xc5}
-},
-{  14,
-   0xe39,
-   0,
-   {0x90,0x7f,0xec,0xe0,0xfa,0x24,0x20,0xfa,0xe4,0x34,0x17,0xfc,0x8a,0x82}
-},
-{  14,
-   0xe47,
-   0,
-   {0x8c,0x83,0xe0,0xfa,0x90,0x7f,0x00,0xf0,0x90,0x7f,0xb5,0x74,0x01,0xf0}
-},
-{  3,
-   0xe55,
-   0,
-   {0x02,0x0e,0xcd}
-},
-{  5,
-   0xe58,
-   0,
-   {0xbb,0x0b,0x02,0x80,0x03}
-},
-{  3,
-   0xe5d,
-   0,
-   {0x02,0x0e,0xa9}
-},
-{  13,
-   0xe60,
-   0,
-   {0x90,0x17,0x20,0xe4,0xf0,0x90,0x7f,0xec,0xe0,0xfa,0xba,0x01,0x1a}
-},
-{  8,
-   0xe6d,
-   0,
-   {0x90,0x7f,0xed,0xe0,0xfa,0xba,0x00,0x12}
-},
-{  14,
-   0xe75,
-   0,
-   {0x90,0x7f,0xea,0xe0,0xfa,0x90,0x17,0x21,0xf0,0xc0,0x03,0x12,0x04,0xe2}
-},
-{  4,
-   0xe83,
-   0,
-   {0xd0,0x03,0x80,0x46}
-},
-{  8,
-   0xe87,
-   0,
-   {0x90,0x7f,0xec,0xe0,0xfa,0xba,0x02,0x3e}
-},
-{  8,
-   0xe8f,
-   0,
-   {0x90,0x7f,0xed,0xe0,0xfa,0xba,0x00,0x36}
-},
-{  13,
-   0xe97,
-   0,
-   {0xc0,0x03,0x12,0x04,0xef,0xd0,0x03,0x90,0x7f,0xea,0xe0,0xfa,0x90}
-},
-{  5,
-   0xea4,
-   0,
-   {0x17,0x22,0xf0,0x80,0x24}
-},
-{  5,
-   0xea9,
-   0,
-   {0xbb,0x12,0x02,0x80,0x17}
-},
-{  5,
-   0xeae,
-   0,
-   {0xbb,0x81,0x02,0x80,0x0d}
-},
-{  5,
-   0xeb3,
-   0,
-   {0xbb,0x83,0x02,0x80,0x08}
-},
-{  5,
-   0xeb8,
-   0,
-   {0xbb,0x82,0x02,0x80,0x03}
-},
-{  3,
-   0xebd,
-   0,
-   {0xbb,0x84,0x05}
-},
-{  5,
-   0xec0,
-   0,
-   {0x12,0x06,0x4e,0x80,0x08}
-},
-{  8,
-   0xec5,
-   0,
-   {0x90,0x7f,0xb4,0x74,0x03,0xf0,0x80,0x06}
-},
-{  6,
-   0xecd,
-   0,
-   {0x90,0x7f,0xb4,0x74,0x02,0xf0}
-},
-{  2,
-   0xed3,
-   0,
-   {0xd0,0x86}
-},
-{  14,
-   0xed5,
-   0,
-   {0xd0,0xd0,0xd0,0x01,0xd0,0x00,0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,0x04}
-},
-{  13,
-   0xee3,
-   0,
-   {0xd0,0x03,0xd0,0x02,0xd0,0x83,0xd0,0x82,0xd0,0xf0,0xd0,0xe0,0x32}
-},
-{  11,
-   0xef0,
-   0,
-   {0x90,0x7f,0xec,0xe0,0xf5,0x5a,0xc3,0x94,0x01,0x40,0x1d}
-},
-{  7,
-   0xefb,
-   0,
-   {0xc3,0x74,0x07,0x95,0x5a,0x40,0x16}
-},
-{  13,
-   0xf02,
-   0,
-   {0xe5,0x5a,0x24,0xff,0x25,0xe0,0xfa,0x24,0xc6,0xf5,0x82,0xe4,0x34}
-},
-{  9,
-   0xf0f,
-   0,
-   {0x7f,0xf5,0x83,0xaa,0x59,0xea,0xf0,0x80,0x22}
-},
-{  7,
-   0xf18,
-   0,
-   {0xc3,0xe5,0x5a,0x94,0x81,0x40,0x1b}
-},
-{  7,
-   0xf1f,
-   0,
-   {0xc3,0x74,0x87,0x95,0x5a,0x40,0x14}
-},
-{  13,
-   0xf26,
-   0,
-   {0xe5,0x5a,0x24,0xff,0x25,0xe0,0xfa,0x24,0xb6,0xf5,0x82,0xe4,0x34}
-},
-{  7,
-   0xf33,
-   0,
-   {0x7f,0xf5,0x83,0xaa,0x59,0xea,0xf0}
-},
-{  1,
-   0xf3a,
-   0,
-   {0x22}
-},
-{  14,
-   0xf3b,
-   0,
-   {0x09,0x02,0xba,0x00,0x03,0x01,0x00,0x40,0x00,0x09,0x04,0x00,0x00,0x00}
-},
-{  14,
-   0xf49,
-   0,
-   {0x01,0x01,0x00,0x00,0x09,0x24,0x01,0x00,0x01,0x3d,0x00,0x01,0x01,0x0c}
-},
-{  14,
-   0xf57,
-   0,
-   {0x24,0x02,0x01,0x10,0x07,0x00,0x02,0x03,0x00,0x00,0x00,0x0d,0x24,0x06}
-},
-{  14,
-   0xf65,
-   0,
-   {0x03,0x01,0x02,0x15,0x00,0x03,0x00,0x03,0x00,0x00,0x09,0x24,0x03,0x02}
-},
-{  14,
-   0xf73,
-   0,
-   {0x01,0x01,0x00,0x01,0x00,0x09,0x24,0x03,0x04,0x02,0x03,0x00,0x03,0x00}
-},
-{  14,
-   0xf81,
-   0,
-   {0x09,0x24,0x03,0x05,0x03,0x06,0x00,0x01,0x00,0x09,0x04,0x01,0x00,0x00}
-},
-{  14,
-   0xf8f,
-   0,
-   {0x01,0x02,0x00,0x00,0x09,0x04,0x01,0x01,0x01,0x01,0x02,0x00,0x00,0x07}
-},
-{  14,
-   0xf9d,
-   0,
-   {0x24,0x01,0x02,0x01,0x01,0x00,0x0b,0x24,0x02,0x01,0x02,0x02,0x10,0x01}
-},
-{  14,
-   0xfab,
-   0,
-   {0x80,0xbb,0x00,0x09,0x05,0x88,0x05,0x00,0x01,0x01,0x00,0x00,0x07,0x25}
-},
-{  14,
-   0xfb9,
-   0,
-   {0x01,0x00,0x00,0x00,0x00,0x09,0x04,0x02,0x00,0x02,0x00,0x00,0x00,0x00}
-},
-{  14,
-   0xfc7,
-   0,
-   {0x07,0x05,0x82,0x02,0x40,0x00,0x00,0x07,0x05,0x02,0x02,0x40,0x00,0x00}
-},
-{  14,
-   0xfd5,
-   0,
-   {0x09,0x04,0x02,0x01,0x03,0x00,0x00,0x00,0x00,0x07,0x05,0x82,0x02,0x40}
-},
-{  14,
-   0xfe3,
-   0,
-   {0x00,0x00,0x07,0x05,0x02,0x02,0x40,0x00,0x00,0x09,0x05,0x89,0x05,0xa0}
-},
-{  10,
-   0xff1,
-   0,
-   {0x01,0x01,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0x00}
-},
-{  14,
-   0xffb,
-   0,
-   {0x12,0x01,0x00,0x01,0x00,0x00,0x00,0x40,0x47,0x05,0x99,0x99,0x00,0x01}
-},
-{  14,
-   0x1009,
-   0,
-   {0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x02,0xba}
-},
-{  4,
-   0x1017,
-   0,
-   {0x00,0x03,0x01,0x00}
-},
-{  2,
-   0x101b,
-   0,
-   {0x7a,0x00}
-},
-{  3,
-   0x101d,
-   0,
-   {0xba,0x05,0x00}
-},
-{  2,
-   0x1020,
-   0,
-   {0x50,0x17}
-},
-{  8,
-   0x1022,
-   0,
-   {0x90,0x7f,0xa5,0xe0,0xfb,0x30,0xe0,0x05}
-},
-{  5,
-   0x102a,
-   0,
-   {0x90,0x00,0x01,0x80,0x0d}
-},
-{  10,
-   0x102f,
-   0,
-   {0xc0,0x02,0x12,0x01,0xdd,0xd0,0x02,0x0a,0x80,0xe4}
-},
-{  3,
-   0x1039,
-   0,
-   {0x90,0x00,0x01}
-},
-{  1,
-   0x103c,
-   0,
-   {0x22}
-},
-{  14,
-   0x103d,
-   0,
-   {0x90,0x7d,0xc1,0xe0,0xf9,0xa3,0xe0,0xfa,0xa3,0xe0,0xfb,0x7c,0x00,0x7d}
-},
-{  4,
-   0x104b,
-   0,
-   {0x7e,0xeb,0x60,0x12}
-},
-{  14,
-   0x104f,
-   0,
-   {0x89,0x82,0x8a,0x83,0xe0,0xa3,0xa9,0x82,0xaa,0x83,0x8c,0x82,0x8d,0x83}
-},
-{  4,
-   0x105d,
-   0,
-   {0xf0,0x0c,0xdb,0xee}
-},
-{  8,
-   0x1061,
-   0,
-   {0x90,0x7d,0xc3,0xe0,0x90,0x7f,0xb9,0xf0}
-},
-{  1,
-   0x1069,
-   0,
-   {0x22}
-},
-{  14,
-   0x106a,
-   0,
-   {0x90,0x7d,0xc1,0xe0,0xf9,0xa3,0xe0,0xfa,0xa3,0xe0,0xfb,0x7c,0xc4,0x7d}
-},
-{  4,
-   0x1078,
-   0,
-   {0x7d,0xeb,0x60,0xe5}
-},
-{  14,
-   0x107c,
-   0,
-   {0x8c,0x82,0x8d,0x83,0xe0,0x0c,0x89,0x82,0x8a,0x83,0xf0,0xa3,0xa9,0x82}
-},
-{  4,
-   0x108a,
-   0,
-   {0xaa,0x83,0xdb,0xee}
-},
-{  1,
-   0x108e,
-   0,
-   {0x22}
-},
-{  14,
-   0x108f,
-   0,
-   {0x90,0x7f,0xa5,0x74,0x80,0xf0,0x05,0x86,0x90,0x7d,0xc1,0xe0,0x05,0x86}
-},
-{  14,
-   0x109d,
-   0,
-   {0xa3,0xf0,0x12,0x10,0x1b,0x90,0x7f,0xa6,0x05,0x86,0xa3,0xa3,0xe0,0xf9}
-},
-{  5,
-   0x10ab,
-   0,
-   {0x60,0x16,0xa3,0x05,0x86}
-},
-{  13,
-   0x10b0,
-   0,
-   {0x90,0x7f,0xa6,0x05,0x86,0xe0,0xa3,0x05,0x86,0xf0,0xc0,0x01,0x12}
-},
-{  6,
-   0x10bd,
-   0,
-   {0x10,0x1b,0xd0,0x01,0xd9,0xed}
-},
-{  6,
-   0x10c3,
-   0,
-   {0x90,0x7f,0xa5,0x74,0x40,0xf0}
-},
-{  1,
-   0x10c9,
-   0,
-   {0x22}
-},
-{  8,
-   0x10ca,
-   0,
-   {0x90,0x88,0x02,0x74,0x01,0xf0,0x7a,0x00}
-},
-{  3,
-   0x10d2,
-   0,
-   {0xba,0xff,0x00}
-},
-{  2,
-   0x10d5,
-   0,
-   {0x50,0x0a}
-},
-{  10,
-   0x10d7,
-   0,
-   {0xc0,0x02,0x12,0x01,0xdd,0xd0,0x02,0x0a,0x80,0xf1}
-},
-{  1,
-   0x10e1,
-   0,
-   {0x22}
-},
-{  5,
-   0x10e2,
-   0,
-   {0xe5,0x6b,0xb4,0xc0,0x08}
-},
-{  8,
-   0x10e7,
-   0,
-   {0x90,0x88,0x03,0xe5,0x6c,0xf0,0x80,0x06}
-},
-{  6,
-   0x10ef,
-   0,
-   {0x90,0x88,0x02,0xe5,0x6c,0xf0}
-},
-{  4,
-   0x10f5,
-   0,
-   {0x7a,0x00,0x7b,0x00}
-},
-{  11,
-   0x10f9,
-   0,
-   {0xc3,0xea,0x94,0x32,0xeb,0x64,0x80,0x94,0x80,0x50,0x07}
-},
-{  5,
-   0x1104,
-   0,
-   {0x0a,0xba,0x00,0x01,0x0b}
-},
-{  2,
-   0x1109,
-   0,
-   {0x80,0xee}
-},
-{  1,
-   0x110b,
-   0,
-   {0x22}
-},
-{  10,
-   0x110c,
-   0,
-   {0x90,0x88,0x03,0xe5,0x6d,0xf0,0x05,0x39,0x7a,0x00}
-},
-{  3,
-   0x1116,
-   0,
-   {0xba,0x28,0x00}
-},
-{  2,
-   0x1119,
-   0,
-   {0x50,0x03}
-},
-{  3,
-   0x111b,
-   0,
-   {0x0a,0x80,0xf8}
-},
-{  5,
-   0x111e,
-   0,
-   {0xe5,0x39,0xb4,0x10,0x08}
-},
-{  8,
-   0x1123,
-   0,
-   {0x90,0x88,0x02,0x74,0xc0,0xf0,0x80,0x0e}
-},
-{  5,
-   0x112b,
-   0,
-   {0xe5,0x39,0xb4,0x20,0x09}
-},
-{  9,
-   0x1130,
-   0,
-   {0x90,0x88,0x02,0x74,0x80,0xf0,0x75,0x39,0x00}
-},
-{  2,
-   0x1139,
-   0,
-   {0x7a,0x00}
-},
-{  3,
-   0x113b,
-   0,
-   {0xba,0x28,0x00}
-},
-{  2,
-   0x113e,
-   0,
-   {0x50,0x03}
-},
-{  3,
-   0x1140,
-   0,
-   {0x0a,0x80,0xf8}
-},
-{  1,
-   0x1143,
-   0,
-   {0x22}
-},
-{  4,
-   0x1144,
-   0,
-   {0xe5,0x6f,0x60,0x02}
-},
-{  2,
-   0x1148,
-   0,
-   {0x80,0x07}
-},
-{  7,
-   0x114a,
-   0,
-   {0x7a,0x00,0x75,0x39,0x00,0x80,0x05}
-},
-{  5,
-   0x1151,
-   0,
-   {0x7a,0x40,0x75,0x39,0x10}
-},
-{  9,
-   0x1156,
-   0,
-   {0xe5,0x6e,0x2a,0xfa,0xe5,0x6e,0x25,0x39,0xf5}
-},
-{  10,
-   0x115f,
-   0,
-   {0x39,0x90,0x88,0x02,0x74,0x80,0x2a,0xf0,0x7a,0x00}
-},
-{  8,
-   0x1169,
-   0,
-   {0xc3,0xea,0x64,0x80,0x94,0xa8,0x50,0x03}
-},
-{  3,
-   0x1171,
-   0,
-   {0x0a,0x80,0xf5}
-},
-{  1,
-   0x1174,
-   0,
-   {0x22}
-},
-{  6,
-   0x1175,
-   0,
-   {0xaa,0x70,0xab,0x71,0xac,0x72}
-},
-{  12,
-   0x117b,
-   0,
-   {0x8a,0x82,0x8b,0x83,0x8c,0xf0,0x12,0x14,0xee,0xfd,0x60,0x18}
-},
-{  13,
-   0x1187,
-   0,
-   {0x8d,0x6d,0xc0,0x02,0xc0,0x03,0xc0,0x04,0x12,0x11,0x0c,0xd0,0x04}
-},
-{  9,
-   0x1194,
-   0,
-   {0xd0,0x03,0xd0,0x02,0x0a,0xba,0x00,0x01,0x0b}
-},
-{  2,
-   0x119d,
-   0,
-   {0x80,0xdc}
-},
-{  1,
-   0x119f,
-   0,
-   {0x22}
-},
-{  13,
-   0x11a0,
-   0,
-   {0xe5,0x73,0xc4,0x54,0x0f,0xfa,0x53,0x02,0x0f,0xc3,0x74,0x09,0x9a}
-},
-{  2,
-   0x11ad,
-   0,
-   {0x50,0x06}
-},
-{  6,
-   0x11af,
-   0,
-   {0x74,0x37,0x2a,0xfb,0x80,0x04}
-},
-{  4,
-   0x11b5,
-   0,
-   {0x74,0x30,0x2a,0xfb}
-},
-{  12,
-   0x11b9,
-   0,
-   {0x8b,0x6d,0xc0,0x03,0x12,0x11,0x0c,0xd0,0x03,0xaa,0x73,0x53}
-},
-{  8,
-   0x11c5,
-   0,
-   {0x02,0x0f,0xc3,0x74,0x09,0x9a,0x50,0x06}
-},
-{  6,
-   0x11cd,
-   0,
-   {0x74,0x37,0x2a,0xfb,0x80,0x04}
-},
-{  4,
-   0x11d3,
-   0,
-   {0x74,0x30,0x2a,0xfb}
-},
-{  5,
-   0x11d7,
-   0,
-   {0x8b,0x6d,0x12,0x11,0x0c}
-},
-{  1,
-   0x11dc,
-   0,
-   {0x22}
-},
-{  7,
-   0x11dd,
-   0,
-   {0x90,0x7d,0xc3,0xe0,0xfa,0x60,0x0f}
-},
-{  12,
-   0x11e4,
-   0,
-   {0x90,0x7d,0xc1,0xe0,0xf5,0x6e,0x90,0x7d,0xc2,0xe0,0xf5,0x6f}
-},
-{  3,
-   0x11f0,
-   0,
-   {0x12,0x11,0x44}
-},
-{  12,
-   0x11f3,
-   0,
-   {0x90,0x7d,0xff,0xe4,0xf0,0x75,0x70,0xc4,0x75,0x71,0x7d,0x75}
-},
-{  5,
-   0x11ff,
-   0,
-   {0x72,0x01,0x12,0x11,0x75}
-},
-{  1,
-   0x1204,
-   0,
-   {0x22}
-},
-{  2,
-   0x1205,
-   0,
-   {0x7a,0x04}
-},
-{  3,
-   0x1207,
-   0,
-   {0xba,0x40,0x00}
-},
-{  2,
-   0x120a,
-   0,
-   {0x50,0x36}
-},
-{  14,
-   0x120c,
-   0,
-   {0xea,0x24,0xc0,0xf5,0x82,0xe4,0x34,0x7d,0xf5,0x83,0xe0,0xfb,0x7c,0x00}
-},
-{  3,
-   0x121a,
-   0,
-   {0xbc,0x08,0x00}
-},
-{  2,
-   0x121d,
-   0,
-   {0x50,0x20}
-},
-{  6,
-   0x121f,
-   0,
-   {0x8b,0x05,0xed,0x30,0xe7,0x0b}
-},
-{  11,
-   0x1225,
-   0,
-   {0x90,0x7f,0x96,0x74,0x42,0xf0,0x74,0xc3,0xf0,0x80,0x08}
-},
-{  8,
-   0x1230,
-   0,
-   {0x90,0x7f,0x96,0xe4,0xf0,0x74,0x81,0xf0}
-},
-{  7,
-   0x1238,
-   0,
-   {0xeb,0x25,0xe0,0xfb,0x0c,0x80,0xdb}
-},
-{  3,
-   0x123f,
-   0,
-   {0x0a,0x80,0xc5}
-},
-{  1,
-   0x1242,
-   0,
-   {0x22}
-},
-{  4,
-   0x1243,
-   0,
-   {0x7a,0x00,0x7b,0xef}
-},
-{  3,
-   0x1247,
-   0,
-   {0xba,0x10,0x00}
-},
-{  2,
-   0x124a,
-   0,
-   {0x50,0x20}
-},
-{  14,
-   0x124c,
-   0,
-   {0x74,0x11,0x2b,0xfb,0x24,0x00,0xfc,0xe4,0x34,0x18,0xfd,0x8c,0x82,0x8d}
-},
-{  14,
-   0x125a,
-   0,
-   {0x83,0xe4,0xf0,0xea,0x24,0x00,0xf5,0x82,0xe4,0x34,0x19,0xf5,0x83,0xe4}
-},
-{  4,
-   0x1268,
-   0,
-   {0xf0,0x0a,0x80,0xdb}
-},
-{  1,
-   0x126c,
-   0,
-   {0x22}
-},
-{  14,
-   0x126d,
-   0,
-   {0x74,0xf8,0x24,0x00,0xf5,0x82,0x74,0x03,0x34,0x84,0xf5,0x83,0xe4,0xf0}
-},
-{  14,
-   0x127b,
-   0,
-   {0x74,0xf9,0x24,0x00,0xf5,0x82,0x74,0x03,0x34,0x84,0xf5,0x83,0xe4,0xf0}
-},
-{  14,
-   0x1289,
-   0,
-   {0x74,0xfa,0x24,0x00,0xf5,0x82,0x74,0x03,0x34,0x84,0xf5,0x83,0xe4,0xf0}
-},
-{  14,
-   0x1297,
-   0,
-   {0x74,0xfb,0x24,0x00,0xf5,0x82,0x74,0x03,0x34,0x84,0xf5,0x83,0xe4,0xf0}
-},
-{  14,
-   0x12a5,
-   0,
-   {0x74,0xff,0x24,0x00,0xf5,0x82,0x74,0x03,0x34,0x84,0xf5,0x83,0xe4,0xf0}
-},
-{  1,
-   0x12b3,
-   0,
-   {0x22}
-},
-{  14,
-   0x12b4,
-   0,
-   {0x12,0x03,0xcb,0x12,0x12,0x6d,0x7a,0xc0,0x7b,0x87,0x7c,0x01,0x74,0x01}
-},
-{  14,
-   0x12c2,
-   0,
-   {0x2a,0xfd,0xe4,0x3b,0xfe,0x8c,0x07,0x8a,0x82,0x8b,0x83,0x8c,0xf0,0x74}
-},
-{  14,
-   0x12d0,
-   0,
-   {0x01,0x12,0x14,0xbf,0x2d,0xfa,0xe4,0x3e,0xfb,0x8f,0x04,0x8d,0x82,0x8e}
-},
-{  14,
-   0x12de,
-   0,
-   {0x83,0x8f,0xf0,0x74,0x06,0x12,0x14,0xbf,0x74,0x01,0x2a,0xfd,0xe4,0x3b}
-},
-{  14,
-   0x12ec,
-   0,
-   {0xfe,0x8c,0x07,0x8a,0x82,0x8b,0x83,0x8c,0xf0,0xe4,0x12,0x14,0xbf,0x74}
-},
-{  14,
-   0x12fa,
-   0,
-   {0x01,0x2d,0xfa,0xe4,0x3e,0xfb,0x8f,0x04,0x8d,0x82,0x8e,0x83,0x8f,0xf0}
-},
-{  14,
-   0x1308,
-   0,
-   {0x74,0x0b,0x12,0x14,0xbf,0x74,0x01,0x2a,0xfd,0xe4,0x3b,0xfe,0x8c,0x07}
-},
-{  14,
-   0x1316,
-   0,
-   {0x8a,0x82,0x8b,0x83,0x8c,0xf0,0x74,0x08,0x12,0x14,0xbf,0x74,0x01,0x2d}
-},
-{  14,
-   0x1324,
-   0,
-   {0xfa,0xe4,0x3e,0xfb,0x8f,0x04,0x8d,0x82,0x8e,0x83,0x8f,0xf0,0x74,0x01}
-},
-{  14,
-   0x1332,
-   0,
-   {0x12,0x14,0xbf,0x2a,0xfd,0xe4,0x3b,0xfe,0x8c,0x07,0x8a,0x82,0x8b,0x83}
-},
-{  14,
-   0x1340,
-   0,
-   {0x8c,0xf0,0xe4,0x12,0x14,0xbf,0x74,0x01,0x2d,0xfa,0xe4,0x3e,0xfb,0x8f}
-},
-{  14,
-   0x134e,
-   0,
-   {0x04,0x8d,0x82,0x8e,0x83,0x8f,0xf0,0x74,0x03,0x12,0x14,0xbf,0x7d,0x00}
-},
-{  3,
-   0x135c,
-   0,
-   {0xbd,0x06,0x00}
-},
-{  2,
-   0x135f,
-   0,
-   {0x50,0x12}
-},
-{  11,
-   0x1361,
-   0,
-   {0x8a,0x82,0x8b,0x83,0x8c,0xf0,0x0a,0xba,0x00,0x01,0x0b}
-},
-{  7,
-   0x136c,
-   0,
-   {0xe4,0x12,0x14,0xbf,0x0d,0x80,0xe9}
-},
-{  13,
-   0x1373,
-   0,
-   {0x8a,0x82,0x8b,0x83,0x8c,0xf0,0xe5,0x74,0x12,0x14,0xbf,0x74,0xf9}
-},
-{  14,
-   0x1380,
-   0,
-   {0x24,0x00,0xf5,0x82,0x74,0x03,0x34,0x84,0xf5,0x83,0x74,0x0f,0xf0,0x74}
-},
-{  14,
-   0x138e,
-   0,
-   {0xfe,0x24,0x00,0xf5,0x82,0x74,0x03,0x34,0x84,0xf5,0x83,0x74,0x01,0xf0}
-},
-{  6,
-   0x139c,
-   0,
-   {0x12,0x03,0xe1,0x12,0x04,0xf7}
-},
-{  1,
-   0x13a2,
-   0,
-   {0x22}
-},
-{  13,
-   0x13a3,
-   0,
-   {0x90,0x7d,0xc1,0xe0,0xfa,0x24,0x00,0xfb,0xe4,0x34,0x19,0xfc,0x90}
-},
-{  14,
-   0x13b0,
-   0,
-   {0x7d,0xc2,0xe0,0xfd,0x8b,0x82,0x8c,0x83,0xf0,0x75,0xf0,0x11,0xea,0xa4}
-},
-{  3,
-   0x13be,
-   0,
-   {0xfa,0x7b,0x00}
-},
-{  3,
-   0x13c1,
-   0,
-   {0xbb,0x10,0x00}
-},
-{  2,
-   0x13c4,
-   0,
-   {0x50,0x24}
-},
-{  14,
-   0x13c6,
-   0,
-   {0xea,0x24,0x00,0xfc,0xe4,0x34,0x18,0xfd,0xeb,0x2c,0xfc,0xe4,0x3d,0xfd}
-},
-{  14,
-   0x13d4,
-   0,
-   {0x74,0x04,0x2b,0x24,0xc0,0xf5,0x82,0xe4,0x34,0x7d,0xf5,0x83,0xe0,0xfe}
-},
-{  8,
-   0x13e2,
-   0,
-   {0x8c,0x82,0x8d,0x83,0xf0,0x0b,0x80,0xd7}
-},
-{  14,
-   0x13ea,
-   0,
-   {0xea,0x24,0x00,0xfa,0xe4,0x34,0x18,0xfb,0x74,0x10,0x2a,0xf5,0x82,0xe4}
-},
-{  5,
-   0x13f8,
-   0,
-   {0x3b,0xf5,0x83,0xe4,0xf0}
-},
-{  1,
-   0x13fd,
-   0,
-   {0x22}
-},
-{  4,
-   0x13fe,
-   0,
-   {0xe5,0x76,0x60,0x02}
-},
-{  2,
-   0x1402,
-   0,
-   {0x80,0x16}
-},
-{  12,
-   0x1404,
-   0,
-   {0x74,0x0f,0x55,0x75,0xfa,0x8a,0x75,0x24,0x00,0xf5,0x82,0xe4}
-},
-{  10,
-   0x1410,
-   0,
-   {0x34,0x19,0xf5,0x83,0xe0,0xf5,0x74,0x12,0x12,0xb4}
-},
-{  10,
-   0x141a,
-   0,
-   {0x12,0x10,0xca,0x75,0x6e,0x00,0x75,0x6f,0x00,0x12}
-},
-{  6,
-   0x1424,
-   0,
-   {0x11,0x44,0x75,0x70,0xb9,0x75}
-},
-{  6,
-   0x142a,
-   0,
-   {0x71,0x14,0x75,0x72,0x02,0x12}
-},
-{  11,
-   0x1430,
-   0,
-   {0x11,0x75,0xe5,0x76,0xb4,0x02,0x04,0x74,0x01,0x80,0x01}
-},
-{  1,
-   0x143b,
-   0,
-   {0xe4}
-},
-{  3,
-   0x143c,
-   0,
-   {0xfa,0x70,0x0f}
-},
-{  12,
-   0x143f,
-   0,
-   {0x74,0x01,0x25,0x75,0xf5,0x73,0xc0,0x02,0x12,0x11,0xa0,0xd0}
-},
-{  3,
-   0x144b,
-   0,
-   {0x02,0x80,0x0a}
-},
-{  10,
-   0x144e,
-   0,
-   {0x85,0x75,0x73,0xc0,0x02,0x12,0x11,0xa0,0xd0,0x02}
-},
-{  12,
-   0x1458,
-   0,
-   {0x75,0x6e,0x00,0x75,0x6f,0x01,0xc0,0x02,0x12,0x11,0x44,0xd0}
-},
-{  4,
-   0x1464,
-   0,
-   {0x02,0xea,0x70,0x1a}
-},
-{  13,
-   0x1468,
-   0,
-   {0x75,0xf0,0x11,0xe5,0x75,0xa4,0xfa,0x24,0x00,0xfa,0xe4,0x34,0x18}
-},
-{  9,
-   0x1475,
-   0,
-   {0xfb,0x8a,0x70,0x8b,0x71,0x75,0x72,0x01,0x12}
-},
-{  4,
-   0x147e,
-   0,
-   {0x11,0x75,0x80,0x36}
-},
-{  2,
-   0x1482,
-   0,
-   {0x7a,0x00}
-},
-{  3,
-   0x1484,
-   0,
-   {0xba,0x10,0x00}
-},
-{  2,
-   0x1487,
-   0,
-   {0x50,0x2f}
-},
-{  13,
-   0x1489,
-   0,
-   {0xea,0x24,0x00,0xf5,0x82,0xe4,0x34,0x19,0xf5,0x83,0xe0,0xfb,0xe5}
-},
-{  4,
-   0x1496,
-   0,
-   {0x75,0xb5,0x03,0x1b}
-},
-{  14,
-   0x149a,
-   0,
-   {0x75,0xf0,0x11,0xea,0xa4,0xfb,0x24,0x00,0xfb,0xe4,0x34,0x18,0xfc,0x8b}
-},
-{  9,
-   0x14a8,
-   0,
-   {0x70,0x8c,0x71,0x75,0x72,0x01,0xc0,0x02,0x12}
-},
-{  4,
-   0x14b1,
-   0,
-   {0x11,0x75,0xd0,0x02}
-},
-{  3,
-   0x14b5,
-   0,
-   {0x0a,0x80,0xcc}
-},
-{  1,
-   0x14b8,
-   0,
-   {0x22}
-},
-{  6,
-   0x14b9,
-   0,
-   {0x50,0x72,0x6f,0x67,0x20,0x00}
-},
-{  14,
-   0x14bf,
-   0,
-   {0xc8,0xc0,0xe0,0xc8,0xc0,0xe0,0xe5,0xf0,0x60,0x0b,0x14,0x60,0x0f,0x14}
-},
-{  7,
-   0x14cd,
-   0,
-   {0x60,0x11,0x14,0x60,0x12,0x80,0x15}
-},
-{  7,
-   0x14d4,
-   0,
-   {0xd0,0xe0,0xa8,0x82,0xf6,0x80,0x0e}
-},
-{  5,
-   0x14db,
-   0,
-   {0xd0,0xe0,0xf0,0x80,0x09}
-},
-{  4,
-   0x14e0,
-   0,
-   {0xd0,0xe0,0x80,0x05}
-},
-{  5,
-   0x14e4,
-   0,
-   {0xd0,0xe0,0xa8,0x82,0xf2}
-},
-{  4,
-   0x14e9,
-   0,
-   {0xc8,0xd0,0xe0,0xc8}
-},
-{  1,
-   0x14ed,
-   0,
-   {0x22}
-},
-{  14,
-   0x14ee,
-   0,
-   {0xc8,0xc0,0xe0,0xe5,0xf0,0x60,0x0d,0x14,0x60,0x0f,0x14,0x60,0x0f,0x14}
-},
-{  6,
-   0x14fc,
-   0,
-   {0x60,0x10,0x74,0xff,0x80,0x0f}
-},
-{  5,
-   0x1502,
-   0,
-   {0xa8,0x82,0xe6,0x80,0x0a}
-},
-{  3,
-   0x1507,
-   0,
-   {0xe0,0x80,0x07}
-},
-{  4,
-   0x150a,
-   0,
-   {0xe4,0x93,0x80,0x03}
-},
-{  3,
-   0x150e,
-   0,
-   {0xa8,0x82,0xe2}
-},
-{  4,
-   0x1511,
-   0,
-   {0xf8,0xd0,0xe0,0xc8}
-},
-{  1,
-   0x1515,
-   0,
-   {0x22}
-},
-{  0,
-   0x0,
-   1,
-   {0}
-}
-};
diff --git a/drivers/usb/firmware.h b/drivers/usb/firmware.h
new file mode 100644 (file)
index 0000000..a742558
--- /dev/null
@@ -0,0 +1,3213 @@
+//$Id: firmware.h,v 1.1 1999/12/17 08:55:05 fliegl Exp $
+static INTEL_HEX_RECORD firmware[] = {
+{  2,
+   0x0,
+   0,
+   {0x21,0x57}
+},
+{  3,
+   0x3,
+   0,
+   {0x02,0x01,0x66}
+},
+{  3,
+   0xb,
+   0,
+   {0x02,0x01,0x66}
+},
+{  3,
+   0x13,
+   0,
+   {0x02,0x01,0x66}
+},
+{  3,
+   0x1b,
+   0,
+   {0x02,0x01,0x66}
+},
+{  3,
+   0x23,
+   0,
+   {0x02,0x01,0x66}
+},
+{  3,
+   0x2b,
+   0,
+   {0x02,0x01,0x66}
+},
+{  3,
+   0x33,
+   0,
+   {0x02,0x03,0x0f}
+},
+{  3,
+   0x3b,
+   0,
+   {0x02,0x01,0x66}
+},
+{  3,
+   0x43,
+   0,
+   {0x02,0x01,0x00}
+},
+{  3,
+   0x4b,
+   0,
+   {0x02,0x01,0x66}
+},
+{  3,
+   0x53,
+   0,
+   {0x02,0x01,0x66}
+},
+{  3,
+   0x5b,
+   0,
+   {0x02,0x04,0xbd}
+},
+{  3,
+   0x63,
+   0,
+   {0x02,0x01,0x67}
+},
+{  3,
+   0x100,
+   0,
+   {0x02,0x0c,0x5a}
+},
+{  3,
+   0x104,
+   0,
+   {0x02,0x01,0xed}
+},
+{  3,
+   0x108,
+   0,
+   {0x02,0x02,0x51}
+},
+{  3,
+   0x10c,
+   0,
+   {0x02,0x02,0x7c}
+},
+{  3,
+   0x110,
+   0,
+   {0x02,0x02,0xe4}
+},
+{  1,
+   0x114,
+   0,
+   {0x32}
+},
+{  1,
+   0x118,
+   0,
+   {0x32}
+},
+{  3,
+   0x11c,
+   0,
+   {0x02,0x05,0xfd}
+},
+{  3,
+   0x120,
+   0,
+   {0x02,0x00,0x00}
+},
+{  3,
+   0x124,
+   0,
+   {0x02,0x00,0x00}
+},
+{  3,
+   0x128,
+   0,
+   {0x02,0x04,0x3c}
+},
+{  3,
+   0x12c,
+   0,
+   {0x02,0x04,0x6a}
+},
+{  3,
+   0x130,
+   0,
+   {0x02,0x00,0x00}
+},
+{  3,
+   0x134,
+   0,
+   {0x02,0x00,0x00}
+},
+{  3,
+   0x138,
+   0,
+   {0x02,0x00,0x00}
+},
+{  3,
+   0x13c,
+   0,
+   {0x02,0x00,0x00}
+},
+{  3,
+   0x140,
+   0,
+   {0x02,0x00,0x00}
+},
+{  3,
+   0x144,
+   0,
+   {0x02,0x00,0x00}
+},
+{  3,
+   0x148,
+   0,
+   {0x02,0x00,0x00}
+},
+{  3,
+   0x14c,
+   0,
+   {0x02,0x00,0x00}
+},
+{  3,
+   0x150,
+   0,
+   {0x02,0x00,0x00}
+},
+{  3,
+   0x154,
+   0,
+   {0x02,0x00,0x00}
+},
+{  10,
+   0x157,
+   0,
+   {0x75,0x81,0x7f,0xe5,0x82,0x60,0x03,0x02,0x01,0x61}
+},
+{  5,
+   0x161,
+   0,
+   {0x12,0x07,0x6f,0x21,0x64}
+},
+{  1,
+   0x166,
+   0,
+   {0x32}
+},
+{  14,
+   0x167,
+   0,
+   {0xc0,0xd0,0xc0,0x86,0xc0,0x82,0xc0,0x83,0xc0,0xe0,0x90,0x7f,0x97,0xe0}
+},
+{  14,
+   0x175,
+   0,
+   {0x44,0x80,0xf0,0x90,0x7f,0x69,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0}
+},
+{  14,
+   0x183,
+   0,
+   {0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0}
+},
+{  14,
+   0x191,
+   0,
+   {0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0x90,0x7f,0x97,0xe0}
+},
+{  3,
+   0x19f,
+   0,
+   {0x55,0x7f,0xf0}
+},
+{  14,
+   0x1a2,
+   0,
+   {0x90,0x7f,0x9a,0xe0,0x30,0xe4,0x23,0x90,0x7f,0x68,0xf0,0xf0,0xf0,0xf0}
+},
+{  14,
+   0x1b0,
+   0,
+   {0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0}
+},
+{  14,
+   0x1be,
+   0,
+   {0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0}
+},
+{  14,
+   0x1cc,
+   0,
+   {0xe5,0xd8,0xc2,0xe3,0xf5,0xd8,0xd0,0xe0,0xd0,0x83,0xd0,0x82,0xd0,0x86}
+},
+{  3,
+   0x1da,
+   0,
+   {0xd0,0xd0,0x32}
+},
+{  8,
+   0x1dd,
+   0,
+   {0x75,0x86,0x00,0x90,0xff,0xc3,0x7c,0x05}
+},
+{  7,
+   0x1e5,
+   0,
+   {0xa3,0xe5,0x82,0x45,0x83,0x70,0xf9}
+},
+{  1,
+   0x1ec,
+   0,
+   {0x22}
+},
+{  14,
+   0x1ed,
+   0,
+   {0xc0,0xe0,0xc0,0xf0,0xc0,0x82,0xc0,0x83,0xc0,0x02,0xc0,0x03,0xc0,0xd0}
+},
+{  14,
+   0x1fb,
+   0,
+   {0x75,0xd0,0x00,0xc0,0x86,0x75,0x86,0x00,0xe5,0x91,0xc2,0xe4,0xf5,0x91}
+},
+{  13,
+   0x209,
+   0,
+   {0x90,0x88,0x00,0xe0,0xf5,0x41,0x90,0x7f,0xab,0x74,0x02,0xf0,0x90}
+},
+{  9,
+   0x216,
+   0,
+   {0x7f,0xab,0x74,0x02,0xf0,0xe5,0x32,0x60,0x21}
+},
+{  4,
+   0x21f,
+   0,
+   {0x7a,0x00,0x7b,0x00}
+},
+{  11,
+   0x223,
+   0,
+   {0xc3,0xea,0x94,0x18,0xeb,0x64,0x80,0x94,0x80,0x50,0x12}
+},
+{  14,
+   0x22e,
+   0,
+   {0x90,0x7f,0x69,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0x0a,0xba,0x00}
+},
+{  2,
+   0x23c,
+   0,
+   {0x01,0x0b}
+},
+{  2,
+   0x23e,
+   0,
+   {0x80,0xe3}
+},
+{  2,
+   0x240,
+   0,
+   {0xd0,0x86}
+},
+{  14,
+   0x242,
+   0,
+   {0xd0,0xd0,0xd0,0x03,0xd0,0x02,0xd0,0x83,0xd0,0x82,0xd0,0xf0,0xd0,0xe0}
+},
+{  1,
+   0x250,
+   0,
+   {0x32}
+},
+{  14,
+   0x251,
+   0,
+   {0xc0,0xe0,0xc0,0xf0,0xc0,0x82,0xc0,0x83,0xc0,0xd0,0x75,0xd0,0x00,0xc0}
+},
+{  14,
+   0x25f,
+   0,
+   {0x86,0x75,0x86,0x00,0xe5,0x91,0xc2,0xe4,0xf5,0x91,0x90,0x7f,0xab,0x74}
+},
+{  4,
+   0x26d,
+   0,
+   {0x04,0xf0,0xd0,0x86}
+},
+{  11,
+   0x271,
+   0,
+   {0xd0,0xd0,0xd0,0x83,0xd0,0x82,0xd0,0xf0,0xd0,0xe0,0x32}
+},
+{  14,
+   0x27c,
+   0,
+   {0xc0,0xe0,0xc0,0xf0,0xc0,0x82,0xc0,0x83,0xc0,0x02,0xc0,0x03,0xc0,0x04}
+},
+{  14,
+   0x28a,
+   0,
+   {0xc0,0x05,0xc0,0x06,0xc0,0x07,0xc0,0x00,0xc0,0x01,0xc0,0xd0,0x75,0xd0}
+},
+{  13,
+   0x298,
+   0,
+   {0x00,0xc0,0x86,0x75,0x86,0x00,0xe5,0x91,0xc2,0xe4,0xf5,0x91,0x90}
+},
+{  12,
+   0x2a5,
+   0,
+   {0x7f,0xab,0x74,0x08,0xf0,0x75,0x6e,0x00,0x75,0x6f,0x02,0x12}
+},
+{  6,
+   0x2b1,
+   0,
+   {0x11,0x44,0x75,0x70,0x39,0x75}
+},
+{  6,
+   0x2b7,
+   0,
+   {0x71,0x0c,0x75,0x72,0x02,0x12}
+},
+{  12,
+   0x2bd,
+   0,
+   {0x11,0x75,0x90,0x7f,0xd6,0xe4,0xf0,0x75,0xd8,0x20,0xd0,0x86}
+},
+{  14,
+   0x2c9,
+   0,
+   {0xd0,0xd0,0xd0,0x01,0xd0,0x00,0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,0x04}
+},
+{  13,
+   0x2d7,
+   0,
+   {0xd0,0x03,0xd0,0x02,0xd0,0x83,0xd0,0x82,0xd0,0xf0,0xd0,0xe0,0x32}
+},
+{  14,
+   0x2e4,
+   0,
+   {0xc0,0xe0,0xc0,0xf0,0xc0,0x82,0xc0,0x83,0xc0,0xd0,0x75,0xd0,0x00,0xc0}
+},
+{  14,
+   0x2f2,
+   0,
+   {0x86,0x75,0x86,0x00,0xe5,0x91,0xc2,0xe4,0xf5,0x91,0x90,0x7f,0xab,0x74}
+},
+{  4,
+   0x300,
+   0,
+   {0x10,0xf0,0xd0,0x86}
+},
+{  11,
+   0x304,
+   0,
+   {0xd0,0xd0,0xd0,0x83,0xd0,0x82,0xd0,0xf0,0xd0,0xe0,0x32}
+},
+{  14,
+   0x30f,
+   0,
+   {0xc0,0xe0,0xc0,0xf0,0xc0,0x82,0xc0,0x83,0xc0,0x02,0xc0,0x03,0xc0,0x04}
+},
+{  14,
+   0x31d,
+   0,
+   {0xc0,0x05,0xc0,0x06,0xc0,0x07,0xc0,0x00,0xc0,0x01,0xc0,0xd0,0x75,0xd0}
+},
+{  12,
+   0x32b,
+   0,
+   {0x00,0xc0,0x86,0x75,0x86,0x00,0x75,0x6e,0x00,0x75,0x6f,0x02}
+},
+{  7,
+   0x337,
+   0,
+   {0x12,0x11,0x44,0x75,0x70,0x40,0x75}
+},
+{  6,
+   0x33e,
+   0,
+   {0x71,0x0c,0x75,0x72,0x02,0x12}
+},
+{  14,
+   0x344,
+   0,
+   {0x11,0x75,0x90,0x7f,0xd6,0x74,0x02,0xf0,0x90,0x7f,0xd6,0x74,0x06,0xf0}
+},
+{  5,
+   0x352,
+   0,
+   {0x75,0xd8,0x10,0xd0,0x86}
+},
+{  14,
+   0x357,
+   0,
+   {0xd0,0xd0,0xd0,0x01,0xd0,0x00,0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,0x04}
+},
+{  13,
+   0x365,
+   0,
+   {0xd0,0x03,0xd0,0x02,0xd0,0x83,0xd0,0x82,0xd0,0xf0,0xd0,0xe0,0x32}
+},
+{  13,
+   0x372,
+   0,
+   {0x90,0x7f,0xa5,0x74,0x80,0xf0,0x90,0x7f,0xa6,0x74,0x9a,0xf0,0x12}
+},
+{  12,
+   0x37f,
+   0,
+   {0x10,0x1b,0x90,0x7f,0xa6,0xe5,0x42,0xf0,0x12,0x10,0x1b,0x90}
+},
+{  13,
+   0x38b,
+   0,
+   {0x7f,0xa6,0xe5,0x43,0xf0,0x12,0x10,0x1b,0x90,0x7f,0xa5,0x74,0x40}
+},
+{  1,
+   0x398,
+   0,
+   {0xf0}
+},
+{  1,
+   0x399,
+   0,
+   {0x22}
+},
+{  13,
+   0x39a,
+   0,
+   {0x90,0x7f,0xa5,0x74,0x80,0xf0,0x90,0x7f,0xa6,0x74,0x9a,0xf0,0x12}
+},
+{  12,
+   0x3a7,
+   0,
+   {0x10,0x1b,0x90,0x7f,0xa6,0xe5,0x44,0xf0,0x12,0x10,0x1b,0x90}
+},
+{  12,
+   0x3b3,
+   0,
+   {0x7f,0xa6,0xe5,0x45,0xf0,0x12,0x10,0x1b,0x90,0x7f,0xa6,0xe5}
+},
+{  11,
+   0x3bf,
+   0,
+   {0x46,0xf0,0x12,0x10,0x1b,0x90,0x7f,0xa5,0x74,0x40,0xf0}
+},
+{  1,
+   0x3ca,
+   0,
+   {0x22}
+},
+{  10,
+   0x3cb,
+   0,
+   {0x75,0x44,0x02,0x75,0x45,0x00,0x75,0x46,0x00,0x12}
+},
+{  9,
+   0x3d5,
+   0,
+   {0x03,0x9a,0x75,0x42,0x03,0x75,0x43,0x00,0x12}
+},
+{  2,
+   0x3de,
+   0,
+   {0x03,0x72}
+},
+{  1,
+   0x3e0,
+   0,
+   {0x22}
+},
+{  12,
+   0x3e1,
+   0,
+   {0x90,0x88,0x00,0xe5,0x36,0xf0,0x90,0x88,0x00,0x74,0x10,0x25}
+},
+{  9,
+   0x3ed,
+   0,
+   {0x36,0xf0,0x12,0x01,0xdd,0x75,0x42,0x01,0x75}
+},
+{  9,
+   0x3f6,
+   0,
+   {0x43,0x18,0x12,0x03,0x72,0x75,0x44,0x02,0x75}
+},
+{  9,
+   0x3ff,
+   0,
+   {0x45,0x00,0x75,0x46,0x00,0x12,0x03,0x9a,0x75}
+},
+{  8,
+   0x408,
+   0,
+   {0x42,0x03,0x75,0x43,0x44,0x12,0x03,0x72}
+},
+{  1,
+   0x410,
+   0,
+   {0x22}
+},
+{  14,
+   0x411,
+   0,
+   {0xc0,0xe0,0xc0,0xf0,0xc0,0x82,0xc0,0x83,0xc0,0xd0,0x75,0xd0,0x00,0xc0}
+},
+{  14,
+   0x41f,
+   0,
+   {0x86,0x75,0x86,0x00,0xe5,0x91,0xc2,0xe4,0xf5,0x91,0x90,0x7f,0xaa,0x74}
+},
+{  4,
+   0x42d,
+   0,
+   {0x02,0xf0,0xd0,0x86}
+},
+{  11,
+   0x431,
+   0,
+   {0xd0,0xd0,0xd0,0x83,0xd0,0x82,0xd0,0xf0,0xd0,0xe0,0x32}
+},
+{  14,
+   0x43c,
+   0,
+   {0xc0,0xe0,0xc0,0xf0,0xc0,0x82,0xc0,0x83,0xc0,0xd0,0x75,0xd0,0x00,0xc0}
+},
+{  14,
+   0x44a,
+   0,
+   {0x86,0x75,0x86,0x00,0xe5,0x91,0xc2,0xe4,0xf5,0x91,0x90,0x7f,0xa9,0x74}
+},
+{  7,
+   0x458,
+   0,
+   {0x04,0xf0,0x75,0x30,0x01,0xd0,0x86}
+},
+{  11,
+   0x45f,
+   0,
+   {0xd0,0xd0,0xd0,0x83,0xd0,0x82,0xd0,0xf0,0xd0,0xe0,0x32}
+},
+{  14,
+   0x46a,
+   0,
+   {0xc0,0xe0,0xc0,0xf0,0xc0,0x82,0xc0,0x83,0xc0,0xd0,0x75,0xd0,0x00,0xc0}
+},
+{  14,
+   0x478,
+   0,
+   {0x86,0x75,0x86,0x00,0xe5,0x91,0xc2,0xe4,0xf5,0x91,0x90,0x7f,0xaa,0x74}
+},
+{  7,
+   0x486,
+   0,
+   {0x04,0xf0,0x75,0x31,0x01,0xd0,0x86}
+},
+{  11,
+   0x48d,
+   0,
+   {0xd0,0xd0,0xd0,0x83,0xd0,0x82,0xd0,0xf0,0xd0,0xe0,0x32}
+},
+{  14,
+   0x498,
+   0,
+   {0xc0,0xe0,0xc0,0xf0,0xc0,0x82,0xc0,0x83,0xc0,0xd0,0x75,0xd0,0x00,0xc0}
+},
+{  12,
+   0x4a6,
+   0,
+   {0x86,0x75,0x86,0x00,0xe5,0x91,0xc2,0xe5,0xf5,0x91,0xd0,0x86}
+},
+{  11,
+   0x4b2,
+   0,
+   {0xd0,0xd0,0xd0,0x83,0xd0,0x82,0xd0,0xf0,0xd0,0xe0,0x32}
+},
+{  14,
+   0x4bd,
+   0,
+   {0xc0,0xe0,0xc0,0xf0,0xc0,0x82,0xc0,0x83,0xc0,0xd0,0x75,0xd0,0x00,0xc0}
+},
+{  12,
+   0x4cb,
+   0,
+   {0x86,0x75,0x86,0x00,0xe5,0x91,0xc2,0xe7,0xf5,0x91,0xd0,0x86}
+},
+{  11,
+   0x4d7,
+   0,
+   {0xd0,0xd0,0xd0,0x83,0xd0,0x82,0xd0,0xf0,0xd0,0xe0,0x32}
+},
+{  12,
+   0x4e2,
+   0,
+   {0x90,0x7f,0xea,0xe0,0xfa,0x8a,0x20,0x90,0x7f,0x96,0xe4,0xf0}
+},
+{  1,
+   0x4ee,
+   0,
+   {0x22}
+},
+{  7,
+   0x4ef,
+   0,
+   {0x90,0x7f,0xea,0xe0,0xfa,0x8a,0x21}
+},
+{  1,
+   0x4f6,
+   0,
+   {0x22}
+},
+{  14,
+   0x4f7,
+   0,
+   {0x90,0x17,0x13,0xe0,0xfa,0x90,0x17,0x15,0xe0,0xfb,0x74,0x80,0x2a,0xfa}
+},
+{  14,
+   0x505,
+   0,
+   {0x74,0x80,0x2b,0xfb,0xea,0x03,0x03,0x54,0x3f,0xfc,0xea,0xc4,0x23,0x54}
+},
+{  14,
+   0x513,
+   0,
+   {0x1f,0xfa,0x2c,0xfa,0xeb,0x03,0x03,0x54,0x3f,0xfc,0xeb,0xc4,0x23,0x54}
+},
+{  11,
+   0x521,
+   0,
+   {0x1f,0xfb,0x2c,0xfb,0x90,0x17,0x0a,0xe0,0xfc,0x60,0x02}
+},
+{  2,
+   0x52c,
+   0,
+   {0x7a,0x00}
+},
+{  7,
+   0x52e,
+   0,
+   {0x90,0x17,0x0c,0xe0,0xfc,0x60,0x02}
+},
+{  2,
+   0x535,
+   0,
+   {0x7b,0x00}
+},
+{  11,
+   0x537,
+   0,
+   {0xea,0x2b,0xfc,0xc3,0x13,0xf5,0x3a,0x75,0x44,0x02,0x8b}
+},
+{  7,
+   0x542,
+   0,
+   {0x45,0x8a,0x46,0x12,0x03,0x9a,0x75}
+},
+{  9,
+   0x549,
+   0,
+   {0x6e,0x08,0x75,0x6f,0x00,0x12,0x11,0x44,0x75}
+},
+{  4,
+   0x552,
+   0,
+   {0x70,0x47,0x75,0x71}
+},
+{  8,
+   0x556,
+   0,
+   {0x0c,0x75,0x72,0x02,0x12,0x11,0x75,0x85}
+},
+{  5,
+   0x55e,
+   0,
+   {0x3a,0x73,0x12,0x11,0xa0}
+},
+{  1,
+   0x563,
+   0,
+   {0x22}
+},
+{  14,
+   0x564,
+   0,
+   {0x90,0x7f,0x96,0xe0,0xfa,0x90,0x7f,0x96,0x74,0x80,0x65,0x02,0xf0,0x90}
+},
+{  14,
+   0x572,
+   0,
+   {0x7f,0xeb,0xe0,0xfa,0x90,0x7f,0xea,0xe0,0xfb,0x90,0x7f,0xef,0xe0,0xfc}
+},
+{  14,
+   0x580,
+   0,
+   {0x33,0x95,0xe0,0xfd,0x8c,0x05,0x7c,0x00,0x90,0x7f,0xee,0xe0,0xfe,0x33}
+},
+{  14,
+   0x58e,
+   0,
+   {0x95,0xe0,0xff,0xec,0x2e,0xfc,0xed,0x3f,0xfd,0x90,0x7f,0xe9,0xe0,0xfe}
+},
+{  5,
+   0x59c,
+   0,
+   {0xbe,0x01,0x02,0x80,0x03}
+},
+{  3,
+   0x5a1,
+   0,
+   {0x02,0x05,0xf9}
+},
+{  6,
+   0x5a4,
+   0,
+   {0xbc,0x01,0x21,0xbd,0x00,0x1e}
+},
+{  14,
+   0x5aa,
+   0,
+   {0xea,0xc4,0x03,0x54,0xf8,0xfc,0xeb,0x25,0xe0,0xfd,0x2c,0x24,0x00,0xfc}
+},
+{  14,
+   0x5b8,
+   0,
+   {0xe4,0x34,0x17,0xfd,0x90,0x7e,0xc0,0xe0,0xfe,0x8c,0x82,0x8d,0x83,0xf0}
+},
+{  2,
+   0x5c6,
+   0,
+   {0x80,0x31}
+},
+{  14,
+   0x5c8,
+   0,
+   {0xea,0xc4,0x03,0x54,0xf8,0xfa,0xeb,0x25,0xe0,0xfb,0x2a,0xfa,0x24,0x00}
+},
+{  14,
+   0x5d6,
+   0,
+   {0xfb,0xe4,0x34,0x17,0xfc,0x90,0x7e,0xc0,0xe0,0xfd,0x8b,0x82,0x8c,0x83}
+},
+{  14,
+   0x5e4,
+   0,
+   {0xf0,0x74,0x01,0x2a,0x24,0x00,0xfa,0xe4,0x34,0x17,0xfb,0x90,0x7e,0xc1}
+},
+{  7,
+   0x5f2,
+   0,
+   {0xe0,0xfc,0x8a,0x82,0x8b,0x83,0xf0}
+},
+{  3,
+   0x5f9,
+   0,
+   {0x75,0x38,0x01}
+},
+{  1,
+   0x5fc,
+   0,
+   {0x22}
+},
+{  14,
+   0x5fd,
+   0,
+   {0xc0,0xe0,0xc0,0xf0,0xc0,0x82,0xc0,0x83,0xc0,0x02,0xc0,0x03,0xc0,0x04}
+},
+{  14,
+   0x60b,
+   0,
+   {0xc0,0x05,0xc0,0x06,0xc0,0x07,0xc0,0x00,0xc0,0x01,0xc0,0xd0,0x75,0xd0}
+},
+{  13,
+   0x619,
+   0,
+   {0x00,0xc0,0x86,0x75,0x86,0x00,0xe5,0x91,0xc2,0xe4,0xf5,0x91,0x90}
+},
+{  13,
+   0x626,
+   0,
+   {0x7f,0xaa,0x74,0x01,0xf0,0x12,0x05,0x64,0x75,0x37,0x00,0xd0,0x86}
+},
+{  14,
+   0x633,
+   0,
+   {0xd0,0xd0,0xd0,0x01,0xd0,0x00,0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,0x04}
+},
+{  13,
+   0x641,
+   0,
+   {0xd0,0x03,0xd0,0x02,0xd0,0x83,0xd0,0x82,0xd0,0xf0,0xd0,0xe0,0x32}
+},
+{  14,
+   0x64e,
+   0,
+   {0x90,0x7f,0xeb,0xe0,0xfa,0x90,0x7f,0xea,0xe0,0xfb,0x90,0x7f,0xee,0xe0}
+},
+{  14,
+   0x65c,
+   0,
+   {0xfc,0x33,0x95,0xe0,0xfd,0x90,0x7f,0x96,0xe0,0xfe,0x90,0x7f,0x96,0x74}
+},
+{  14,
+   0x66a,
+   0,
+   {0x80,0x65,0x06,0xf0,0x90,0x7f,0x00,0x74,0x01,0xf0,0xea,0xc4,0x03,0x54}
+},
+{  14,
+   0x678,
+   0,
+   {0xf8,0xfe,0xeb,0x25,0xe0,0xfb,0x2e,0xfe,0x24,0x00,0xfb,0xe4,0x34,0x17}
+},
+{  14,
+   0x686,
+   0,
+   {0xff,0x8b,0x82,0x8f,0x83,0xe0,0xfb,0x74,0x01,0x2e,0x24,0x00,0xfe,0xe4}
+},
+{  14,
+   0x694,
+   0,
+   {0x34,0x17,0xff,0x8e,0x82,0x8f,0x83,0xe0,0xfe,0x90,0x7f,0xe9,0xe0,0xff}
+},
+{  3,
+   0x6a2,
+   0,
+   {0xbf,0x81,0x0a}
+},
+{  10,
+   0x6a5,
+   0,
+   {0x90,0x7f,0x00,0xeb,0xf0,0x90,0x7f,0x01,0xee,0xf0}
+},
+{  8,
+   0x6af,
+   0,
+   {0x90,0x7f,0xe9,0xe0,0xfb,0xbb,0x82,0x1a}
+},
+{  3,
+   0x6b7,
+   0,
+   {0xba,0x01,0x0c}
+},
+{  12,
+   0x6ba,
+   0,
+   {0x90,0x7f,0x00,0xe4,0xf0,0x90,0x7f,0x01,0xe4,0xf0,0x80,0x0b}
+},
+{  11,
+   0x6c6,
+   0,
+   {0x90,0x7f,0x00,0xe4,0xf0,0x90,0x7f,0x01,0x74,0xb5,0xf0}
+},
+{  8,
+   0x6d1,
+   0,
+   {0x90,0x7f,0xe9,0xe0,0xfb,0xbb,0x83,0x1b}
+},
+{  3,
+   0x6d9,
+   0,
+   {0xba,0x01,0x0d}
+},
+{  13,
+   0x6dc,
+   0,
+   {0x90,0x7f,0x00,0x74,0x01,0xf0,0x90,0x7f,0x01,0xe4,0xf0,0x80,0x0b}
+},
+{  11,
+   0x6e9,
+   0,
+   {0x90,0x7f,0x00,0xe4,0xf0,0x90,0x7f,0x01,0x74,0x12,0xf0}
+},
+{  8,
+   0x6f4,
+   0,
+   {0x90,0x7f,0xe9,0xe0,0xfb,0xbb,0x84,0x1c}
+},
+{  3,
+   0x6fc,
+   0,
+   {0xba,0x01,0x0d}
+},
+{  13,
+   0x6ff,
+   0,
+   {0x90,0x7f,0x00,0x74,0x01,0xf0,0x90,0x7f,0x01,0xe4,0xf0,0x80,0x0c}
+},
+{  12,
+   0x70c,
+   0,
+   {0x90,0x7f,0x00,0x74,0x80,0xf0,0x90,0x7f,0x01,0x74,0x01,0xf0}
+},
+{  5,
+   0x718,
+   0,
+   {0x90,0x7f,0xb5,0xec,0xf0}
+},
+{  1,
+   0x71d,
+   0,
+   {0x22}
+},
+{  12,
+   0x71e,
+   0,
+   {0x75,0x36,0x0d,0x90,0x88,0x00,0x74,0x1d,0xf0,0x75,0x6b,0x80}
+},
+{  10,
+   0x72a,
+   0,
+   {0x75,0x6c,0x3c,0x12,0x10,0xe2,0x75,0x6b,0x80,0x75}
+},
+{  9,
+   0x734,
+   0,
+   {0x6c,0x0f,0x12,0x10,0xe2,0x75,0x6b,0x80,0x75}
+},
+{  9,
+   0x73d,
+   0,
+   {0x6c,0x06,0x12,0x10,0xe2,0x75,0x6b,0x80,0x75}
+},
+{  7,
+   0x746,
+   0,
+   {0x6c,0x01,0x12,0x10,0xe2,0x7a,0x00}
+},
+{  3,
+   0x74d,
+   0,
+   {0xba,0xff,0x00}
+},
+{  2,
+   0x750,
+   0,
+   {0x50,0x0a}
+},
+{  10,
+   0x752,
+   0,
+   {0xc0,0x02,0x12,0x01,0xdd,0xd0,0x02,0x0a,0x80,0xf1}
+},
+{  10,
+   0x75c,
+   0,
+   {0x75,0x6b,0x80,0x75,0x6c,0x3c,0x12,0x10,0xe2,0x75}
+},
+{  8,
+   0x766,
+   0,
+   {0x6b,0x80,0x75,0x6c,0x0f,0x12,0x10,0xe2}
+},
+{  1,
+   0x76e,
+   0,
+   {0x22}
+},
+{  14,
+   0x76f,
+   0,
+   {0x90,0x7f,0xa1,0xe4,0xf0,0x90,0x7f,0xaf,0x74,0x01,0xf0,0x90,0x7f,0x92}
+},
+{  14,
+   0x77d,
+   0,
+   {0x74,0x02,0xf0,0x75,0x8e,0x31,0x75,0x89,0x21,0x75,0x88,0x00,0x75,0xc8}
+},
+{  14,
+   0x78b,
+   0,
+   {0x00,0x75,0x8d,0x40,0x75,0x98,0x40,0x75,0xc0,0x40,0x75,0x87,0x00,0x75}
+},
+{  9,
+   0x799,
+   0,
+   {0x20,0x00,0x75,0x21,0x00,0x75,0x22,0x00,0x75}
+},
+{  5,
+   0x7a2,
+   0,
+   {0x23,0x00,0x75,0x47,0x00}
+},
+{  7,
+   0x7a7,
+   0,
+   {0xc3,0xe5,0x47,0x94,0x20,0x50,0x11}
+},
+{  13,
+   0x7ae,
+   0,
+   {0xe5,0x47,0x24,0x00,0xf5,0x82,0xe4,0x34,0x17,0xf5,0x83,0xe4,0xf0}
+},
+{  4,
+   0x7bb,
+   0,
+   {0x05,0x47,0x80,0xe8}
+},
+{  9,
+   0x7bf,
+   0,
+   {0xe4,0xf5,0x40,0xf5,0x3f,0xe4,0xf5,0x3c,0xf5}
+},
+{  7,
+   0x7c8,
+   0,
+   {0x3b,0xe4,0xf5,0x3e,0xf5,0x3d,0x75}
+},
+{  11,
+   0x7cf,
+   0,
+   {0x32,0x00,0x75,0x37,0x00,0x75,0x39,0x00,0x90,0x7f,0x93}
+},
+{  14,
+   0x7da,
+   0,
+   {0x74,0x3c,0xf0,0x90,0x7f,0x9c,0x74,0xff,0xf0,0x90,0x7f,0x96,0x74,0x80}
+},
+{  14,
+   0x7e8,
+   0,
+   {0xf0,0x90,0x7f,0x94,0x74,0x70,0xf0,0x90,0x7f,0x9d,0x74,0x8f,0xf0,0x90}
+},
+{  14,
+   0x7f6,
+   0,
+   {0x7f,0x97,0xe4,0xf0,0x90,0x7f,0x95,0x74,0xc2,0xf0,0x90,0x7f,0x98,0x74}
+},
+{  14,
+   0x804,
+   0,
+   {0x28,0xf0,0x90,0x7f,0x9e,0x74,0x28,0xf0,0x90,0x7f,0xf0,0xe4,0xf0,0x90}
+},
+{  14,
+   0x812,
+   0,
+   {0x7f,0xf1,0xe4,0xf0,0x90,0x7f,0xf2,0xe4,0xf0,0x90,0x7f,0xf3,0xe4,0xf0}
+},
+{  14,
+   0x820,
+   0,
+   {0x90,0x7f,0xf4,0xe4,0xf0,0x90,0x7f,0xf5,0xe4,0xf0,0x90,0x7f,0xf6,0xe4}
+},
+{  14,
+   0x82e,
+   0,
+   {0xf0,0x90,0x7f,0xf7,0xe4,0xf0,0x90,0x7f,0xf8,0xe4,0xf0,0x90,0x7f,0xf9}
+},
+{  14,
+   0x83c,
+   0,
+   {0x74,0x38,0xf0,0x90,0x7f,0xfa,0x74,0xa0,0xf0,0x90,0x7f,0xfb,0x74,0xa0}
+},
+{  14,
+   0x84a,
+   0,
+   {0xf0,0x90,0x7f,0xfc,0x74,0xa0,0xf0,0x90,0x7f,0xfd,0x74,0xa0,0xf0,0x90}
+},
+{  14,
+   0x858,
+   0,
+   {0x7f,0xfe,0x74,0xa0,0xf0,0x90,0x7f,0xff,0x74,0xa0,0xf0,0x90,0x7f,0xe0}
+},
+{  14,
+   0x866,
+   0,
+   {0x74,0x03,0xf0,0x90,0x7f,0xe1,0x74,0x01,0xf0,0x90,0x7f,0xdd,0x74,0x80}
+},
+{  11,
+   0x874,
+   0,
+   {0xf0,0x12,0x12,0x43,0x12,0x07,0x1e,0x7a,0x00,0x7b,0x00}
+},
+{  9,
+   0x87f,
+   0,
+   {0xc3,0xea,0x94,0x1e,0xeb,0x94,0x00,0x50,0x17}
+},
+{  12,
+   0x888,
+   0,
+   {0x90,0x88,0x00,0xe0,0xf5,0x47,0x90,0x88,0x0b,0xe0,0xf5,0x47}
+},
+{  9,
+   0x894,
+   0,
+   {0x90,0x7f,0x68,0xf0,0x0a,0xba,0x00,0x01,0x0b}
+},
+{  2,
+   0x89d,
+   0,
+   {0x80,0xe0}
+},
+{  12,
+   0x89f,
+   0,
+   {0x12,0x03,0xe1,0x90,0x7f,0xd6,0xe4,0xf0,0x7a,0x00,0x7b,0x00}
+},
+{  13,
+   0x8ab,
+   0,
+   {0x8a,0x04,0x8b,0x05,0xc3,0xea,0x94,0xe0,0xeb,0x94,0x2e,0x50,0x1a}
+},
+{  14,
+   0x8b8,
+   0,
+   {0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,0x05,0x12,0x01,0xdd,0xd0,0x05,0xd0}
+},
+{  10,
+   0x8c6,
+   0,
+   {0x04,0xd0,0x03,0xd0,0x02,0x0a,0xba,0x00,0x01,0x0b}
+},
+{  2,
+   0x8d0,
+   0,
+   {0x80,0xd9}
+},
+{  13,
+   0x8d2,
+   0,
+   {0x90,0x7f,0xd6,0x74,0x02,0xf0,0x90,0x7f,0xd6,0x74,0x06,0xf0,0x90}
+},
+{  14,
+   0x8df,
+   0,
+   {0x7f,0xde,0x74,0x05,0xf0,0x90,0x7f,0xdf,0x74,0x05,0xf0,0x90,0x7f,0xac}
+},
+{  14,
+   0x8ed,
+   0,
+   {0xe4,0xf0,0x90,0x7f,0xad,0x74,0x05,0xf0,0x75,0xa8,0x80,0x75,0xf8,0x10}
+},
+{  13,
+   0x8fb,
+   0,
+   {0x90,0x7f,0xae,0x74,0x0b,0xf0,0x90,0x7f,0xe2,0x74,0x88,0xf0,0x90}
+},
+{  12,
+   0x908,
+   0,
+   {0x7f,0xab,0x74,0x08,0xf0,0x75,0xe8,0x11,0x75,0x32,0x01,0x75}
+},
+{  12,
+   0x914,
+   0,
+   {0x31,0x00,0x75,0x30,0x00,0xc0,0x04,0xc0,0x05,0x12,0x04,0xf7}
+},
+{  10,
+   0x920,
+   0,
+   {0xd0,0x05,0xd0,0x04,0x75,0x34,0x00,0x75,0x35,0x01}
+},
+{  13,
+   0x92a,
+   0,
+   {0x90,0x7f,0xae,0x74,0x03,0xf0,0x8c,0x02,0xba,0x00,0x02,0x80,0x03}
+},
+{  3,
+   0x937,
+   0,
+   {0x02,0x0a,0x3f}
+},
+{  12,
+   0x93a,
+   0,
+   {0x85,0x33,0x34,0x90,0x7f,0x9d,0x74,0x8f,0xf0,0x90,0x7f,0x97}
+},
+{  14,
+   0x946,
+   0,
+   {0x74,0x08,0xf0,0x90,0x7f,0x9d,0x74,0x88,0xf0,0x90,0x7f,0x9a,0xe0,0xfa}
+},
+{  12,
+   0x954,
+   0,
+   {0x74,0x05,0x5a,0xf5,0x33,0x90,0x7f,0x9d,0x74,0x8f,0xf0,0x90}
+},
+{  13,
+   0x960,
+   0,
+   {0x7f,0x97,0x74,0x02,0xf0,0x90,0x7f,0x9d,0x74,0x82,0xf0,0xe5,0x33}
+},
+{  13,
+   0x96d,
+   0,
+   {0x25,0xe0,0xfa,0x90,0x7f,0x9a,0xe0,0x54,0x05,0xfb,0x4a,0xf5,0x33}
+},
+{  2,
+   0x97a,
+   0,
+   {0x60,0x0c}
+},
+{  12,
+   0x97c,
+   0,
+   {0x90,0x7f,0x96,0xe0,0xfa,0x90,0x7f,0x96,0x74,0x80,0x4a,0xf0}
+},
+{  11,
+   0x988,
+   0,
+   {0x75,0x6e,0x00,0x75,0x6f,0x00,0xc0,0x04,0xc0,0x05,0x12}
+},
+{  14,
+   0x993,
+   0,
+   {0x11,0x44,0xd0,0x05,0xd0,0x04,0x90,0x17,0x13,0xe0,0xfa,0x74,0x80,0x2a}
+},
+{  6,
+   0x9a1,
+   0,
+   {0xfa,0xe5,0x33,0xb4,0x04,0x29}
+},
+{  3,
+   0x9a7,
+   0,
+   {0xba,0xa0,0x00}
+},
+{  2,
+   0x9aa,
+   0,
+   {0x50,0x24}
+},
+{  13,
+   0x9ac,
+   0,
+   {0x90,0x17,0x13,0xe0,0x04,0xfb,0x0b,0x90,0x17,0x13,0xeb,0xf0,0x90}
+},
+{  14,
+   0x9b9,
+   0,
+   {0x17,0x13,0xe0,0xfb,0x90,0x17,0x15,0xf0,0xc0,0x02,0xc0,0x04,0xc0,0x05}
+},
+{  9,
+   0x9c7,
+   0,
+   {0x12,0x04,0xf7,0xd0,0x05,0xd0,0x04,0xd0,0x02}
+},
+{  5,
+   0x9d0,
+   0,
+   {0xe5,0x33,0xb4,0x02,0x26}
+},
+{  6,
+   0x9d5,
+   0,
+   {0xc3,0x74,0x04,0x9a,0x50,0x20}
+},
+{  13,
+   0x9db,
+   0,
+   {0x90,0x17,0x13,0xe0,0xfa,0x1a,0x1a,0x90,0x17,0x13,0xea,0xf0,0x90}
+},
+{  13,
+   0x9e8,
+   0,
+   {0x17,0x13,0xe0,0xfa,0x90,0x17,0x15,0xf0,0xc0,0x04,0xc0,0x05,0x12}
+},
+{  6,
+   0x9f5,
+   0,
+   {0x04,0xf7,0xd0,0x05,0xd0,0x04}
+},
+{  5,
+   0x9fb,
+   0,
+   {0xe5,0x33,0xb4,0x08,0x1d}
+},
+{  4,
+   0xa00,
+   0,
+   {0xe5,0x34,0x70,0x19}
+},
+{  10,
+   0xa04,
+   0,
+   {0x74,0x01,0x25,0x35,0x54,0x0f,0xf5,0x35,0x85,0x35}
+},
+{  12,
+   0xa0e,
+   0,
+   {0x75,0x75,0x76,0x00,0xc0,0x04,0xc0,0x05,0x12,0x13,0xfe,0xd0}
+},
+{  3,
+   0xa1a,
+   0,
+   {0x05,0xd0,0x04}
+},
+{  5,
+   0xa1d,
+   0,
+   {0xe5,0x33,0xb4,0x01,0x1d}
+},
+{  4,
+   0xa22,
+   0,
+   {0xe5,0x34,0x70,0x19}
+},
+{  10,
+   0xa26,
+   0,
+   {0xe5,0x35,0x24,0xff,0x54,0x0f,0xf5,0x35,0x85,0x35}
+},
+{  12,
+   0xa30,
+   0,
+   {0x75,0x75,0x76,0x00,0xc0,0x04,0xc0,0x05,0x12,0x13,0xfe,0xd0}
+},
+{  3,
+   0xa3c,
+   0,
+   {0x05,0xd0,0x04}
+},
+{  14,
+   0xa3f,
+   0,
+   {0xc0,0x04,0xc0,0x05,0x12,0x01,0xdd,0xd0,0x05,0xd0,0x04,0x90,0x7f,0x96}
+},
+{  14,
+   0xa4d,
+   0,
+   {0xe0,0xfa,0x90,0x7f,0x96,0x74,0x7f,0x5a,0xf0,0x90,0x7f,0x97,0x74,0x08}
+},
+{  10,
+   0xa5b,
+   0,
+   {0xf0,0xc3,0xec,0x94,0x00,0xed,0x94,0x02,0x40,0x08}
+},
+{  8,
+   0xa65,
+   0,
+   {0x90,0x7f,0x96,0xe0,0xfa,0x20,0xe6,0x08}
+},
+{  8,
+   0xa6d,
+   0,
+   {0xc3,0xe4,0x9c,0x74,0x08,0x9d,0x50,0x13}
+},
+{  14,
+   0xa75,
+   0,
+   {0x90,0x7f,0x96,0xe0,0xfa,0x90,0x7f,0x96,0x74,0x40,0x65,0x02,0xf0,0x7c}
+},
+{  5,
+   0xa83,
+   0,
+   {0x00,0x7d,0x00,0x80,0x05}
+},
+{  5,
+   0xa88,
+   0,
+   {0x0c,0xbc,0x00,0x01,0x0d}
+},
+{  5,
+   0xa8d,
+   0,
+   {0xe5,0x38,0xb4,0x01,0x0e}
+},
+{  13,
+   0xa92,
+   0,
+   {0xc0,0x04,0xc0,0x05,0x12,0x04,0xf7,0xd0,0x05,0xd0,0x04,0x75,0x38}
+},
+{  1,
+   0xa9f,
+   0,
+   {0x00}
+},
+{  7,
+   0xaa0,
+   0,
+   {0xe5,0x31,0x70,0x03,0x02,0x09,0x2a}
+},
+{  10,
+   0xaa7,
+   0,
+   {0x90,0x7f,0xc9,0xe0,0xfa,0x70,0x03,0x02,0x0c,0x2d}
+},
+{  14,
+   0xab1,
+   0,
+   {0x90,0x7f,0x96,0xe0,0xfa,0x90,0x7f,0x96,0x74,0x80,0x65,0x02,0xf0,0x90}
+},
+{  9,
+   0xabf,
+   0,
+   {0x7d,0xc0,0xe0,0xfa,0xba,0x2c,0x02,0x80,0x03}
+},
+{  3,
+   0xac8,
+   0,
+   {0x02,0x0b,0x36}
+},
+{  5,
+   0xacb,
+   0,
+   {0x75,0x32,0x00,0x7b,0x00}
+},
+{  3,
+   0xad0,
+   0,
+   {0xbb,0x64,0x00}
+},
+{  2,
+   0xad3,
+   0,
+   {0x50,0x1c}
+},
+{  14,
+   0xad5,
+   0,
+   {0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,0x05,0x12,0x01,0xdd,0xd0,0x05,0xd0}
+},
+{  13,
+   0xae3,
+   0,
+   {0x04,0xd0,0x03,0xd0,0x02,0x90,0x88,0x0f,0xe0,0xf5,0x47,0x0b,0x80}
+},
+{  1,
+   0xaf0,
+   0,
+   {0xdf}
+},
+{  13,
+   0xaf1,
+   0,
+   {0xc0,0x02,0xc0,0x04,0xc0,0x05,0x12,0x07,0x1e,0x12,0x03,0xe1,0x12}
+},
+{  12,
+   0xafe,
+   0,
+   {0x04,0xf7,0xd0,0x05,0xd0,0x04,0xd0,0x02,0x75,0x6e,0x00,0x75}
+},
+{  13,
+   0xb0a,
+   0,
+   {0x6f,0x01,0xc0,0x02,0xc0,0x04,0xc0,0x05,0x12,0x11,0x44,0xd0,0x05}
+},
+{  9,
+   0xb17,
+   0,
+   {0xd0,0x04,0xd0,0x02,0x75,0x70,0x4d,0x75,0x71}
+},
+{  11,
+   0xb20,
+   0,
+   {0x0c,0x75,0x72,0x02,0xc0,0x02,0xc0,0x04,0xc0,0x05,0x12}
+},
+{  11,
+   0xb2b,
+   0,
+   {0x11,0x75,0xd0,0x05,0xd0,0x04,0xd0,0x02,0x02,0x0c,0x2d}
+},
+{  3,
+   0xb36,
+   0,
+   {0xba,0x2a,0x3b}
+},
+{  13,
+   0xb39,
+   0,
+   {0x90,0x7f,0x98,0x74,0x20,0xf0,0xc0,0x02,0xc0,0x04,0xc0,0x05,0x12}
+},
+{  14,
+   0xb46,
+   0,
+   {0x01,0xdd,0xd0,0x05,0xd0,0x04,0xd0,0x02,0x90,0x7f,0x98,0x74,0x28,0xf0}
+},
+{  2,
+   0xb54,
+   0,
+   {0x7b,0x00}
+},
+{  3,
+   0xb56,
+   0,
+   {0xbb,0x0a,0x00}
+},
+{  5,
+   0xb59,
+   0,
+   {0x40,0x03,0x02,0x0c,0x2d}
+},
+{  14,
+   0xb5e,
+   0,
+   {0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,0x05,0x12,0x01,0xdd,0xd0,0x05,0xd0}
+},
+{  8,
+   0xb6c,
+   0,
+   {0x04,0xd0,0x03,0xd0,0x02,0x0b,0x80,0xe2}
+},
+{  3,
+   0xb74,
+   0,
+   {0xba,0x2b,0x1a}
+},
+{  8,
+   0xb77,
+   0,
+   {0x90,0x7f,0xc9,0xe0,0xfb,0xbb,0x40,0x12}
+},
+{  14,
+   0xb7f,
+   0,
+   {0xc0,0x02,0xc0,0x04,0xc0,0x05,0x12,0x12,0x05,0xd0,0x05,0xd0,0x04,0xd0}
+},
+{  4,
+   0xb8d,
+   0,
+   {0x02,0x02,0x0c,0x2d}
+},
+{  3,
+   0xb91,
+   0,
+   {0xba,0x10,0x1f}
+},
+{  14,
+   0xb94,
+   0,
+   {0x90,0x7f,0x96,0xe0,0xfb,0x90,0x7f,0x96,0x74,0x80,0x65,0x03,0xf0,0xc0}
+},
+{  14,
+   0xba2,
+   0,
+   {0x02,0xc0,0x04,0xc0,0x05,0x12,0x10,0x3d,0xd0,0x05,0xd0,0x04,0xd0,0x02}
+},
+{  3,
+   0xbb0,
+   0,
+   {0x02,0x0c,0x2d}
+},
+{  3,
+   0xbb3,
+   0,
+   {0xba,0x11,0x12}
+},
+{  14,
+   0xbb6,
+   0,
+   {0xc0,0x02,0xc0,0x04,0xc0,0x05,0x12,0x10,0x6a,0xd0,0x05,0xd0,0x04,0xd0}
+},
+{  4,
+   0xbc4,
+   0,
+   {0x02,0x02,0x0c,0x2d}
+},
+{  3,
+   0xbc8,
+   0,
+   {0xba,0x12,0x12}
+},
+{  14,
+   0xbcb,
+   0,
+   {0xc0,0x02,0xc0,0x04,0xc0,0x05,0x12,0x10,0x8f,0xd0,0x05,0xd0,0x04,0xd0}
+},
+{  4,
+   0xbd9,
+   0,
+   {0x02,0x02,0x0c,0x2d}
+},
+{  3,
+   0xbdd,
+   0,
+   {0xba,0x13,0x0b}
+},
+{  11,
+   0xbe0,
+   0,
+   {0x90,0x7d,0xc1,0xe0,0xfb,0x90,0x88,0x00,0xf0,0x80,0x42}
+},
+{  3,
+   0xbeb,
+   0,
+   {0xba,0x14,0x11}
+},
+{  14,
+   0xbee,
+   0,
+   {0xc0,0x02,0xc0,0x04,0xc0,0x05,0x12,0x11,0xdd,0xd0,0x05,0xd0,0x04,0xd0}
+},
+{  3,
+   0xbfc,
+   0,
+   {0x02,0x80,0x2e}
+},
+{  3,
+   0xbff,
+   0,
+   {0xba,0x15,0x1d}
+},
+{  12,
+   0xc02,
+   0,
+   {0x90,0x7d,0xc1,0xe0,0xf5,0x75,0x90,0x7d,0xc2,0xe0,0xf5,0x76}
+},
+{  14,
+   0xc0e,
+   0,
+   {0xc0,0x02,0xc0,0x04,0xc0,0x05,0x12,0x13,0xfe,0xd0,0x05,0xd0,0x04,0xd0}
+},
+{  3,
+   0xc1c,
+   0,
+   {0x02,0x80,0x0e}
+},
+{  3,
+   0xc1f,
+   0,
+   {0xba,0x16,0x0b}
+},
+{  11,
+   0xc22,
+   0,
+   {0xc0,0x04,0xc0,0x05,0x12,0x13,0xa3,0xd0,0x05,0xd0,0x04}
+},
+{  11,
+   0xc2d,
+   0,
+   {0x90,0x7f,0xc9,0xe4,0xf0,0x75,0x31,0x00,0x02,0x09,0x2a}
+},
+{  1,
+   0xc38,
+   0,
+   {0x22}
+},
+{  7,
+   0xc39,
+   0,
+   {0x53,0x55,0x50,0x45,0x4e,0x44,0x00}
+},
+{  7,
+   0xc40,
+   0,
+   {0x52,0x45,0x53,0x55,0x4d,0x45,0x00}
+},
+{  6,
+   0xc47,
+   0,
+   {0x20,0x56,0x6f,0x6c,0x20,0x00}
+},
+{  13,
+   0xc4d,
+   0,
+   {0x44,0x41,0x42,0x55,0x53,0x42,0x20,0x76,0x31,0x2e,0x30,0x30,0x00}
+},
+{  14,
+   0xc5a,
+   0,
+   {0xc0,0xe0,0xc0,0xf0,0xc0,0x82,0xc0,0x83,0xc0,0x02,0xc0,0x03,0xc0,0x04}
+},
+{  14,
+   0xc68,
+   0,
+   {0xc0,0x05,0xc0,0x06,0xc0,0x07,0xc0,0x00,0xc0,0x01,0xc0,0xd0,0x75,0xd0}
+},
+{  13,
+   0xc76,
+   0,
+   {0x00,0xc0,0x86,0x75,0x86,0x00,0xe5,0x91,0xc2,0xe4,0xf5,0x91,0x90}
+},
+{  14,
+   0xc83,
+   0,
+   {0x7f,0xab,0x74,0x01,0xf0,0x90,0x7f,0xe8,0xe0,0xfa,0x90,0x7f,0xe9,0xe0}
+},
+{  6,
+   0xc91,
+   0,
+   {0xfb,0xbb,0x00,0x02,0x80,0x03}
+},
+{  3,
+   0xc97,
+   0,
+   {0x02,0x0d,0x38}
+},
+{  3,
+   0xc9a,
+   0,
+   {0xba,0x80,0x14}
+},
+{  14,
+   0xc9d,
+   0,
+   {0x90,0x7f,0x00,0x74,0x01,0xf0,0x90,0x7f,0x01,0xe4,0xf0,0x90,0x7f,0xb5}
+},
+{  6,
+   0xcab,
+   0,
+   {0x74,0x02,0xf0,0x02,0x0e,0xcd}
+},
+{  5,
+   0xcb1,
+   0,
+   {0xba,0x82,0x02,0x80,0x03}
+},
+{  3,
+   0xcb6,
+   0,
+   {0x02,0x0d,0x1d}
+},
+{  8,
+   0xcb9,
+   0,
+   {0x90,0x7f,0xec,0xe0,0xfc,0xbc,0x01,0x00}
+},
+{  2,
+   0xcc1,
+   0,
+   {0x40,0x21}
+},
+{  6,
+   0xcc3,
+   0,
+   {0xc3,0x74,0x07,0x9c,0x40,0x1b}
+},
+{  14,
+   0xcc9,
+   0,
+   {0xec,0x24,0xff,0x25,0xe0,0xfd,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x7f,0xf5}
+},
+{  13,
+   0xcd7,
+   0,
+   {0x83,0xe0,0xfd,0x53,0x05,0x01,0x90,0x7f,0x00,0xed,0xf0,0x80,0x2b}
+},
+{  3,
+   0xce4,
+   0,
+   {0xbc,0x81,0x00}
+},
+{  2,
+   0xce7,
+   0,
+   {0x40,0x21}
+},
+{  6,
+   0xce9,
+   0,
+   {0xc3,0x74,0x87,0x9c,0x40,0x1b}
+},
+{  14,
+   0xcef,
+   0,
+   {0xec,0x24,0x7f,0x25,0xe0,0xfc,0x24,0xb6,0xf5,0x82,0xe4,0x34,0x7f,0xf5}
+},
+{  13,
+   0xcfd,
+   0,
+   {0x83,0xe0,0xfc,0x53,0x04,0x01,0x90,0x7f,0x00,0xec,0xf0,0x80,0x05}
+},
+{  5,
+   0xd0a,
+   0,
+   {0x90,0x7f,0x00,0xe4,0xf0}
+},
+{  14,
+   0xd0f,
+   0,
+   {0x90,0x7f,0x01,0xe4,0xf0,0x90,0x7f,0xb5,0x74,0x02,0xf0,0x02,0x0e,0xcd}
+},
+{  5,
+   0xd1d,
+   0,
+   {0xba,0x81,0x02,0x80,0x03}
+},
+{  3,
+   0xd22,
+   0,
+   {0x02,0x0e,0xc5}
+},
+{  14,
+   0xd25,
+   0,
+   {0x90,0x7f,0x00,0xe4,0xf0,0x90,0x7f,0x01,0xe4,0xf0,0x90,0x7f,0xb5,0x74}
+},
+{  5,
+   0xd33,
+   0,
+   {0x02,0xf0,0x02,0x0e,0xcd}
+},
+{  3,
+   0xd38,
+   0,
+   {0xbb,0x01,0x2d}
+},
+{  6,
+   0xd3b,
+   0,
+   {0xba,0x00,0x03,0x02,0x0e,0xcd}
+},
+{  3,
+   0xd41,
+   0,
+   {0xba,0x02,0x11}
+},
+{  13,
+   0xd44,
+   0,
+   {0x75,0x59,0x00,0xc0,0x02,0xc0,0x03,0x12,0x0e,0xf0,0xd0,0x03,0xd0}
+},
+{  4,
+   0xd51,
+   0,
+   {0x02,0x02,0x0e,0xcd}
+},
+{  5,
+   0xd55,
+   0,
+   {0xba,0x21,0x02,0x80,0x03}
+},
+{  3,
+   0xd5a,
+   0,
+   {0x02,0x0e,0xcd}
+},
+{  11,
+   0xd5d,
+   0,
+   {0x75,0x37,0x01,0x90,0x7f,0xc5,0xe4,0xf0,0x02,0x0e,0xcd}
+},
+{  3,
+   0xd68,
+   0,
+   {0xbb,0x03,0x1f}
+},
+{  6,
+   0xd6b,
+   0,
+   {0xba,0x00,0x03,0x02,0x0e,0xcd}
+},
+{  5,
+   0xd71,
+   0,
+   {0xba,0x02,0x02,0x80,0x03}
+},
+{  3,
+   0xd76,
+   0,
+   {0x02,0x0e,0xcd}
+},
+{  13,
+   0xd79,
+   0,
+   {0x75,0x59,0x01,0xc0,0x02,0xc0,0x03,0x12,0x0e,0xf0,0xd0,0x03,0xd0}
+},
+{  4,
+   0xd86,
+   0,
+   {0x02,0x02,0x0e,0xcd}
+},
+{  3,
+   0xd8a,
+   0,
+   {0xbb,0x06,0x54}
+},
+{  5,
+   0xd8d,
+   0,
+   {0xba,0x80,0x02,0x80,0x03}
+},
+{  3,
+   0xd92,
+   0,
+   {0x02,0x0e,0xc5}
+},
+{  8,
+   0xd95,
+   0,
+   {0x90,0x7f,0xeb,0xe0,0xfc,0xbc,0x01,0x15}
+},
+{  12,
+   0xd9d,
+   0,
+   {0x7c,0xfb,0x7d,0x0f,0x8d,0x06,0x7f,0x00,0x90,0x7f,0xd4,0xee}
+},
+{  9,
+   0xda9,
+   0,
+   {0xf0,0x90,0x7f,0xd5,0xec,0xf0,0x02,0x0e,0xcd}
+},
+{  10,
+   0xdb2,
+   0,
+   {0x90,0x7f,0xeb,0xe0,0xfc,0xbc,0x02,0x02,0x80,0x03}
+},
+{  3,
+   0xdbc,
+   0,
+   {0x02,0x0e,0xc5}
+},
+{  10,
+   0xdbf,
+   0,
+   {0x90,0x7f,0xea,0xe0,0xfc,0xbc,0x00,0x02,0x80,0x03}
+},
+{  3,
+   0xdc9,
+   0,
+   {0x02,0x0e,0xc5}
+},
+{  12,
+   0xdcc,
+   0,
+   {0x7c,0x3b,0x7d,0x0f,0x8d,0x06,0x7f,0x00,0x90,0x7f,0xd4,0xee}
+},
+{  9,
+   0xdd8,
+   0,
+   {0xf0,0x90,0x7f,0xd5,0xec,0xf0,0x02,0x0e,0xcd}
+},
+{  6,
+   0xde1,
+   0,
+   {0xbb,0x07,0x03,0x02,0x0e,0xc5}
+},
+{  3,
+   0xde7,
+   0,
+   {0xbb,0x08,0x10}
+},
+{  13,
+   0xdea,
+   0,
+   {0xac,0x48,0x90,0x7f,0x00,0xec,0xf0,0x90,0x7f,0xb5,0x74,0x01,0xf0}
+},
+{  3,
+   0xdf7,
+   0,
+   {0x02,0x0e,0xcd}
+},
+{  3,
+   0xdfa,
+   0,
+   {0xbb,0x09,0x31}
+},
+{  5,
+   0xdfd,
+   0,
+   {0xba,0x00,0x02,0x80,0x03}
+},
+{  3,
+   0xe02,
+   0,
+   {0x02,0x0e,0xc5}
+},
+{  14,
+   0xe05,
+   0,
+   {0x90,0x7f,0xea,0xe0,0xfc,0xc3,0x74,0x01,0x9c,0x50,0x03,0x02,0x0e,0xc5}
+},
+{  8,
+   0xe13,
+   0,
+   {0x90,0x7f,0xea,0xe0,0xfc,0xbc,0x00,0x0a}
+},
+{  10,
+   0xe1b,
+   0,
+   {0x90,0x17,0x21,0xe4,0xf0,0x90,0x17,0x22,0xe4,0xf0}
+},
+{  9,
+   0xe25,
+   0,
+   {0x90,0x7f,0xea,0xe0,0xf5,0x48,0x02,0x0e,0xcd}
+},
+{  3,
+   0xe2e,
+   0,
+   {0xbb,0x0a,0x27}
+},
+{  5,
+   0xe31,
+   0,
+   {0xba,0x81,0x02,0x80,0x03}
+},
+{  3,
+   0xe36,
+   0,
+   {0x02,0x0e,0xc5}
+},
+{  14,
+   0xe39,
+   0,
+   {0x90,0x7f,0xec,0xe0,0xfa,0x24,0x20,0xfa,0xe4,0x34,0x17,0xfc,0x8a,0x82}
+},
+{  14,
+   0xe47,
+   0,
+   {0x8c,0x83,0xe0,0xfa,0x90,0x7f,0x00,0xf0,0x90,0x7f,0xb5,0x74,0x01,0xf0}
+},
+{  3,
+   0xe55,
+   0,
+   {0x02,0x0e,0xcd}
+},
+{  5,
+   0xe58,
+   0,
+   {0xbb,0x0b,0x02,0x80,0x03}
+},
+{  3,
+   0xe5d,
+   0,
+   {0x02,0x0e,0xa9}
+},
+{  13,
+   0xe60,
+   0,
+   {0x90,0x17,0x20,0xe4,0xf0,0x90,0x7f,0xec,0xe0,0xfa,0xba,0x01,0x1a}
+},
+{  8,
+   0xe6d,
+   0,
+   {0x90,0x7f,0xed,0xe0,0xfa,0xba,0x00,0x12}
+},
+{  14,
+   0xe75,
+   0,
+   {0x90,0x7f,0xea,0xe0,0xfa,0x90,0x17,0x21,0xf0,0xc0,0x03,0x12,0x04,0xe2}
+},
+{  4,
+   0xe83,
+   0,
+   {0xd0,0x03,0x80,0x46}
+},
+{  8,
+   0xe87,
+   0,
+   {0x90,0x7f,0xec,0xe0,0xfa,0xba,0x02,0x3e}
+},
+{  8,
+   0xe8f,
+   0,
+   {0x90,0x7f,0xed,0xe0,0xfa,0xba,0x00,0x36}
+},
+{  13,
+   0xe97,
+   0,
+   {0xc0,0x03,0x12,0x04,0xef,0xd0,0x03,0x90,0x7f,0xea,0xe0,0xfa,0x90}
+},
+{  5,
+   0xea4,
+   0,
+   {0x17,0x22,0xf0,0x80,0x24}
+},
+{  5,
+   0xea9,
+   0,
+   {0xbb,0x12,0x02,0x80,0x17}
+},
+{  5,
+   0xeae,
+   0,
+   {0xbb,0x81,0x02,0x80,0x0d}
+},
+{  5,
+   0xeb3,
+   0,
+   {0xbb,0x83,0x02,0x80,0x08}
+},
+{  5,
+   0xeb8,
+   0,
+   {0xbb,0x82,0x02,0x80,0x03}
+},
+{  3,
+   0xebd,
+   0,
+   {0xbb,0x84,0x05}
+},
+{  5,
+   0xec0,
+   0,
+   {0x12,0x06,0x4e,0x80,0x08}
+},
+{  8,
+   0xec5,
+   0,
+   {0x90,0x7f,0xb4,0x74,0x03,0xf0,0x80,0x06}
+},
+{  6,
+   0xecd,
+   0,
+   {0x90,0x7f,0xb4,0x74,0x02,0xf0}
+},
+{  2,
+   0xed3,
+   0,
+   {0xd0,0x86}
+},
+{  14,
+   0xed5,
+   0,
+   {0xd0,0xd0,0xd0,0x01,0xd0,0x00,0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,0x04}
+},
+{  13,
+   0xee3,
+   0,
+   {0xd0,0x03,0xd0,0x02,0xd0,0x83,0xd0,0x82,0xd0,0xf0,0xd0,0xe0,0x32}
+},
+{  11,
+   0xef0,
+   0,
+   {0x90,0x7f,0xec,0xe0,0xf5,0x5a,0xc3,0x94,0x01,0x40,0x1d}
+},
+{  7,
+   0xefb,
+   0,
+   {0xc3,0x74,0x07,0x95,0x5a,0x40,0x16}
+},
+{  13,
+   0xf02,
+   0,
+   {0xe5,0x5a,0x24,0xff,0x25,0xe0,0xfa,0x24,0xc6,0xf5,0x82,0xe4,0x34}
+},
+{  9,
+   0xf0f,
+   0,
+   {0x7f,0xf5,0x83,0xaa,0x59,0xea,0xf0,0x80,0x22}
+},
+{  7,
+   0xf18,
+   0,
+   {0xc3,0xe5,0x5a,0x94,0x81,0x40,0x1b}
+},
+{  7,
+   0xf1f,
+   0,
+   {0xc3,0x74,0x87,0x95,0x5a,0x40,0x14}
+},
+{  13,
+   0xf26,
+   0,
+   {0xe5,0x5a,0x24,0xff,0x25,0xe0,0xfa,0x24,0xb6,0xf5,0x82,0xe4,0x34}
+},
+{  7,
+   0xf33,
+   0,
+   {0x7f,0xf5,0x83,0xaa,0x59,0xea,0xf0}
+},
+{  1,
+   0xf3a,
+   0,
+   {0x22}
+},
+{  14,
+   0xf3b,
+   0,
+   {0x09,0x02,0xba,0x00,0x03,0x01,0x00,0x40,0x00,0x09,0x04,0x00,0x00,0x00}
+},
+{  14,
+   0xf49,
+   0,
+   {0x01,0x01,0x00,0x00,0x09,0x24,0x01,0x00,0x01,0x3d,0x00,0x01,0x01,0x0c}
+},
+{  14,
+   0xf57,
+   0,
+   {0x24,0x02,0x01,0x10,0x07,0x00,0x02,0x03,0x00,0x00,0x00,0x0d,0x24,0x06}
+},
+{  14,
+   0xf65,
+   0,
+   {0x03,0x01,0x02,0x15,0x00,0x03,0x00,0x03,0x00,0x00,0x09,0x24,0x03,0x02}
+},
+{  14,
+   0xf73,
+   0,
+   {0x01,0x01,0x00,0x01,0x00,0x09,0x24,0x03,0x04,0x02,0x03,0x00,0x03,0x00}
+},
+{  14,
+   0xf81,
+   0,
+   {0x09,0x24,0x03,0x05,0x03,0x06,0x00,0x01,0x00,0x09,0x04,0x01,0x00,0x00}
+},
+{  14,
+   0xf8f,
+   0,
+   {0x01,0x02,0x00,0x00,0x09,0x04,0x01,0x01,0x01,0x01,0x02,0x00,0x00,0x07}
+},
+{  14,
+   0xf9d,
+   0,
+   {0x24,0x01,0x02,0x01,0x01,0x00,0x0b,0x24,0x02,0x01,0x02,0x02,0x10,0x01}
+},
+{  14,
+   0xfab,
+   0,
+   {0x80,0xbb,0x00,0x09,0x05,0x88,0x05,0x00,0x01,0x01,0x00,0x00,0x07,0x25}
+},
+{  14,
+   0xfb9,
+   0,
+   {0x01,0x00,0x00,0x00,0x00,0x09,0x04,0x02,0x00,0x02,0x00,0x00,0x00,0x00}
+},
+{  14,
+   0xfc7,
+   0,
+   {0x07,0x05,0x82,0x02,0x40,0x00,0x00,0x07,0x05,0x02,0x02,0x40,0x00,0x00}
+},
+{  14,
+   0xfd5,
+   0,
+   {0x09,0x04,0x02,0x01,0x03,0x00,0x00,0x00,0x00,0x07,0x05,0x82,0x02,0x40}
+},
+{  14,
+   0xfe3,
+   0,
+   {0x00,0x00,0x07,0x05,0x02,0x02,0x40,0x00,0x00,0x09,0x05,0x89,0x05,0xa0}
+},
+{  10,
+   0xff1,
+   0,
+   {0x01,0x01,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0x00}
+},
+{  14,
+   0xffb,
+   0,
+   {0x12,0x01,0x00,0x01,0x00,0x00,0x00,0x40,0x47,0x05,0x99,0x99,0x00,0x01}
+},
+{  14,
+   0x1009,
+   0,
+   {0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x02,0xba}
+},
+{  4,
+   0x1017,
+   0,
+   {0x00,0x03,0x01,0x00}
+},
+{  2,
+   0x101b,
+   0,
+   {0x7a,0x00}
+},
+{  3,
+   0x101d,
+   0,
+   {0xba,0x05,0x00}
+},
+{  2,
+   0x1020,
+   0,
+   {0x50,0x17}
+},
+{  8,
+   0x1022,
+   0,
+   {0x90,0x7f,0xa5,0xe0,0xfb,0x30,0xe0,0x05}
+},
+{  5,
+   0x102a,
+   0,
+   {0x90,0x00,0x01,0x80,0x0d}
+},
+{  10,
+   0x102f,
+   0,
+   {0xc0,0x02,0x12,0x01,0xdd,0xd0,0x02,0x0a,0x80,0xe4}
+},
+{  3,
+   0x1039,
+   0,
+   {0x90,0x00,0x01}
+},
+{  1,
+   0x103c,
+   0,
+   {0x22}
+},
+{  14,
+   0x103d,
+   0,
+   {0x90,0x7d,0xc1,0xe0,0xf9,0xa3,0xe0,0xfa,0xa3,0xe0,0xfb,0x7c,0x00,0x7d}
+},
+{  4,
+   0x104b,
+   0,
+   {0x7e,0xeb,0x60,0x12}
+},
+{  14,
+   0x104f,
+   0,
+   {0x89,0x82,0x8a,0x83,0xe0,0xa3,0xa9,0x82,0xaa,0x83,0x8c,0x82,0x8d,0x83}
+},
+{  4,
+   0x105d,
+   0,
+   {0xf0,0x0c,0xdb,0xee}
+},
+{  8,
+   0x1061,
+   0,
+   {0x90,0x7d,0xc3,0xe0,0x90,0x7f,0xb9,0xf0}
+},
+{  1,
+   0x1069,
+   0,
+   {0x22}
+},
+{  14,
+   0x106a,
+   0,
+   {0x90,0x7d,0xc1,0xe0,0xf9,0xa3,0xe0,0xfa,0xa3,0xe0,0xfb,0x7c,0xc4,0x7d}
+},
+{  4,
+   0x1078,
+   0,
+   {0x7d,0xeb,0x60,0xe5}
+},
+{  14,
+   0x107c,
+   0,
+   {0x8c,0x82,0x8d,0x83,0xe0,0x0c,0x89,0x82,0x8a,0x83,0xf0,0xa3,0xa9,0x82}
+},
+{  4,
+   0x108a,
+   0,
+   {0xaa,0x83,0xdb,0xee}
+},
+{  1,
+   0x108e,
+   0,
+   {0x22}
+},
+{  14,
+   0x108f,
+   0,
+   {0x90,0x7f,0xa5,0x74,0x80,0xf0,0x05,0x86,0x90,0x7d,0xc1,0xe0,0x05,0x86}
+},
+{  14,
+   0x109d,
+   0,
+   {0xa3,0xf0,0x12,0x10,0x1b,0x90,0x7f,0xa6,0x05,0x86,0xa3,0xa3,0xe0,0xf9}
+},
+{  5,
+   0x10ab,
+   0,
+   {0x60,0x16,0xa3,0x05,0x86}
+},
+{  13,
+   0x10b0,
+   0,
+   {0x90,0x7f,0xa6,0x05,0x86,0xe0,0xa3,0x05,0x86,0xf0,0xc0,0x01,0x12}
+},
+{  6,
+   0x10bd,
+   0,
+   {0x10,0x1b,0xd0,0x01,0xd9,0xed}
+},
+{  6,
+   0x10c3,
+   0,
+   {0x90,0x7f,0xa5,0x74,0x40,0xf0}
+},
+{  1,
+   0x10c9,
+   0,
+   {0x22}
+},
+{  8,
+   0x10ca,
+   0,
+   {0x90,0x88,0x02,0x74,0x01,0xf0,0x7a,0x00}
+},
+{  3,
+   0x10d2,
+   0,
+   {0xba,0xff,0x00}
+},
+{  2,
+   0x10d5,
+   0,
+   {0x50,0x0a}
+},
+{  10,
+   0x10d7,
+   0,
+   {0xc0,0x02,0x12,0x01,0xdd,0xd0,0x02,0x0a,0x80,0xf1}
+},
+{  1,
+   0x10e1,
+   0,
+   {0x22}
+},
+{  5,
+   0x10e2,
+   0,
+   {0xe5,0x6b,0xb4,0xc0,0x08}
+},
+{  8,
+   0x10e7,
+   0,
+   {0x90,0x88,0x03,0xe5,0x6c,0xf0,0x80,0x06}
+},
+{  6,
+   0x10ef,
+   0,
+   {0x90,0x88,0x02,0xe5,0x6c,0xf0}
+},
+{  4,
+   0x10f5,
+   0,
+   {0x7a,0x00,0x7b,0x00}
+},
+{  11,
+   0x10f9,
+   0,
+   {0xc3,0xea,0x94,0x32,0xeb,0x64,0x80,0x94,0x80,0x50,0x07}
+},
+{  5,
+   0x1104,
+   0,
+   {0x0a,0xba,0x00,0x01,0x0b}
+},
+{  2,
+   0x1109,
+   0,
+   {0x80,0xee}
+},
+{  1,
+   0x110b,
+   0,
+   {0x22}
+},
+{  10,
+   0x110c,
+   0,
+   {0x90,0x88,0x03,0xe5,0x6d,0xf0,0x05,0x39,0x7a,0x00}
+},
+{  3,
+   0x1116,
+   0,
+   {0xba,0x28,0x00}
+},
+{  2,
+   0x1119,
+   0,
+   {0x50,0x03}
+},
+{  3,
+   0x111b,
+   0,
+   {0x0a,0x80,0xf8}
+},
+{  5,
+   0x111e,
+   0,
+   {0xe5,0x39,0xb4,0x10,0x08}
+},
+{  8,
+   0x1123,
+   0,
+   {0x90,0x88,0x02,0x74,0xc0,0xf0,0x80,0x0e}
+},
+{  5,
+   0x112b,
+   0,
+   {0xe5,0x39,0xb4,0x20,0x09}
+},
+{  9,
+   0x1130,
+   0,
+   {0x90,0x88,0x02,0x74,0x80,0xf0,0x75,0x39,0x00}
+},
+{  2,
+   0x1139,
+   0,
+   {0x7a,0x00}
+},
+{  3,
+   0x113b,
+   0,
+   {0xba,0x28,0x00}
+},
+{  2,
+   0x113e,
+   0,
+   {0x50,0x03}
+},
+{  3,
+   0x1140,
+   0,
+   {0x0a,0x80,0xf8}
+},
+{  1,
+   0x1143,
+   0,
+   {0x22}
+},
+{  4,
+   0x1144,
+   0,
+   {0xe5,0x6f,0x60,0x02}
+},
+{  2,
+   0x1148,
+   0,
+   {0x80,0x07}
+},
+{  7,
+   0x114a,
+   0,
+   {0x7a,0x00,0x75,0x39,0x00,0x80,0x05}
+},
+{  5,
+   0x1151,
+   0,
+   {0x7a,0x40,0x75,0x39,0x10}
+},
+{  9,
+   0x1156,
+   0,
+   {0xe5,0x6e,0x2a,0xfa,0xe5,0x6e,0x25,0x39,0xf5}
+},
+{  10,
+   0x115f,
+   0,
+   {0x39,0x90,0x88,0x02,0x74,0x80,0x2a,0xf0,0x7a,0x00}
+},
+{  8,
+   0x1169,
+   0,
+   {0xc3,0xea,0x64,0x80,0x94,0xa8,0x50,0x03}
+},
+{  3,
+   0x1171,
+   0,
+   {0x0a,0x80,0xf5}
+},
+{  1,
+   0x1174,
+   0,
+   {0x22}
+},
+{  6,
+   0x1175,
+   0,
+   {0xaa,0x70,0xab,0x71,0xac,0x72}
+},
+{  12,
+   0x117b,
+   0,
+   {0x8a,0x82,0x8b,0x83,0x8c,0xf0,0x12,0x14,0xee,0xfd,0x60,0x18}
+},
+{  13,
+   0x1187,
+   0,
+   {0x8d,0x6d,0xc0,0x02,0xc0,0x03,0xc0,0x04,0x12,0x11,0x0c,0xd0,0x04}
+},
+{  9,
+   0x1194,
+   0,
+   {0xd0,0x03,0xd0,0x02,0x0a,0xba,0x00,0x01,0x0b}
+},
+{  2,
+   0x119d,
+   0,
+   {0x80,0xdc}
+},
+{  1,
+   0x119f,
+   0,
+   {0x22}
+},
+{  13,
+   0x11a0,
+   0,
+   {0xe5,0x73,0xc4,0x54,0x0f,0xfa,0x53,0x02,0x0f,0xc3,0x74,0x09,0x9a}
+},
+{  2,
+   0x11ad,
+   0,
+   {0x50,0x06}
+},
+{  6,
+   0x11af,
+   0,
+   {0x74,0x37,0x2a,0xfb,0x80,0x04}
+},
+{  4,
+   0x11b5,
+   0,
+   {0x74,0x30,0x2a,0xfb}
+},
+{  12,
+   0x11b9,
+   0,
+   {0x8b,0x6d,0xc0,0x03,0x12,0x11,0x0c,0xd0,0x03,0xaa,0x73,0x53}
+},
+{  8,
+   0x11c5,
+   0,
+   {0x02,0x0f,0xc3,0x74,0x09,0x9a,0x50,0x06}
+},
+{  6,
+   0x11cd,
+   0,
+   {0x74,0x37,0x2a,0xfb,0x80,0x04}
+},
+{  4,
+   0x11d3,
+   0,
+   {0x74,0x30,0x2a,0xfb}
+},
+{  5,
+   0x11d7,
+   0,
+   {0x8b,0x6d,0x12,0x11,0x0c}
+},
+{  1,
+   0x11dc,
+   0,
+   {0x22}
+},
+{  7,
+   0x11dd,
+   0,
+   {0x90,0x7d,0xc3,0xe0,0xfa,0x60,0x0f}
+},
+{  12,
+   0x11e4,
+   0,
+   {0x90,0x7d,0xc1,0xe0,0xf5,0x6e,0x90,0x7d,0xc2,0xe0,0xf5,0x6f}
+},
+{  3,
+   0x11f0,
+   0,
+   {0x12,0x11,0x44}
+},
+{  12,
+   0x11f3,
+   0,
+   {0x90,0x7d,0xff,0xe4,0xf0,0x75,0x70,0xc4,0x75,0x71,0x7d,0x75}
+},
+{  5,
+   0x11ff,
+   0,
+   {0x72,0x01,0x12,0x11,0x75}
+},
+{  1,
+   0x1204,
+   0,
+   {0x22}
+},
+{  2,
+   0x1205,
+   0,
+   {0x7a,0x04}
+},
+{  3,
+   0x1207,
+   0,
+   {0xba,0x40,0x00}
+},
+{  2,
+   0x120a,
+   0,
+   {0x50,0x36}
+},
+{  14,
+   0x120c,
+   0,
+   {0xea,0x24,0xc0,0xf5,0x82,0xe4,0x34,0x7d,0xf5,0x83,0xe0,0xfb,0x7c,0x00}
+},
+{  3,
+   0x121a,
+   0,
+   {0xbc,0x08,0x00}
+},
+{  2,
+   0x121d,
+   0,
+   {0x50,0x20}
+},
+{  6,
+   0x121f,
+   0,
+   {0x8b,0x05,0xed,0x30,0xe7,0x0b}
+},
+{  11,
+   0x1225,
+   0,
+   {0x90,0x7f,0x96,0x74,0x42,0xf0,0x74,0xc3,0xf0,0x80,0x08}
+},
+{  8,
+   0x1230,
+   0,
+   {0x90,0x7f,0x96,0xe4,0xf0,0x74,0x81,0xf0}
+},
+{  7,
+   0x1238,
+   0,
+   {0xeb,0x25,0xe0,0xfb,0x0c,0x80,0xdb}
+},
+{  3,
+   0x123f,
+   0,
+   {0x0a,0x80,0xc5}
+},
+{  1,
+   0x1242,
+   0,
+   {0x22}
+},
+{  4,
+   0x1243,
+   0,
+   {0x7a,0x00,0x7b,0xef}
+},
+{  3,
+   0x1247,
+   0,
+   {0xba,0x10,0x00}
+},
+{  2,
+   0x124a,
+   0,
+   {0x50,0x20}
+},
+{  14,
+   0x124c,
+   0,
+   {0x74,0x11,0x2b,0xfb,0x24,0x00,0xfc,0xe4,0x34,0x18,0xfd,0x8c,0x82,0x8d}
+},
+{  14,
+   0x125a,
+   0,
+   {0x83,0xe4,0xf0,0xea,0x24,0x00,0xf5,0x82,0xe4,0x34,0x19,0xf5,0x83,0xe4}
+},
+{  4,
+   0x1268,
+   0,
+   {0xf0,0x0a,0x80,0xdb}
+},
+{  1,
+   0x126c,
+   0,
+   {0x22}
+},
+{  14,
+   0x126d,
+   0,
+   {0x74,0xf8,0x24,0x00,0xf5,0x82,0x74,0x03,0x34,0x84,0xf5,0x83,0xe4,0xf0}
+},
+{  14,
+   0x127b,
+   0,
+   {0x74,0xf9,0x24,0x00,0xf5,0x82,0x74,0x03,0x34,0x84,0xf5,0x83,0xe4,0xf0}
+},
+{  14,
+   0x1289,
+   0,
+   {0x74,0xfa,0x24,0x00,0xf5,0x82,0x74,0x03,0x34,0x84,0xf5,0x83,0xe4,0xf0}
+},
+{  14,
+   0x1297,
+   0,
+   {0x74,0xfb,0x24,0x00,0xf5,0x82,0x74,0x03,0x34,0x84,0xf5,0x83,0xe4,0xf0}
+},
+{  14,
+   0x12a5,
+   0,
+   {0x74,0xff,0x24,0x00,0xf5,0x82,0x74,0x03,0x34,0x84,0xf5,0x83,0xe4,0xf0}
+},
+{  1,
+   0x12b3,
+   0,
+   {0x22}
+},
+{  14,
+   0x12b4,
+   0,
+   {0x12,0x03,0xcb,0x12,0x12,0x6d,0x7a,0xc0,0x7b,0x87,0x7c,0x01,0x74,0x01}
+},
+{  14,
+   0x12c2,
+   0,
+   {0x2a,0xfd,0xe4,0x3b,0xfe,0x8c,0x07,0x8a,0x82,0x8b,0x83,0x8c,0xf0,0x74}
+},
+{  14,
+   0x12d0,
+   0,
+   {0x01,0x12,0x14,0xbf,0x2d,0xfa,0xe4,0x3e,0xfb,0x8f,0x04,0x8d,0x82,0x8e}
+},
+{  14,
+   0x12de,
+   0,
+   {0x83,0x8f,0xf0,0x74,0x06,0x12,0x14,0xbf,0x74,0x01,0x2a,0xfd,0xe4,0x3b}
+},
+{  14,
+   0x12ec,
+   0,
+   {0xfe,0x8c,0x07,0x8a,0x82,0x8b,0x83,0x8c,0xf0,0xe4,0x12,0x14,0xbf,0x74}
+},
+{  14,
+   0x12fa,
+   0,
+   {0x01,0x2d,0xfa,0xe4,0x3e,0xfb,0x8f,0x04,0x8d,0x82,0x8e,0x83,0x8f,0xf0}
+},
+{  14,
+   0x1308,
+   0,
+   {0x74,0x0b,0x12,0x14,0xbf,0x74,0x01,0x2a,0xfd,0xe4,0x3b,0xfe,0x8c,0x07}
+},
+{  14,
+   0x1316,
+   0,
+   {0x8a,0x82,0x8b,0x83,0x8c,0xf0,0x74,0x08,0x12,0x14,0xbf,0x74,0x01,0x2d}
+},
+{  14,
+   0x1324,
+   0,
+   {0xfa,0xe4,0x3e,0xfb,0x8f,0x04,0x8d,0x82,0x8e,0x83,0x8f,0xf0,0x74,0x01}
+},
+{  14,
+   0x1332,
+   0,
+   {0x12,0x14,0xbf,0x2a,0xfd,0xe4,0x3b,0xfe,0x8c,0x07,0x8a,0x82,0x8b,0x83}
+},
+{  14,
+   0x1340,
+   0,
+   {0x8c,0xf0,0xe4,0x12,0x14,0xbf,0x74,0x01,0x2d,0xfa,0xe4,0x3e,0xfb,0x8f}
+},
+{  14,
+   0x134e,
+   0,
+   {0x04,0x8d,0x82,0x8e,0x83,0x8f,0xf0,0x74,0x03,0x12,0x14,0xbf,0x7d,0x00}
+},
+{  3,
+   0x135c,
+   0,
+   {0xbd,0x06,0x00}
+},
+{  2,
+   0x135f,
+   0,
+   {0x50,0x12}
+},
+{  11,
+   0x1361,
+   0,
+   {0x8a,0x82,0x8b,0x83,0x8c,0xf0,0x0a,0xba,0x00,0x01,0x0b}
+},
+{  7,
+   0x136c,
+   0,
+   {0xe4,0x12,0x14,0xbf,0x0d,0x80,0xe9}
+},
+{  13,
+   0x1373,
+   0,
+   {0x8a,0x82,0x8b,0x83,0x8c,0xf0,0xe5,0x74,0x12,0x14,0xbf,0x74,0xf9}
+},
+{  14,
+   0x1380,
+   0,
+   {0x24,0x00,0xf5,0x82,0x74,0x03,0x34,0x84,0xf5,0x83,0x74,0x0f,0xf0,0x74}
+},
+{  14,
+   0x138e,
+   0,
+   {0xfe,0x24,0x00,0xf5,0x82,0x74,0x03,0x34,0x84,0xf5,0x83,0x74,0x01,0xf0}
+},
+{  6,
+   0x139c,
+   0,
+   {0x12,0x03,0xe1,0x12,0x04,0xf7}
+},
+{  1,
+   0x13a2,
+   0,
+   {0x22}
+},
+{  13,
+   0x13a3,
+   0,
+   {0x90,0x7d,0xc1,0xe0,0xfa,0x24,0x00,0xfb,0xe4,0x34,0x19,0xfc,0x90}
+},
+{  14,
+   0x13b0,
+   0,
+   {0x7d,0xc2,0xe0,0xfd,0x8b,0x82,0x8c,0x83,0xf0,0x75,0xf0,0x11,0xea,0xa4}
+},
+{  3,
+   0x13be,
+   0,
+   {0xfa,0x7b,0x00}
+},
+{  3,
+   0x13c1,
+   0,
+   {0xbb,0x10,0x00}
+},
+{  2,
+   0x13c4,
+   0,
+   {0x50,0x24}
+},
+{  14,
+   0x13c6,
+   0,
+   {0xea,0x24,0x00,0xfc,0xe4,0x34,0x18,0xfd,0xeb,0x2c,0xfc,0xe4,0x3d,0xfd}
+},
+{  14,
+   0x13d4,
+   0,
+   {0x74,0x04,0x2b,0x24,0xc0,0xf5,0x82,0xe4,0x34,0x7d,0xf5,0x83,0xe0,0xfe}
+},
+{  8,
+   0x13e2,
+   0,
+   {0x8c,0x82,0x8d,0x83,0xf0,0x0b,0x80,0xd7}
+},
+{  14,
+   0x13ea,
+   0,
+   {0xea,0x24,0x00,0xfa,0xe4,0x34,0x18,0xfb,0x74,0x10,0x2a,0xf5,0x82,0xe4}
+},
+{  5,
+   0x13f8,
+   0,
+   {0x3b,0xf5,0x83,0xe4,0xf0}
+},
+{  1,
+   0x13fd,
+   0,
+   {0x22}
+},
+{  4,
+   0x13fe,
+   0,
+   {0xe5,0x76,0x60,0x02}
+},
+{  2,
+   0x1402,
+   0,
+   {0x80,0x16}
+},
+{  12,
+   0x1404,
+   0,
+   {0x74,0x0f,0x55,0x75,0xfa,0x8a,0x75,0x24,0x00,0xf5,0x82,0xe4}
+},
+{  10,
+   0x1410,
+   0,
+   {0x34,0x19,0xf5,0x83,0xe0,0xf5,0x74,0x12,0x12,0xb4}
+},
+{  10,
+   0x141a,
+   0,
+   {0x12,0x10,0xca,0x75,0x6e,0x00,0x75,0x6f,0x00,0x12}
+},
+{  6,
+   0x1424,
+   0,
+   {0x11,0x44,0x75,0x70,0xb9,0x75}
+},
+{  6,
+   0x142a,
+   0,
+   {0x71,0x14,0x75,0x72,0x02,0x12}
+},
+{  11,
+   0x1430,
+   0,
+   {0x11,0x75,0xe5,0x76,0xb4,0x02,0x04,0x74,0x01,0x80,0x01}
+},
+{  1,
+   0x143b,
+   0,
+   {0xe4}
+},
+{  3,
+   0x143c,
+   0,
+   {0xfa,0x70,0x0f}
+},
+{  12,
+   0x143f,
+   0,
+   {0x74,0x01,0x25,0x75,0xf5,0x73,0xc0,0x02,0x12,0x11,0xa0,0xd0}
+},
+{  3,
+   0x144b,
+   0,
+   {0x02,0x80,0x0a}
+},
+{  10,
+   0x144e,
+   0,
+   {0x85,0x75,0x73,0xc0,0x02,0x12,0x11,0xa0,0xd0,0x02}
+},
+{  12,
+   0x1458,
+   0,
+   {0x75,0x6e,0x00,0x75,0x6f,0x01,0xc0,0x02,0x12,0x11,0x44,0xd0}
+},
+{  4,
+   0x1464,
+   0,
+   {0x02,0xea,0x70,0x1a}
+},
+{  13,
+   0x1468,
+   0,
+   {0x75,0xf0,0x11,0xe5,0x75,0xa4,0xfa,0x24,0x00,0xfa,0xe4,0x34,0x18}
+},
+{  9,
+   0x1475,
+   0,
+   {0xfb,0x8a,0x70,0x8b,0x71,0x75,0x72,0x01,0x12}
+},
+{  4,
+   0x147e,
+   0,
+   {0x11,0x75,0x80,0x36}
+},
+{  2,
+   0x1482,
+   0,
+   {0x7a,0x00}
+},
+{  3,
+   0x1484,
+   0,
+   {0xba,0x10,0x00}
+},
+{  2,
+   0x1487,
+   0,
+   {0x50,0x2f}
+},
+{  13,
+   0x1489,
+   0,
+   {0xea,0x24,0x00,0xf5,0x82,0xe4,0x34,0x19,0xf5,0x83,0xe0,0xfb,0xe5}
+},
+{  4,
+   0x1496,
+   0,
+   {0x75,0xb5,0x03,0x1b}
+},
+{  14,
+   0x149a,
+   0,
+   {0x75,0xf0,0x11,0xea,0xa4,0xfb,0x24,0x00,0xfb,0xe4,0x34,0x18,0xfc,0x8b}
+},
+{  9,
+   0x14a8,
+   0,
+   {0x70,0x8c,0x71,0x75,0x72,0x01,0xc0,0x02,0x12}
+},
+{  4,
+   0x14b1,
+   0,
+   {0x11,0x75,0xd0,0x02}
+},
+{  3,
+   0x14b5,
+   0,
+   {0x0a,0x80,0xcc}
+},
+{  1,
+   0x14b8,
+   0,
+   {0x22}
+},
+{  6,
+   0x14b9,
+   0,
+   {0x50,0x72,0x6f,0x67,0x20,0x00}
+},
+{  14,
+   0x14bf,
+   0,
+   {0xc8,0xc0,0xe0,0xc8,0xc0,0xe0,0xe5,0xf0,0x60,0x0b,0x14,0x60,0x0f,0x14}
+},
+{  7,
+   0x14cd,
+   0,
+   {0x60,0x11,0x14,0x60,0x12,0x80,0x15}
+},
+{  7,
+   0x14d4,
+   0,
+   {0xd0,0xe0,0xa8,0x82,0xf6,0x80,0x0e}
+},
+{  5,
+   0x14db,
+   0,
+   {0xd0,0xe0,0xf0,0x80,0x09}
+},
+{  4,
+   0x14e0,
+   0,
+   {0xd0,0xe0,0x80,0x05}
+},
+{  5,
+   0x14e4,
+   0,
+   {0xd0,0xe0,0xa8,0x82,0xf2}
+},
+{  4,
+   0x14e9,
+   0,
+   {0xc8,0xd0,0xe0,0xc8}
+},
+{  1,
+   0x14ed,
+   0,
+   {0x22}
+},
+{  14,
+   0x14ee,
+   0,
+   {0xc8,0xc0,0xe0,0xe5,0xf0,0x60,0x0d,0x14,0x60,0x0f,0x14,0x60,0x0f,0x14}
+},
+{  6,
+   0x14fc,
+   0,
+   {0x60,0x10,0x74,0xff,0x80,0x0f}
+},
+{  5,
+   0x1502,
+   0,
+   {0xa8,0x82,0xe6,0x80,0x0a}
+},
+{  3,
+   0x1507,
+   0,
+   {0xe0,0x80,0x07}
+},
+{  4,
+   0x150a,
+   0,
+   {0xe4,0x93,0x80,0x03}
+},
+{  3,
+   0x150e,
+   0,
+   {0xa8,0x82,0xe2}
+},
+{  4,
+   0x1511,
+   0,
+   {0xf8,0xd0,0xe0,0xc8}
+},
+{  1,
+   0x1515,
+   0,
+   {0x22}
+},
+{  0,
+   0x0,
+   1,
+   {0}
+}
+};
index 33738e8319d0fa6456d6e9ca3d4f9c636012e12a..a238a6abd54d44b6788f1f6bff008e520d95e00b 100644 (file)
@@ -121,8 +121,10 @@ static int usb_hub_configure(struct usb_hub *hub)
        if (!bitmap)
                return -1;
 
-       if (usb_get_hub_descriptor(dev, bitmap, header->bLength) < 0)
+       if (usb_get_hub_descriptor(dev, bitmap, header->bLength) < 0) {
+               kfree(bitmap);
                return -1;
+       }
 
        descriptor = (struct usb_hub_descriptor *)bitmap;
 
@@ -321,10 +323,10 @@ static void usb_hub_port_connect_change(struct usb_device *hub, int port)
                /* We're done now, we already disconnected the device */
                return;
        }
-       wait_ms(500);   
+       wait_ms(400);   
        /* Reset the port */
        usb_set_port_feature(hub, port + 1, USB_PORT_FEAT_RESET);
-       wait_ms(500);   
+       wait_ms(100);   
        /* Allocate a new device struct for it */
        usb = usb_alloc_dev(hub, hub->bus);
        if (!usb) {
index 9c124d4b528d8d53981780806bbbfa75fa2a3191..28ab3e6934f9c79e6871150a269bc543ef09119f 100644 (file)
 #define USBKBD_REPEAT_DELAY (HZ / 4)
 #define USBKBD_REPEAT_RATE (HZ / 20)
 
-struct usb_keyboard
-{
-    struct usb_device *dev;
-    unsigned long down[2];
-    unsigned char repeat_key;
-    struct timer_list repeat_timer;
-    struct list_head list;
-    unsigned int irqpipe;
-    void *irq_handler; /* host controller's IRQ transfer handle */
+struct usb_keyboard {
+       struct usb_device *dev;
+       unsigned long down[2];
+       unsigned char repeat_key;
+       struct timer_list repeat_timer;
+       struct list_head list;
+       unsigned int irqpipe;
+       void *irq_handler;      /* host controller's IRQ transfer handle */
 };
 
 extern unsigned char usb_kbd_map[];
 
-static void * usb_kbd_probe(struct usb_device *dev, unsigned int i);
+static void *usb_kbd_probe(struct usb_device *dev, unsigned int i);
 static void usb_kbd_disconnect(struct usb_device *dev, void *ptr);
 static void usb_kbd_repeat(unsigned long dummy);
 
 static LIST_HEAD(usb_kbd_list);
 
-static struct usb_driver usb_kbd_driver =
-{
-    "keyboard",
-    usb_kbd_probe,
-    usb_kbd_disconnect,
-    {NULL, NULL}
+static struct usb_driver usb_kbd_driver = {
+       "keyboard",
+       usb_kbd_probe,
+       usb_kbd_disconnect,
+       {NULL, NULL}
 };
 
 
-static void
-usb_kbd_handle_key(unsigned char key, int down)
+static void usb_kbd_handle_key(unsigned char key, int down)
 {
-    int scancode = (int) usb_kbd_map[key];
-    if(scancode)
-    {
+       int scancode = (int) usb_kbd_map[key];
+       if (scancode) {
 #ifndef CONFIG_MAC_KEYBOARD
-        if(scancode & PCKBD_NEEDS_E0)
-        {
-            handle_scancode(0xe0, 1);
-        }
-#endif /* CONFIG_MAC_KEYBOARD */
-        handle_scancode((scancode & ~PCKBD_NEEDS_E0), down);
-    }
+               if (scancode & PCKBD_NEEDS_E0) {
+                       handle_scancode(0xe0, 1);
+               }
+#endif                         /* CONFIG_MAC_KEYBOARD */
+               handle_scancode((scancode & ~PCKBD_NEEDS_E0), down);
+       }
 }
 
-static void
-usb_kbd_repeat(unsigned long dev_id)
+static void usb_kbd_repeat(unsigned long dev_id)
 {
-    struct usb_keyboard *kbd = (struct usb_keyboard*) dev_id;
-
-    unsigned long flags;
-    save_flags(flags);
-    cli();
-
-    if(kbd->repeat_key)
-    {
-        usb_kbd_handle_key(kbd->repeat_key, 1);
-
-        /* reset repeat timer */
-        kbd->repeat_timer.function = usb_kbd_repeat;
-        kbd->repeat_timer.expires = jiffies + USBKBD_REPEAT_RATE;
-        kbd->repeat_timer.data = (unsigned long) kbd;
-        kbd->repeat_timer.prev = NULL;
-        kbd->repeat_timer.next = NULL;
-        add_timer(&kbd->repeat_timer);
-    }
-
-    restore_flags(flags);
+       struct usb_keyboard *kbd = (struct usb_keyboard *) dev_id;
+
+       unsigned long flags;
+       save_flags(flags);
+       cli();
+
+       if (kbd->repeat_key) {
+               usb_kbd_handle_key(kbd->repeat_key, 1);
+
+               /* reset repeat timer */
+               kbd->repeat_timer.function = usb_kbd_repeat;
+               kbd->repeat_timer.expires = jiffies + USBKBD_REPEAT_RATE;
+               kbd->repeat_timer.data = (unsigned long) kbd;
+               kbd->repeat_timer.prev = NULL;
+               kbd->repeat_timer.next = NULL;
+               add_timer(&kbd->repeat_timer);
+       }
+
+       restore_flags(flags);
 }
 
-static int
-usb_kbd_irq(int state, void *buffer, int len, void *dev_id)
+static int usb_kbd_irq(int state, void *buffer, int len, void *dev_id)
 {
-    struct usb_keyboard *kbd = (struct usb_keyboard*) dev_id;
-    unsigned long *down = (unsigned long*) buffer;
+       struct usb_keyboard *kbd = (struct usb_keyboard *) dev_id;
+       unsigned long *down = (unsigned long *) buffer;
 
-    /*
-     * USB_ST_NOERROR is the normal case.
-     * USB_ST_REMOVED occurs if keyboard disconnected
-     * On other states, ignore
-     */
+       /*
+        * USB_ST_NOERROR is the normal case.
+        * USB_ST_REMOVED occurs if keyboard disconnected
+        * On other states, ignore
+        */
 
-    switch (state) {
+       switch (state) {
        case USB_ST_REMOVED:
        case USB_ST_INTERNALERROR:
-               printk(KERN_DEBUG "%s(%d): Suspending\n", __FILE__, __LINE__);
-               return 0; /* disable */
-       case USB_ST_NOERROR: break;
-               default: return 1; /* ignore */
-    }
-
-    if(kbd->down[0] != down[0] || kbd->down[1] != down[1]) {
-        unsigned char *olddown, *newdown;
-        unsigned char modsdelta, key;
-        int i;
-
-        /* handle modifier change */
-        modsdelta = (*(unsigned char*) down ^ *(unsigned char*) kbd->down);
-        if(modsdelta)
-        {
-            for(i = 0; i < 8; i++)
-            {
-                if(modsdelta & 0x01)
-                {
-                    int pressed = (*(unsigned char*) down >> i) & 0x01;
-                    usb_kbd_handle_key(
-                        i + USBKBD_MODIFIER_BASE,
-                        pressed);
-                }
-                modsdelta >>= 1;
-            }
-        }
-
-        olddown = (unsigned char*) kbd->down + USBKBD_KEYCODE_OFFSET;
-        newdown = (unsigned char*) down + USBKBD_KEYCODE_OFFSET;
-
-        /* handle released keys */
-        for(i = 0; i < USBKBD_KEYCODE_COUNT; i++)
-        {
-            key = olddown[i];
-            if(USBKBD_VALID_KEYCODE(key)
-               && !USBKBD_FIND_KEYCODE(newdown, key, USBKBD_KEYCODE_COUNT))
-            {
-                usb_kbd_handle_key(key, 0);
-            }
-        }
-
-        /* handle pressed keys */
-        kbd->repeat_key = 0;
-        for(i = 0; i < USBKBD_KEYCODE_COUNT; i++)
-        {
-            key = newdown[i];
-            if(USBKBD_VALID_KEYCODE(key)
-               && !USBKBD_FIND_KEYCODE(olddown, key, USBKBD_KEYCODE_COUNT))
-            {
-                usb_kbd_handle_key(key, 1);
-                kbd->repeat_key = key;
-            }
-        }
-
-        /* set repeat timer if any keys were pressed */
-        if(kbd->repeat_key)
-        {
-            del_timer(&kbd->repeat_timer);
-            kbd->repeat_timer.function = usb_kbd_repeat;
-            kbd->repeat_timer.expires = jiffies + USBKBD_REPEAT_DELAY;
-            kbd->repeat_timer.data = (unsigned long) kbd;
-            kbd->repeat_timer.prev = NULL;
-            kbd->repeat_timer.next = NULL;
-            add_timer(&kbd->repeat_timer);
-        }
-
-        kbd->down[0] = down[0];
-        kbd->down[1] = down[1];
-    }
-
-    return 1;
+               printk(KERN_DEBUG "%s(%d): Suspending\n", __FILE__,
+                      __LINE__);
+               return 0;       /* disable */
+       case USB_ST_NOERROR:
+               break;
+       default:
+               return 1;       /* ignore */
+       }
+
+       if (kbd->down[0] != down[0] || kbd->down[1] != down[1]) {
+               unsigned char *olddown, *newdown;
+               unsigned char modsdelta, key;
+               int i;
+
+               /* handle modifier change */
+               modsdelta =
+                   (*(unsigned char *) down ^ *(unsigned char *) kbd->
+                    down);
+               if (modsdelta) {
+                       for (i = 0; i < 8; i++) {
+                               if (modsdelta & 0x01) {
+                                       int pressed =
+                                           (*(unsigned char *) down >> i)
+                                           & 0x01;
+                                       usb_kbd_handle_key(i +
+                                                          USBKBD_MODIFIER_BASE,
+                                                          pressed);
+                               }
+                               modsdelta >>= 1;
+                       }
+               }
+
+               olddown =
+                   (unsigned char *) kbd->down + USBKBD_KEYCODE_OFFSET;
+               newdown = (unsigned char *) down + USBKBD_KEYCODE_OFFSET;
+
+               /* handle released keys */
+               for (i = 0; i < USBKBD_KEYCODE_COUNT; i++) {
+                       key = olddown[i];
+                       if (USBKBD_VALID_KEYCODE(key)
+                           && !USBKBD_FIND_KEYCODE(newdown, key,
+                                                   USBKBD_KEYCODE_COUNT))
+                       {
+                               usb_kbd_handle_key(key, 0);
+                       }
+               }
+
+               /* handle pressed keys */
+               kbd->repeat_key = 0;
+               for (i = 0; i < USBKBD_KEYCODE_COUNT; i++) {
+                       key = newdown[i];
+                       if (USBKBD_VALID_KEYCODE(key)
+                           && !USBKBD_FIND_KEYCODE(olddown, key,
+                                                   USBKBD_KEYCODE_COUNT))
+                       {
+                               usb_kbd_handle_key(key, 1);
+                               kbd->repeat_key = key;
+                       }
+               }
+
+               /* set repeat timer if any keys were pressed */
+               if (kbd->repeat_key) {
+                       del_timer(&kbd->repeat_timer);
+                       kbd->repeat_timer.function = usb_kbd_repeat;
+                       kbd->repeat_timer.expires =
+                           jiffies + USBKBD_REPEAT_DELAY;
+                       kbd->repeat_timer.data = (unsigned long) kbd;
+                       kbd->repeat_timer.prev = NULL;
+                       kbd->repeat_timer.next = NULL;
+                       add_timer(&kbd->repeat_timer);
+               }
+
+               kbd->down[0] = down[0];
+               kbd->down[1] = down[1];
+       }
+
+       return 1;
 }
 
-static void *
-usb_kbd_probe(struct usb_device *dev, unsigned int i)
+static void *usb_kbd_probe(struct usb_device *dev, unsigned int i)
 {
-    struct usb_interface_descriptor *interface;
-    struct usb_endpoint_descriptor *endpoint;
-    struct usb_keyboard *kbd;
-    int ret;
-    
-    interface = &dev->actconfig->interface[i].altsetting[0];
-    endpoint = &interface->endpoint[0];
-
-    if(interface->bInterfaceClass != 3
-       || interface->bInterfaceSubClass != 1
-       || interface->bInterfaceProtocol != 1)
-    {
-        return NULL;
-    }
-
-    printk(KERN_INFO "USB HID boot protocol keyboard detected.\n");
-
-    kbd = kmalloc(sizeof(struct usb_keyboard), GFP_KERNEL);
-    if(kbd)
-    {
-        memset(kbd, 0, sizeof(*kbd));
-        kbd->dev = dev;
-
-        usb_set_protocol(dev, 0);
-        usb_set_idle(dev, 0, 0);
-        
-       kbd->irqpipe = usb_rcvintpipe(dev, endpoint->bEndpointAddress);
-       ret = usb_request_irq(dev, kbd->irqpipe,
-                               usb_kbd_irq, endpoint->bInterval,
-                               kbd, &kbd->irq_handler);
-       if (ret) {
-               printk(KERN_INFO "usb-keyboard failed usb_request_irq (0x%x)\n", ret);
-               goto probe_err;
+       struct usb_interface_descriptor *interface;
+       struct usb_endpoint_descriptor *endpoint;
+       struct usb_keyboard *kbd;
+       int ret;
+
+       interface = &dev->actconfig->interface[i].altsetting[0];
+       endpoint = &interface->endpoint[0];
+
+       if (interface->bInterfaceClass != 3
+           || interface->bInterfaceSubClass != 1
+           || interface->bInterfaceProtocol != 1) {
+               return NULL;
        }
 
-        list_add(&kbd->list, &usb_kbd_list);
-       
-       return kbd;
-    }
+       printk(KERN_INFO "USB HID boot protocol keyboard detected.\n");
+
+       kbd = kmalloc(sizeof(struct usb_keyboard), GFP_KERNEL);
+       if (kbd) {
+               memset(kbd, 0, sizeof(*kbd));
+               kbd->dev = dev;
+
+               usb_set_protocol(dev, 0);
+               usb_set_idle(dev, 0, 0);
+
+               kbd->irqpipe =
+                   usb_rcvintpipe(dev, endpoint->bEndpointAddress);
+               ret =
+                   usb_request_irq(dev, kbd->irqpipe, usb_kbd_irq,
+                                   endpoint->bInterval, kbd,
+                                   &kbd->irq_handler);
+               if (ret) {
+                       printk(KERN_INFO
+                              "usb-keyboard failed usb_request_irq (0x%x)\n",
+                              ret);
+                       goto probe_err;
+               }
+
+               list_add(&kbd->list, &usb_kbd_list);
+
+               return kbd;
+       }
 
 probe_err:
-    if (kbd)
-       kfree (kbd);
-    return NULL;
+       if (kbd)
+               kfree(kbd);
+       return NULL;
 }
 
-static void
-usb_kbd_disconnect(struct usb_device *dev, void *ptr)
+static void usb_kbd_disconnect(struct usb_device *dev, void *ptr)
 {
-    struct usb_keyboard *kbd = (struct usb_keyboard*) ptr;
-    if (kbd)
-    {
-       usb_release_irq(dev, kbd->irq_handler, kbd->irqpipe);
-       list_del(&kbd->list);
-       del_timer(&kbd->repeat_timer);
-       kfree(kbd);
-    }
-
-    printk(KERN_INFO "USB HID boot protocol keyboard removed.\n");
+       struct usb_keyboard *kbd = (struct usb_keyboard *) ptr;
+       if (kbd) {
+               usb_release_irq(dev, kbd->irq_handler, kbd->irqpipe);
+               list_del(&kbd->list);
+               del_timer(&kbd->repeat_timer);
+               kfree(kbd);
+       }
+
+       printk(KERN_INFO "USB HID boot protocol keyboard removed.\n");
 }
 
 int usb_kbd_init(void)
@@ -266,15 +262,17 @@ void usb_kbd_cleanup(void)
        cur = head->next;
 
        while (cur != head) {
-               struct usb_keyboard *kbd = list_entry(cur, struct usb_keyboard, list);
+               struct usb_keyboard *kbd =
+                   list_entry(cur, struct usb_keyboard, list);
 
                cur = cur->next;
 
-                list_del(&kbd->list);
-                INIT_LIST_HEAD(&kbd->list);
+               list_del(&kbd->list);
+               INIT_LIST_HEAD(&kbd->list);
 
                if (kbd->irq_handler) {
-                       usb_release_irq(kbd->dev, kbd->irq_handler, kbd->irqpipe);
+                       usb_release_irq(kbd->dev, kbd->irq_handler,
+                                       kbd->irqpipe);
                        /* never keep a reference to a released IRQ! */
                        kbd->irq_handler = NULL;
                }
@@ -293,5 +291,5 @@ void cleanup_module(void)
 {
        usb_kbd_cleanup();
 }
-#endif
 
+#endif
index 77ac17cd92b16ad3aafb6ede5b76a33db4717518..676537763abef90cbcacd3be33cc2e0ff55d12e1 100644 (file)
@@ -164,9 +164,7 @@ static int release_mouse(struct inode * inode, struct file * file)
                mouse->suspended = 0;
                /* stop polling the mouse while its not in use */
                usb_unlink_urb(mouse->urb);
-               /* never keep a reference to a released IRQ! */
-               mouse->irq_handle = NULL;
-       }
+               }
 
        return 0;
 }
@@ -248,6 +246,8 @@ static ssize_t read_mouse(struct file * file, char * buffer, size_t count, loff_
        static int state = 0;
        struct mouse_state *mouse = &static_mouse_state;
 
+       if (!mouse->present)
+               return 0;
        /*
         * FIXME - Other mouse drivers handle blocking and nonblocking reads
         * differently here...
@@ -417,8 +417,6 @@ static void mouse_disconnect(struct usb_device *dev, void *priv)
          usb_unlink_urb(mouse->urb);
        }
 
-       mouse->irq_handle = NULL;
-
        /* this might need work */
        mouse->present = 0;
        printk("Mouse disconnected\n");
@@ -438,13 +436,14 @@ int usb_mouse_init(void)
        struct mouse_state *mouse = &static_mouse_state;
 
        mouse->present = mouse->active = mouse->suspended = 0;
-       mouse->irq_handle = NULL;
        mouse->buffer=kmalloc(64,GFP_KERNEL);
+
        if (!mouse->buffer)
          return -ENOMEM;
        mouse->urb=usb_alloc_urb(0);
        if (!mouse->urb)
          printk(KERN_DEBUG MODSTR"URB allocation failed\n");
+
        init_waitqueue_head(&mouse->wait);
        mouse->fasync = NULL;
 
@@ -461,10 +460,8 @@ void usb_mouse_cleanup(void)
 
        /* stop the usb interrupt transfer */
        if (mouse->present) {
-         usb_unlink_urb(mouse->urb);
-               /* never keep a reference to a released IRQ! */
-               mouse->irq_handle = NULL;
-       }
+               usb_unlink_urb(mouse->urb);
+               }
        kfree(mouse->urb);
        kfree(mouse->buffer);
        /* this, too, probably needs work */
index d6c892201df98a6706ba9becf9832a043479edec..bd034b4f83fd9e6ec619acc360c135c6711d7739 100644 (file)
@@ -82,23 +82,23 @@ spinlock_t usb_ed_lock = SPIN_LOCK_UNLOCKED;
  
 /* free the private part of an URB */
  
-static void urb_rm_priv (purb_t purb) 
+static void urb_rm_priv (urb_t * urb) 
 {
-       purb_priv_t purb_priv = purb->hcpriv;
+       urb_priv_t * urb_priv = urb->hcpriv;
        int i;
        void * wait;
        
-       if (!purb_priv) return;
+       if (!urb_priv) return;
        
-       wait = purb_priv->wait;
+       wait = urb_priv->wait;
        
-       for (i=0; i < purb_priv->length; i++) {
-               if (purb_priv->td[i]) {
-                       OHCI_FREE (purb_priv->td[i]);
+       for (i = 0; i < urb_priv->length; i++) {
+               if (urb_priv->td [i]) {
+                       OHCI_FREE (urb_priv->td [i]);
                }
        }
-       kfree (purb->hcpriv);
-       purb->hcpriv = NULL;
+       kfree (urb->hcpriv);
+       urb->hcpriv = NULL;
        
        if (wait) {
                add_wait_queue (&op_wakeup, wait); 
@@ -114,12 +114,12 @@ static int sohci_get_current_frame_number (struct usb_device * dev);
 /* debug| print the main components of an URB     
  * small: 0) header + data packets 1) just header */
  
-static void urb_print (purb_t purb, char * str, int small)
+static void urb_print (urb_t * urb, char * str, int small)
 {
-       unsigned int pipe= purb->pipe;
+       unsigned int pipe= urb->pipe;
        int i, len;
        
-       if (!purb->dev || !purb->dev->bus) {
+       if (!urb->dev || !urb->dev->bus) {
                printk(KERN_DEBUG " %s URB: no dev\n", str);
                return;
        }
@@ -127,36 +127,53 @@ static void urb_print (purb_t purb, char * str, int small)
        printk (KERN_DEBUG "%s URB:[%4x] dev:%2d,ep:%2d-%c,type:%s,"
                        "flags:%4x,len:%d/%d,stat:%d(%x)\n", 
                        str,
-                       sohci_get_current_frame_number (purb->dev), 
+                       sohci_get_current_frame_number (urb->dev), 
                        usb_pipedevice (pipe),
                        usb_pipeendpoint (pipe), 
                        usb_pipeout (pipe)? 'O': 'I',
                        usb_pipetype (pipe) < 2? (usb_pipeint (pipe)? "INTR": "ISOC"):
                                (usb_pipecontrol (pipe)? "CTRL": "BULK"),
-                       purb->transfer_flags, 
-                       purb->actual_length, 
-                       purb->transfer_buffer_length,
-                       purb->status, purb->status);
+                       urb->transfer_flags, 
+                       urb->actual_length, 
+                       urb->transfer_buffer_length,
+                       urb->status, urb->status);
        if (!small) {
                if (usb_pipecontrol (pipe)) {
                        printk (KERN_DEBUG " cmd(8):");
                        for (i = 0; i < 8 ; i++) 
-                               printk (" %02x", ((__u8 *) purb->setup_packet) [i]);
+                               printk (" %02x", ((__u8 *) urb->setup_packet) [i]);
                        printk ("\n");
                }
-               if (purb->transfer_buffer_length > 0 && purb->transfer_buffer) {
+               if (urb->transfer_buffer_length > 0 && urb->transfer_buffer) {
                        printk (KERN_DEBUG " data(%d/%d):", 
-                               purb->actual_length, 
-                               purb->transfer_buffer_length);
+                               urb->actual_length, 
+                               urb->transfer_buffer_length);
                        len = usb_pipeout (pipe)? 
-                                               purb->transfer_buffer_length: purb->actual_length;
+                                               urb->transfer_buffer_length: urb->actual_length;
                        for (i = 0; i < 16 && i < len; i++) 
-                               printk(" %02x", ((__u8 *) purb->transfer_buffer) [i]);
-                       printk("%s stat:%d\n", i < len? "...": "", purb->status);
+                               printk (" %02x", ((__u8 *) urb->transfer_buffer) [i]);
+                       printk ("%s stat:%d\n", i < len? "...": "", urb->status);
                }
        } 
        
 }
+/* just for debugging; prints all 32 branches of the int ed tree inclusive iso eds*/
+void ep_print_int_eds (ohci_t * ohci, char * str) {
+       int i, j;
+        __u32 * ed_p;
+       for (i= 0; i < 32; i++) {
+               j = 5;
+               printk (KERN_DEBUG " %s branch int %2d(%2x): ", str, i, i);
+               ed_p = &(ohci->hcca.int_table [i]);
+               while (*ed_p != 0 && j--) {
+                       printk ("ed: %4x; ", (((ed_t *) bus_to_virt (*ed_p))->hwINFO));
+                       ed_p = &(((ed_t *) bus_to_virt (*ed_p))->hwNextED);
+               }
+               printk ("\n");
+       }
+}
+               
+
 #endif
 
 /*-------------------------------------------------------------------------*
@@ -165,63 +182,65 @@ static void urb_print (purb_t purb, char * str, int small)
 
 /* return a request to the completion handler */
  
-static int sohci_return_urb (purb_t purb)
+static int sohci_return_urb (urb_t * urb)
 {
-       purb_priv_t purb_priv = purb->hcpriv;
-       purb_t purbt;
+       urb_priv_t * urb_priv = urb->hcpriv;
+       urb_t * urbt;
        unsigned int flags;
        int i;
        
        /* just to be sure */
-       if (!purb->complete) {
-               urb_rm_priv (purb);
-               usb_dec_dev_use (purb->dev);
+       if (!urb->complete) {
+               urb_rm_priv (urb);
+               usb_dec_dev_use (urb->dev);
                return -1;
        }
        
-       if (!purb_priv) return -1; /* urb already unlinked */
+       if (!urb_priv) return -1; /* urb already unlinked */
        
 #ifdef DEBUG
-       urb_print (purb, "RET", usb_pipeout (purb->pipe));
+       urb_print (urb, "RET", usb_pipeout (urb->pipe));
 #endif
 
-       switch (usb_pipetype(purb->pipe)) {
+       switch (usb_pipetype (urb->pipe)) {
                case PIPE_INTERRUPT:
-                       purb->complete (purb); /* call complete and requeue URB */      
-                       purb->actual_length = 0;
-                       purb->status = USB_ST_URB_PENDING;
-                       if (purb_priv->state != URB_DEL)
-                               td_submit_urb (purb);
+                       urb->complete (urb); /* call complete and requeue URB */        
+                       urb->actual_length = 0;
+                       urb->status = USB_ST_URB_PENDING;
+                       if (urb_priv->state != URB_DEL)
+                               td_submit_urb (urb);
                        break;
                        
                case PIPE_ISOCHRONOUS:
-                       for (purbt = purb->next; purbt && (purbt != purb); purbt = purbt->next);
-                       if (purbt) { /* send the reply and requeue URB */       
-                               purb->complete (purb);
+                       for (urbt = urb->next; urbt && (urbt != urb); urbt = urbt->next);
+                       if (urbt) { /* send the reply and requeue URB */        
+                               urb->complete (urb);
+                               
                                spin_lock_irqsave (&usb_ed_lock, flags);
-                               purb->actual_length = 0;
-                               purb->status = USB_ST_URB_PENDING;
-                               purb->start_frame = purb_priv->ed->last_iso + 1;
-                               if (purb_priv->state != URB_DEL) {
-                                       for (i = 0; i < purb->number_of_packets; i++) {
-                                               purb->iso_frame_desc[i].actual_length = 0;
-                                               purb->iso_frame_desc[i].status = TD_NOTACCESSED;
+                               urb->actual_length = 0;
+                               urb->status = USB_ST_URB_PENDING;
+                               urb->start_frame = urb_priv->ed->last_iso + 1;
+                               if (urb_priv->state != URB_DEL) {
+                                       for (i = 0; i < urb->number_of_packets; i++) {
+                                               urb->iso_frame_desc[i].actual_length = 0;
+                                               urb->iso_frame_desc[i].status = -EXDEV;
                                        }
-                                       td_submit_urb (purb);
+                                       td_submit_urb (urb);
                                }
                                spin_unlock_irqrestore (&usb_ed_lock, flags);
+                               
                        } else { /* unlink URB, call complete */
-                               urb_rm_priv (purb);
-                               usb_dec_dev_use (purb->dev);
-                               purb->complete (purb);  
+                               urb_rm_priv (urb);
+                               usb_dec_dev_use (urb->dev);
+                               urb->complete (urb);    
                        }               
                        break;
                                
                case PIPE_BULK:
-               case PIPE_CONTROL: /* short packet error?, unlink URB, call complete */
-                       urb_rm_priv (purb);
-                       usb_dec_dev_use (purb->dev);
-                       purb->complete (purb);  
+               case PIPE_CONTROL: /* unlink URB, call complete */
+                       urb_rm_priv (urb);
+                       usb_dec_dev_use (urb->dev);
+                       urb->complete (urb);    
                        break;
        }
        return 0;
@@ -231,50 +250,50 @@ static int sohci_return_urb (purb_t purb)
 
 /* get a transfer request */
  
-static int sohci_submit_urb (purb_t purb)
+static int sohci_submit_urb (urb_t * urb)
 {
-       pohci_t ohci;
-       ped_t ed;
-       purb_priv_t purb_priv;
-       unsigned int pipe = purb->pipe;
+       ohci_t * ohci;
+       ed_t * ed;
+       urb_priv_t * urb_priv;
+       unsigned int pipe = urb->pipe;
        int i, size = 0;
        unsigned int flags;
        
-       if (!purb->dev || !purb->dev->bus) return -EINVAL;
+       if (!urb->dev || !urb->dev->bus) return -EINVAL;
        
-       if (purb->hcpriv) return -EINVAL; /* urb already in use */
+       if (urb->hcpriv) return -EINVAL; /* urb already in use */
 
-       usb_inc_dev_use (purb->dev);
-       ohci = (pohci_t) purb->dev->bus->hcpriv;
+       usb_inc_dev_use (urb->dev);
+       ohci = (ohci_t *) urb->dev->bus->hcpriv;
        
 #ifdef DEBUG
-       urb_print(purb, "SUB", usb_pipein (pipe));
+       urb_print (urb, "SUB", usb_pipein (pipe));
 #endif
        
        if (usb_pipedevice (pipe) == ohci->rh.devnum) 
-               return rh_submit_urb (purb); /* a request to the virtual root hub */
+               return rh_submit_urb (urb); /* a request to the virtual root hub */
 
        /* every endpoint has a ed, locate and fill it */
-       if (!(ed = ep_add_ed (purb->dev, pipe, purb->interval, 1))) {
-               usb_dec_dev_use (purb->dev);    
+       if (!(ed = ep_add_ed (urb->dev, pipe, urb->interval, 1))) {
+               usb_dec_dev_use (urb->dev);     
                return -ENOMEM;
        }
 
        /* for the private part of the URB we need the number of TDs (size) */
        switch (usb_pipetype (pipe)) {
                case PIPE_BULK: /* one TD for every 4096 Byte */
-                       size = (purb->transfer_buffer_length - 1) / 4096 + 1;
+                       size = (urb->transfer_buffer_length - 1) / 4096 + 1;
                        break;
                case PIPE_ISOCHRONOUS: /* number of packets from URB */
-                       size = purb->number_of_packets;
-                       for (i = 0; i < purb->number_of_packets; i++) {
-                               purb->iso_frame_desc[i].actual_length = 0;
-                               purb->iso_frame_desc[i].status = TD_NOTACCESSED;
+                       size = urb->number_of_packets;
+                       for (i = 0; i < urb->number_of_packets; i++) {
+                               urb->iso_frame_desc[i].actual_length = 0;
+                               urb->iso_frame_desc[i].status = -EXDEV;
                        }
                        break;
                case PIPE_CONTROL: /* 1 TD for setup, 1 for ACK and 1 for every 4096 B */
-                       size = (purb->transfer_buffer_length == 0)? 2: 
-                                               (purb->transfer_buffer_length - 1) / 4096 + 3;
+                       size = (urb->transfer_buffer_length == 0)? 2: 
+                                               (urb->transfer_buffer_length - 1) / 4096 + 3;
                        break;
                case PIPE_INTERRUPT: /* one TD */
                        size = 1;
@@ -283,52 +302,52 @@ static int sohci_submit_urb (purb_t purb)
        }
 
        /* allocate the private part or the URB */
-       purb_priv = kmalloc (sizeof (urb_priv_t) + size * sizeof (ptd_t), 
+       urb_priv = kmalloc (sizeof (urb_priv_t) + size * sizeof (td_t *), 
                                                        in_interrupt() ? GFP_ATOMIC : GFP_KERNEL);
-       if (!purb_priv) {
-               usb_dec_dev_use (purb->dev);    
+       if (!urb_priv) {
+               usb_dec_dev_use (urb->dev);     
                return -ENOMEM;
        }
-       memset (purb_priv, 0, sizeof (urb_priv_t) + size * sizeof (ptd_t));
+       memset (urb_priv, 0, sizeof (urb_priv_t) + size * sizeof (td_t *));
        
        /* fill the private part of the URB */
-       purb->hcpriv = purb_priv;
-       purb_priv->length = size;
-       purb_priv->td_cnt = 0;
-       purb_priv->state = 0;
-       purb_priv->ed = ed;     
-       purb_priv->wait = NULL;
+       urb->hcpriv = urb_priv;
+       urb_priv->length = size;
+       urb_priv->td_cnt = 0;
+       urb_priv->state = 0;
+       urb_priv->ed = ed;      
+       urb_priv->wait = NULL;
        
        /* allocate the TDs */
        for (i = 0; i < size; i++) { 
-               OHCI_ALLOC (purb_priv->td[i], sizeof (td_t));
-               if (!purb_priv->td[i]) {
-                       usb_dec_dev_use (purb->dev);    
-                       urb_rm_priv (purb);
+               OHCI_ALLOC (urb_priv->td[i], sizeof (td_t));
+               if (!urb_priv->td[i]) {
+                       usb_dec_dev_use (urb->dev);     
+                       urb_rm_priv (urb);
                        return -ENOMEM;
                }
        }       
        spin_lock_irqsave (&usb_ed_lock, flags);        
        if (ed->state == ED_NEW || (ed->state & ED_DEL)) {
-               urb_rm_priv(purb);
-               usb_dec_dev_use (purb->dev);    
+               urb_rm_priv(urb);
+               usb_dec_dev_use (urb->dev);     
                return -EINVAL;
        }
        
        /* for ISOC transfers calculate start frame index */
-       if (purb->transfer_flags & USB_ISO_ASAP) { 
-               purb->start_frame = ((ed->state == ED_OPER)? (ed->last_iso + 1): 
+       if (urb->transfer_flags & USB_ISO_ASAP) { 
+               urb->start_frame = ((ed->state == ED_OPER)? (ed->last_iso + 1): 
                                                                (ohci->hcca.frame_no + 10)) & 0xffff;
        }       
        
-       td_submit_urb (purb); /* fill the TDs and link it to the ed */
+       td_submit_urb (urb); /* fill the TDs and link it to the ed */
                                                
        if (ed->state != ED_OPER)  /* link the ed into a chain if is not already */
                ep_link (ohci, ed);
        spin_unlock_irqrestore (&usb_ed_lock, flags);
        
-       purb->status = USB_ST_URB_PENDING; 
-       // queue_urb(s, &purb->urb_list);
+       urb->status = USB_ST_URB_PENDING; 
+       // queue_urb(s, &urb->urb_list);
 
        return 0;       
 }
@@ -337,38 +356,43 @@ static int sohci_submit_urb (purb_t purb)
 
 /* deactivate all TDs and remove the private part of the URB */
  
-static int sohci_unlink_urb (purb_t purb)
+static int sohci_unlink_urb (urb_t * urb)
 {
        unsigned int flags;
-       pohci_t ohci;
+       ohci_t * ohci;
        DECLARE_WAITQUEUE (wait, current);
        
-       if (!purb) /* just to be sure */ 
+       if (!urb) /* just to be sure */ 
                return -EINVAL;
-         
-       ohci = (pohci_t) purb->dev->bus->hcpriv; 
-       
-       if (usb_pipedevice (purb->pipe) == ohci->rh.devnum) 
-               return rh_unlink_urb (purb); /* a request to the virtual root hub */
+               
+#ifdef DEBUG
+       urb_print (urb, "UNLINK", 1);
+#endif           
+
+       ohci = (ohci_t *) urb->dev->bus->hcpriv; 
+
+       if (usb_pipedevice (urb->pipe) == ohci->rh.devnum) 
+               return rh_unlink_urb (urb); /* a request to the virtual root hub */
        
-       if (purb->hcpriv) { 
-               if (purb->status == USB_ST_URB_PENDING) { /* URB active? */
-                       purb_priv_t purb_priv = purb->hcpriv;
-                       purb_priv->state = URB_DEL; 
+       if (urb->hcpriv) { 
+               if (urb->status == USB_ST_URB_PENDING) { /* URB active? */
+                       urb_priv_t  * urb_priv = urb->hcpriv;
+                       urb_priv->state = URB_DEL; 
                        /* we want to delete the TDs of an URB from an ed 
                         * request the deletion, it will be handled at the next USB-frame */
-                       purb_priv->wait = &wait;
-                       current->state = TASK_UNINTERRUPTIBLE;
+                       urb_priv->wait = &wait;
+                       
                        spin_lock_irqsave (&usb_ed_lock, flags);
-                       ep_rm_ed (purb->dev, purb_priv->ed);
-                       purb_priv->ed->state |= ED_URB_DEL;
+                       ep_rm_ed (urb->dev, urb_priv->ed);
+                       urb_priv->ed->state |= ED_URB_DEL;
                        spin_unlock_irqrestore (&usb_ed_lock, flags);
+
                        current->state = TASK_UNINTERRUPTIBLE;
                        schedule_timeout (HZ / 10); /* wait until all TDs are deleted */
                        remove_wait_queue (&op_wakeup, &wait); 
                } else 
-                       urb_rm_priv (purb);
-               usb_dec_dev_use (purb->dev);            
+                       urb_rm_priv (urb);
+               usb_dec_dev_use (urb->dev);             
        }       
        return 0;
 }
@@ -379,7 +403,7 @@ static int sohci_unlink_urb (purb_t purb)
 
 static int sohci_alloc_dev (struct usb_device *usb_dev)
 {
-       struct ohci_device *dev;
+       struct ohci_device * dev;
 
        dev = kmalloc (sizeof (*dev), GFP_KERNEL);
        if (!dev)
@@ -396,14 +420,14 @@ static int sohci_alloc_dev (struct usb_device *usb_dev)
 
 /* free private data space of usb device */
   
-static int sohci_free_dev (struct usb_device *usb_dev)
+static int sohci_free_dev (struct usb_device * usb_dev)
 {
        unsigned int flags;
        int i, cnt = 0;
-       ped_t ed;
+       ed_t * ed;
        DECLARE_WAITQUEUE (wait, current);
-       struct ohci_device *dev = usb_to_ohci (usb_dev);
-       struct ohci *ohci = usb_dev->bus->hcpriv;
+       struct ohci_device * dev = usb_to_ohci (usb_dev);
+       ohci_t * ohci = usb_dev->bus->hcpriv;
        
        if (!dev) return 0;
        
@@ -440,7 +464,7 @@ static int sohci_free_dev (struct usb_device *usb_dev)
 
 static int sohci_get_current_frame_number (struct usb_device *usb_dev) 
 {
-       pohci_t ohci = usb_dev->bus->hcpriv;
+       ohci_t * ohci = usb_dev->bus->hcpriv;
        
        return ohci->hcca.frame_no;
 }
@@ -464,7 +488,7 @@ struct usb_operations sohci_device_operations = {
  * returns the branch and 
  * sets the interval to interval = 2^integer (ld (interval)) */
 
-static int ep_int_ballance (pohci_t ohci, int interval, int load)
+static int ep_int_ballance (ohci_t * ohci, int interval, int load)
 {
        int i, branch = 0;
    
@@ -507,7 +531,7 @@ static int ep_rev (int num_bits, int word)
 
 /* link an ed into one of the HC chains */
 
-static int ep_link (pohci_t ohci, ped_t ed)
+static int ep_link (ohci_t * ohci, ed_t * edi)
 {       
        int int_branch;
        int i;
@@ -515,6 +539,7 @@ static int ep_link (pohci_t ohci, ped_t ed)
        int interval;
        int load;
        __u32 * ed_p;
+       volatile ed_t * ed = edi;
        
        ed->state = ED_OPER;
        
@@ -551,15 +576,19 @@ static int ep_link (pohci_t ohci, ped_t ed)
                for (i = 0; i < ep_rev (6, interval); i += inter) {
                        inter = 1;
                        for (ed_p = &(ohci->hcca.int_table[ep_rev (5, i) + int_branch]); 
-                               (*ed_p != 0) && (((ped_t) bus_to_virt (le32_to_cpu (*ed_p)))->int_interval >= interval); 
-                               ed_p = &(((ped_t) bus_to_virt (le32_to_cpu (*ed_p)))->hwNextED)) 
-                                       inter = ep_rev (6, ((ped_t) bus_to_virt (le32_to_cpu (*ed_p)))->int_interval);
+                               (*ed_p != 0) && (((ed_t *) bus_to_virt (le32_to_cpu (*ed_p)))->int_interval >= interval); 
+                               ed_p = &(((ed_t *) bus_to_virt (le32_to_cpu (*ed_p)))->hwNextED)) 
+                                       inter = ep_rev (6, ((ed_t *) bus_to_virt (le32_to_cpu (*ed_p)))->int_interval);
                        ed->hwNextED = *ed_p; 
                        *ed_p = cpu_to_le32 (virt_to_bus (ed));
                }
+#ifdef DEBUG
+               ep_print_int_eds (ohci, "LINK_INT");
+#endif
                break;
                
        case ISO:
+               ed->hwNextED = 0;
                if (ohci->ed_isotail != NULL) {
                        ohci->ed_isotail->hwNextED = cpu_to_le32 (virt_to_bus (ed));
                        ed->ed_prev = ohci->ed_isotail;
@@ -568,17 +597,18 @@ static int ep_link (pohci_t ohci, ped_t ed)
                                inter = 1;
                                for (ed_p = &(ohci->hcca.int_table[ep_rev (5, i)]); 
                                        *ed_p != 0; 
-                                       ed_p = &(((ped_t) bus_to_virt (le32_to_cpu (*ed_p)))->hwNextED)) 
-                                               inter = ep_rev (6, ((ped_t) bus_to_virt (le32_to_cpu (*ed_p)))->int_interval);
+                                       ed_p = &(((ed_t *) bus_to_virt (le32_to_cpu (*ed_p)))->hwNextED)) 
+                                               inter = ep_rev (6, ((ed_t *) bus_to_virt (le32_to_cpu (*ed_p)))->int_interval);
                                *ed_p = cpu_to_le32 (virt_to_bus (ed)); 
                        }       
                        ed->ed_prev = NULL;
                }       
-               ed->hwNextED = 0;
                ohci->ed_isotail = ed;  
+#ifdef DEBUG
+               ep_print_int_eds (ohci, "LINK_ISO");
+#endif
                break;
-       }
-               
+       }               
        return 0;
 }
 
@@ -589,7 +619,7 @@ static int ep_link (pohci_t ohci, ped_t ed)
  * the link from the ed still points to another operational ed or 0
  * so the HC can eventually finish the processing of the unlinked ed */
 
-static int ep_unlink (pohci_t ohci, ped_t ed) 
+static int ep_unlink (ohci_t * ohci, ed_t * ed) 
 {
        int int_branch;
        int i;
@@ -608,7 +638,7 @@ static int ep_unlink (pohci_t ohci, ped_t ed)
                if(ohci->ed_controltail == ed) {
                        ohci->ed_controltail = ed->ed_prev;
                } else {
-                       ((ped_t) bus_to_virt (le32_to_cpu (ed->hwNextED)))->ed_prev = ed->ed_prev;
+                       ((ed_t *) bus_to_virt (le32_to_cpu (ed->hwNextED)))->ed_prev = ed->ed_prev;
                }
                break;
       
@@ -621,7 +651,7 @@ static int ep_unlink (pohci_t ohci, ped_t ed)
                if (ohci->ed_bulktail == ed) {
                        ohci->ed_bulktail = ed->ed_prev;
                } else {
-                       ((ped_t) bus_to_virt (le32_to_cpu (ed->hwNextED)))->ed_prev = ed->ed_prev;
+                       ((ed_t *) bus_to_virt (le32_to_cpu (ed->hwNextED)))->ed_prev = ed->ed_prev;
                }
                break;
       
@@ -632,22 +662,24 @@ static int ep_unlink (pohci_t ohci, ped_t ed)
                for (i = 0; i < ep_rev (6, interval); i += inter) {
                        for (ed_p = &(ohci->hcca.int_table[ep_rev (5, i) + int_branch]), inter = 1; 
                                (*ed_p != 0) && (*ed_p != ed->hwNextED); 
-                               ed_p = &(((ped_t) bus_to_virt (le32_to_cpu (*ed_p)))->hwNextED), 
-                               inter = ep_rev (6, ((ped_t) bus_to_virt (le32_to_cpu (*ed_p)))->int_interval)) {                                
-                                       if(((ped_t) bus_to_virt (le32_to_cpu (*ed_p))) == ed) {
+                               ed_p = &(((ed_t *) bus_to_virt (le32_to_cpu (*ed_p)))->hwNextED), 
+                               inter = ep_rev (6, ((ed_t *) bus_to_virt (le32_to_cpu (*ed_p)))->int_interval)) {                               
+                                       if(((ed_t *) bus_to_virt (le32_to_cpu (*ed_p))) == ed) {
                                                *ed_p = ed->hwNextED;           
                                                break;
                                        }
                          }
                }
                for (i = int_branch; i < 32; i += interval) ohci->ohci_int_load[i] -= ed->int_load;
-               break;
+#ifdef DEBUG
+               ep_print_int_eds (ohci, "UNLINK_INT");
+#endif         break;
                
     case ISO:
        if (ohci->ed_isotail == ed)
                                ohci->ed_isotail = ed->ed_prev;
                if (ed->hwNextED != 0) 
-                               ((ped_t) bus_to_virt (le32_to_cpu (ed->hwNextED)))->ed_prev = ed->ed_prev;
+                               ((ed_t *) bus_to_virt (le32_to_cpu (ed->hwNextED)))->ed_prev = ed->ed_prev;
                                
                if (ed->ed_prev != NULL) {
                        ed->ed_prev->hwNextED = ed->hwNextED;
@@ -656,15 +688,18 @@ static int ep_unlink (pohci_t ohci, ped_t ed)
                                inter = 1;
                                for (ed_p = &(ohci->hcca.int_table[ep_rev (5, i)]); 
                                        *ed_p != 0; 
-                                       ed_p = &(((ped_t) bus_to_virt (le32_to_cpu (*ed_p)))->hwNextED)) {
-                                               inter = ep_rev (6, ((ped_t) bus_to_virt (le32_to_cpu (*ed_p)))->int_interval);
-                                               if(((ped_t) bus_to_virt (le32_to_cpu (*ed_p))) == ed) {
+                                       ed_p = &(((ed_t *) bus_to_virt (le32_to_cpu (*ed_p)))->hwNextED)) {
+                                               inter = ep_rev (6, ((ed_t *) bus_to_virt (le32_to_cpu (*ed_p)))->int_interval);
+                                               if(((ed_t *) bus_to_virt (le32_to_cpu (*ed_p))) == ed) {
                                                        *ed_p = ed->hwNextED;           
                                                        break;
                                                }
                                }
                        }       
                }       
+#ifdef DEBUG
+               ep_print_int_eds (ohci, "UNLINK_ISO");
+#endif
                break;
     }
     ed->state = ED_UNLINK;
@@ -680,11 +715,11 @@ static int ep_unlink (pohci_t ohci, ped_t ed)
  * in all other cases the state is left unchanged
  * the ed info fields are setted anyway even though most of them should not change */
  
-static ped_t ep_add_ed (struct usb_device * usb_dev, unsigned int pipe, int interval, int load)
+static ed_t * ep_add_ed (struct usb_device * usb_dev, unsigned int pipe, int interval, int load)
 {
-       struct ohci * ohci = usb_dev->bus->hcpriv;
-       ptd_t td;  
-       ped_t ed; 
+       ohci_t * ohci = usb_dev->bus->hcpriv;
+       td_t * td;  
+       volatile ed_t * ed; 
        
        
        spin_lock (&usb_ed_lock);
@@ -696,6 +731,7 @@ static ped_t ep_add_ed (struct usb_device * usb_dev, unsigned int pipe, int inte
                return NULL; /* pending delete request */
        
        if (ed->state == ED_NEW) {
+               ed->hwINFO = cpu_to_le32 (OHCI_ED_SKIP); /* skip ed */
                OHCI_ALLOC (td, sizeof (*td)); /* dummy td; end of td list for ed */
                if(!td) return NULL; /* out of memory */
                ed->hwTailP = cpu_to_le32 (virt_to_bus (td));
@@ -729,10 +765,10 @@ static ped_t ep_add_ed (struct usb_device * usb_dev, unsigned int pipe, int inte
  * put the ep on the rm_list and request a stop of the bulk or ctrl list 
  * real removal is done at the next start of frame (SOF) hardware interrupt */
  
-static void ep_rm_ed (struct usb_device * usb_dev, ped_t ed)
+static void ep_rm_ed (struct usb_device * usb_dev, ed_t * ed)
 {    
        unsigned int frame;
-       pohci_t ohci = usb_dev->bus->hcpriv;
+       ohci_t * ohci = usb_dev->bus->hcpriv;
 
        if ((ed->state & ED_DEL) || (ed->state & ED_URB_DEL)) return;
        
@@ -761,17 +797,22 @@ static void ep_rm_ed (struct usb_device * usb_dev, ped_t ed)
 
 /* prepare a TD */
 
-static void td_fill (unsigned int info, void * data, int len, purb_t purb, int type, int index)
+static void td_fill (unsigned int info, void * data, int len, urb_t * urb, int type, int index)
 {
-       volatile ptd_t td, td_pt;
-       purb_priv_t purb_priv = purb->hcpriv;
+       volatile td_t  * td, * td_pt;
+       urb_priv_t * urb_priv = urb->hcpriv;
+
+       if (index >= urb_priv->length) {
+               printk(KERN_ERR MODSTR "internal OHCI error: TD index > length\n");
+               return;
+       }
        
-       td_pt = purb_priv->td [index];
+       td_pt = urb_priv->td [index];
        /* fill the old dummy TD */
-       td = (ptd_t) bus_to_virt (le32_to_cpu (purb_priv->ed->hwTailP) & 0xfffffff0);
-       td->ed = purb_priv->ed;
+       td = (td_t *) bus_to_virt (le32_to_cpu (urb_priv->ed->hwTailP) & 0xfffffff0);
+       td->ed = urb_priv->ed;
        td->index = index;
-       td->urb = purb; 
+       td->urb = urb; 
        td->hwINFO = cpu_to_le32 (info);
        td->type = type;
        if ((td->ed->type & 3) == PIPE_ISOCHRONOUS) {
@@ -786,70 +827,75 @@ static void td_fill (unsigned int info, void * data, int len, purb_t purb, int t
        td->hwPSW [0] = cpu_to_le16 ((virt_to_bus (data) & 0x0FFF) | 0xE000);
        td_pt->hwNextTD = 0;
        td->ed->hwTailP = td->hwNextTD;
-       purb_priv->td [index] = td;
+       urb_priv->td [index] = td;
    
-       td->next_dl_td = td_pt;
+       td->next_dl_td = NULL; //td_pt;
 }
 
 /*-------------------------------------------------------------------------*/
  
 /* prepare all TDs of a transfer */
 
-static void td_submit_urb (purb_t purb)
+static void td_submit_urb (urb_t * urb)
 { 
-       purb_priv_t purb_priv = purb->hcpriv;
-       pohci_t ohci = (pohci_t) purb->dev->bus->hcpriv;
-       void * ctrl = purb->setup_packet;
-       void * data = purb->transfer_buffer;
-       int data_len = purb->transfer_buffer_length;
+       urb_priv_t * urb_priv = urb->hcpriv;
+       ohci_t * ohci = (ohci_t *) urb->dev->bus->hcpriv;
+       void * ctrl = urb->setup_packet;
+       void * data = urb->transfer_buffer;
+       int data_len = urb->transfer_buffer_length;
        int cnt = 0; 
        __u32 info = 0;
   
 
-       purb_priv->td_cnt = 0;
+       urb_priv->td_cnt = 0;
        
-       switch (usb_pipetype (purb->pipe)) {
+       switch (usb_pipetype (urb->pipe)) {
                case PIPE_BULK:
-                       info = usb_pipeout (purb->pipe)? 
+                       info = usb_pipeout (urb->pipe)? 
                                TD_CC | TD_DP_OUT | TD_T_TOGGLE: TD_CC | TD_DP_IN | TD_T_TOGGLE;
                        while(data_len > 4096) {                
-                               td_fill (info, data, 4096, purb, (cnt? 0: ST_ADDR) | ADD_LEN, cnt);
+                               td_fill (info, data, 4096, urb, (cnt? 0: ST_ADDR) | ADD_LEN, cnt);
                                data += 4096; data_len -= 4096; cnt++;
                        }
-                       info = usb_pipeout (purb->pipe)?
+                       info = usb_pipeout (urb->pipe)?
                                TD_CC | TD_DP_OUT | TD_T_TOGGLE: TD_CC | TD_R | TD_DP_IN | TD_T_TOGGLE;
-                       td_fill (info, data, data_len, purb, (cnt? 0: ST_ADDR) | ADD_LEN, cnt);
+                       td_fill (info, data, data_len, urb, (cnt? 0: ST_ADDR) | ADD_LEN, cnt);
+                       cnt++;
                        writel (OHCI_BLF, &ohci->regs->cmdstatus); /* start bulk list */
                        break;
 
                case PIPE_INTERRUPT:
-                       info = usb_pipeout (purb->pipe)? 
+                       info = usb_pipeout (urb->pipe)? 
                                TD_CC | TD_DP_OUT | TD_T_TOGGLE: TD_CC | TD_R | TD_DP_IN | TD_T_TOGGLE;
-                       td_fill (info, data, data_len, purb, ST_ADDR | ADD_LEN, 0);
+                       td_fill (info, data, data_len, urb, ST_ADDR | ADD_LEN, cnt++);
                        break;
 
                case PIPE_CONTROL:
                        info = TD_CC | TD_DP_SETUP | TD_T_DATA0;
-                       td_fill (info, ctrl, 8, purb, ST_ADDR, cnt++); 
+                       td_fill (info, ctrl, 8, urb, ST_ADDR, cnt++); 
                        if (data_len > 0) {  
-                               info = usb_pipeout (purb->pipe)? 
+                               info = usb_pipeout (urb->pipe)? 
                                        TD_CC | TD_R | TD_DP_OUT | TD_T_DATA1 : TD_CC | TD_R | TD_DP_IN | TD_T_DATA1;
-                               td_fill (info, data, data_len, purb, ADD_LEN, cnt++);  
+                               td_fill (info, data, data_len, urb, ADD_LEN, cnt++);  
                        } 
-                       info = usb_pipeout (purb->pipe)? 
+                       info = usb_pipeout (urb->pipe)? 
                                TD_CC | TD_DP_IN | TD_T_DATA1: TD_CC | TD_DP_OUT | TD_T_DATA1;
-                       td_fill (info, NULL, 0, purb, 0, cnt++);
+                       td_fill (info, NULL, 0, urb, 0, cnt++);
                        writel (OHCI_CLF, &ohci->regs->cmdstatus); /* start Control list */
                        break;
 
                case PIPE_ISOCHRONOUS:
-                       for (cnt = 0; cnt < purb->number_of_packets; cnt++) {
-                               td_fill (TD_CC|TD_ISO | ((purb->start_frame + cnt) & 0xffff), 
-                                       (__u8 *) data + purb->iso_frame_desc[cnt].offset, 
-                                       purb->iso_frame_desc[cnt].length, purb, (cnt? 0: ST_ADDR) | ADD_LEN, cnt); 
+                       for (cnt = 0; cnt < urb->number_of_packets; cnt++) {
+                               td_fill (TD_CC|TD_ISO | ((urb->start_frame + cnt) & 0xffff), 
+                                       (__u8 *) data + urb->iso_frame_desc[cnt].offset, 
+                                       urb->iso_frame_desc[cnt].length, urb, (cnt? 0: ST_ADDR) | ADD_LEN, cnt); 
                        }
                        break;
        } 
+#ifdef DEBUG
+       if (urb_priv->length != cnt) 
+               dbg (KERN_ERR MODSTR " ********* TD LENGTH %d != CNT %d\n", urb_priv->length, cnt);
+#endif 
 }
 
 /*-------------------------------------------------------------------------*
@@ -859,12 +905,12 @@ static void td_submit_urb (purb_t purb)
 /* replies to the request have to be on a FIFO basis so
  * we reverse the reversed done-list */
  
-static ptd_t dl_reverse_done_list (pohci_t ohci)
+static td_t * dl_reverse_done_list (ohci_t * ohci)
 {
        __u32 td_list_hc;
-       ptd_t td_rev = NULL;
-       ptd_t td_list = NULL;
-       purb_priv_t purb_priv = NULL;
+       td_t * td_rev = NULL;
+       td_t * td_list = NULL;
+       urb_priv_t * urb_priv = NULL;
        unsigned int flags;
        
        spin_lock_irqsave (&usb_ed_lock, flags);
@@ -873,18 +919,18 @@ static ptd_t dl_reverse_done_list (pohci_t ohci)
        ohci->hcca.done_head = 0;
        
        while (td_list_hc) {            
-               td_list = (ptd_t) bus_to_virt (td_list_hc);
+               td_list = (td_t *) bus_to_virt (td_list_hc);
 
                if (TD_CC_GET (le32_to_cpu (td_list->hwINFO))) {
-                       purb_priv = (purb_priv_t) td_list->urb->hcpriv;
+                       urb_priv = (urb_priv_t *) td_list->urb->hcpriv;
                        dbg (KERN_DEBUG MODSTR "**** USB-error/status: %x : %p \n", 
                                        TD_CC_GET (le32_to_cpu (td_list->hwINFO)), td_list);
                        if (td_list->ed->hwHeadP & cpu_to_le32 (0x1)) {
-                               if (purb_priv && ((td_list->index + 1) < purb_priv->length)) {
+                               if (urb_priv && ((td_list->index + 1) < urb_priv->length)) {
                                        td_list->ed->hwHeadP = 
-                                               (purb_priv->td[purb_priv->length - 1]->hwNextTD & cpu_to_le32 (0xfffffff0)) |
+                                               (urb_priv->td[urb_priv->length - 1]->hwNextTD & cpu_to_le32 (0xfffffff0)) |
                                                                        (td_list->ed->hwHeadP & cpu_to_le32 (0x2));
-                                       purb_priv->td_cnt = purb_priv->length - 1;
+                                       urb_priv->td_cnt = urb_priv->length - 1;
                                } else 
                                        td_list->ed->hwHeadP &= cpu_to_le32 (0xfffffff2);
                        }
@@ -902,16 +948,16 @@ static ptd_t dl_reverse_done_list (pohci_t ohci)
 
 /* there are some pending requests to remove 
  * - some of the eds (if ed->state & ED_DEL (set by sohci_free_dev)
- * - some URBs/TDs if purb_priv->state == URB_DEL */
+ * - some URBs/TDs if urb_priv->state == URB_DEL */
  
-static void dl_del_list (pohci_t ohci, unsigned int frame)
+static void dl_del_list (ohci_t  * ohci, unsigned int frame)
 {
        unsigned int flags;
-       ped_t ed;
+       ed_t * ed;
        __u32 edINFO;
-       ptd_t td = NULL, td_next = NULL, tdHeadP = NULL, tdTailP;
+       td_t * td = NULL, * td_next = NULL, * tdHeadP = NULL, * tdTailP;
        __u32 * td_p;
-       int ctrl=0, bulk=0;
+       int ctrl = 0, bulk = 0;
 
        spin_lock_irqsave (&usb_ed_lock, flags);
        for (ed = ohci->ed_rm_list[frame]; ed != NULL; ed = ed->ed_rm_list) {
@@ -922,14 +968,14 @@ static void dl_del_list (pohci_t ohci, unsigned int frame)
                td_p = &ed->hwHeadP;
                        
                for (td = tdHeadP; td != tdTailP; td = td_next) { 
-                       purb_t purb = td->urb;
-                       purb_priv_t purb_priv = td->urb->hcpriv;
+                       urb_t * urb = td->urb;
+                       urb_priv_t * urb_priv = td->urb->hcpriv;
                        
-                       td_next = td->next_dl_td; /* td may be freed by urb_rm_priv */
-                       if ((purb_priv->state == URB_DEL) || (ed->state & ED_DEL)) {
+                       td_next = bus_to_virt (le32_to_cpu (td->hwNextTD) & 0xfffffff0);
+                       if ((urb_priv->state == URB_DEL) || (ed->state & ED_DEL)) {
                                *td_p = td->hwNextTD | (*td_p & cpu_to_le32 (0x3));
-                               if(++ (purb_priv->td_cnt) == purb_priv->length) 
-                                       urb_rm_priv (purb);
+                               if(++ (urb_priv->td_cnt) == urb_priv->length) 
+                                       urb_rm_priv (urb);
                        } else {
                                td_p = &td->hwNextTD;
                        }
@@ -938,6 +984,7 @@ static void dl_del_list (pohci_t ohci, unsigned int frame)
                if (ed->state & ED_DEL) { /* set by sohci_free_dev */
                        struct ohci_device * dev = usb_to_ohci (ohci->dev[edINFO & 0x7F]);
                        OHCI_FREE (tdTailP); /* free dummy td */
+                       ed->hwINFO = cpu_to_le32 (OHCI_ED_SKIP); 
                        ed->state = ED_NEW; 
                        /* if all eds are removed wake up sohci_free_dev */
                        if ((! --dev->ed_cnt) && dev->wait) {
@@ -967,14 +1014,14 @@ static void dl_del_list (pohci_t ohci, unsigned int frame)
 
 /* td done list */
 
-static void dl_done_list (pohci_t ohci, ptd_t td_list)
+static void dl_done_list (ohci_t * ohci, td_t * td_list)
 {
-       ptd_t td_list_next = NULL;
-       ped_t ed;
+       td_t * td_list_next = NULL;
+       ed_t * ed;
        int dlen = 0;
        int cc = 0;
-       purb_t purb;
-       purb_priv_t purb_priv;
+       urb_t * urb;
+       urb_priv_t * urb_priv;
        __u32 tdINFO, tdBE, tdCBP, edHeadP, edTailP;
        __u16 tdPSW;
        unsigned int flags;
@@ -982,8 +1029,8 @@ static void dl_done_list (pohci_t ohci, ptd_t td_list)
        while (td_list) {
                td_list_next = td_list->next_dl_td;
                
-               purb = td_list->urb;
-               purb_priv = purb->hcpriv;
+               urb = td_list->urb;
+               urb_priv = urb->hcpriv;
                tdINFO = le32_to_cpu (td_list->hwINFO);
                tdBE   = le32_to_cpu (td_list->hwBE);
                tdCBP  = le32_to_cpu (td_list->hwCBP);
@@ -991,45 +1038,45 @@ static void dl_done_list (pohci_t ohci, ptd_t td_list)
                ed = td_list->ed;
                
                if (td_list->type & ST_ADDR) 
-                       purb->actual_length = 0;
+                       urb->actual_length = 0;
                        
                if (td_list->type & ADD_LEN) { /* accumulate length of multi td transfers */
                        if (tdINFO & TD_ISO) {
                                tdPSW = le16_to_cpu (td_list->hwPSW[0]);
                                cc = (tdPSW >> 12) & 0xF;
                                if (cc < 0xE)  {
-                                       if (usb_pipeout(purb->pipe)) {
-                                               dlen = purb->iso_frame_desc[td_list->index].length;
+                                       if (usb_pipeout(urb->pipe)) {
+                                               dlen = urb->iso_frame_desc[td_list->index].length;
                                        } else {
                                                dlen = tdPSW & 0x3ff;
                                        }
-                                       purb->actual_length += dlen;
-                                       purb->iso_frame_desc[td_list->index].actual_length = dlen;
-                                       if (!(purb->transfer_flags & USB_DISABLE_SPD) && (cc == TD_DATAUNDERRUN))
+                                       urb->actual_length += dlen;
+                                       urb->iso_frame_desc[td_list->index].actual_length = dlen;
+                                       if (!(urb->transfer_flags & USB_DISABLE_SPD) && (cc == TD_DATAUNDERRUN))
                                                cc = TD_CC_NOERROR;
                                         
-                                       purb->iso_frame_desc[td_list->index].status = cc_to_error[cc];
+                                       urb->iso_frame_desc[td_list->index].status = cc_to_error[cc];
                                }
                        } else {
                                if (tdBE != 0) {
-                                       dlen = (bus_to_virt (tdBE) - purb->transfer_buffer + 1);
+                                       dlen = (bus_to_virt (tdBE) - urb->transfer_buffer + 1);
                                        if (td_list->hwCBP == 0)
-                                       purb->actual_length += dlen;
+                                       urb->actual_length += dlen;
                                        else
-                                       purb->actual_length += (bus_to_virt(tdCBP) - purb->transfer_buffer);
+                                       urb->actual_length += (bus_to_virt(tdCBP) - urb->transfer_buffer);
                            }
                        }
                }
                /* error code of transfer */
                cc = TD_CC_GET (tdINFO);
-               if (!(purb->transfer_flags & USB_DISABLE_SPD) && (cc == TD_DATAUNDERRUN))
+               if (!(urb->transfer_flags & USB_DISABLE_SPD) && (cc == TD_DATAUNDERRUN))
                                                cc = TD_CC_NOERROR;
-               if (++(purb_priv->td_cnt) == purb_priv->length) {
-                       if (purb_priv->state != URB_DEL) { 
-                               purb->status = cc_to_error[cc];
-                               sohci_return_urb (purb);
+               if (++(urb_priv->td_cnt) == urb_priv->length) {
+                       if (urb_priv->state != URB_DEL) { 
+                               urb->status = cc_to_error[cc];
+                               sohci_return_urb (urb);
                        } else {
-                               urb_rm_priv (purb);
+                               urb_rm_priv (urb);
                        }
                }
                
@@ -1135,14 +1182,14 @@ static __u8 root_hub_hub_des[] =
 
 /* prepare Interrupt pipe data; HUB INTERRUPT ENDPOINT */ 
  
-static int rh_send_irq (pohci_t ohci, void * rh_data, int rh_len)
+static int rh_send_irq (ohci_t * ohci, void * rh_data, int rh_len)
 {
        int num_ports;
        int i;
        int ret;
        int len;
 
-       __u8 * data = rh_data;
+       __u8 data[8];
 
        num_ports = readl (&ohci->regs->roothub.a) & 0xff; 
        *(__u8 *) data = (readl (&ohci->regs->roothub.status) & 0x00030000) > 0? 1: 0;
@@ -1155,8 +1202,10 @@ static int rh_send_irq (pohci_t ohci, void * rh_data, int rh_len)
        }
        len = i/8 + 1;
   
-       if (ret > 0) return len;
-
+       if (ret > 0) { 
+               memcpy (rh_data, data, min (len, min (rh_len, sizeof(data))));
+               return len;
+       }
        return 0;
 }
 
@@ -1168,36 +1217,36 @@ static void rh_int_timer_do (unsigned long ptr)
 {
        int len; 
 
-       purb_t purb = (purb_t) ptr;
-       pohci_t ohci = purb->dev->bus->hcpriv;
+       urb_t * urb = (urb_t *) ptr;
+       ohci_t * ohci = urb->dev->bus->hcpriv;
        
        if(ohci->rh.send) { 
-               len = rh_send_irq (ohci, purb->transfer_buffer, purb->transfer_buffer_length);
+               len = rh_send_irq (ohci, urb->transfer_buffer, urb->transfer_buffer_length);
                if (len > 0) {
-                       purb->actual_length = len;
+                       urb->actual_length = len;
 #ifdef DEBUG
-                       urb_print (purb, "RET(rh)", usb_pipeout (purb->pipe));
+                       urb_print (urb, "RET(rh)", usb_pipeout (urb->pipe));
 #endif
-                       if (purb->complete) purb->complete (purb);
+                       if (urb->complete) urb->complete (urb);
                }
        }       
-       rh_init_int_timer (purb);
+       rh_init_int_timer (urb);
 }
 
 /*-------------------------------------------------------------------------*/
 
 /* Root Hub INTs are polled by this timer */
 
-static int rh_init_int_timer (purb_t purb) 
+static int rh_init_int_timer (urb_t * urb) 
 {
-       pohci_t ohci = purb->dev->bus->hcpriv;
+       ohci_t * ohci = urb->dev->bus->hcpriv;
 
-       ohci->rh.interval = purb->interval;
+       ohci->rh.interval = urb->interval;
        init_timer (&ohci->rh.rh_int_timer);
        ohci->rh.rh_int_timer.function = rh_int_timer_do;
-       ohci->rh.rh_int_timer.data = (unsigned long) purb;
+       ohci->rh.rh_int_timer.data = (unsigned long) urb;
        ohci->rh.rh_int_timer.expires = 
-                       jiffies + (HZ * (purb->interval < 30? 30: purb->interval)) / 1000;
+                       jiffies + (HZ * (urb->interval < 30? 30: urb->interval)) / 1000;
        add_timer (&ohci->rh.rh_int_timer);
        
        return 0;
@@ -1205,7 +1254,7 @@ static int rh_init_int_timer (purb_t purb)
 
 /*-------------------------------------------------------------------------*/
 
-#define OK(x)                          len = (x); req_reply = 0; break
+#define OK(x)                          len = (x); break
 #define WR_RH_STAT(x)          writel((x), &ohci->regs->roothub.status)
 #define WR_RH_PORTSTAT(x)      writel((x), &ohci->regs->roothub.portstatus[wIndex-1])
 #define RD_RH_STAT                     readl(&ohci->regs->roothub.status)
@@ -1213,19 +1262,19 @@ static int rh_init_int_timer (purb_t purb)
 
 /* request to virtual root hub */
 
-static int rh_submit_urb (purb_t purb)
+static int rh_submit_urb (urb_t * urb)
 {
-       struct usb_device *usb_dev = purb->dev;
-       pohci_t ohci = usb_dev->bus->hcpriv;
-       unsigned int pipe = purb->pipe;
-       devrequest * cmd = (devrequest *) purb->setup_packet;
-       void *data = purb->transfer_buffer;
-       int leni = purb->transfer_buffer_length;
+       struct usb_device * usb_dev = urb->dev;
+       ohci_t * ohci = usb_dev->bus->hcpriv;
+       unsigned int pipe = urb->pipe;
+       devrequest * cmd = (devrequest *) urb->setup_packet;
+       void * data = urb->transfer_buffer;
+       int leni = urb->transfer_buffer_length;
        int len = 0;
        int status = TD_CC_NOERROR;
        
-       __u8 data_buf[16];
-       int req_reply=-4;
+       __u8 datab[16];
+       __u8  * data_buf = datab;
        
        __u16 bmRType_bReq;
        __u16 wValue; 
@@ -1234,11 +1283,11 @@ static int rh_submit_urb (purb_t purb)
 
        if (usb_pipeint(pipe)) {
        
-               ohci->rh.urb =  purb;
+               ohci->rh.urb =  urb;
                ohci->rh.send = 1;
-               ohci->rh.interval = purb->interval;
-               rh_init_int_timer(purb);
-               purb->status = cc_to_error [TD_CC_NOERROR];
+               ohci->rh.interval = urb->interval;
+               rh_init_int_timer(urb);
+               urb->status = cc_to_error [TD_CC_NOERROR];
                
                return 0;
        }
@@ -1257,15 +1306,15 @@ static int rh_submit_urb (purb_t purb)
        */
   
                case RH_GET_STATUS:                                             
-                               *(__u16 *) data = cpu_to_le16 (1); OK (2);
+                               *(__u16 *) data_buf = cpu_to_le16 (1); OK (2);
                case RH_GET_STATUS | RH_INTERFACE:                      
-                               *(__u16 *) data = cpu_to_le16 (0); OK (2);
+                               *(__u16 *) data_buf = cpu_to_le16 (0); OK (2);
                case RH_GET_STATUS | RH_ENDPOINT:                       
-                               *(__u16 *) data = cpu_to_le16 (0); OK (2);   
+                               *(__u16 *) data_buf = cpu_to_le16 (0); OK (2);   
                case RH_GET_STATUS | RH_CLASS:                          
-                               *(__u32 *) data = cpu_to_le32 (RD_RH_STAT & 0x7fff7fff); OK (4);
+                               *(__u32 *) data_buf = cpu_to_le32 (RD_RH_STAT & 0x7fff7fff); OK (4);
                case RH_GET_STATUS | RH_OTHER | RH_CLASS:       
-                               *(__u32 *) data = cpu_to_le32 (RD_RH_PORTSTAT); OK (4);
+                               *(__u32 *) data_buf = cpu_to_le32 (RD_RH_PORTSTAT); OK (4);
 
                case RH_CLEAR_FEATURE | RH_ENDPOINT:  
                        switch (wValue) {
@@ -1320,10 +1369,10 @@ static int rh_submit_urb (purb_t purb)
                        switch ((wValue & 0xff00) >> 8) {
                                case (0x01): /* device descriptor */
                                        len = min (leni, min (sizeof (root_hub_dev_des), wLength));
-                                       memcpy (data, root_hub_dev_des, len); OK(len);
+                                       data_buf = root_hub_dev_des; OK(len);
                                case (0x02): /* configuration descriptor */
                                        len = min (leni, min (sizeof (root_hub_config_des), wLength));
-                                       memcpy (data, root_hub_config_des, len); OK(len);
+                                       data_buf = root_hub_config_des; OK(len);
                                case (0x03): /* string descriptors */
                                default: 
                                        status = TD_CC_STALL;
@@ -1343,10 +1392,9 @@ static int rh_submit_urb (purb_t purb)
                        } else {
                                *(__u32 *) (data_buf+7) = cpu_to_le32 (readl(&ohci->regs->roothub.b)); 
                        }
-                       memcpy (data, data_buf, len);
                        OK (len); 
  
-               case RH_GET_CONFIGURATION:      *(__u8 *) data = 0x01; OK (1);
+               case RH_GET_CONFIGURATION:      *(__u8 *) data_buf = 0x01; OK (1);
 
                case RH_SET_CONFIGURATION:      WR_RH_STAT (0x10000); OK (0);
 
@@ -1359,22 +1407,24 @@ static int rh_submit_urb (purb_t purb)
        dbg (KERN_DEBUG MODSTR "USB HC roothubstat2: %x \n",
                        readl ( &(ohci->regs->roothub.portstatus[1]) ));
 
-       purb->actual_length = len;
-       purb->status = cc_to_error [status];
+       len = min(len, leni);
+       memcpy (data, data_buf, len);
+       urb->actual_length = len;
+       urb->status = cc_to_error [status];
        
 #ifdef DEBUG
-       urb_print (purb, "RET(rh)", usb_pipeout (purb->pipe));
+       urb_print (urb, "RET(rh)", usb_pipeout (urb->pipe));
 #endif
 
-       if (purb->complete) purb->complete (purb);
+       if (urb->complete) urb->complete (urb);
        return 0;
 }
 
 /*-------------------------------------------------------------------------*/
 
-static int rh_unlink_urb (purb_t purb)
+static int rh_unlink_urb (urb_t * urb)
 {
-       pohci_t ohci = purb->dev->bus->hcpriv;
+       ohci_t * ohci = urb->dev->bus->hcpriv;
  
        ohci->rh.send = 0;
        del_timer (&ohci->rh.rh_int_timer);
@@ -1387,7 +1437,7 @@ static int rh_unlink_urb (purb_t purb)
 
 /* reset the HC not the BUS */
 
-static void hc_reset (pohci_t ohci)
+static void hc_reset (ohci_t * ohci)
 {
        int timeout = 30;
        int smm_timeout = 50; /* 0,5 sec */
@@ -1425,7 +1475,7 @@ static void hc_reset (pohci_t ohci)
  * enable interrupts 
  * connect the virtual root hub */
 
-static int hc_start (pohci_t ohci)
+static int hc_start (ohci_t * ohci)
 {
        unsigned int mask;
        unsigned int fminterval;
@@ -1473,10 +1523,10 @@ static int hc_start (pohci_t ohci)
 
 /* an interrupt happens */
 
-static void hc_interrupt (int irq, void *__ohci, struct pt_regs *r)
+static void hc_interrupt (int irq, void * __ohci, struct pt_regs * r)
 {
-       pohci_t ohci = __ohci;
-       struct ohci_regs *regs = ohci->regs;
+       ohci_t * ohci = __ohci;
+       struct ohci_regs * regs = ohci->regs;
        int ints; 
 
        if ((ohci->hcca.done_head != 0) && !(ohci->hcca.done_head & 0x01)) {
@@ -1485,7 +1535,9 @@ static void hc_interrupt (int irq, void *__ohci, struct pt_regs *r)
                if ((ints = (readl (&regs->intrstatus) & readl (&regs->intrenable))) == 0)
                        return;
        } 
+
+       dbg (KERN_DEBUG MODSTR "Interrupt: %x frame: %x \n", ints, ohci->hcca.frame_no);
+       
        if (ints & OHCI_INTR_WDH) {
                writel (OHCI_INTR_WDH, &regs->intrdisable);     
                dl_done_list (ohci, dl_reverse_done_list (ohci));
@@ -1513,13 +1565,13 @@ static void hc_interrupt (int irq, void *__ohci, struct pt_regs *r)
 
 /* allocate OHCI */
 
-static pohci_t hc_alloc_ohci (void* mem_base)
+static ohci_t * hc_alloc_ohci (void * mem_base)
 {
        int i;
-       pohci_t ohci;
-       struct usb_bus *bus;
+       ohci_t * ohci;
+       struct usb_bus * bus;
 
-       ohci = (pohci_t) __get_free_pages (GFP_KERNEL, 1);
+       ohci = (ohci_t *) __get_free_pages (GFP_KERNEL, 1);
        if (!ohci)
                return NULL;
                
@@ -1553,7 +1605,7 @@ static pohci_t hc_alloc_ohci (void* mem_base)
 
 /* De-allocate all resources.. */
 
-static void hc_release_ohci (pohci_t ohci)
+static void hc_release_ohci (ohci_t * ohci)
 {      
        dbg (KERN_DEBUG MODSTR "USB HC release ohci\n");
 
@@ -1583,9 +1635,9 @@ static void hc_release_ohci (pohci_t ohci)
 /* Increment the module usage count, start the control thread and
  * return success. */
  
-static int hc_found_ohci (int irq, void* mem_base)
+static int hc_found_ohci (int irq, void * mem_base)
 {
-       pohci_t ohci;
+       ohci_t * ohci;
        dbg (KERN_DEBUG MODSTR "USB HC found: irq= %d membase= %x \n", irq, (int) mem_base);
     
        ohci = hc_alloc_ohci (mem_base);
@@ -1613,7 +1665,7 @@ static int hc_found_ohci (int irq, void* mem_base)
 
 /*-------------------------------------------------------------------------*/
  
-static int hc_start_ohci (struct pci_dev *dev)
+static int hc_start_ohci (struct pci_dev * dev)
 {
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,0)
        unsigned int mem_base = dev->resource[0].start;
@@ -1640,13 +1692,13 @@ static int hc_start_ohci (struct pci_dev *dev)
 /* On Powerbooks, put the controller into suspend mode when going
  * to sleep, and do a resume when waking up. */
 
-static int ohci_sleep_notify (struct pmu_sleep_notifier *self, int when)
+static int ohci_sleep_notify (struct pmu_sleep_notifier * self, int when)
 {
-       struct list_head *ohci_l;
-       pohci_t ohci;
+       struct list_head * ohci_l;
+       ohci_t * ohci;
        
        for (ohci_l = ohci_hcd_list.next; ohci_l != &ohci_hcd_list; ohci_l = ohci_l->next) {
-       ohci = list_entry (ohci_l, struct ohci, ohci_hcd_list);
+       ohci = list_entry (ohci_l, ohci_t, ohci_hcd_list);
 
                switch (when) {
                case PBOOK_SLEEP_NOW:
@@ -1676,8 +1728,8 @@ static struct pmu_sleep_notifier ohci_sleep_notifier = {
 static int handle_apm_event (apm_event_t event) 
 {
        static int down = 0;
-       pohci_t ohci;
-       struct list_head *ohci_l;
+       ohci_t * ohci;
+       struct list_head * ohci_l;
        
        switch (event) {
        case APM_SYS_SUSPEND:
@@ -1687,7 +1739,7 @@ static int handle_apm_event (apm_event_t event)
                        break;
                }
                for (ohci_l = ohci_hcd_list.next; ohci_l != &ohci_hcd_list; ohci_l = ohci_l->next) {
-                       ohci = list_entry (ohci_l, struct ohci, ohci_hcd_list);
+                       ohci = list_entry (ohci_l, ohci_t, ohci_hcd_list);
                        dbg (KERN_DEBUG MODSTR "USB-Bus suspend: %p\n", ohci);
                        writel (ohci->hc_control = 0xFF, &ohci->regs->control);
                }
@@ -1701,13 +1753,13 @@ static int handle_apm_event (apm_event_t event)
                        break;
                }
                for (ohci_l = ohci_hcd_list.next; ohci_l != &ohci_hcd_list; ohci_l = ohci_l->next) {
-                       ohci = list_entry(ohci_l, struct ohci, ohci_hcd_list);
+                       ohci = list_entry(ohci_l, ohci_t, ohci_hcd_list);
                        dbg (KERN_DEBUG MODSTR "USB-Bus resume: %p\n", ohci);
                        writel (ohci->hc_control = 0x7F, &ohci->regs->control);
                }               
                wait_ms (20);
                for (ohci_l = ohci_hcd_list.next; ohci_l != &ohci_hcd_list; ohci_l = ohci_l->next) {
-                       ohci = list_entry (ohci_l, struct ohci, ohci_hcd_list);
+                       ohci = list_entry (ohci_l, ohci_t, ohci_hcd_list);
                        writel (ohci->hc_control = 0xBF, &ohci->regs->control);
                }
                down = 0;
@@ -1724,7 +1776,7 @@ static int handle_apm_event (apm_event_t event)
 int ohci_hcd_init (void) 
 {
        int ret = -ENODEV;
-       struct pci_dev *dev = NULL;
+       struct pci_dev * dev = NULL;
  
        while ((dev = pci_find_class (PCI_CLASS_SERIAL_USB_OHCI, dev))) { 
                if (hc_start_ohci(dev) >= 0) ret = 0;
@@ -1752,7 +1804,7 @@ int init_module (void)
 
 void cleanup_module (void) 
 {      
-       struct ohci *ohci;
+       ohci_t * ohci;
        
 #ifdef CONFIG_APM
        apm_unregister_callback (&handle_apm_event);
@@ -1763,7 +1815,7 @@ void cleanup_module (void)
 #endif  
 
        while (!list_empty (&ohci_hcd_list)) {
-               ohci = list_entry (ohci_hcd_list.next, struct ohci, ohci_hcd_list);
+               ohci = list_entry (ohci_hcd_list.next, ohci_t, ohci_hcd_list);
                list_del (&ohci->ohci_hcd_list);
                INIT_LIST_HEAD (&ohci->ohci_hcd_list);
                hc_release_ohci (ohci);
index c36389a087565a75f4f1d33d7fa84896d9b53c12..c9267f53351f2eb4e3de190cc49227a0e531d9d0 100644 (file)
@@ -30,7 +30,7 @@ static int cc_to_error[16] = {
        /* BufferOver */               USB_ST_BUFFEROVERRUN,
        /* BuffUnder  */               USB_ST_BUFFERUNDERRUN,
        /* Not Access */               USB_ST_NORESPONSE,
-       /* Not Access */               USB_ST_NORESPONSE
+       /* Not Access */               USB_ST_NORESPONSE 
 };
 
 #else  /* error codes */
@@ -75,7 +75,7 @@ typedef struct ed {
        __u32 hwHeadP;
        __u32 hwNextED;
 
-       struct ed *ed_prev;  
+       struct ed * ed_prev;  
        __u8 int_period;
        __u8 int_branch;
        __u8 int_load; 
@@ -85,7 +85,7 @@ typedef struct ed {
        __u16 last_iso;
     struct ed * ed_rm_list;
    
-} ed_t, * ped_t;
+} ed_t;
 
  
 /* TD info field */
@@ -124,7 +124,7 @@ typedef struct ed {
 #define TD_NOTACCESSED     0x0F
 
 
-#define MAXPSW 8
+#define MAXPSW 1
 
 typedef struct td { 
        __u32 hwINFO;
@@ -135,10 +135,10 @@ typedef struct td {
 
        __u8 type;
        __u8 index;
-       struct ed *ed;
-       struct td *next_dl_td;
-       purb_t urb;
-} td_t, * ptd_t;
+       struct ed * ed;
+       struct td * next_dl_td;
+       urb_t * urb;
+} td_t;
 
 
 /* TD types */
@@ -321,14 +321,14 @@ struct virt_root_hub {
 /* urb */
 typedef struct 
 {
-       ped_t ed;
+       ed_t * ed;
        __u16 length;   // number of tds associated with this request
        __u16 td_cnt;   // number of tds already serviced
        int   state;
        void * wait;
-       ptd_t td[0];    // list pointer to all corresponding TDs associated with this request
+       td_t * td[0];   // list pointer to all corresponding TDs associated with this request
 
-} urb_priv_t, *purb_priv_t;
+} urb_priv_t;
 #define URB_DEL 1
 
 /*
@@ -343,24 +343,24 @@ typedef struct ohci {
        struct ohci_hcca hcca;                                  /* hcca */                
 
        int irq;
-       struct ohci_regs *regs;                                 /* OHCI controller's memory */  
+       struct ohci_regs * regs;                                        /* OHCI controller's memory */  
     struct list_head ohci_hcd_list;         /* list of all ohci_hcd */           
 
-       struct ohci *next;              // chain of uhci device contexts
+       struct ohci * next;             // chain of uhci device contexts
        struct list_head urb_list;      // list of all pending urbs
        spinlock_t urb_list_lock;       // lock to keep consistency 
   
        int ohci_int_load[32];                  /* load of the 32 Interrupt Chains (for load ballancing)*/     
-       ped_t ed_rm_list[2];     /* lists of all endpoints to be removed */
-       ped_t ed_bulktail;       /* last endpoint of bulk list */
-       ped_t ed_controltail;    /* last endpoint of control list */
-       ped_t ed_isotail;        /* last endpoint of iso list */
+       ed_t * ed_rm_list[2];     /* lists of all endpoints to be removed */
+       ed_t * ed_bulktail;       /* last endpoint of bulk list */
+       ed_t * ed_controltail;    /* last endpoint of control list */
+       ed_t * ed_isotail;        /* last endpoint of iso list */
        int intrstatus;
        __u32 hc_control;                                               /* copy of the hc control reg */  
-       struct usb_bus *bus;    
+       struct usb_bus * bus;    
        struct usb_device * dev[128];
        struct virt_root_hub rh;
-} ohci_t, * pohci_t;
+} ohci_t;
 
 
 #define NUM_TDS        0               /* num of preallocated transfer descriptors */
@@ -377,17 +377,17 @@ struct ohci_device {
 
 /* hcd */
 /* endpoint */
-static int ep_link(pohci_t ohci, ped_t ed);
-static int ep_unlink(pohci_t ohci, ped_t ed);
-static ped_t ep_add_ed(struct usb_device * usb_dev, unsigned int pipe, int interval, int load);
-static void ep_rm_ed(struct usb_device * usb_dev, ped_t ed);
+static int ep_link(ohci_t * ohci, ed_t * ed);
+static int ep_unlink(ohci_t * ohci, ed_t * ed);
+static ed_t * ep_add_ed(struct usb_device * usb_dev, unsigned int pipe, int interval, int load);
+static void ep_rm_ed(struct usb_device * usb_dev, ed_t * ed);
 /* td */
-static void td_fill(unsigned int info, void * data, int len, purb_t purb, int type, int index);
-static void td_submit_urb(purb_t purb);
+static void td_fill(unsigned int info, void * data, int len, urb_t * urb, int type, int index);
+static void td_submit_urb(urb_t * urb);
 /* root hub */
-static int rh_submit_urb(purb_t purb);
-static int rh_unlink_urb(purb_t purb);
-static int rh_init_int_timer(purb_t purb);
+static int rh_submit_urb(urb_t * urb);
+static int rh_unlink_urb(urb_t * urb);
+static int rh_init_int_timer(urb_t * urb);
 
 #ifdef DEBUG
 #define OHCI_FREE(x) kfree(x); printk("OHCI FREE: %d: %4x\n", -- __ohci_free_cnt, (unsigned int) x)
index 4240aad8d0c48f711404850de48fb5d85489b6cb..4bf0b999a1daab07dfe5d780f216ff495bdb238d 100644 (file)
  * but it was just unplugged, so the directory is now deleted.
  * But programs would just have to be prepared for situations like
  * this in any plug-and-play environment.)
+ *
+ * 1999-12-16: Thomas Sailer <sailer@ife.ee.ethz.ch>
+ *   Converted the whole proc stuff to real
+ *   read methods. Now not the whole device list needs to fit
+ *   into one page, only the device list for one bus.
+ *   Added a poll method to /proc/bus/usb/devices, to wake
+ *   up an eventual usbd
+ *
+ * $Id: proc_usb.c,v 1.14 1999/12/17 10:51:41 fliegl Exp $
  */
 
-#define __KERNEL__     1
-
+#define __NO_VERSION__
+#include <linux/module.h>
 #include <linux/types.h>
-#include <asm/types.h>
 #include <linux/kernel.h>
-/* #include <linux/module.h> */
 #include <linux/fs.h>
 #include <linux/proc_fs.h>
 #include <linux/stat.h>
 #include <linux/bitops.h>
 #include <asm/uaccess.h>
 #include <linux/mm.h>
+#include <linux/wait.h>
+#include <linux/poll.h>
 
 #include "usb.h"
 
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,0)
-extern inline struct proc_dir_entry *create_proc_read_entry(const char *name,
-       mode_t mode, struct proc_dir_entry *base, 
-       read_proc_t *read_proc, void * data)
-{
-       struct proc_dir_entry *res=create_proc_entry(name,mode,base);
-       if (res) {
-               res->read_proc=read_proc;
-               res->data=data;
-       }
-       return res;
-}
-#endif
-
-#define DUMP_LIMIT             (PAGE_SIZE - 100)
-       /* limit to only one memory page of output */
 
 #define MAX_TOPO_LEVEL         6
 
+/* Define ALLOW_SERIAL_NUMBER if you want to see the serial number of devices */
+#define ALLOW_SERIAL_NUMBER
 
 static char *format_topo =
 /* T:  Lev=dd Prnt=dd Port=dd Cnt=dd Dev#=ddd Spd=ddd MxCh=dd */
   "T:  Lev=%2.2d Prnt=%2.2d Port=%2.2d Cnt=%2.2d Dev#=%3d Spd=%3s MxCh=%2d\n";
 
+static char *format_string_manufacturer =
+/* S:  Manufacturer=xxxx */
+  "S:  Manufacturer=%s\n";
+
+static char *format_string_product =
+/* S:  Product=xxxx */
+  "S:  Product=%s\n";
+
+#ifdef ALLOW_SERIAL_NUMBER
+static char *format_string_serialnumber =
+/* S:  SerialNumber=xxxx */
+  "S:  SerialNumber=%s\n";
+#endif
+
 static char *format_bandwidth =
 /* B:  Alloc=ddd/ddd us (xx%), #Int=ddd, #Iso=ddd */
   "B:  Alloc=%3d/%3d us (%2d%%), #Int=%3d, #Iso=%3d\n";
@@ -97,7 +106,7 @@ static char *format_config =
   "C:%c #Ifs=%2d Cfg#=%2d Atr=%02x MxPwr=%3dmA\n";
   
 static char *format_iface =
-/* I:  If#=dd Alt=dd #EPs=dd Cls=xx(sssss) Sub=xx Prot=xx */
+/* I:  If#=dd Alt=dd #EPs=dd Cls=xx(sssss) Sub=xx Prot=xx Driver=xxxx*/
   "I:  If#=%2d Alt=%2d #EPs=%2d Cls=%02x(%-5s) Sub=%02x Prot=%02x Driver=%s\n";
 
 static char *format_endpt =
@@ -120,12 +129,20 @@ extern struct proc_dir_entry *proc_bus;
 static struct proc_dir_entry *usbdir = NULL, *driversdir = NULL;
 static struct proc_dir_entry *devicesdir = NULL;
 
+static DECLARE_WAIT_QUEUE_HEAD(deviceconndiscwq);
+static unsigned int conndiscevcnt = 0;
+
+/* this struct stores the poll state for /proc/bus/usb/devices pollers */
+struct usb_device_status {
+       unsigned int lastev;
+};
+
 struct class_info {
        int class;
        char *class_name;
 };
 
-struct class_info clas_info [] =
+static const struct class_info clas_info[] =
 {                                      /* max. 5 chars. per name string */
        {USB_CLASS_PER_INTERFACE,       ">ifc"},
        {USB_CLASS_AUDIO,               "audio"},
@@ -141,78 +158,70 @@ struct class_info clas_info [] =
 
 /*****************************************************************/
 
-static char *class_decode (const int class)
+extern inline void conndiscevent(void)
 {
-       int     ix;
+       wake_up(&deviceconndiscwq);
+       conndiscevcnt++;
+}
 
-       for (ix = 0; clas_info [ix].class != -1; ix++)
-               if (clas_info [ix].class == class)
-                       break;
+static const char *class_decode(const int class)
+{
+       int ix;
 
-       return (clas_info [ix].class_name);
+       for (ix = 0; clas_info[ix].class != -1; ix++)
+               if (clas_info[ix].class == class)
+                       break;
+       return (clas_info[ix].class_name);
 }
-static int usb_dump_endpoint_descriptor (const struct usb_endpoint_descriptor *desc,
-                                       char *buf, int *len)
+
+static char *usb_dump_endpoint_descriptor(char *start, char *end, const struct usb_endpoint_descriptor *desc)
 {
        char *EndpointType [4] = {"Ctrl", "Isoc", "Bulk", "Int."};
 
-       *len += sprintf (buf + *len, format_endpt,
-               desc->bEndpointAddress,
-               (desc->bEndpointAddress & USB_DIR_IN) ? 'I' : 'O',
-               desc->bmAttributes,
-               EndpointType[desc->bmAttributes & 3],
-               desc->wMaxPacketSize,
-               desc->bInterval
-               );
-
-       return (*len >= DUMP_LIMIT) ? -1 : 0;
+       if (start > end)
+               return start;
+       start += sprintf(start, format_endpt, desc->bEndpointAddress,
+                        (desc->bEndpointAddress & USB_DIR_IN) ? 'I' : 'O',
+                        desc->bmAttributes, EndpointType[desc->bmAttributes & 3],
+                        desc->wMaxPacketSize, desc->bInterval);
+       return start;
 }
 
-static int usb_dump_endpoint (const struct usb_endpoint_descriptor *endpoint,
-                               char *buf, int *len)
+static char *usb_dump_endpoint(char *start, char *end, const struct usb_endpoint_descriptor *endpoint)
 {
-       if (usb_dump_endpoint_descriptor (endpoint, buf, len) < 0)
-               return -1;
-
-       return 0;
+       return usb_dump_endpoint_descriptor(start, end, endpoint);
 }
 
-static int usb_dump_interface_descriptor (const struct usb_interface *iface,
-                                               int setno, char *buf, int *len)
+static char *usb_dump_interface_descriptor(char *start, char *end, const struct usb_interface *iface, int setno)
 {
-       struct usb_interface_descriptor *desc =
-           &iface->altsetting[setno];
-
-       *len += sprintf (buf + *len, format_iface,
-               desc->bInterfaceNumber,
-               desc->bAlternateSetting,
-               desc->bNumEndpoints,
-               desc->bInterfaceClass,
-               class_decode (desc->bInterfaceClass),
-               desc->bInterfaceSubClass,
-               desc->bInterfaceProtocol,
-               iface->driver ? iface->driver->name : "(none)"
-               );
-
-       return (*len >= DUMP_LIMIT) ? -1 : 0;
+       struct usb_interface_descriptor *desc = &iface->altsetting[setno];
+
+       if (start > end)
+               return start;
+       start += sprintf(start, format_iface,
+                        desc->bInterfaceNumber,
+                        desc->bAlternateSetting,
+                        desc->bNumEndpoints,
+                        desc->bInterfaceClass,
+                        class_decode(desc->bInterfaceClass),
+                        desc->bInterfaceSubClass,
+                        desc->bInterfaceProtocol,
+                        iface->driver ? iface->driver->name : "(none)");
+       return start;
 }
 
-static int usb_dump_interface (const struct usb_interface *iface,
-                               int setno, char *buf, int *len)
+static char *usb_dump_interface(char *start, char *end, const struct usb_interface *iface, int setno)
 {
+       struct usb_interface_descriptor *desc = &iface->altsetting[setno];
        int i;
-       struct usb_interface_descriptor *desc =
-           &iface->altsetting[setno];
-
-       if (usb_dump_interface_descriptor (iface, setno, buf, len) < 0)
-               return -1;
 
+       start = usb_dump_interface_descriptor(start, end, iface, setno);
        for (i = 0; i < desc->bNumEndpoints; i++) {
-               if (usb_dump_endpoint (desc->endpoint + i, buf, len) < 0)
-                       return -1;
+               if (start > end)
+                       return start;
+               start = usb_dump_endpoint(start, end, desc->endpoint + i);
        }
-
-       return 0;
+       return start;
 }
 
 /* TBD:
@@ -222,225 +231,298 @@ static int usb_dump_interface (const struct usb_interface *iface,
  * 2. add <halted> status to each endpoint line
  */
 
-static int usb_dump_config_descriptor (const struct usb_config_descriptor *desc,
-                                       const int active, char *buf, int *len)
+static char *usb_dump_config_descriptor(char *start, char *end, const struct usb_config_descriptor *desc, const int active)
 {
-       *len += sprintf (buf + *len, format_config,
-               active ? '*' : ' ',     /* mark active/actual/current cfg. */
-               desc->bNumInterfaces,
-               desc->bConfigurationValue,
-               desc->bmAttributes,
-               desc->MaxPower * 2
-               );
-
-       return (*len >= DUMP_LIMIT) ? -1 : 0;
+       if (start > end)
+               return start;
+       start += sprintf(start, format_config,
+                        active ? '*' : ' ',    /* mark active/actual/current cfg. */
+                        desc->bNumInterfaces,
+                        desc->bConfigurationValue,
+                        desc->bmAttributes,
+                        desc->MaxPower * 2);
+       return start;
 }
 
-static int usb_dump_config (const struct usb_config_descriptor *config,
-                               const int active, char *buf, int *len)
+static char *usb_dump_config(char *start, char *end, const struct usb_config_descriptor *config, const int active)
 {
        int i, j;
        struct usb_interface *interface;
 
-       if (!config) {          /* getting these some in 2.3.7; none in 2.3.6 */
-               *len += sprintf (buf + *len, "(null Cfg. desc.)\n");
-               return 0;
-       }
-
-       if (usb_dump_config_descriptor (config, active, buf, len) < 0)
-               return -1;
-
+       if (start > end)
+               return start;
+       if (!config)            /* getting these some in 2.3.7; none in 2.3.6 */
+               return start + sprintf(start, "(null Cfg. desc.)\n");
+       start = usb_dump_config_descriptor(start, end, config, active);
        for (i = 0; i < config->bNumInterfaces; i++) {
                interface = config->interface + i;
                if (!interface)
                        break;
-
-               for (j = 0; j < interface->num_altsetting; j++)
-                       if (usb_dump_interface (interface, j, buf, len) < 0)
-                               return -1;
+               for (j = 0; j < interface->num_altsetting; j++) {
+                       if (start > end)
+                               return start;
+                       start = usb_dump_interface(start, end, interface, j);
+               }
        }
-
-       return 0;
+       return start;
 }
 
 /*
  * Dump the different USB descriptors.
  */
-static int usb_dump_device_descriptor (const struct usb_device_descriptor *desc,
-                               char *buf, int *len)
+static char *usb_dump_device_descriptor(char *start, char *end, const struct usb_device_descriptor *desc)
 {
-       *len += sprintf (buf + *len, format_device1,
-                       desc->bcdUSB >> 8, desc->bcdUSB & 0xff,
-                       desc->bDeviceClass,
-                       class_decode (desc->bDeviceClass),
-                       desc->bDeviceSubClass,
-                       desc->bDeviceProtocol,
-                       desc->bMaxPacketSize0,
-                       desc->bNumConfigurations
-                       );
-       if (*len >= DUMP_LIMIT) return -1;
-
-       *len += sprintf (buf + *len, format_device2,
-                       desc->idVendor, desc->idProduct,
-                       desc->bcdDevice >> 8, desc->bcdDevice & 0xff
-                       );
-
-       return (*len >= DUMP_LIMIT) ? -1 : 0;
+       if (start > end)
+               return start;
+       start += sprintf (start, format_device1,
+                         desc->bcdUSB >> 8, desc->bcdUSB & 0xff,
+                         desc->bDeviceClass,
+                         class_decode (desc->bDeviceClass),
+                         desc->bDeviceSubClass,
+                         desc->bDeviceProtocol,
+                         desc->bMaxPacketSize0,
+                         desc->bNumConfigurations);
+       if (start > end)
+               return start;
+       start += sprintf(start, format_device2,
+                        desc->idVendor, desc->idProduct,
+                        desc->bcdDevice >> 8, desc->bcdDevice & 0xff);
+       return start;
 }
 
-static int usb_dump_desc (const struct usb_device *dev, char *buf, int *len)
+/*
+ * Dump the different strings that this device holds.
+ */
+static char *usb_dump_device_strings (char *start, char *end, const struct usb_device *dev)
 {
-       int i;
+       if (start > end)
+               return start;
+
+       if (dev->descriptor.iManufacturer) {
+               char * string = usb_string ((struct usb_device *)dev, 
+                                       dev->descriptor.iManufacturer);
+               if (string) {
+                       start += sprintf (start, format_string_manufacturer,
+                                       string
+                                       );
+               if (start > end)
+                       return start;
+                                                               
+               }
+       }
 
-       if (usb_dump_device_descriptor (&dev->descriptor, buf, len) < 0)
-               return -1;
+       if (dev->descriptor.iProduct) {
+               char * string = usb_string ((struct usb_device *)dev, 
+                                       dev->descriptor.iProduct);
+               if (string) {
+                       start += sprintf (start, format_string_product,
+                                       string
+                                       );
+               if (start > end)
+                       return start;
 
-       for (i = 0; i < dev->descriptor.bNumConfigurations; i++) {
-               if (usb_dump_config (dev->config + i,
-                       (dev->config + i) == dev->actconfig, /* active ? */
-                       buf, len) < 0)
-                               return -1;
+               }
        }
 
-       return 0;
+#ifdef ALLOW_SERIAL_NUMBER
+       if (dev->descriptor.iSerialNumber) {
+               char * string = usb_string ((struct usb_device *)dev, 
+                                       dev->descriptor.iSerialNumber);
+               if (string) {
+                       start += sprintf (start, format_string_serialnumber,
+                                       string
+                                       );
+               }
+       }
+#endif
+
+       return start;
 }
 
-static int usb_hcd_bandwidth (const struct usb_device *dev, char *buf, int *len)
+static char *usb_dump_desc(char *start, char *end, const struct usb_device *dev)
 {
-       *len += sprintf (buf + *len, format_bandwidth,
-                       dev->bus->bandwidth_allocated,
-                       FRAME_TIME_MAX_USECS_ALLOC,
-                       (100 * dev->bus->bandwidth_allocated + FRAME_TIME_MAX_USECS_ALLOC / 2) /
-                               FRAME_TIME_MAX_USECS_ALLOC,
-                       dev->bus->bandwidth_int_reqs,
-                       dev->bus->bandwidth_isoc_reqs
-                       );
-
-       return (*len >= DUMP_LIMIT) ? -1 : 0;
+       int i;
+
+       if (start > end)
+               return start;
+               
+       start = usb_dump_device_descriptor(start, end, &dev->descriptor);
+
+       if (start > end)
+               return start;
+       
+       start = usb_dump_device_strings (start, end, dev);
+       
+       for (i = 0; i < dev->descriptor.bNumConfigurations; i++) {
+               if (start > end)
+                       return start;
+               start = usb_dump_config(start, end, dev->config + i,
+                                       (dev->config + i) == dev->actconfig); /* active ? */
+       }
+       return start;
 }
 
+
 #ifdef PROC_EXTRA /* TBD: may want to add this code later */
 
-static int usb_dump_hub_descriptor (const struct usb_hub_descriptor * desc,
-                                       char *buf, int *len)
+static char *usb_dump_hub_descriptor(char *start, char *end, const struct usb_hub_descriptor * desc)
 {
        int leng = USB_DT_HUB_NONVAR_SIZE;
-       unsigned char *ptr = (unsigned char *) desc;
-
-       *len += sprintf (buf + *len, "Interface:");
+       unsigned char *ptr = (unsigned char *)desc;
 
+       if (start > end)
+               return start;
+       start += sprintf(start, "Interface:");
        while (leng) {
-               *len += sprintf (buf + *len, " %02x", *ptr);
+               start += sprintf(start, " %02x", *ptr);
                ptr++; leng--;
        }
-       *len += sprintf (buf + *len, "\n");
-
-       return (*len >= DUMP_LIMIT) ? -1 : 0;
+       start += sprintf(start, "\n");
+       return start;
 }
 
-static int usb_dump_string (const struct usb_device *dev, char *id, int index,
-                               char *buf, int *len)
+static char *usb_dump_string(char *start, char *end, const struct usb_device *dev, char *id, int index)
 {
+       if (start > end)
+               return start;
+       start += sprintf(start, "Interface:");
        if (index <= dev->maxstring && dev->stringindex && dev->stringindex[index])
-               *len += sprintf (buf + *len, "%s: %s ", id, dev->stringindex[index]);
-
-       return (*len >= DUMP_LIMIT) ? -1 : 0;
+               start += sprintf(start, "%s: %s ", id, dev->stringindex[index]);
+       return start;
 }
 
 #endif /* PROC_EXTRA */
 
 /*****************************************************************/
 
-static int usb_device_dump (char *buf, int *len,
-                       const struct usb_device *usbdev,
-                       int level, int index, int count)
+static char *usb_device_dump(char *start, char *end, const struct usb_device *usbdev,
+                            int level, int index, int count)
 {
-       int     chix;
-       int     cnt = 0;
-       int     parent_devnum;
-
-       if (level > MAX_TOPO_LEVEL) return -1;
-
-       parent_devnum = usbdev->parent ? (usbdev->parent->devnum == -1) ? 0
-                       : usbdev->parent->devnum : 0;
-               /*
-                * So the root hub's parent is 0 and any device that is
-                * plugged into the root hub has a parent of 0.
-                */
-       *len += sprintf (buf + *len, format_topo,
-               level, parent_devnum, index, count,
-               usbdev->devnum,
-               usbdev->slow ? "1.5" : "12 ",
-               usbdev->maxchild
-               );
-               /*
-                * level = topology-tier level;
-                * parent_devnum = parent device number;
-                * index = parent's connector number;
-                * count = device count at this level
-                */
-
-       if (*len >= DUMP_LIMIT)
-               return -1;
-
-       if ((level == 0) && (usbdev->devnum < 0)) {     /* for root hub */
-               if (usb_hcd_bandwidth (usbdev, buf, len) < 0)
-                       return -1;
-       }
-       else {  /* for anything but a root hub */
-               if (usb_dump_desc (usbdev, buf, len) < 0)
-                       return -1;
-       }
+       int chix;
+       int cnt = 0;
+       int parent_devnum = 0;
 
+       if (level > MAX_TOPO_LEVEL)
+               return start;
+       if (usbdev->parent && usbdev->parent->devnum != -1)
+               parent_devnum = usbdev->parent->devnum;
+       /*
+        * So the root hub's parent is 0 and any device that is
+        * plugged into the root hub has a parent of 0.
+        */
+       start += sprintf(start, format_topo, level, parent_devnum, index, count,
+                        usbdev->devnum, usbdev->slow ? "1.5" : "12 ", usbdev->maxchild);
+       /*
+        * level = topology-tier level;
+        * parent_devnum = parent device number;
+        * index = parent's connector number;
+        * count = device count at this level
+        */
+       /* do not dump descriptors for root hub */
+       if (usbdev->devnum >= 0)
+               start = usb_dump_desc(start, end, usbdev);
+       if (start > end)
+               return start + sprintf(start, "(truncated)\n");
        /* Now look at all of this device's children. */
        for (chix = 0; chix < usbdev->maxchild; chix++) {
-               if (usbdev->children [chix]) {
-                       if (usb_device_dump (buf, len,
-                               usbdev->children [chix],
-                               level + 1, chix, ++cnt) < 0)
-                                       return -1;
-               }
+               if (start > end)
+                       return start;
+               if (usbdev->children[chix])
+                       start = usb_device_dump(start, end, usbdev->children[chix], level + 1, chix, ++cnt);
        }
-
-       return 0;
+       return start;
 }
 
-static int usb_bus_list_dump (char *buf, int len)
+static ssize_t usb_device_read(struct file *file, char *buf, size_t nbytes, loff_t *ppos)
 {
-       struct list_head *usb_bus_list = usb_bus_get_list ();
-       struct list_head *list = usb_bus_list->next;
-
-       len = 0;
-
-       /*
-        * Go thru each usb_bus. Within each usb_bus: each usb_device.
-        * Within each usb_device: all of its device & config. descriptors,
-        * marking the currently active ones.
-        */
-
-
-        while (list != usb_bus_list) {
-               struct usb_bus *bus = list_entry (list, struct usb_bus, bus_list);
-
-               if (usb_device_dump (buf, &len, bus->root_hub, 0, 0, 0)
-                       < 0)
-                       break;
+       struct list_head *usb_bus_list, *buslist;
+       struct usb_bus *bus;
+       char *page, *end;
+       ssize_t ret = 0;
+       unsigned int pos, len;
 
-               list = list->next;
+       if (*ppos < 0)
+               return -EINVAL;
+       if (nbytes <= 0)
+               return 0;
+       if (!access_ok(VERIFY_WRITE, buf, nbytes))
+               return -EFAULT;
+       if (!(page = (char*) __get_free_page(GFP_KERNEL)))
+               return -ENOMEM;
+       pos = *ppos;
+       usb_bus_list = usb_bus_get_list();
+       /* enumerate busses */
+       for (buslist = usb_bus_list->next; buslist != usb_bus_list; buslist = buslist->next) {
+               /* print bandwidth allocation */
+               bus = list_entry(buslist, struct usb_bus, bus_list);
+               len = sprintf(page, format_bandwidth, bus->bandwidth_allocated, FRAME_TIME_MAX_USECS_ALLOC,
+                             (100 * bus->bandwidth_allocated + FRAME_TIME_MAX_USECS_ALLOC / 2) / FRAME_TIME_MAX_USECS_ALLOC,
+                             bus->bandwidth_int_reqs, bus->bandwidth_isoc_reqs);
+               end = usb_device_dump(page + len, page + (PAGE_SIZE - 100), bus->root_hub, 0, 0, 0);
+               len = end - page;
+               if (len > pos) {
+                       len -= pos;
+                       if (len > nbytes)
+                               len = nbytes;
+                       if (copy_to_user(buf, page + pos, len)) {
+                               if (!ret)
+                                       ret = -EFAULT;
+                               break;
+                       }
+                       nbytes -= len;
+                       buf += len;
+                       ret += len;
+                       pos = 0;
+                       *ppos += len;
+               } else
+                       pos -= len;
+       }
+       free_page((unsigned long)page);
+       return ret;
+}
 
-               if (len >= DUMP_LIMIT) {
-                       len += sprintf (buf + len, "(truncated)\n");
-                       break;
-               }
-        }
+static unsigned int usb_device_poll(struct file *file, struct poll_table_struct *wait)
+{
+       struct usb_device_status *st = (struct usb_device_status *)file->private_data;
+       unsigned int mask = 0;
+       
+       if (!st) {
+               st = kmalloc(sizeof(struct usb_device_status), GFP_KERNEL);
+               if (!st)
+                       return POLLIN;
+               /*
+                * need to prevent the module from being unloaded, since
+                * proc_unregister does not call the release method and
+                * we would have a memory leak
+                */
+               st->lastev = conndiscevcnt;
+               file->private_data = st;
+               MOD_INC_USE_COUNT;
+               mask = POLLIN;
+       }
+       if (file->f_mode & FMODE_READ)
+               poll_wait(file, &deviceconndiscwq, wait);
+       if (st->lastev != conndiscevcnt)
+               mask |= POLLIN;
+       st->lastev = conndiscevcnt;
+       return mask;
+}
 
-       return (len);
+static int usb_device_open(struct inode *inode, struct file *file)
+{
+       file->private_data = NULL;
+       MOD_INC_USE_COUNT;
+       return 0;
 }
 
-static int usb_bus_list_dump_devices (char *buf, char **start, off_t offset,
-                               int len, int *eof, void *data)
+static int usb_device_release(struct inode *inode, struct file *file)
 {
-       return usb_bus_list_dump (buf, len);
+       if (file->private_data) {
+               kfree(file->private_data);
+               file->private_data = NULL;
+       }
+       MOD_DEC_USE_COUNT;      
+       return 0;
 }
 
 /*
@@ -448,34 +530,89 @@ static int usb_bus_list_dump_devices (char *buf, char **start, off_t offset,
  *
  * We now walk the list of registered USB drivers.
  */
-static int usb_driver_list_dump (char *buf, char **start, off_t offset,
-                               int len, int *eof, void *data)
+static ssize_t usb_driver_read(struct file *file, char *buf, size_t nbytes, loff_t *ppos)
 {
-       struct list_head *usb_driver_list = usb_driver_get_list ();
+       struct list_head *usb_driver_list = usb_driver_get_list();
        struct list_head *tmp = usb_driver_list->next;
-       int cnt = 0;
-
-       len = 0;
-
-       while (tmp != usb_driver_list) {
-               struct usb_driver *driver = list_entry (tmp, struct usb_driver,
-                                                      driver_list);
-               len += sprintf (buf + len, "%s\n", driver->name);
-               cnt++;
-               tmp = tmp->next;
+       char *page, *start, *end;
+       ssize_t ret = 0;
+       unsigned int pos, len;
 
-               if (len >= DUMP_LIMIT)
-               {
-                       len += sprintf (buf + len, "(truncated)\n");
-                       return (len);
+       if (*ppos < 0)
+               return -EINVAL;
+       if (nbytes <= 0)
+               return 0;
+       if (!access_ok(VERIFY_WRITE, buf, nbytes))
+               return -EFAULT;
+       if (!(page = (char*) __get_free_page(GFP_KERNEL)))
+               return -ENOMEM;
+       start = page;
+       end = page + (PAGE_SIZE - 100);
+       pos = *ppos;
+       for (; tmp != usb_driver_list; tmp = tmp->next) {
+               struct usb_driver *driver = list_entry(tmp, struct usb_driver, driver_list);
+               start += sprintf (start, "%s\n", driver->name);
+               if (start > end) {
+                       start += sprintf(start, "(truncated)\n");
+                       break;
                }
        }
-
-       if (!cnt)
-               len += sprintf (buf + len, "(none)\n");
-       return (len);
+       if (start == page)
+               start += sprintf(start, "(none)\n");
+       len = start - page;
+       if (len > pos) {
+               len -= pos;
+               if (len > nbytes)
+                       len = nbytes;
+               ret = len;
+               if (copy_to_user(buf, page + pos, len))
+                       ret = -EFAULT;
+               else
+                       *ppos += len;
+       }
+       free_page((unsigned long)page);
+       return ret;
 }
 
+static long long usbdev_lseek(struct file * file, long long offset, int orig);
+
+static struct file_operations proc_usb_devlist_file_operations = {
+       usbdev_lseek,       /* lseek   */
+       usb_device_read,    /* read    */
+       NULL,               /* write   */
+       NULL,               /* readdir */
+       usb_device_poll,    /* poll    */
+       NULL,               /* ioctl   */
+       NULL,               /* mmap    */
+       usb_device_open,    /* open    */
+       NULL,               /* flush   */
+       usb_device_release, /* release */
+       NULL                /* fsync   */
+};
+
+static struct inode_operations proc_usb_devlist_inode_operations = {
+       &proc_usb_devlist_file_operations,  /* file-ops */
+};
+
+static struct file_operations proc_usb_drvlist_file_operations = {
+       usbdev_lseek,    /* lseek   */
+       usb_driver_read, /* read    */
+       NULL,            /* write   */
+       NULL,            /* readdir */
+       NULL,            /* poll    */
+       NULL,            /* ioctl   */
+       NULL,            /* mmap    */
+       NULL,            /* no special open code    */
+       NULL,            /* flush */
+       NULL,            /* no special release code */
+       NULL             /* can't fsync */
+};
+
+static struct inode_operations proc_usb_drvlist_inode_operations = {
+       &proc_usb_drvlist_file_operations,  /* file-ops */
+};
+
+
 /*
  * proc entry for every device
  */
@@ -501,7 +638,7 @@ static long long usbdev_lseek(struct file * file, long long offset, int orig)
 
 static ssize_t usbdev_read(struct file * file, char * buf, size_t nbytes, loff_t *ppos)
 {
-        struct inode *inode = file->f_dentry->d_inode;
+       struct inode *inode = file->f_dentry->d_inode;
        struct proc_dir_entry *dp = (struct proc_dir_entry *)inode->u.generic_ip;
        struct usb_device *dev = (struct usb_device *)dp->data;
        ssize_t ret = 0;
@@ -962,7 +1099,7 @@ static struct file_operations proc_usb_device_file_operations = {
 };
 
 static struct inode_operations proc_usb_device_inode_operations = {
-        &proc_usb_device_file_operations,  /* file-ops */
+       &proc_usb_device_file_operations,  /* file-ops */
 };
 
 void proc_usb_add_bus(struct usb_bus *bus)
@@ -973,9 +1110,14 @@ void proc_usb_add_bus(struct usb_bus *bus)
        if (!usbdir)
                return;
        sprintf(buf, "%03d", bus->busnum);
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,31)
+       if (!(bus->proc_entry = create_proc_entry(buf, S_IFDIR, usbdir)))
+#else
        if (!(bus->proc_entry = proc_mkdir(buf, usbdir)))
+#endif
                return;
        bus->proc_entry->data = bus;
+       conndiscevent();
 }
 
 /* devices need already be removed! */
@@ -984,6 +1126,7 @@ void proc_usb_remove_bus(struct usb_bus *bus)
        if (!bus->proc_entry)
                return;
        remove_proc_entry(bus->proc_entry->name, usbdir);
+       conndiscevent();
 }
 
 void proc_usb_add_device(struct usb_device *dev)
@@ -998,48 +1141,54 @@ void proc_usb_add_device(struct usb_device *dev)
                return;
        dev->proc_entry->ops = &proc_usb_device_inode_operations;
        dev->proc_entry->data = dev;
+       conndiscevent();
 }
 
 void proc_usb_remove_device(struct usb_device *dev)
 {
        if (dev->proc_entry)
                remove_proc_entry(dev->proc_entry->name, dev->bus->proc_entry);
+       conndiscevent();
 }
 
 
 void proc_usb_cleanup (void)
 {
        if (driversdir)
-               remove_proc_entry ("drivers", usbdir);
+               remove_proc_entry("drivers", usbdir);
        if (devicesdir)
-               remove_proc_entry ("devices", usbdir);
+               remove_proc_entry("devices", usbdir);
        if (usbdir)
-               remove_proc_entry ("usb", proc_bus);
+               remove_proc_entry("usb", proc_bus);
 }
 
 int proc_usb_init (void)
 {
-       usbdir = proc_mkdir ("usb", proc_bus);
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,31)
+       usbdir = create_proc_entry("usb", S_IFDIR, proc_bus);
+#else
+       usbdir = proc_mkdir("usb", proc_bus);
+#endif 
        if (!usbdir) {
                printk ("proc_usb: cannot create /proc/bus/usb entry\n");
                return -1;
        }
 
-       driversdir = create_proc_read_entry("drivers", 0, usbdir,
-                                       usb_driver_list_dump, NULL);
+       driversdir = create_proc_entry("drivers", 0, usbdir);
        if (!driversdir) {
                printk ("proc_usb: cannot create /proc/bus/usb/drivers entry\n");
-               proc_usb_cleanup ();
+               proc_usb_cleanup();
                return -1;
        }
+       driversdir->ops = &proc_usb_drvlist_inode_operations;
 
-       devicesdir = create_proc_read_entry ("devices", 0, usbdir,
-                                       usb_bus_list_dump_devices, NULL);
+       devicesdir = create_proc_entry("devices", 0, usbdir);
        if (!devicesdir) {
                printk ("proc_usb: cannot create /proc/bus/usb/devices entry\n");
                proc_usb_cleanup ();
                return -1;
        }
+       devicesdir->ops = &proc_usb_devlist_inode_operations;
 
        return 0;
 }
index 8da0b4d3a3891df416ddd9ed82e5f915615dfd79..3d2f621950451932538d747e6e4f2d7152100d0c 100644 (file)
@@ -1,7 +1,6 @@
 /*
  * $Id: uhci-debug.c,v 1.12 1999/12/13 15:24:42 fliegl Exp $
  */
-#include <linux/config.h>
 #include <linux/version.h>
 #include <linux/kernel.h>
 #include <asm/io.h>
index 96db22dbc8c63c306b2bd83f704c8bfbaaa8dc49..2ca02e3d0af7e76145f45eb488f61425f9af4e10 100644 (file)
@@ -6,16 +6,15 @@
  *          Thomas Sailer, sailer@ife.ee.ethz.ch (chief consultant) (cheer leader)
  *          Roman Weissgaerber, weissg@vienna.at (virt root hub) (studio porter)
  *          
- * HW-initalization and root hub allocation code based on material of
+ * HW-initalization based on material of
  *
  * (C) Copyright 1999 Linus Torvalds
  * (C) Copyright 1999 Johannes Erdfelt
  * (C) Copyright 1999 Randy Dunlap
  *
- * $Id: uhci.c,v 1.124 1999/12/14 18:38:25 fliegl Exp $
+ * $Id: uhci.c,v 1.139 1999/12/17 17:50:59 fliegl Exp $
  */
 
-#define VROOTHUB
 
 #ifndef EXPORT_SYMTAB
 #define EXPORT_SYMTAB
@@ -33,6 +32,7 @@
 #include <linux/errno.h>
 #include <linux/unistd.h>
 #include <linux/interrupt.h>   /* for in_interrupt() */
+#include <linux/init.h>
 
 #include <asm/uaccess.h>
 #include <asm/io.h>
 
 //#define DEBUG
 #ifdef DEBUG
-#define dbg printk
+#define dbg(format, args...) printk(format, ## args)
 #else
-#define dbg nix
-static void nix (const char *format,...)
-{
-}
-
+#define dbg(format, args...)
 #endif
 
 #define _static static
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,0)
+#define __init 
+#define __exit
+#endif
+
 #ifdef __alpha
 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,0)
 extern long __kernel_thread (unsigned long, int (*)(void *), void *);
@@ -73,38 +74,67 @@ static inline long kernel_thread (int (*fn) (void *), void *arg, unsigned long f
 static int handle_apm_event (apm_event_t event);
 #endif
 
+/* We added an UHCI_SLAB slab support just for debugging purposes. In real 
+   life this compile option is NOT recommended, because slab caches are not 
+   suitable for modules.
+*/
+
+// #define _UHCI_SLAB 
+#ifdef _UHCI_SLAB
+static kmem_cache_t *uhci_desc_kmem;
+static kmem_cache_t *urb_priv_kmem;
+#endif
+
+static int rh_submit_urb (purb_t purb);
+static int rh_unlink_urb (purb_t purb);
 static puhci_t devs = NULL;
 
 /*-------------------------------------------------------------------*/
 _static void queue_urb (puhci_t s, struct list_head *p, int do_lock)
 {
        unsigned long flags=0;
-       if (do_lock) spin_lock_irqsave (&s->urb_list_lock, flags);
+
+       if (do_lock) 
+               spin_lock_irqsave (&s->urb_list_lock, flags);
+               
        list_add_tail (p, &s->urb_list);
-       if (do_lock) spin_unlock_irqrestore (&s->urb_list_lock, flags);
+       
+       if (do_lock) 
+               spin_unlock_irqrestore (&s->urb_list_lock, flags);
 }
 
 /*-------------------------------------------------------------------*/
 _static void dequeue_urb (puhci_t s, struct list_head *p, int do_lock)
 {
        unsigned long flags=0;
-       if (do_lock) spin_lock_irqsave (&s->urb_list_lock, flags);
+       
+       if (do_lock) 
+               spin_lock_irqsave (&s->urb_list_lock, flags);
+
        list_del (p);
-       if (do_lock) spin_unlock_irqrestore (&s->urb_list_lock, flags);
+
+       if (do_lock) 
+               spin_unlock_irqrestore (&s->urb_list_lock, flags);
 }
 
 /*-------------------------------------------------------------------*/
 _static int alloc_td (puhci_desc_t * new, int flags)
 {
+#ifdef _UHCI_SLAB
+       *new= kmem_cache_alloc(uhci_desc_kmem, in_interrupt ()? SLAB_ATOMIC : SLAB_KERNEL);
+#else
        *new = (uhci_desc_t *) kmalloc (sizeof (uhci_desc_t), in_interrupt ()? GFP_ATOMIC : GFP_KERNEL);
+#endif
        if (!*new)
                return -ENOMEM;
+       
        memset (*new, 0, sizeof (uhci_desc_t));
        (*new)->hw.td.link = UHCI_PTR_TERM | (flags & UHCI_PTR_BITS);   // last by default
 
        (*new)->type = TD_TYPE;
        INIT_LIST_HEAD (&(*new)->vertical);
        INIT_LIST_HEAD (&(*new)->horizontal);
+       
        return 0;
 }
 /*-------------------------------------------------------------------*/
@@ -128,7 +158,9 @@ _static int insert_td (puhci_t s, puhci_desc_t qh, puhci_desc_t new, int flags)
                // implicitely remove TERM bit of prev
                prev->hw.td.link = virt_to_bus (new) | (flags & UHCI_PTR_DEPTH);
        }
+       
        spin_unlock_irqrestore (&s->td_lock, xxx);
+       
        return 0;
 }
 /*-------------------------------------------------------------------*/
@@ -144,7 +176,9 @@ _static int insert_td_horizontal (puhci_t s, puhci_desc_t td, puhci_desc_t new,
        new->hw.td.link = td->hw.td.link;
        list_add (&new->horizontal, &td->horizontal);
        td->hw.td.link = virt_to_bus (new);
+       
        spin_unlock_irqrestore (&s->td_lock, xxx);      
+       
        return 0;
 }
 /*-------------------------------------------------------------------*/
@@ -155,7 +189,9 @@ _static int unlink_td (puhci_t s, puhci_desc_t element)
        unsigned long xxx;
        
        spin_lock_irqsave (&s->td_lock, xxx);
+       
        next = list_entry (element->vertical.next, uhci_desc_t, vertical);
+       
        if (next == element) {
                dir = 1;
                next = list_entry (element->horizontal.next, uhci_desc_t, horizontal);
@@ -164,60 +200,87 @@ _static int unlink_td (puhci_t s, puhci_desc_t element)
        else {
                prev = list_entry (element->vertical.prev, uhci_desc_t, vertical);
        }
+       
        if (prev->type == TD_TYPE)
                prev->hw.td.link = element->hw.td.link;
        else
                prev->hw.qh.element = element->hw.td.link;
+       
        wmb ();
+       
        if (dir == 0)
                list_del (&element->vertical);
        else
                list_del (&element->horizontal);
+       
        spin_unlock_irqrestore (&s->td_lock, xxx);      
+       
        return 0;
 }
 /*-------------------------------------------------------------------*/
-_static int delete_td (puhci_desc_t element)
+_static int delete_desc (puhci_desc_t element)
 {
+#ifdef _UHCI_SLAB
+       kmem_cache_free(uhci_desc_kmem, element);
+#else
        kfree (element);
+#endif
        return 0;
 }
 /*-------------------------------------------------------------------*/
 // Allocates qh element
 _static int alloc_qh (puhci_desc_t * new)
 {
+#ifdef _UHCI_SLAB
+       *new= kmem_cache_alloc(uhci_desc_kmem, in_interrupt ()? SLAB_ATOMIC : SLAB_KERNEL);
+#else
        *new = (uhci_desc_t *) kmalloc (sizeof (uhci_desc_t), in_interrupt ()? GFP_ATOMIC : GFP_KERNEL);
+#endif 
        if (!*new)
                return -ENOMEM;
+       
        memset (*new, 0, sizeof (uhci_desc_t));
        (*new)->hw.qh.head = UHCI_PTR_TERM;
        (*new)->hw.qh.element = UHCI_PTR_TERM;
        (*new)->type = QH_TYPE;
        INIT_LIST_HEAD (&(*new)->horizontal);
        INIT_LIST_HEAD (&(*new)->vertical);
+       
        dbg (KERN_DEBUG MODSTR "Allocated qh @ %p\n", *new);
+       
        return 0;
 }
 /*-------------------------------------------------------------------*/
-// inserts new qh _before_ the qh at pos
+// inserts new qh before/after the qh at pos
+// flags: 0: insert before pos, 1: insert after pos (for low speed transfers)
 _static int insert_qh (puhci_t s, puhci_desc_t pos, puhci_desc_t new, int flags)
 {
-       puhci_desc_t prev;
+       puhci_desc_t old;
        unsigned long xxx;
 
        spin_lock_irqsave (&s->qh_lock, xxx);
 
-       prev = list_entry (pos->horizontal.prev, uhci_desc_t, horizontal);
-       //  dbg("pos->horizontal.prev:%p pos->horizontal:%p\n", pos->horizontal.prev, &pos->horizontal);  
-       //  dbg("insert_qh: prev->hw.qh.head:%p prev:%p new:%p pos:%p\n", prev->hw.qh.head, prev, new, pos);
+       if (!flags) {
+               // (OLD) (POS) -> (OLD) (NEW) (POS)
+               old = list_entry (pos->horizontal.prev, uhci_desc_t, horizontal);
+               list_add_tail (&new->horizontal, &pos->horizontal);
+               new->hw.qh.head = MAKE_QH_ADDR (pos) ;
+               
+               if (!(old->hw.qh.head & UHCI_PTR_TERM))
+                       old->hw.qh.head = MAKE_QH_ADDR (new) ;
+       }
+       else {
+               // (POS) (OLD) -> (POS) (NEW) (OLD)
+               old = list_entry (pos->horizontal.next, uhci_desc_t, horizontal);
+               list_add (&new->horizontal, &pos->horizontal);
+               pos->hw.qh.head = MAKE_QH_ADDR (new) ;
+               new->hw.qh.head = MAKE_QH_ADDR (old);
+       }
 
-       list_add_tail (&new->horizontal, &pos->horizontal);
-       new->hw.qh.head = MAKE_QH_ADDR (pos) | (flags & UHCI_PTR_BITS);
-       if (!(prev->hw.qh.head & UHCI_PTR_TERM))
-               prev->hw.qh.head = MAKE_QH_ADDR (new) | (flags & UHCI_PTR_BITS);
        wmb ();
-       //  dbg("new->hw.qh.head:%p prev->hw.qh.head:%p\n",new->hw.qh.head,prev->hw.qh.head);  
+       
        spin_unlock_irqrestore (&s->qh_lock, xxx);
+       
        return 0;
 }
 /*-------------------------------------------------------------------*/
@@ -227,12 +290,15 @@ _static int unlink_qh (puhci_t s, puhci_desc_t element)
        unsigned long xxx;
 
        spin_lock_irqsave (&s->qh_lock, xxx);
+       
        next = list_entry (element->horizontal.next, uhci_desc_t, horizontal);
        prev = list_entry (element->horizontal.prev, uhci_desc_t, horizontal);
        prev->hw.qh.head = element->hw.qh.head;
        wmb ();
        list_del (&element->horizontal);
+       
        spin_unlock_irqrestore (&s->qh_lock, xxx);
+       
        return 0;
 }
 /*-------------------------------------------------------------------*/
@@ -242,12 +308,15 @@ _static int delete_qh (puhci_t s, puhci_desc_t qh)
        struct list_head *p;
 
        list_del (&qh->horizontal);
+       
        while ((p = qh->vertical.next) != &qh->vertical) {
                td = list_entry (p, uhci_desc_t, vertical);
                unlink_td (s, td);
-               delete_td (td);
+               delete_desc (td);
        }
-       kfree (qh);
+       
+       delete_desc (qh);
+       
        return 0;
 }
 /*-------------------------------------------------------------------*/
@@ -258,11 +327,13 @@ void clean_td_chain (puhci_desc_t td)
 
        if (!td)
                return;
+       
        while ((p = td->horizontal.next) != &td->horizontal) {
                td1 = list_entry (p, uhci_desc_t, horizontal);
-               delete_td (td1);
+               delete_desc (td1);
        }
-       delete_td (td);
+       
+       delete_desc (td);
 }
 /*-------------------------------------------------------------------*/
 // Removes ALL qhs in chain (paranoia!)
@@ -272,6 +343,7 @@ _static void cleanup_skel (puhci_t s)
        puhci_desc_t td;
 
        printk (KERN_DEBUG MODSTR "Cleanup_skel\n");
+       
        for (n = 0; n < 8; n++) {
                td = s->int_chain[n];
                clean_td_chain (td);
@@ -316,7 +388,9 @@ _static int init_skel (puhci_t s)
 {
        int n, ret;
        puhci_desc_t qh, td;
+       
        dbg (KERN_DEBUG MODSTR "init_skel\n");
+       
        s->framelist = (__u32 *) get_free_page (GFP_KERNEL);
 
        if (!s->framelist)
@@ -326,6 +400,7 @@ _static int init_skel (puhci_t s)
 
        dbg (KERN_DEBUG MODSTR "allocating iso desc pointer list\n");
        s->iso_td = (puhci_desc_t *) kmalloc (1024 * sizeof (puhci_desc_t), GFP_KERNEL);
+       
        if (!s->iso_td)
                goto init_skel_cleanup;
 
@@ -345,26 +420,33 @@ _static int init_skel (puhci_t s)
 
        dbg (KERN_DEBUG MODSTR "allocating qh: chain_end\n");
        ret = alloc_qh (&qh);
+       
        if (ret)
                goto init_skel_cleanup;
+       
        s->chain_end = qh;
 
        dbg (KERN_DEBUG MODSTR "allocating qh: bulk_chain\n");
        ret = alloc_qh (&qh);
+       
        if (ret)
                goto init_skel_cleanup;
+       
        insert_qh (s, s->chain_end, qh, 0);
        s->bulk_chain = qh;
        dbg (KERN_DEBUG MODSTR "allocating qh: control_chain\n");
        ret = alloc_qh (&qh);
+       
        if (ret)
                goto init_skel_cleanup;
+       
        insert_qh (s, s->bulk_chain, qh, 0);
        s->control_chain = qh;
        for (n = 0; n < 8; n++)
                s->int_chain[n] = 0;
 
        dbg (KERN_DEBUG MODSTR "Allocating skeleton INT-TDs\n");
+       
        for (n = 0; n < 8; n++) {
                puhci_desc_t td;
 
@@ -381,6 +463,7 @@ _static int init_skel (puhci_t s)
        }
 
        dbg (KERN_DEBUG MODSTR "Linking skeleton INT-TDs\n");
+       
        for (n = 0; n < 1024; n++) {
                // link all iso-tds to the interrupt chains
                int m, o;
@@ -451,6 +534,7 @@ _static int uhci_submit_control_urb (purb_t purb)
           to OUT (0xE1). Else change it from SETUP to IN (0x69). */
 
        destination ^= (USB_PID_SETUP ^ USB_PID_IN);    /* SETUP -> IN */
+       
        if (usb_pipeout (purb->pipe))
                destination ^= (USB_PID_IN ^ USB_PID_OUT);      /* IN -> OUT */
 
@@ -465,6 +549,7 @@ _static int uhci_submit_control_urb (purb_t purb)
        len = purb->transfer_buffer_length;
        bytesrequested = len;
        data = purb->transfer_buffer;
+       
        while (len > 0) {
                int pktsze = len;
 
@@ -491,6 +576,7 @@ _static int uhci_submit_control_urb (purb_t purb)
        /*  Build the final TD for control status */
        /* It's only IN if the pipe is out AND we aren't expecting data */
        destination &= ~0xFF;
+       
        if (usb_pipeout (purb->pipe) | (bytesrequested == 0))
                destination |= USB_PID_IN;
        else
@@ -499,6 +585,7 @@ _static int uhci_submit_control_urb (purb_t purb)
        destination |= 1 << TD_TOKEN_TOGGLE;    /* End in Data1 */
 
        alloc_td (&td, UHCI_PTR_DEPTH);
+       
        if (!td) {
                delete_qh (s, qh);
                return -ENOMEM;
@@ -512,8 +599,12 @@ _static int uhci_submit_control_urb (purb_t purb)
 
 
        list_add (&qh->desc_list, &purb_priv->desc_list);
-       /* Start it up... */
-       insert_qh (s, s->bulk_chain, qh, 0);    // insert before bulk chain
+
+       /* Start it up... put low speed first */
+       if (purb->pipe & TD_CTRL_LS)
+               insert_qh (s, s->control_chain, qh, 1); // insert after control chain
+       else
+               insert_qh (s, s->bulk_chain, qh, 0);    // insert before bulk chain
        //uhci_show_queue(s->control_chain);
 
        dbg (KERN_DEBUG MODSTR "uhci_submit_control end\n");
@@ -556,6 +647,7 @@ _static int uhci_submit_bulk_urb (purb_t purb)
        len = purb->transfer_buffer_length;
        data = purb->transfer_buffer;
        dbg (KERN_DEBUG MODSTR "uhci_submit_bulk_urb: len %d\n", len);
+       
        while (len > 0) {
                int pktsze = len;
 
@@ -600,15 +692,13 @@ _static int uhci_submit_bulk_urb (purb_t purb)
 // unlinks an urb by dequeuing its qh, waits some frames and forgets it
 // Problem: unlinking in interrupt requires waiting for one frame (udelay)
 // to allow the whole structures to be safely removed
-// Maybe an unlink-queue and a KILLED-completion handler would be much
-// cleaner...
 _static int uhci_unlink_urb (purb_t purb)
 {
        puhci_t s;
        puhci_desc_t qh;
        puhci_desc_t td;
        purb_priv_t purb_priv;
-       unsigned long flags;
+       unsigned long flags=0;
        struct list_head *p;
 
        if (!purb)              // you never know... 
@@ -616,19 +706,23 @@ _static int uhci_unlink_urb (purb_t purb)
                return -1;
 
        s = (puhci_t) purb->dev->bus->hcpriv;   // get pointer to uhci struct
-#ifdef VROOTHUB
+
        if (usb_pipedevice (purb->pipe) == s->rh.devnum)
                return rh_unlink_urb (purb);
-#endif
-       // is the following really necessary? dequeue_urb has its own spinlock (GA)
-       spin_lock_irqsave (&s->unlink_urb_lock, flags);         // do not allow interrupts
 
+       if(!in_interrupt()) {
+               // is the following really necessary? dequeue_urb has its own spinlock (GA)
+               spin_lock_irqsave (&s->unlink_urb_lock, flags);         // do not allow interrupts
+       }
+       
        //dbg("unlink_urb called %p\n",purb);
        if (purb->status == USB_ST_URB_PENDING) {
                // URB probably still in work
                purb_priv = purb->hcpriv;
                dequeue_urb (s, &purb->urb_list,1);
-               spin_unlock_irqrestore (&s->unlink_urb_lock, flags);    // allow interrupts from here
+               if(!in_interrupt()) {
+                       spin_unlock_irqrestore (&s->unlink_urb_lock, flags);    // allow interrupts from here
+               }
 
                switch (usb_pipetype (purb->pipe)) {
                case PIPE_ISOCHRONOUS:
@@ -645,7 +739,7 @@ _static int uhci_unlink_urb (purb_t purb)
                        while ((p = purb_priv->desc_list.next) != &purb_priv->desc_list) {
                                td = list_entry (p, uhci_desc_t, desc_list);
                                list_del (p);
-                               delete_td (td);
+                               delete_desc (td);
                        }
                        break;
 
@@ -665,7 +759,11 @@ _static int uhci_unlink_urb (purb_t purb)
                }
                purb->status = USB_ST_URB_KILLED;       // mark urb as killed
 
+#ifdef _UHCI_SLAB
+               kmem_cache_free(urb_priv_kmem, purb->hcpriv);
+#else
                kfree (purb->hcpriv);
+#endif
                if (purb->complete) {
                        dbg (KERN_DEBUG MODSTR "unlink_urb: calling completion\n");
                        purb->complete ((struct urb *) purb);
@@ -673,8 +771,10 @@ _static int uhci_unlink_urb (purb_t purb)
                }
                return 0;
        }
-       else
-               spin_unlock_irqrestore (&s->unlink_urb_lock, flags);    // allow interrupts from here
+       else {
+               if(!in_interrupt())
+                       spin_unlock_irqrestore (&s->unlink_urb_lock, flags);    // allow interrupts from here
+       }
 
        return 0;
 }
@@ -689,6 +789,7 @@ _static int find_iso_limits (purb_t purb, unsigned int *start, unsigned int *end
        struct list_head *p = s->urb_list.next;
        int ret=-1;
        unsigned long flags;
+       
        spin_lock_irqsave (&s->urb_list_lock, flags);
 
        for (; p != &s->urb_list; p = p->next) {
@@ -701,11 +802,14 @@ _static int find_iso_limits (purb_t purb, unsigned int *start, unsigned int *end
                        last_urb = u;
                }
        }
+       
        if (last_urb) {
                *end = (last_urb->start_frame + last_urb->number_of_packets) & 1023;
                ret=0;
        }
+       
        spin_unlock_irqrestore(&s->urb_list_lock, flags);
+       
        return ret;     // no previous urb found
 
 }
@@ -749,6 +853,7 @@ _static int iso_find_start (purb_t purb)
 
        if ((unsigned) purb->number_of_packets > 900)
                return -EFBIG;
+       
        limits = find_iso_limits (purb, &start_limit, &stop_limit);
        queued_size = (stop_limit - start_limit) & 1023;
 
@@ -819,6 +924,7 @@ _static int iso_find_start (purb_t purb)
                        purb->start_frame, purb->number_of_packets, start_limit, stop_limit);
                return -EAGAIN;
        }
+
        return 0;
 }
 /*-------------------------------------------------------------------*/
@@ -866,6 +972,7 @@ _static int uhci_submit_int_urb (purb_t purb)
                return -EINVAL;
 
        ret = alloc_td (&td, UHCI_PTR_DEPTH);
+
        if (ret)
                return -ENOMEM;
 
@@ -913,10 +1020,12 @@ _static int uhci_submit_iso_urb (purb_t purb)
                goto err;
 
        tdm = (puhci_desc_t *) kmalloc (purb->number_of_packets * sizeof (puhci_desc_t), in_interrupt ()? GFP_ATOMIC : GFP_KERNEL);
+
        if (!tdm) {
                ret = -ENOMEM;
                goto err;
        }
+
        // First try to get all TDs
        for (n = 0; n < purb->number_of_packets; n++) {
                dbg (KERN_DEBUG MODSTR "n:%d purb->iso_frame_desc[n].length:%d\n", n, purb->iso_frame_desc[n].length);
@@ -958,6 +1067,7 @@ _static int uhci_submit_iso_urb (purb_t purb)
                //uhci_show_td(td);
 
        }
+
        kfree (tdm);
        dbg ("ISO-INT# %i, start %i, now %i\n", purb->number_of_packets, purb->start_frame, UHCI_GET_CURRENT_FRAME (s) & 1023);
        ret = 0;
@@ -973,8 +1083,10 @@ _static int search_dev_ep (puhci_t s, purb_t purb)
        unsigned long flags;
        struct list_head *p = s->urb_list.next;
        purb_t tmp;
+
        dbg (KERN_DEBUG MODSTR "search_dev_ep:\n");
        spin_lock_irqsave (&s->urb_list_lock, flags);
+
        for (; p != &s->urb_list; p = p->next) {
                tmp = list_entry (p, urb_t, urb_list);
                dbg (KERN_DEBUG MODSTR "urb: %p\n", tmp);
@@ -985,7 +1097,9 @@ _static int search_dev_ep (puhci_t s, purb_t purb)
                        return 1;       // found another urb already queued for processing
 
        }
+
        spin_unlock_irqrestore (&s->urb_list_lock, flags);
+
        return 0;
 }
 /*-------------------------------------------------------------------*/
@@ -1000,10 +1114,10 @@ _static int uhci_submit_urb (purb_t purb)
 
        s = (puhci_t) purb->dev->bus->hcpriv;
        //printk( MODSTR"submit_urb: %p type %d\n",purb,usb_pipetype(purb->pipe));
-#ifdef VROOTHUB
+
        if (usb_pipedevice (purb->pipe) == s->rh.devnum)
                return rh_submit_urb (purb);    /* virtual root hub */
-#endif
+
        usb_inc_dev_use (purb->dev);
 
        if (search_dev_ep (s, purb)) {
@@ -1011,15 +1125,22 @@ _static int uhci_submit_urb (purb_t purb)
                return -ENXIO;  // no such address
 
        }
+
+#ifdef _UHCI_SLAB
+       purb_priv = kmem_cache_alloc(urb_priv_kmem, in_interrupt ()? SLAB_ATOMIC : SLAB_KERNEL);
+#else
        purb_priv = kmalloc (sizeof (urb_priv_t), in_interrupt ()? GFP_ATOMIC : GFP_KERNEL);
+#endif
        if (!purb_priv) {
                usb_dec_dev_use (purb->dev);
                return -ENOMEM;
        }
+
        purb->hcpriv = purb_priv;
        INIT_LIST_HEAD (&purb_priv->desc_list);
        purb_priv->short_control_packet=0;
        dbg (KERN_DEBUG MODSTR "submit_urb: scheduling %p\n", purb);
+
        switch (usb_pipetype (purb->pipe)) {
        case PIPE_ISOCHRONOUS:
                ret = uhci_submit_iso_urb (purb);
@@ -1037,21 +1158,29 @@ _static int uhci_submit_urb (purb_t purb)
        default:
                ret = -EINVAL;
        }
+
        dbg (KERN_DEBUG MODSTR "submit_urb: scheduled with ret: %d\n", ret);
+
        if (ret != USB_ST_NOERROR) {
                usb_dec_dev_use (purb->dev);
+#ifdef _UHCI_SLAB
+               kmem_cache_free(urb_priv_kmem, purb_priv);
+#else
                kfree (purb_priv);
+#endif
                return ret;
        }
+
        purb->status = USB_ST_URB_PENDING;
        queue_urb (s, &purb->urb_list,1);
        dbg (KERN_DEBUG MODSTR "submit_urb: exit\n");
+
        return 0;
 }
 /*-------------------------------------------------------------------
  Virtual Root Hub
  -------------------------------------------------------------------*/
-#ifdef VROOTHUB
+
 _static __u8 root_hub_dev_des[] =
 {
        0x12,                   /*  __u8  bLength; */
@@ -1411,7 +1540,6 @@ _static int rh_unlink_urb (purb_t purb)
        return 0;
 }
 /*-------------------------------------------------------------------*/
-#endif
 
 #define UHCI_DEBUG
 
@@ -1452,13 +1580,11 @@ _static int uhci_map_status (int status, int dir_out)
  */
 _static int uhci_alloc_dev (struct usb_device *usb_dev)
 {
-       // hint: inc module usage count
        return 0;
 }
 
 _static int uhci_free_dev (struct usb_device *usb_dev)
 {
-       // hint: dec module usage count
        return 0;
 }
 
@@ -1498,10 +1624,10 @@ _static int process_transfer (puhci_t s, purb_t purb)
        struct list_head *qhl = purb_priv->desc_list.next;
        puhci_desc_t qh = list_entry (qhl, uhci_desc_t, desc_list);
        struct list_head *p = qh->vertical.next;
-       puhci_desc_t desc;
-       puhci_desc_t last_desc = list_entry (purb_priv->desc_list.prev, uhci_desc_t, desc_list);
+       puhci_desc_t desc= list_entry (purb_priv->desc_list.prev, uhci_desc_t, desc_list);
+       puhci_desc_t last_desc = list_entry (desc->vertical.prev, uhci_desc_t, vertical);
        int data_toggle = usb_gettoggle (purb->dev, usb_pipeendpoint (purb->pipe), usb_pipeout (purb->pipe));   // save initial data_toggle
-       int skip_active = 0;
+
 
        // extracted and remapped info from TD
        int maxlength;
@@ -1511,33 +1637,23 @@ _static int process_transfer (puhci_t s, purb_t purb)
        dbg (KERN_DEBUG MODSTR "process_transfer: urb contains bulk/control request\n");
 
 
-       /* if the urb is a control-transfer, data has been recieved and the
+       /* if the status phase has been retriggered and the
           queue is empty or the last status-TD is inactive, the retriggered
           status stage is completed
         */
 #if 1
        if (purb_priv->short_control_packet && 
-               ((qh->hw.qh.element == UHCI_PTR_TERM)||(!(last_desc->hw.td.status & TD_CTRL_ACTIVE)))) 
+               ((qh->hw.qh.element == UHCI_PTR_TERM) ||(!(last_desc->hw.td.status & TD_CTRL_ACTIVE)))) 
                goto transfer_finished;
 #endif
        purb->actual_length=0;
+
        for (; p != &qh->vertical; p = p->next) {
                desc = list_entry (p, uhci_desc_t, vertical);
 
-               if ((desc->hw.td.status & TD_CTRL_ACTIVE) && (skip_active == 0))        // do not process active TDs
+               if (desc->hw.td.status & TD_CTRL_ACTIVE)        // do not process active TDs
                        return ret;
-#if 1
-               if (skip_active) {
-                       if ((desc->hw.td.info & 0xff) == USB_PID_OUT) {
-                               uhci_show_td (desc);
-                               qh->hw.qh.element = virt_to_bus (desc);         // trigger status stage
-                               //printk("retrigger\n");
-                               purb_priv->short_control_packet=1;
-                               return 0;
-                       }
-                       continue;
-               }
-#endif
+
                // extract transfer parameters from TD
                actual_length = (desc->hw.td.status + 1) & 0x7ff;
                maxlength = (((desc->hw.td.info >> 21) & 0x7ff) + 1) & 0x7ff;
@@ -1548,6 +1664,7 @@ _static int process_transfer (puhci_t s, purb_t purb)
                        // set up stalled condition
                        usb_endpoint_halt (purb->dev, usb_pipeendpoint (purb->pipe), usb_pipeout (purb->pipe));
                }
+
                // if any error occured stop processing of further TDs
                if (status != USB_ST_NOERROR) {
                        // only set ret if status returned an error
@@ -1560,9 +1677,8 @@ _static int process_transfer (puhci_t s, purb_t purb)
                        purb->actual_length += actual_length;
 
 #if 0
-               //if (i++==0)
-               if (skip_active)
-                       uhci_show_td (desc);    // show first TD of each transfer
+               if (i++==0)
+                       uhci_show_td (desc);    // show first TD of each transfer
 #endif
 
                // go into error condition to keep data_toggle unchanged if short packet occurs
@@ -1577,18 +1693,36 @@ _static int process_transfer (puhci_t s, purb_t purb)
                //printk(KERN_DEBUG MODSTR"process_transfer: len:%d status:%x mapped:%x toggle:%d\n", actual_length, desc->hw.td.status,status, data_toggle);      
 #if 1
                if ((usb_pipetype (purb->pipe) == PIPE_CONTROL) && (actual_length < maxlength)) {
-                       skip_active = 1;
-                       //printk("skip_active...\n");
+                       if (uhci_packetid(last_desc->hw.td.info) == USB_PID_OUT) {
+                               uhci_show_td (last_desc);
+                               qh->hw.qh.element = virt_to_bus (last_desc);  // re-trigger status stage
+                               printk("uhci: short packet during control transfer, retrigger status stage\n");
+                               purb_priv->short_control_packet=1;
+                               return 0;
+                       }
                }
 #endif
        }
        usb_settoggle (purb->dev, usb_pipeendpoint (purb->pipe), usb_pipeout (purb->pipe), !data_toggle);
-      transfer_finished:
+       transfer_finished:
+
+       /* APC BackUPS Pro kludge */     
+       /* It tries to send all of the descriptor instead of */
+       /*  the amount we requested */   
+       if (desc->hw.td.status & TD_CTRL_IOC &&  
+               status & TD_CTRL_ACTIVE &&   
+               status & TD_CTRL_NAK )
+       {
+               ret=0;
+               purb->status=0;
+       }
 
        unlink_qh (s, qh);
        delete_qh (s, qh);
 
        purb->status = status;
+       
+                                                                               
        dbg(KERN_DEBUG MODSTR"process_transfer: urb %p, wanted len %d, len %d status %x err %d\n",
                purb,purb->transfer_buffer_length,purb->actual_length, purb->status, purb->error_count);
        //dbg(KERN_DEBUG MODSTR"process_transfer: exit\n");
@@ -1611,7 +1745,6 @@ _static int process_interrupt (puhci_t s, purb_t purb)
        //printk(KERN_DEBUG MODSTR"urb contains interrupt request\n");
 
        for (i = 0; p != &purb_priv->desc_list; p = p->next, i++)       // Maybe we allow more than one TD later ;-)
-
        {
                desc = list_entry (p, uhci_desc_t, desc_list);
 
@@ -1641,6 +1774,7 @@ _static int process_interrupt (puhci_t s, purb_t purb)
                        // set up stalled condition
                        usb_endpoint_halt (purb->dev, usb_pipeendpoint (purb->pipe), usb_pipeout (purb->pipe));
                }
+
                // if any error occured: ignore this td, and continue
                if (status != USB_ST_NOERROR) {
                        purb->error_count++;
@@ -1698,6 +1832,7 @@ _static int process_iso (puhci_t s, purb_t purb)
 
        for (i = 0; p != &purb_priv->desc_list; p = p->next, i++) {
                desc = list_entry (p, uhci_desc_t, desc_list);
+
                //uhci_show_td(desc);
                if (desc->hw.td.status & TD_CTRL_ACTIVE) {
                        // means we have completed the last TD, but not the TDs before
@@ -1707,7 +1842,9 @@ _static int process_iso (puhci_t s, purb_t purb)
                        unlink_td (s, desc);
                        goto err;
                }
+
                unlink_td (s, desc);
+
                if (purb->number_of_packets <= i) {
                        dbg (KERN_DEBUG MODSTR "purb->number_of_packets (%d)<=(%d)\n", purb->number_of_packets, i);
                        ret = USB_ST_URB_INVALID_ERROR;
@@ -1726,6 +1863,7 @@ _static int process_iso (puhci_t s, purb_t purb)
                purb->actual_length += purb->iso_frame_desc[i].actual_length;
 
              err:
+
                if (purb->iso_frame_desc[i].status != USB_ST_NOERROR) {
                        purb->error_count++;
                        purb->status = purb->iso_frame_desc[i].status;
@@ -1733,7 +1871,7 @@ _static int process_iso (puhci_t s, purb_t purb)
                dbg (KERN_DEBUG MODSTR "process_iso: len:%d status:%x\n",
                     purb->iso_frame_desc[i].length, purb->iso_frame_desc[i].status);
 
-               delete_td (desc);
+               delete_desc (desc);
                list_del (p);
        }
        dbg ( /*KERN_DEBUG */ MODSTR "process_iso: exit %i (%d)\n", i, ret);
@@ -1744,9 +1882,8 @@ _static int process_iso (puhci_t s, purb_t purb)
 _static int process_urb (puhci_t s, struct list_head *p)
 {
        int ret = USB_ST_NOERROR;
-       unsigned long flags;
        purb_t purb = list_entry (p, urb_t, urb_list);
-       spin_lock_irqsave (&s->urb_list_lock, flags);
+       spin_lock(&s->urb_list_lock);
 
        dbg ( /*KERN_DEBUG */ MODSTR "found queued urb: %p\n", purb);
        switch (usb_pipetype (purb->pipe)) {
@@ -1761,18 +1898,24 @@ _static int process_urb (puhci_t s, struct list_head *p)
                ret = process_interrupt (s, purb);
                break;
        }
-       spin_unlock_irqrestore(&s->urb_list_lock, flags);
+
+       spin_unlock(&s->urb_list_lock);
 
        if (purb->status != USB_ST_URB_PENDING) {
                int proceed = 0;
                dbg ( /*KERN_DEBUG */ MODSTR "dequeued urb: %p\n", purb);
                dequeue_urb (s, p, 1);
+
+#ifdef _UHCI_SLAB
+               kmem_cache_free(urb_priv_kmem, purb->hcpriv);
+#else
                kfree (purb->hcpriv);
+#endif
 
                if ((usb_pipetype (purb->pipe) != PIPE_INTERRUPT)) {
                        purb_t tmp = purb->next;        // pointer to first urb
-
                        int is_ring = 0;
+                       
                        if (purb->next) {
                                do {
                                        if (tmp->status != USB_ST_URB_PENDING) {
@@ -1805,7 +1948,6 @@ _static int process_urb (puhci_t s, struct list_head *p)
                                }
                                while (tmp != NULL && tmp != purb->next);       // submit until we reach NULL or our own pointer or submit fails
 
-
                                if (purb->complete && !(purb->transfer_flags & USB_URB_EARLY_COMPLETE)) {
                                        dbg ( /*KERN_DEBUG */ MODSTR "process_transfer: calling completion\n");
                                        purb->complete ((struct urb *) purb);
@@ -1831,12 +1973,13 @@ _static void uhci_interrupt (int irq, void *__uhci, struct pt_regs *regs)
         */
        dbg ("interrupt\n");
        status = inw (io_addr + USBSTS);
+
        if (!status)            /* shared interrupt, not mine */
                return;
 
        if (status != 1) {
                printk (KERN_DEBUG MODSTR "interrupt, status %x\n", status);
-               uhci_show_status (s);
+               //uhci_show_status (s);
        }
        //beep(1000);           
        /*
@@ -1847,6 +1990,8 @@ _static void uhci_interrupt (int irq, void *__uhci, struct pt_regs *regs)
         * we need to advance the list before
         * - Thomas Sailer
         */
+
+       spin_lock(&s->unlink_urb_lock);
        spin_lock (&s->urb_list_lock);
        p = s->urb_list.prev;
        spin_unlock (&s->urb_list_lock);
@@ -1856,6 +2001,9 @@ _static void uhci_interrupt (int irq, void *__uhci, struct pt_regs *regs)
                p = p->prev;
                process_urb (s, p2);
        }
+
+       spin_unlock(&s->unlink_urb_lock);       
+
        outw (status, io_addr + USBSTS);
 #ifdef __alpha
        mb ();                  // ?
@@ -1887,6 +2035,7 @@ _static void start_hc (puhci_t s)
         * implies.
         */
        outw (USBCMD_HCRESET, io_addr + USBCMD);
+
        while (inw (io_addr + USBCMD) & USBCMD_HCRESET) {
                if (!--timeout) {
                        printk (KERN_ERR MODSTR "USBCMD_HCRESET timed out!\n");
@@ -1906,8 +2055,24 @@ _static void start_hc (puhci_t s)
        s->apm_state = 1;
 }
 
-#ifdef VROOTHUB
-_static int uhci_start_usb (puhci_t s)
+_static void __exit uhci_cleanup_dev(puhci_t s)
+{
+       struct usb_device *root_hub = s->bus->root_hub;
+       if (root_hub)
+               usb_disconnect (&root_hub);
+
+       usb_deregister_bus (s->bus);
+
+       reset_hc (s);
+       release_region (s->io_addr, s->io_size);
+       free_irq (s->irq, s);
+       usb_free_bus (s->bus);
+       cleanup_skel (s);
+       kfree (s);
+
+}
+
+_static int __init uhci_start_usb (puhci_t s)
 {                              /* start it up */
        /* connect the virtual root hub */
        struct usb_device *usb_dev;
@@ -1923,21 +2088,18 @@ _static int uhci_start_usb (puhci_t s)
                usb_free_dev (usb_dev);
                return -1;
        }
+
        return 0;
 }
-#endif
-
 
-_static puhci_t alloc_uhci (unsigned int io_addr, unsigned int io_size)
+_static int __init alloc_uhci (int irq, unsigned int io_addr, unsigned int io_size)
 {
        puhci_t s;
        struct usb_bus *bus;
-#ifndef VROOTHUB       
-       struct usb_device *usb;
-#endif
+
        s = kmalloc (sizeof (uhci_t), GFP_KERNEL);
        if (!s)
-               return NULL;
+               return -1;
 
        memset (s, 0, sizeof (uhci_t));
        INIT_LIST_HEAD (&s->urb_list);
@@ -1948,34 +2110,23 @@ _static puhci_t alloc_uhci (unsigned int io_addr, unsigned int io_size)
        s->irq = -1;
        s->io_addr = io_addr;
        s->io_size = io_size;
-       s->next = devs;         //chain new uhci device into global list
-
-       devs = s;
+       s->next = devs; //chain new uhci device into global list        
 
        bus = usb_alloc_bus (&uhci_device_operations);
-       if (!bus)
-               goto err_bus;
+       if (!bus) {
+               kfree (s);
+               return -1;
+       }
 
        s->bus = bus;
        bus->hcpriv = s;
-#if 1
-#ifndef VROOTHUB
-       /*
-        * Allocate the root_hub
-        */
-       usb = usb_alloc_dev (NULL, bus);
-       if (!usb)
-               goto err_dev;
-
-       s->bus->root_hub = usb;
-#endif
-       /* Initialize the root hub */
 
        /* UHCI specs says devices must have 2 ports, but goes on to say */
        /* they may have more but give no way to determine how many they */
        /* have, so default to 2 */
        /* According to the UHCI spec, Bit 7 is always set to 1. So we try */
        /* to use this to our advantage */
+
        for (s->maxports = 0; s->maxports < (io_size - 0x10) / 2; s->maxports++) {
                unsigned int portstatus;
 
@@ -1993,258 +2144,44 @@ _static puhci_t alloc_uhci (unsigned int io_addr, unsigned int io_size)
                dbg (KERN_DEBUG "Port count misdetected, forcing to 2 ports\n");
                s->maxports = 2;
        }
-#ifndef VROOTHUB
-       usb->maxchild = s->maxports;
-       usb_init_root_hub (usb);
-#endif
-#endif
-#ifdef VROOTHUB
-       s->rh.numports = s->maxports;
-#endif
-       return s;
-
-/*
- * error exits:
- */
-#ifndef VROOTHUB
-      err_dev:
-#endif      
-       usb_free_bus (bus);
-      err_bus:
-       kfree (s);
-       return NULL;
-}
-
-#ifndef VROOTHUB
-/*
- * This is just incredibly fragile. The timings must be just
- * right, and they aren't really documented very well.
- *
- * Note the short delay between disabling reset and enabling
- * the port..
- */
-_static void uhci_reset_port (unsigned int port)
-{
-       unsigned short status;
-       status = inw (port);
-       outw (status | USBPORTSC_PR, port);     /* reset port */
-       wait_ms (10);
-       outw (status & ~USBPORTSC_PR, port);
-       udelay (5);
-
-       status = inw (port);
-       outw (status | USBPORTSC_PE, port);     /* enable port */
-       wait_ms (10);
-
-       status = inw (port);
-       if (!(status & USBPORTSC_PE)) {
-               outw (status | USBPORTSC_PE, port);     /* one more try at enabling port */
-               wait_ms (50);
-       }
-}
-
-/*
- * Check port status - Connect Status Change - for
- * each of the attached ports (defaults to two ports,
- * but at least in theory there can be more of them).
- */
-_static int uhci_root_hub_events (puhci_t s)
-{
-       int io_addr = s->io_addr;
-       int ports = s->maxports;
-
-       io_addr += USBPORTSC1;
-       do {
-               if (inw (io_addr) & USBPORTSC_CSC)
-                       return 1;
-               io_addr += 2;
-       }
-       while (--ports > 0);
-       return 0;
-}
-/*
- * This gets called if the connect status on the root
- * hub (and the root hub only) changes.
- */
-_static void uhci_connect_change (puhci_t s, unsigned int port, unsigned int nr)
-{
-       struct usb_device *usb_dev;
-       unsigned short status;
-       struct usb_device *root_hub = s->bus->root_hub;
 
-#if 1                          // UHCI_DEBUG
-       printk (KERN_INFO MODSTR "uhci_connect_change: called for %d\n", nr);
-#endif
-
-       /*
-        * Even if the status says we're connected,
-        * the fact that the status bits changed may
-        * that we got disconnected and then reconnected.
-        *
-        * So start off by getting rid of any old devices..
-        */
-       // dbg("before disconnect\n");
-       usb_disconnect (&root_hub->children[nr]);
-       status = inw (port);
-       //dbg("after disconnect\n");
-       /* If we have nothing connected, then clear change status and disable the port */
-       status = (status & ~USBPORTSC_PE) | USBPORTSC_PEC;
-       if (!(status & USBPORTSC_CCS)) {
-               outw (status, port);
-               return;
-       }
-
-       /*
-        * Ok, we got a new connection. Allocate a device to it,
-        * and find out what it wants to do..
-        */
-       usb_dev = usb_alloc_dev (root_hub, root_hub->bus);
-
-       if (!usb_dev)
-               return;
-
-       usb_connect (usb_dev);
-
-       root_hub->children[nr] = usb_dev;
-       wait_ms (200);          /* wait for powerup */
-       uhci_reset_port (port);
-
-       /* Get speed information */
-       usb_dev->slow = (inw (port) & USBPORTSC_LSDA) ? 1 : 0;
-
-       /*
-        * Ok, all the stuff specific to the root hub has been done.
-        * The rest is generic for any new USB attach, regardless of
-        * hub type.
-        */
-       if (usb_new_device (usb_dev)) {
-               unsigned short status = inw (port);
-               dbg (KERN_INFO MODSTR "disabling malfunctioning port %d\n", nr + 1);
-               outw (status | USBPORTSC_PE, port);
-       }
-
-}
-
-/*
- * This gets called when the root hub configuration
- * has changed. Just go through each port, seeing if
- * there is something interesting happening.
- */
-_static void uhci_check_configuration (puhci_t s)
-{
-       unsigned int io_addr = s->io_addr + USBPORTSC1;
-       int nr = 0;
-
-       do {
-               unsigned short status = inw (io_addr);
-
-               if (status & USBPORTSC_CSC)
-                       uhci_connect_change (s, io_addr, nr);
-               dbg ("after connchange\n");
-               nr++;
-               io_addr += 2;
-       }
-       while (nr < s->maxports);
-       //dbg("after check conf\n");
-}
-
-_static int uhci_control_thread (void *__uhci)
-{
-       puhci_t s = (puhci_t) __uhci;
-
-       s->control_running = 1;
-
-       lock_kernel ();
-
-       exit_mm (current);
-       exit_files (current);
-
-       strcpy (current->comm, "uhci-control");
-       unlock_kernel ();
-       /*
-        * Ok, all systems are go..
-        */
-       do {
-               if (s->apm_state) {
-                       if (uhci_root_hub_events (s))
-                               uhci_check_configuration (s);
-               }
+       s->rh.numports = s->maxports;
 
-               current->state = TASK_INTERRUPTIBLE;
-               schedule_timeout (HZ);
-
-               if (signal_pending (current)) {
-                       siginfo_t info;
-                       int signr;
-                       /* sending SIGUSR1 makes us print out some info */
-                       spin_lock_irq (&current->sigmask_lock);
-                       signr = dequeue_signal (&current->blocked, &info);
-                       spin_unlock_irq (&current->sigmask_lock);
-                       dbg (KERN_DEBUG MODSTR "signal %d\n", signr);
-                       if (signr == SIGUSR1) {
-                               dbg (KERN_DEBUG "UHCI queue dump:\n");
-                               uhci_show_queue (s->control_chain);
-                       }
-                       else if (signr == SIGUSR2) {
-                               purb_t purb;
-                               struct list_head *p = s->urb_list.next;
-                               for (; p != &s->urb_list; p = p->next) {
-                                       purb = list_entry (p, urb_t, urb_list);
-                                       printk (KERN_DEBUG MODSTR "found queued urb:%p type:%d\n", purb, usb_pipetype (purb->pipe));
-                               }
-                       }
-               }
+       if (init_skel (s)) {
+               usb_free_bus (bus);
+               kfree(s);
+               return -1;
        }
-       while (s->control_continue);
-       s->control_running = 0;
-       return 0;
-}
-#endif
-
-/*
- * If we've successfully found a UHCI, now is the time to increment the
- * module usage count, start the control thread, and return success..
- */
-_static int found_uhci (int irq, unsigned int io_addr, unsigned int io_size)
-{
-       puhci_t s;
 
-       s = alloc_uhci (io_addr, io_size);
-       if (!s)
-               return -ENOMEM;
-
-       if (init_skel (s))
-               return -ENOMEM;
-
-       request_region (s->io_addr, io_size, "usb-uhci");
+       request_region (s->io_addr, io_size, MODNAME);
        reset_hc (s);
        usb_register_bus (s->bus);
 
        start_hc (s);
-       s->control_continue = 1;
 
-       if (!request_irq (irq, uhci_interrupt, SA_SHIRQ, "uhci", s)) {
+       if (request_irq (irq, uhci_interrupt, SA_SHIRQ, MODNAME, s)) {
+               usb_free_bus (bus);
+               reset_hc (s);
+               release_region (s->io_addr, s->io_size);
+               cleanup_skel(s);
+               kfree(s);
+               return -1;
+       }
 
-               s->irq = irq;
-#ifdef VROOTHUB
-               return uhci_start_usb (s);
-#endif
-#ifndef VROOTHUB
-               uhci_check_configuration (s);
-// #if 1
-               s->control_pid = kernel_thread (uhci_control_thread, s, 0);     //CLONE_FS | CLONE_FILES | CLONE_SIGHAND);
+       s->irq = irq;
 
-               if (s->control_pid >= 0)
-                       return 0;
-#endif
+       if(uhci_start_usb (s) < 0) {
+               uhci_cleanup_dev(s);
+               return -1;
        }
-       reset_hc (s);
-       release_region (s->io_addr, s->io_size);
-       free_irq (irq, s);
-       return -1;
+       
+       //chain new uhci device into global list
+       devs = s;
+
+       return 0;
 }
 
-_static int start_uhci (struct pci_dev *dev)
+_static int __init start_uhci (struct pci_dev *dev)
 {
        int i;
 
@@ -2273,7 +2210,7 @@ _static int start_uhci (struct pci_dev *dev)
                /* disable legacy emulation */
                pci_write_config_word (dev, USBLEGSUP, USBLEGSUP_DEFAULT);
 
-               return found_uhci (dev->irq, io_addr, io_size);
+               return alloc_uhci(dev->irq, io_addr, io_size);
        }
        return -1;
 }
@@ -2314,13 +2251,42 @@ _static int handle_apm_event (apm_event_t event)
 }
 #endif
 
-int uhci_init (void)
+int __init uhci_init (void)
 {
        int retval = -ENODEV;
        struct pci_dev *dev = NULL;
        u8 type;
+       int i=0;
+
+#ifdef _UHCI_SLAB
+       char *slabname=kmalloc(16, GFP_KERNEL);
+
+       if(!slabname)
+               return -ENOMEM;
+
+       strcpy(slabname, "uhci_desc");
+       uhci_desc_kmem = kmem_cache_create(slabname, sizeof(uhci_desc_t), 0, SLAB_HWCACHE_ALIGN, NULL, NULL);
+       
+       if(!uhci_desc_kmem) {
+               printk(KERN_ERR MODSTR"kmem_cache_create for uhci_desc failed (out of memory)\n");
+               return -ENOMEM;
+       }
+
+       slabname=kmalloc(16, GFP_KERNEL);
+
+       if(!slabname)
+               return -ENOMEM;
 
+       strcpy(slabname, "urb_priv");   
+       urb_priv_kmem = kmem_cache_create(slabname, sizeof(urb_priv_t), 0, SLAB_HWCACHE_ALIGN, NULL, NULL);
+       
+       if(!urb_priv_kmem) {
+               printk(KERN_ERR MODSTR"kmem_cache_create for urb_priv_t failed (out of memory)\n");
+               return -ENOMEM;
+       }
+#endif 
        printk (KERN_INFO MODSTR VERSTR "\n");
+
        for (;;) {
                dev = pci_find_class (PCI_CLASS_SERIAL_USB << 8, dev);
                if (!dev)
@@ -2333,59 +2299,28 @@ int uhci_init (void)
 
                /* Ok set it up */
                retval = start_uhci (dev);
-               if (retval)
-                       break;
+               if (!retval)
+                       i++;
        }
+
 #ifdef CONFIG_APM
-       apm_register_callback (&handle_apm_event);
+       if(i)
+               apm_register_callback (&handle_apm_event);
 #endif
        return retval;
 }
 
-void uhci_cleanup (void)
+void __exit uhci_cleanup (void)
 {
-#ifndef VROOTHUB
-       int ret, i;
-#endif
        puhci_t s;
-
        while ((s = devs)) {
-               struct usb_device *root_hub = s->bus->root_hub;
                devs = devs->next;
-#ifndef VROOTHUB
-               s->control_continue = 0;
-               /* Check if the process is still running */
-               ret = kill_proc (s->control_pid, 0, 1);
-               if (!ret) {
-                       /* Try a maximum of 10 seconds */
-                       int count = 10 * 100;
-
-                       while (s->control_running && --count) {
-                               current->state = TASK_INTERRUPTIBLE;
-                               schedule_timeout (1);
-                       }
-
-                       if (!count)
-                               printk (KERN_ERR MODSTR "giving up on killing uhci-control\n");
-               }
-
-               if (root_hub)
-                       for (i = 0; i < root_hub->maxchild; i++)
-                               usb_disconnect (root_hub->children + i);
-#endif
-#ifdef VROOTHUB
-               if (root_hub)
-                       usb_disconnect (&root_hub);
-#endif
-               usb_deregister_bus (s->bus);
-
-               reset_hc (s);
-               release_region (s->io_addr, s->io_size);
-               free_irq (s->irq, s);
-               usb_free_bus (s->bus);
-               cleanup_skel (s);
-               kfree (s);
+               uhci_cleanup_dev(s);
        }
+#ifdef _UHCI_SLAB
+       kmem_cache_shrink(uhci_desc_kmem);
+       kmem_cache_shrink(urb_priv_kmem);
+#endif
 }
 
 #ifdef MODULE
index 77bc714df1e978c5da2f47d98be3e81a53b4d8c6..1902786bbb2cec378b00b945dd7e11a469e97b16 100644 (file)
@@ -2,10 +2,10 @@
 #define __LINUX_UHCI_H
 
 /*
-   $Id: uhci.h,v 1.28 1999/12/14 18:38:26 fliegl Exp $
+   $Id: uhci.h,v 1.30 1999/12/15 17:57:25 fliegl Exp $
  */
-
-#define MODSTR "uhci: "
+#define MODNAME "usb-uhci"
+#define MODSTR MODNAME": "
 #define VERSTR "version v0.9 time " __TIME__ " " __DATE__
 
 /* Command register */
@@ -145,7 +145,6 @@ typedef struct {
        int short_control_packet;
 } urb_priv_t, *purb_priv_t;
 
-#ifdef VROOTHUB
 struct virt_root_hub {
        int devnum;             /* Address of Root Hub endpoint */
        void *urb;
@@ -157,17 +156,12 @@ struct virt_root_hub {
        struct timer_list rh_int_timer;
 };
 
-#endif
-
 typedef struct uhci {
        int irq;
        unsigned int io_addr;
        unsigned int io_size;
        unsigned int maxports;
 
-       int control_pid;
-       int control_running;
-       int control_continue;
        int apm_state;
 
        struct uhci *next;      // chain of uhci device contexts
@@ -188,9 +182,7 @@ typedef struct uhci {
        uhci_desc_t *chain_end;
        spinlock_t qh_lock;
        spinlock_t td_lock;
-#ifdef VROOTHUB
        struct virt_root_hub rh;        //private data of the virtual root hub
-#endif
 } uhci_t, *puhci_t;
 
 
@@ -201,7 +193,6 @@ typedef struct uhci {
 /* ------------------------------------------------------------------------------------ 
    Virtual Root HUB 
    ------------------------------------------------------------------------------------ */
-#ifdef VROOTHUB
 /* destination of request */
 #define RH_INTERFACE               0x01
 #define RH_ENDPOINT                0x02
@@ -257,8 +248,5 @@ typedef struct uhci {
 #define RH_NACK                    0x00
 
 #define min(a,b) (((a)<(b))?(a):(b))
-static int rh_submit_urb (purb_t purb);
-static int rh_unlink_urb (purb_t purb);
-#endif /* VROOTHUB */
 
 #endif
index 7ceea4de14a1545f46aaa096c6e0a426b7d9c89e..217b69e202630433949e39854124e0f7639a4d82 100644 (file)
  *
  * See README.serial for more information on using this driver.
  * 
+ * version 0.2.2 (12/16/99) gkh
+ *     Changed major number to the new allocated number. We're legal now!
+ *
+ * version 0.2.1 (12/14/99) gkh
+ *     Fixed bug that happens when device node is opened when there isn't a
+ *     device attached to it. Thanks to marek@webdesign.no for noticing this.
+ *
  * version 0.2.0 (11/10/99) gkh
  *     Split up internals to make it easier to add different types of serial 
  *     converters to the code.
@@ -83,7 +90,7 @@ MODULE_PARM_DESC(product, "User specified USB idProduct");
 #define PERACOM_SERIAL_CONVERTER       0x0001
 
 
-#define SERIAL_MAJOR   240
+#define SERIAL_MAJOR   188     /* Nice legal number now */
 
 #define NUM_PORTS      4       /* Have to pick a number for now. Need to look */
                                /* into dynamically creating them at insertion time. */
@@ -640,7 +647,7 @@ static int etek_serial_open (struct tty_struct *tty, struct file *filp)
 
        /* Need to do device specific setup here (control lines, baud rate, etc.) */
        /* FIXME!!! */
-                                                 
+
        return (0);
 }
 
@@ -715,7 +722,7 @@ static void etek_serial_put_char (struct tty_struct *tty, unsigned char ch)
        serial->bulk_out_transfer = usb_request_bulk (serial->dev, serial->bulk_out_pipe, serial_write_irq, serial->bulk_out_buffer, 1, serial);
 
        return;
-}                   
+}
 
 
 static int etek_write_room (struct tty_struct *tty) 
@@ -798,7 +805,7 @@ static int generic_serial_open (struct tty_struct *tty, struct file *filp)
                serial->bulk_in_inuse = 1;
                serial->bulk_in_transfer = usb_request_bulk (serial->dev, serial->bulk_in_pipe, serial_read_irq, serial->bulk_in_buffer, serial->bulk_in_size, serial);
        }
-                                                 
+
        return (0);
 }
 
@@ -877,7 +884,7 @@ static void generic_serial_put_char (struct tty_struct *tty, unsigned char ch)
        }
 
        return;
-}                   
+}
 
 
 static int generic_write_room (struct tty_struct *tty) 
index e620e629d8354b63aa18b429ad4e95ecf6d06014..b076e82e65e2dc869563d5f63ea39c07017b5e44 100644 (file)
@@ -14,6 +14,8 @@
  * Think of this as a "USB library" rather than anything else.
  * It should be considered a slave, with no callbacks. Callbacks
  * are evil.
+ *
+ * $Id: usb.c,v 1.37 1999/12/17 10:48:08 fliegl Exp $
  */
 
 #ifndef EXPORT_SYMTAB
@@ -87,7 +89,7 @@ int usb_register(struct usb_driver *new_driver)
        while (tmp != &usb_bus_list) {
                struct usb_bus *bus = list_entry(tmp,struct usb_bus, bus_list);
 
-               tmp = tmp->next;
+               tmp = tmp->next;
                usb_check_support(bus->root_hub);
        }
        return 0;
@@ -110,21 +112,21 @@ static void usb_drivers_purge(struct usb_driver *driver,struct usb_device *dev)
                if (dev->children[i])
                        usb_drivers_purge(driver, dev->children[i]);
 
-        if (!dev->actconfig)
-                return;
-                        
-        for (i = 0; i < dev->actconfig->bNumInterfaces; i++) {
-                struct usb_interface *interface = &dev->actconfig->interface[i];
+       if (!dev->actconfig)
+               return;
+                       
+       for (i = 0; i < dev->actconfig->bNumInterfaces; i++) {
+               struct usb_interface *interface = &dev->actconfig->interface[i];
                
-               if (interface->driver == driver) {
-                        driver->disconnect(dev, interface->private_data);
+               if (interface->driver == driver) {
+                       driver->disconnect(dev, interface->private_data);
                        usb_driver_release_interface(driver, interface);
-                       /*
-                        * This will go through the list looking for another
-                        * driver that can handle the device
-                        */
-                        usb_find_interface_driver(dev, i);
-                }
+                       /*
+                        * This will go through the list looking for another
+                        * driver that can handle the device
+                        */
+                       usb_find_interface_driver(dev, i);
+               }
        }
 }
 
@@ -167,12 +169,12 @@ static long calc_bus_time (int low_speed, int input_dir, int isoc, int bytecount
        if (low_speed)          /* no isoc. here */
        {
                if (input_dir)
-                {
-                       tmp = (67667L * (31L + 10L * BitTime (bytecount))) / 1000L;
+               {
+                       tmp = (67667L * (31L + 10L * BitTime (bytecount))) / 1000L;
                        return (64060L + (2 * BW_HUB_LS_SETUP) + BW_HOST_DELAY + tmp);
                }
                else
-                {
+               {
                        tmp = (66700L * (31L + 10L * BitTime (bytecount))) / 1000L;
                        return (64107L + (2 * BW_HUB_LS_SETUP) + BW_HOST_DELAY + tmp);
                }
@@ -318,13 +320,13 @@ static void usb_check_support(struct usb_device *dev)
                if (dev->children[i])
                        usb_check_support(dev->children[i]);
 
-        if (!dev->actconfig)
-                return;
+       if (!dev->actconfig)
+               return;
 
        /* now we check this device */
-        if (dev->devnum > 0)
-                for (i = 0; i < dev->actconfig->bNumInterfaces; i++)
-                        usb_find_interface_driver(dev, i);
+       if (dev->devnum > 0)
+               for (i = 0; i < dev->actconfig->bNumInterfaces; i++)
+                       usb_find_interface_driver(dev, i);
 }
 
 
@@ -386,7 +388,7 @@ void usb_driver_release_interface(struct usb_driver *driver, struct usb_interfac
 static int usb_find_interface_driver(struct usb_device *dev, unsigned ifnum)
 {
        struct list_head *tmp = usb_driver_list.next;
-        struct usb_interface *interface;
+       struct usb_interface *interface;
        
        if ((!dev) || (ifnum >= dev->actconfig->bNumInterfaces)) {
                printk(KERN_ERR "usb-core: bad find_interface_driver params\n");
@@ -395,22 +397,22 @@ static int usb_find_interface_driver(struct usb_device *dev, unsigned ifnum)
 
        interface = dev->actconfig->interface + ifnum;
 
-        if (usb_interface_claimed(interface))
-                return -1;
+       if (usb_interface_claimed(interface))
+               return -1;
 
-        while (tmp != &usb_driver_list) {
+       while (tmp != &usb_driver_list) {
                void *private;
-                struct usb_driver *driver = list_entry(tmp, struct usb_driver,
-                                                      driver_list);
-                        
-                tmp = tmp->next;
-                if (!(private = driver->probe(dev, ifnum)))
-                        continue;
+               struct usb_driver *driver = list_entry(tmp, struct usb_driver,
+                                                      driver_list);
+                       
+               tmp = tmp->next;
+               if (!(private = driver->probe(dev, ifnum)))
+                       continue;
                usb_driver_claim_interface(driver, interface, private);
 
-                return 0;
-        }
-        
+               return 0;
+       }
+       
        return -1;
 }
 
@@ -422,7 +424,7 @@ static int usb_find_interface_driver(struct usb_device *dev, unsigned ifnum)
 static void usb_find_drivers(struct usb_device *dev)
 {
        unsigned ifnum;
-        unsigned rejected = 0;
+       unsigned rejected = 0;
 
        for (ifnum = 0; ifnum < dev->actconfig->bNumInterfaces; ifnum++) {
                /* if this interface hasn't already been claimed */
@@ -692,8 +694,7 @@ int usb_terminate_bulk(struct usb_device *dev, void *first)
        if (!urb) // none found? there is nothing to remove!
                return -ENODEV;
   
-       if (urb->status!= -EINPROGRESS)
-               usb_unlink_urb(urb);
+       usb_unlink_urb(urb);
        kfree(urb->context);
        kfree(urb);
        return USB_ST_NOERROR;
@@ -737,7 +738,9 @@ int usb_request_irq(struct usb_device *dev, unsigned int pipe, usb_device_irq ha
        unsigned int maxsze = usb_maxpacket(dev, pipe, usb_pipeout(pipe));
 
        *handle = NULL;
-       printk("irq: dev:%p pipe:%08X handler:%p period:%d dev_id:%p max:%d\n", dev, pipe, handler, period, dev_id, maxsze);
+       
+       //printk("irq: dev:%p pipe:%08X handler:%p period:%d dev_id:%p max:%d\n", dev, pipe, handler, period, dev_id, maxsze);
+       
        /* Check host controller's bandwidth for this int. request. */
        bustime = calc_bus_time (usb_pipeslow(pipe), usb_pipein(pipe), 0,
                        usb_maxpacket(dev, pipe, usb_pipeout(pipe)));
@@ -849,7 +852,7 @@ static int usb_parse_endpoint(struct usb_device *dev, struct usb_endpoint_descri
        else
                memcpy(endpoint, buffer, USB_DT_ENDPOINT_SIZE);
        
-        le16_to_cpus(&endpoint->wMaxPacketSize);
+       le16_to_cpus(&endpoint->wMaxPacketSize);
 
        buffer += header->bLength;
        size -= header->bLength;
@@ -896,6 +899,7 @@ static int usb_parse_endpoint(struct usb_device *dev, struct usb_endpoint_descri
        }
 
        endpoint->extra = kmalloc(len, GFP_KERNEL);
+
        if (!endpoint->extra) {
                printk(KERN_ERR "Couldn't allocate memory for endpoint extra descriptors\n");
                endpoint->extralen = 0;
@@ -920,6 +924,7 @@ static int usb_parse_interface(struct usb_device *dev, struct usb_interface *int
        interface->max_altsetting = USB_ALTSETTINGALLOC;
 
        interface->altsetting = kmalloc(sizeof(struct usb_interface_descriptor) * interface->max_altsetting, GFP_KERNEL);
+       
        if (!interface->altsetting) {
                printk(KERN_ERR "couldn't kmalloc interface->altsetting\n");
                return -1;
@@ -998,6 +1003,7 @@ static int usb_parse_interface(struct usb_device *dev, struct usb_interface *int
                        ifp->extralen = 0;
                } else {
                        ifp->extra = kmalloc(len, GFP_KERNEL);
+
                        if (!ifp->extra) {
                                printk(KERN_ERR "couldn't allocate memory for interface extra descriptors\n");
                                ifp->extralen = 0;
@@ -1119,7 +1125,7 @@ int usb_parse_configuration(struct usb_device *dev, struct usb_config_descriptor
 
 void usb_destroy_configuration(struct usb_device *dev)
 {
-       int c, i, j;
+       int c, i, j, k;
        
        if (!dev->config)
                return;
@@ -1128,23 +1134,34 @@ void usb_destroy_configuration(struct usb_device *dev)
                struct usb_config_descriptor *cf = &dev->config[c];
 
                if (!cf->interface)
-                       break;
+                       break;
 
                for (i = 0; i < cf->bNumInterfaces; i++) {
                        struct usb_interface *ifp =
                                &cf->interface[i];
-
+                               
                        if (!ifp->altsetting)
-                               break;
+                               break;
 
                        for (j = 0; j < ifp->num_altsetting; j++) {
                                struct usb_interface_descriptor *as =
                                        &ifp->altsetting[j];
+                                       
+                               if(as->extra) {
+                                       kfree(as->extra);
+                               }
 
                                if (!as->endpoint)
                                        break;
+                                       
+                               for(k = 0; k < as->bNumEndpoints; k++) {
+                                       if(as->endpoint[k].extra) {
+                                               kfree(as->endpoint[k].extra);
+                                       }
+                               }       
                                kfree(as->endpoint);
                        }
+
                        kfree(ifp->altsetting);
                }
                kfree(cf->interface);
@@ -1179,16 +1196,16 @@ void usb_disconnect(struct usb_device **pdev)
 
        printk("usbcore: USB disconnect on device %d\n", dev->devnum);
 
-        if (dev->actconfig) {
-                for (i = 0; i < dev->actconfig->bNumInterfaces; i++) {
-                        struct usb_interface *interface = &dev->actconfig->interface[i];
+       if (dev->actconfig) {
+               for (i = 0; i < dev->actconfig->bNumInterfaces; i++) {
+                       struct usb_interface *interface = &dev->actconfig->interface[i];
                        struct usb_driver *driver = interface->driver;
-                       if (driver) {
-                               driver->disconnect(dev, interface->private_data);
+                       if (driver) {
+                               driver->disconnect(dev, interface->private_data);
                                usb_driver_release_interface(driver, interface);
-                        }
-                }
-        }
+                       }
+               }
+       }
 
        /* Free up all the children.. */
        for (i = 0; i < USB_MAXCHILDREN; i++) {
@@ -1594,6 +1611,7 @@ int usb_new_device(struct usb_device *dev)
        dev->devnum = addr;
 
        err = usb_set_address(dev);
+       
        if (err < 0) {
                printk(KERN_ERR "usbcore: USB device not accepting new address (error=%d)\n", err);
                clear_bit(dev->devnum, &dev->bus->devmap.devicemap);
@@ -1612,6 +1630,7 @@ int usb_new_device(struct usb_device *dev)
        }
 
        err=usb_get_configuration(dev);
+       
        if (err < 0) {
                printk(KERN_ERR "usbcore: unable to get configuration (error=%d)\n", err);
                clear_bit(dev->devnum, &dev->bus->devmap.devicemap);
@@ -1631,12 +1650,12 @@ int usb_new_device(struct usb_device *dev)
        usb_show_string(dev, "Manufacturer", dev->descriptor.iManufacturer);
        usb_show_string(dev, "Product", dev->descriptor.iProduct);
        usb_show_string(dev, "SerialNumber", dev->descriptor.iSerialNumber);
-       
+
        /* now that the basic setup is over, add a /proc/bus/usb entry */
        proc_usb_add_device(dev);
 
        /* find drivers willing to handle this device */
-        usb_find_drivers(dev);
+       usb_find_drivers(dev);
 
        return 0;
 }
@@ -1655,16 +1674,16 @@ static int usb_open(struct inode * inode, struct file * file)
 }
 
 static struct file_operations usb_fops = {
-        NULL,          /* seek */
+       NULL,           /* seek */
        NULL,           /* read */
        NULL,           /* write */
        NULL,           /* readdir */
        NULL,           /* poll */
        NULL,           /* ioctl */
        NULL,           /* mmap */
-        usb_open,
+       usb_open,
        NULL,           /* flush */
-        NULL           /* release */
+       NULL            /* release */
 };
 
 void usb_major_init(void)
index 807c4ed041d8d323fdc07bd9f28ebe70aabbdabd..dd0597df8e70e9fe1f877cb627ec50a14ed479fa 100644 (file)
@@ -26,7 +26,6 @@
  *
  */
 
-#include <linux/config.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/sched.h>
index dab5e93059e6001ce427b2853949cdbc69a74cd4..3e7870acfc2f54e9959ea7cde6c8ad0af91a68b1 100644 (file)
@@ -4,7 +4,7 @@
  *     uss720.c  --  USS720 USB Parport Cable.
  *
  *     Copyright (C) 1999
- *          Thomas Sailer (sailer@ife.ee.ethz.ch)
+ *         Thomas Sailer (sailer@ife.ee.ethz.ch)
  *
  *     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
  *  History:
  *   0.1  04.08.99  Created
  *   0.2  07.08.99  Some fixes mainly suggested by Tim Waugh
- *                  Interrupt handling currently disabled because
- *                  usb_request_irq crashes somewhere within ohci.c
- *                  for no apparent reason (that is for me, anyway)
- *                  ECP currently untested
+ *                 Interrupt handling currently disabled because
+ *                 usb_request_irq crashes somewhere within ohci.c
+ *                 for no apparent reason (that is for me, anyway)
+ *                 ECP currently untested
  *   0.3  10.08.99  fixing merge errors
  *   0.4  13.08.99  Added Vendor/Product ID of Brad Hard's cable
  *   0.5  20.09.99  usb_control_msg wrapper used
@@ -50,7 +50,7 @@ struct parport_uss720_private {
        struct usb_device *usbdev;
        void *irqhandle;
        unsigned int irqpipe;
-        unsigned char reg[7];  /* USB registers */
+       unsigned char reg[7];  /* USB registers */
 };
 
 /* --------------------------------------------------------------------- */
@@ -62,17 +62,17 @@ static int get_1284_register(struct parport *pp, unsigned char reg, unsigned cha
        static const unsigned char regindex[9] = {
                4, 0, 1, 5, 5, 0, 2, 3, 6
        };
-        int ret;
+       int ret;
 
        if (!usbdev)
                return -1;
-        ret = usb_control_msg(usbdev, usb_rcvctrlpipe(usbdev,0), 3, 0xc0, ((unsigned int)reg) << 8, 0, priv->reg, 7, HZ);
-        if (ret) {
-                printk(KERN_DEBUG "uss720: get_1284_register(%d) failed, status 0x%x\n",
+       ret = usb_control_msg(usbdev, usb_rcvctrlpipe(usbdev,0), 3, 0xc0, ((unsigned int)reg) << 8, 0, priv->reg, 7, HZ);
+       if (ret) {
+               printk(KERN_DEBUG "uss720: get_1284_register(%d) failed, status 0x%x\n",
                       (unsigned int)reg, ret);
-        } else {
+       } else {
 #if 0
-                printk(KERN_DEBUG "uss720: get_1284_register(%d) return %02x %02x %02x %02x %02x %02x %02x\n",
+               printk(KERN_DEBUG "uss720: get_1284_register(%d) return %02x %02x %02x %02x %02x %02x %02x\n",
                       (unsigned int)reg, (unsigned int)priv->reg[0], (unsigned int)priv->reg[1],
                       (unsigned int)priv->reg[2], (unsigned int)priv->reg[3], (unsigned int)priv->reg[4],
                       (unsigned int)priv->reg[5], (unsigned int)priv->reg[6]);
@@ -90,20 +90,20 @@ static int set_1284_register(struct parport *pp, unsigned char reg, unsigned cha
 {
        struct parport_uss720_private *priv = pp->private_data;
        struct usb_device *usbdev = priv->usbdev;
-        int ret;
+       int ret;
 
        if (!usbdev)
                return -1;
-        ret = usb_control_msg(usbdev, usb_sndctrlpipe(usbdev,0), 4, 0x40, (((unsigned int)reg) << 8) | val, 0, NULL, 0, HZ);
-        if (ret) {
-                printk(KERN_DEBUG "uss720: set_1284_register(%u,0x%02x) failed, status 0x%x\n", 
+       ret = usb_control_msg(usbdev, usb_sndctrlpipe(usbdev,0), 4, 0x40, (((unsigned int)reg) << 8) | val, 0, NULL, 0, HZ);
+       if (ret) {
+               printk(KERN_DEBUG "uss720: set_1284_register(%u,0x%02x) failed, status 0x%x\n", 
                       (unsigned int)reg, (unsigned int)val, ret);
-        } else {
+       } else {
 #if 0
-                printk(KERN_DEBUG "uss720: set_1284_register(%u,0x%02x)\n", 
+               printk(KERN_DEBUG "uss720: set_1284_register(%u,0x%02x)\n", 
                       (unsigned int)reg, (unsigned int)val);
 #endif
-        }
+       }
        return ret;
 }
 
@@ -540,28 +540,28 @@ static struct parport_operations parport_uss720_ops =
 
 static void * uss720_probe(struct usb_device *usbdev, unsigned int ifnum)
 {
-        struct usb_interface_descriptor *interface;
-        struct usb_endpoint_descriptor *endpoint;
+       struct usb_interface_descriptor *interface;
+       struct usb_endpoint_descriptor *endpoint;
        struct parport_uss720_private *priv;
        struct parport *pp;
-        int i;
+       int i;
 
-        printk(KERN_DEBUG "uss720: probe: vendor id 0x%x, device id 0x%x\n",
-               usbdev->descriptor.idVendor, usbdev->descriptor.idProduct);
+       printk(KERN_DEBUG "uss720: probe: vendor id 0x%x, device id 0x%x\n",
+              usbdev->descriptor.idVendor, usbdev->descriptor.idProduct);
 
-        if ((usbdev->descriptor.idVendor != 0x047e || usbdev->descriptor.idProduct != 0x1001) &&
+       if ((usbdev->descriptor.idVendor != 0x047e || usbdev->descriptor.idProduct != 0x1001) &&
            (usbdev->descriptor.idVendor != 0x0557 || usbdev->descriptor.idProduct != 0x2001) &&
            (usbdev->descriptor.idVendor != 0x0729 || usbdev->descriptor.idProduct != 0x1284))
-                return NULL;
+               return NULL;
 
-        /* our known interfaces have 3 alternate settings */
-        if (usbdev->actconfig->interface[ifnum].num_altsetting != 3)
-                return NULL;
+       /* our known interfaces have 3 alternate settings */
+       if (usbdev->actconfig->interface[ifnum].num_altsetting != 3)
+               return NULL;
 
-        i = usb_set_interface(usbdev, ifnum, 2);
-        printk(KERN_DEBUG "uss720: set inteface result %d\n", i);
+       i = usb_set_interface(usbdev, ifnum, 2);
+       printk(KERN_DEBUG "uss720: set inteface result %d\n", i);
 
-        interface = &usbdev->actconfig->interface[ifnum].altsetting[2];
+       interface = &usbdev->actconfig->interface[ifnum].altsetting[2];
 
        /*
         * Allocate parport interface 
@@ -579,16 +579,16 @@ static void * uss720_probe(struct usb_device *usbdev, unsigned int ifnum)
        priv->usbdev = usbdev;
        pp->modes = PARPORT_MODE_PCSPP | PARPORT_MODE_TRISTATE | PARPORT_MODE_EPP | PARPORT_MODE_ECP | PARPORT_MODE_COMPAT;
 
-        /* set the USS720 control register to manual mode, no ECP compression, enable all ints */
-        set_1284_register(pp, 7, 0x00);
+       /* set the USS720 control register to manual mode, no ECP compression, enable all ints */
+       set_1284_register(pp, 7, 0x00);
        set_1284_register(pp, 6, 0x30);  /* PS/2 mode */
        set_1284_register(pp, 2, 0x0c);
-        /* debugging */
-        get_1284_register(pp, 0, NULL);
-        printk("uss720: reg: %02x %02x %02x %02x %02x %02x %02x\n",
-               priv->reg[0], priv->reg[1], priv->reg[2], priv->reg[3], priv->reg[4], priv->reg[5], priv->reg[6]);
+       /* debugging */
+       get_1284_register(pp, 0, NULL);
+       printk("uss720: reg: %02x %02x %02x %02x %02x %02x %02x\n",
+              priv->reg[0], priv->reg[1], priv->reg[2], priv->reg[3], priv->reg[4], priv->reg[5], priv->reg[6]);
 
-        endpoint = &interface->endpoint[2];
+       endpoint = &interface->endpoint[2];
        printk(KERN_DEBUG "uss720: epaddr %d interval %d\n", endpoint->bEndpointAddress, endpoint->bInterval);
 #if 0
        priv->irqpipe = usb_rcvctrlpipe(usbdev, endpoint->bEndpointAddress);
@@ -600,11 +600,11 @@ static void * uss720_probe(struct usb_device *usbdev, unsigned int ifnum)
                goto probe_abort_port;
        }
 #endif
-        parport_proc_register(pp);
-        parport_announce_port(pp);
+       parport_proc_register(pp);
+       parport_announce_port(pp);
 
        MOD_INC_USE_COUNT;
-        return pp;
+       return pp;
 
 probe_abort_port:
        parport_unregister_port(pp);
@@ -619,7 +619,7 @@ static void uss720_disconnect(struct usb_device *usbdev, void *ptr)
        struct parport_uss720_private *priv = pp->private_data;
 
        usb_release_irq(usbdev, priv->irqhandle, priv->irqpipe);
-        priv->usbdev = NULL;
+       priv->usbdev = NULL;
        parport_proc_unregister(pp);
        parport_unregister_port(pp);
        kfree(priv);
@@ -627,10 +627,10 @@ static void uss720_disconnect(struct usb_device *usbdev, void *ptr)
 }
 
 static struct usb_driver uss720_driver = {
-        "uss720",
-        uss720_probe,
-        uss720_disconnect,
-        { NULL, NULL }
+       "uss720",
+       uss720_probe,
+       uss720_disconnect,
+       { NULL, NULL }
 };
 
 /* --------------------------------------------------------------------- */
@@ -643,7 +643,7 @@ static int __init uss720_init(void)
        if (usb_register(&uss720_driver) < 0)
                return -1;
 
-        printk(KERN_INFO "uss720: USB<->IEEE1284 cable driver v0.4 registered.\n"
+       printk(KERN_INFO "uss720: USB<->IEEE1284 cable driver v0.4 registered.\n"
               KERN_INFO "uss720: (C) 1999 by Thomas Sailer, <sailer@ife.ee.ethz.ch>\n");
        return 0;
 }