diff -urN -X dontdiff /usr4/linux-2.4.21/linux-2.4.21/Makefile /usr4/linux-2.4.21.32/linux-2.4.21/Makefile --- /usr4/linux-2.4.21/linux-2.4.21/Makefile 2005-11-04 20:52:17.000000000 -0700 +++ /usr4/linux-2.4.21.32/linux-2.4.21/Makefile 2005-10-29 15:58:46.000000000 -0600 @@ -17,9 +17,10 @@ FINDHPATH = $(HPATH)/asm $(HPATH)/linux $(HPATH)/scsi $(HPATH)/net $(HPATH)/math-emu HOSTCC = gcc -HOSTCFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer +HOSTCFLAGS = -Wall -Wstrict-prototypes -O3 -fomit-frame-pointer -CROSS_COMPILE = /tools.3.2/bin/arm-linux- +#CROSS_COMPILE = /usr/local/arm/bin/arm-linux- +CROSS_COMPILE = /mnt/hdb4/usr/local/buildroot/build_arm/staging_dir/bin/arm-linux- # # Include the make variables (CC, etc...) @@ -183,6 +184,7 @@ DRIVERS-$(CONFIG_TC) += drivers/tc/tc.a DRIVERS-$(CONFIG_USB) += drivers/usb/usbdrv.o DRIVERS-$(CONFIG_INPUT) += drivers/input/inputdrv.o +DRIVERS-$(CONFIG_MMC) += drivers/mmc/mmc.o DRIVERS-$(CONFIG_HIL) += drivers/hil/hil.o DRIVERS-$(CONFIG_I2O) += drivers/message/i2o/i2o.o DRIVERS-$(CONFIG_IRDA) += drivers/net/irda/irda.o @@ -571,3 +573,4 @@ . scripts/mkversion > .version ; \ rpm -ta $(TOPDIR)/../$(KERNELPATH).tar.gz ; \ rm $(TOPDIR)/../$(KERNELPATH).tar.gz + diff -urN -X dontdiff /usr4/linux-2.4.21/linux-2.4.21/arch/arm/Makefile /usr4/linux-2.4.21.32/linux-2.4.21/arch/arm/Makefile --- /usr4/linux-2.4.21/linux-2.4.21/arch/arm/Makefile 2005-11-04 20:52:11.000000000 -0700 +++ /usr4/linux-2.4.21.32/linux-2.4.21/arch/arm/Makefile 2005-03-24 10:13:58.000000000 -0700 @@ -50,9 +50,9 @@ tune-$(CONFIG_CPU_SA110) :=-mtune=strongarm110 tune-$(CONFIG_CPU_SA1100) :=-mtune=strongarm1100 -CFLAGS_BOOT :=$(apcs-y) $(arch-y) $(tune-y) -mshort-load-bytes -msoft-float -Uarm -CFLAGS +=$(apcs-y) $(arch-y) $(tune-y) -mshort-load-bytes -msoft-float -Uarm -AFLAGS +=$(apcs-y) $(arch-y) -mno-fpu -msoft-float +CFLAGS_BOOT :=$(apcs-y) $(arch-y) $(tune-y) -msoft-float -Uarm +CFLAGS +=$(apcs-y) $(arch-y) $(tune-y) -msoft-float -Uarm +AFLAGS +=$(apcs-y) $(arch-y) -msoft-float ifeq ($(CONFIG_CPU_26),y) PROCESSOR := armo diff -urN -X dontdiff /usr4/linux-2.4.21/linux-2.4.21/arch/arm/config.in /usr4/linux-2.4.21.32/linux-2.4.21/arch/arm/config.in --- /usr4/linux-2.4.21/linux-2.4.21/arch/arm/config.in 2005-11-04 20:52:16.000000000 -0700 +++ /usr4/linux-2.4.21.32/linux-2.4.21/arch/arm/config.in 2005-10-29 17:47:53.000000000 -0600 @@ -182,6 +182,7 @@ if [ "$CONFIG_ARCH_ZIPLINE" = "y" ]; then bool ' 90MHz' CONFIG_ZIPLINE_90MHZ + bool ' EP72xx ROM boot' CONFIG_EP72XX_ROM_BOOT fi endmenu @@ -637,6 +638,8 @@ fi fi +source drivers/mmc/Config.in + source drivers/media/Config.in source fs/Config.in @@ -683,6 +686,7 @@ "$CONFIG_ARCH_TBOX" = "y" -o \ "$CONFIG_ARCH_SHARK" = "y" -o \ "$CONFIG_ARCH_SA1100" = "y" -o \ + "$CONFIG_ARCH_ZIPLINE" = "y" -o \ "$CONFIG_PCI" = "y" ]; then mainmenu_option next_comment comment 'Sound' diff -urN -X dontdiff /usr4/linux-2.4.21/linux-2.4.21/arch/arm/def-configs/zipline /usr4/linux-2.4.21.32/linux-2.4.21/arch/arm/def-configs/zipline --- /usr4/linux-2.4.21/linux-2.4.21/arch/arm/def-configs/zipline 1969-12-31 17:00:00.000000000 -0700 +++ /usr4/linux-2.4.21.32/linux-2.4.21/arch/arm/def-configs/zipline 2005-10-29 15:56:44.000000000 -0600 @@ -0,0 +1,815 @@ +# +# Automatically generated by make menuconfig: don't edit +# +CONFIG_ARM=y +# CONFIG_EISA is not set +# CONFIG_SBUS is not set +# CONFIG_MCA is not set +CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set +# CONFIG_GENERIC_BUST_SPINLOCK is not set +# CONFIG_GENERIC_ISA_DMA is not set + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +# CONFIG_OBSOLETE is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +CONFIG_KMOD=y + +# +# System Type +# +# CONFIG_ARCH_ANAKIN is not set +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +CONFIG_ARCH_CLPS711X=y +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_CAMELOT is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_OMAHA is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_MX1ADS is not set +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_RISCSTATION is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_SHARK is not set +# CONFIG_ARCH_AT91RM9200 is not set + +# +# Archimedes/A5000 Implementations +# +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set + +# +# Footbridge Implementations +# +# CONFIG_ARCH_CATS is not set +# CONFIG_ARCH_PERSONAL_SERVER is not set +# CONFIG_ARCH_EBSA285_ADDIN is not set +# CONFIG_ARCH_EBSA285_HOST is not set +# CONFIG_ARCH_NETWINDER is not set + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ACCELENT is not set +# CONFIG_SA1100_ASSABET is not set +# CONFIG_ASSABET_NEPONSET is not set +# CONFIG_SA1100_ADSAGC is not set +# CONFIG_SA1100_ADSBITSY is not set +# CONFIG_SA1100_ADSBITSYPLUS is not set +# CONFIG_SA1100_BRUTUS is not set +# CONFIG_SA1100_CEP is not set +# CONFIG_SA1100_CERF is not set +# CONFIG_SA1100_H3100 is not set +# CONFIG_SA1100_H3600 is not set +# CONFIG_SA1100_H3800 is not set +# CONFIG_SA1100_H3XXX is not set +# CONFIG_H3600_SLEEVE is not set +# CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FLEXANET is not set +# CONFIG_SA1100_FREEBIRD is not set +# CONFIG_SA1100_FRODO is not set +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_GRAPHICSMASTER is not set +# CONFIG_SA1100_HACKKIT is not set +# CONFIG_SA1100_BADGE4 is not set +# CONFIG_SA1100_JORNADA720 is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_ITSY is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_OMNIMETER is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_PT_SYSTEM3 is not set +# CONFIG_SA1100_SHANNON is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_SIMPAD is not set +# CONFIG_SA1100_SIMPUTER is not set +# CONFIG_SA1100_PFS168 is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_YOPY is not set +# CONFIG_SA1100_USB is not set +# CONFIG_SA1100_USB_NETLINK is not set +# CONFIG_SA1100_USB_CHAR is not set +# CONFIG_SA1100_SSP is not set + +# +# AT91RM9200 Implementations +# +# CONFIG_ARCH_AT91RM9200DK is not set + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_AUTCPU12 is not set +# CONFIG_ARCH_CDB89712 is not set +# CONFIG_ARCH_CLEP7312 is not set +# CONFIG_ARCH_EDB7211 is not set +# CONFIG_ARCH_FORTUNET is not set +# CONFIG_ARCH_GUIDEA07 is not set +# CONFIG_ARCH_P720T is not set +CONFIG_ARCH_ZIPLINE=y +# CONFIG_ARCH_EP7211 is not set +# CONFIG_ARCH_EP7212 is not set +CONFIG_ZIPLINE_90MHZ=y +CONFIG_EP72XX_ROM_BOOT=y +# CONFIG_ARCH_ACORN is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +CONFIG_CPU_ARM720T=y +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM922T is not set +# CONFIG_PLD is not set +# CONFIG_CPU_ARM926T is not set +# CONFIG_CPU_ARM1020 is not set +# CONFIG_CPU_ARM1026 is not set +# CONFIG_CPU_SA110 is not set +# CONFIG_CPU_SA1100 is not set +# CONFIG_CPU_32v3 is not set +CONFIG_CPU_32v4=y +# CONFIG_ARM_THUMB is not set +# CONFIG_DISCONTIGMEM is not set + +# +# General setup +# +# CONFIG_PCI is not set +# CONFIG_ISA is not set +# CONFIG_ISA_DMA is not set +# CONFIG_ZBOOT_ROM is not set +CONFIG_ZBOOT_ROM_TEXT=0 +CONFIG_ZBOOT_ROM_BSS=0 +# CONFIG_HOTPLUG is not set +# CONFIG_PCMCIA is not set +CONFIG_NET=y +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_NWFPE_XP is not set +# CONFIG_FPE_FASTFPE is not set +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +# CONFIG_BINFMT_AOUT is not set +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +# CONFIG_PM is not set +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="ramdisk_size=6144" +CONFIG_ALIGNMENT_TRAP=y + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=m +CONFIG_MTD_DEBUG=y +CONFIG_MTD_DEBUG_VERBOSE=3 +# CONFIG_MTD_PARTITIONS is not set +# CONFIG_MTD_CONCAT is not set +# CONFIG_MTD_REDBOOT_PARTS is not set +# CONFIG_MTD_CMDLINE_PARTS is not set +# CONFIG_MTD_AFS_PARTS is not set +CONFIG_MTD_CHAR=m +CONFIG_MTD_BLOCK=m +# CONFIG_MTD_BLOCK_RO is not set +# CONFIG_FTL is not set +# CONFIG_NFTL is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=m +CONFIG_MTD_JEDECPROBE=m +CONFIG_MTD_GEN_PROBE=m +# CONFIG_MTD_CFI_ADV_OPTIONS is not set +CONFIG_MTD_CFI_INTELEXT=m +CONFIG_MTD_CFI_AMDSTD=m +CONFIG_MTD_CFI_STAA=m +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set +# CONFIG_MTD_OBSOLETE_CHIPS is not set +# CONFIG_MTD_AMDSTD is not set +# CONFIG_MTD_SHARP is not set +# CONFIG_MTD_JEDEC is not set + +# +# Mapping drivers for chip access +# +CONFIG_MTD_PHYSMAP=m +CONFIG_MTD_PHYSMAP_START=FB000000 +CONFIG_MTD_PHYSMAP_LEN=200000 +CONFIG_MTD_PHYSMAP_BUSWIDTH=2 +# CONFIG_MTD_NORA is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_CDB89712 is not set +# CONFIG_MTD_SA1100 is not set +# CONFIG_MTD_DC21285 is not set +# CONFIG_MTD_IQ80310 is not set +# CONFIG_MTD_EPXA10DB is not set +# CONFIG_MTD_FORTUNET is not set +# CONFIG_MTD_AUTCPU12 is not set +# CONFIG_MTD_EDB7312 is not set +# CONFIG_MTD_IMPA7 is not set +# CONFIG_MTD_CEIVA is not set +# CONFIG_MTD_PCI is not set +# CONFIG_MTD_PCMCIA is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLKMTD is not set +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOCPROBE is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set +# CONFIG_ISAPNP is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_CISS_SCSI_TAPE is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_UMEM is not set +# CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=4096 +CONFIG_BLK_DEV_INITRD=y +# CONFIG_BLK_STATS is not set + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set +# CONFIG_BLK_DEV_MD is not set +# CONFIG_MD_LINEAR is not set +# CONFIG_MD_RAID0 is not set +# CONFIG_MD_RAID1 is not set +# CONFIG_MD_RAID5 is not set +# CONFIG_MD_MULTIPATH is not set +# CONFIG_BLK_DEV_LVM is not set + +# +# Networking options +# +CONFIG_PACKET=y +CONFIG_PACKET_MMAP=y +# CONFIG_NETLINK_DEV is not set +# CONFIG_NETFILTER is not set +# CONFIG_FILTER is not set +CONFIG_UNIX=y +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set +# CONFIG_ATM is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set + +# +# Appletalk devices +# +# CONFIG_DEV_APPLETALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_ETHERTAP is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +# CONFIG_ARM_AM79C961A is not set +# CONFIG_CS89x0 is not set +# CONFIG_SUNLANCE is not set +# CONFIG_SUNBMAC is not set +# CONFIG_SUNQE is not set +# CONFIG_SUNGEM is not set +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_LANCE is not set +# CONFIG_NET_VENDOR_SMC is not set +# CONFIG_NET_VENDOR_RACAL is not set +# CONFIG_NET_ISA is not set +# CONFIG_NET_PCI is not set +# CONFIG_NET_POCKET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_DL2K is not set +# CONFIG_E1000 is not set +# CONFIG_MYRI_SBUS is not set +# CONFIG_NS83820 is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_R8169 is not set +# CONFIG_SK98LIN is not set +# CONFIG_TIGON3 is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PLIP is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +CONFIG_NET_RADIO=y +# CONFIG_STRIP is not set +# CONFIG_WAVELAN is not set +# CONFIG_ARLAN is not set +# CONFIG_AIRONET4500 is not set +# CONFIG_AIRONET4500_NONCS is not set +# CONFIG_AIRONET4500_PROC is not set +# CONFIG_HERMES is not set +# CONFIG_NET_WIRELESS is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +# CONFIG_IRDA is not set + +# +# ATA/ATAPI/MFM/RLL support +# +# CONFIG_IDE is not set +# CONFIG_BLK_DEV_IDE_MODES is not set +# CONFIG_BLK_DEV_HD is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# Synchronous Serial Interface +# +# CONFIG_SSI is not set +# CONFIG_SSI_CLPS711X is not set +# CONFIG_SSI_JUNO is not set + +# +# I2O device support +# +# CONFIG_I2O is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_LAN is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input core support +# +CONFIG_INPUT=y +CONFIG_INPUT_KEYBDEV=m +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set +# CONFIG_INPUT_MX1TS is not set + +# +# MMC/SD +# +CONFIG_MMC=m + +# +# Character devices +# +CONFIG_VT=y +# CONFIG_VT_CONSOLE is not set +# CONFIG_SERIAL is not set +# CONFIG_SERIAL_EXTENDED is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_ANAKIN is not set +# CONFIG_SERIAL_ANAKIN_CONSOLE is not set +# CONFIG_SERIAL_AMBA is not set +# CONFIG_SERIAL_AMBA_CONSOLE is not set +CONFIG_SERIAL_CLPS711X=y +CONFIG_SERIAL_CLPS711X_CONSOLE=y +# CONFIG_SERIAL_21285 is not set +# CONFIG_SERIAL_21285_OLD is not set +# CONFIG_SERIAL_21285_CONSOLE is not set +# CONFIG_SERIAL_UART00 is not set +# CONFIG_SERIAL_UART00_CONSOLE is not set +# CONFIG_SERIAL_SA1100 is not set +# CONFIG_SERIAL_SA1100_CONSOLE is not set +# CONFIG_SERIAL_OMAHA is not set +# CONFIG_SERIAL_OMAHA_CONSOLE is not set +# CONFIG_SERIAL_AT91 is not set +# CONFIG_SERIAL_AT91_CONSOLE is not set +# CONFIG_SERIAL_8250 is not set +# CONFIG_SERIAL_8250_CONSOLE is not set +# CONFIG_SERIAL_8250_EXTENDED is not set +# CONFIG_SERIAL_8250_MANY_PORTS is not set +# CONFIG_SERIAL_8250_SHARE_IRQ is not set +# CONFIG_SERIAL_8250_DETECT_IRQ is not set +# CONFIG_SERIAL_8250_MULTIPORT is not set +# CONFIG_SERIAL_8250_HUB6 is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=256 + +# +# I2C support +# +CONFIG_I2C=m +CONFIG_I2C_ALGOBIT=m +# CONFIG_I2C_PHILIPSPAR is not set +# CONFIG_I2C_ELV is not set +# CONFIG_I2C_VELLEMAN is not set +# CONFIG_SCx200_I2C is not set +# CONFIG_SCx200_ACB is not set +CONFIG_I2C_GUIDE=m +# CONFIG_I2C_ALGOPCF is not set +CONFIG_I2C_CHARDEV=m +CONFIG_I2C_PROC=m +# CONFIG_I2C_DS1307 is not set + +# +# L3 serial bus support +# +# CONFIG_L3 is not set +# CONFIG_L3_ALGOBIT is not set +# CONFIG_L3_BIT_SA1100_GPIO is not set +# CONFIG_L3_SA1111 is not set +# CONFIG_BIT_SA1100_GPIO is not set + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +# CONFIG_MOUSE is not set + +# +# Joysticks +# +# CONFIG_INPUT_GAMEPORT is not set +# CONFIG_INPUT_NS558 is not set +# CONFIG_INPUT_LIGHTNING is not set +# CONFIG_INPUT_PCIGAME is not set +# CONFIG_INPUT_CS461X is not set +# CONFIG_INPUT_EMU10K1 is not set +# CONFIG_INPUT_SERIO is not set +# CONFIG_INPUT_SERPORT is not set +# CONFIG_INPUT_ANALOG is not set +# CONFIG_INPUT_A3D is not set +# CONFIG_INPUT_ADI is not set +# CONFIG_INPUT_COBRA is not set +# CONFIG_INPUT_GF2K is not set +# CONFIG_INPUT_GRIP is not set +# CONFIG_INPUT_INTERACT is not set +# CONFIG_INPUT_TMDC is not set +# CONFIG_INPUT_SIDEWINDER is not set +# CONFIG_INPUT_IFORCE_USB is not set +# CONFIG_INPUT_IFORCE_232 is not set +# CONFIG_INPUT_WARRIOR is not set +# CONFIG_INPUT_MAGELLAN is not set +# CONFIG_INPUT_SPACEORB is not set +# CONFIG_INPUT_SPACEBALL is not set +# CONFIG_INPUT_STINGER is not set +# CONFIG_INPUT_DB9 is not set +# CONFIG_INPUT_GAMECON is not set +# CONFIG_INPUT_TURBOGRAFX is not set +# CONFIG_QIC02_TAPE is not set +# CONFIG_IPMI_HANDLER is not set +# CONFIG_IPMI_PANIC_EVENT is not set +# CONFIG_IPMI_DEVICE_INTERFACE is not set +# CONFIG_IPMI_KCS is not set +# CONFIG_IPMI_WATCHDOG is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_SCx200_GPIO is not set +# CONFIG_AMD_PM768 is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_REISERFS_CHECK is not set +# CONFIG_REISERFS_PROC_INFO is not set +# CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BEFS_DEBUG is not set +# CONFIG_BFS_FS is not set +# CONFIG_EXT3_FS is not set +# CONFIG_JBD is not set +# CONFIG_JBD_DEBUG is not set +# CONFIG_FAT_FS is not set +# CONFIG_MSDOS_FS is not set +# CONFIG_UMSDOS_FS is not set +# CONFIG_VFAT_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_JFFS_FS is not set +# CONFIG_JFFS2_FS is not set +# CONFIG_CRAMFS is not set +# CONFIG_TMPFS is not set +CONFIG_RAMFS=y +# CONFIG_ISO9660_FS is not set +# CONFIG_JOLIET is not set +# CONFIG_ZISOFS is not set +# CONFIG_JFS_FS is not set +# CONFIG_JFS_DEBUG is not set +# CONFIG_JFS_STATISTICS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +# CONFIG_ROMFS_FS is not set +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +# CONFIG_INTERMEZZO_FS is not set +CONFIG_NFS_FS=y +CONFIG_NFS_V3=y +# CONFIG_ROOT_NFS is not set +# CONFIG_NFSD is not set +# CONFIG_NFSD_V3 is not set +# CONFIG_NFSD_TCP is not set +CONFIG_SUNRPC=y +CONFIG_LOCKD=y +CONFIG_LOCKD_V4=y +# CONFIG_SMB_FS is not set +# CONFIG_NCP_FS is not set +# CONFIG_NCPFS_PACKET_SIGNING is not set +# CONFIG_NCPFS_IOCTL_LOCKING is not set +# CONFIG_NCPFS_STRONG is not set +# CONFIG_NCPFS_NFS_NS is not set +# CONFIG_NCPFS_OS2_NS is not set +# CONFIG_NCPFS_SMALLDOS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_NCPFS_EXTRAS is not set +# CONFIG_ZISOFS_FS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_SMB_NLS is not set +# CONFIG_NLS is not set + +# +# Console drivers +# +# CONFIG_VGA_CONSOLE is not set + +# +# Frame-buffer support +# +CONFIG_FB=y +CONFIG_DUMMY_CONSOLE=y +# CONFIG_FB_ACORN is not set +# CONFIG_FB_ANAKIN is not set +CONFIG_FB_CLPS711X=y +# CONFIG_FB_SA1100 is not set +# CONFIG_FB_DBMX1 is not set +# CONFIG_FB_CYBER2000 is not set +# CONFIG_FB_VIRTUAL is not set +CONFIG_FBCON_ADVANCED=y +# CONFIG_FBCON_MFB is not set +# CONFIG_FBCON_CFB2 is not set +CONFIG_FBCON_CFB4=y +# CONFIG_FBCON_CFB8 is not set +# CONFIG_FBCON_CFB16 is not set +# CONFIG_FBCON_CFB24 is not set +# CONFIG_FBCON_CFB32 is not set +# CONFIG_FBCON_AFB is not set +# CONFIG_FBCON_ILBM is not set +# CONFIG_FBCON_IPLAN2P2 is not set +# CONFIG_FBCON_IPLAN2P4 is not set +# CONFIG_FBCON_IPLAN2P8 is not set +# CONFIG_FBCON_MAC is not set +# CONFIG_FBCON_VGA_PLANES is not set +# CONFIG_FBCON_VGA is not set +# CONFIG_FBCON_HGA is not set +CONFIG_FBCON_FONTWIDTH8_ONLY=y +# CONFIG_FBCON_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y + +# +# Sound +# +CONFIG_SOUND=m +# CONFIG_SOUND_ALI5455 is not set +# CONFIG_SOUND_BT878 is not set +# CONFIG_SOUND_CMPCI is not set +# CONFIG_SOUND_EMU10K1 is not set +# CONFIG_MIDI_EMU10K1 is not set +# CONFIG_SOUND_FUSION is not set +# CONFIG_SOUND_CS4281 is not set +# CONFIG_SOUND_ES1370 is not set +# CONFIG_SOUND_ES1371 is not set +# CONFIG_SOUND_ESSSOLO1 is not set +# CONFIG_SOUND_MAESTRO is not set +# CONFIG_SOUND_MAESTRO3 is not set +# CONFIG_SOUND_FORTE is not set +# CONFIG_SOUND_ICH is not set +# CONFIG_SOUND_RME96XX is not set +# CONFIG_SOUND_SONICVIBES is not set +# CONFIG_SOUND_TRIDENT is not set +# CONFIG_SOUND_MSNDCLAS is not set +# CONFIG_SOUND_MSNDPIN is not set +# CONFIG_SOUND_VIA82CXXX is not set +# CONFIG_MIDI_VIA82CXXX is not set +CONFIG_SOUND_7212=m +# CONFIG_SOUND_OSS is not set +# CONFIG_SOUND_VIDC is not set +# CONFIG_SOUND_WAVEARTIST is not set +# CONFIG_SOUND_TVMIXER is not set + +# +# Multimedia Capabilities Port drivers +# +# CONFIG_MCP is not set +# CONFIG_MCP_SA1100 is not set +# CONFIG_MCP_UCB1200 is not set +# CONFIG_MCP_UCB1200_AUDIO is not set +# CONFIG_MCP_UCB1200_TS is not set + +# +# USB support +# +# CONFIG_USB is not set + +# +# Bluetooth support +# +# CONFIG_BLUEZ is not set + +# +# Kernel hacking +# +CONFIG_FRAME_POINTER=y +# CONFIG_DEBUG_USER is not set +# CONFIG_DEBUG_INFO is not set +# CONFIG_NO_PGT_CACHE is not set +# CONFIG_DEBUG_KERNEL is not set +# CONFIG_DEBUG_SLAB is not set +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_WAITQ is not set +# CONFIG_DEBUG_BUGVERBOSE is not set +# CONFIG_DEBUG_ERRORS is not set +# CONFIG_DEBUG_LL is not set +# CONFIG_DEBUG_DC21285_PORT is not set +# CONFIG_DEBUG_CLPS711X_UART2 is not set + +# +# Library routines +# +# CONFIG_ZLIB_INFLATE is not set +# CONFIG_ZLIB_DEFLATE is not set diff -urN -X dontdiff /usr4/linux-2.4.21/linux-2.4.21/arch/arm/defconfig /usr4/linux-2.4.21.32/linux-2.4.21/arch/arm/defconfig --- /usr4/linux-2.4.21/linux-2.4.21/arch/arm/defconfig 2005-11-04 20:52:16.000000000 -0700 +++ /usr4/linux-2.4.21.32/linux-2.4.21/arch/arm/defconfig 2005-10-29 15:56:44.000000000 -0600 @@ -126,6 +126,7 @@ # CONFIG_ARCH_EP7211 is not set # CONFIG_ARCH_EP7212 is not set CONFIG_ZIPLINE_90MHZ=y +CONFIG_EP72XX_ROM_BOOT=y # CONFIG_ARCH_ACORN is not set # CONFIG_FOOTBRIDGE is not set # CONFIG_FOOTBRIDGE_HOST is not set @@ -173,7 +174,7 @@ # CONFIG_BINFMT_MISC is not set # CONFIG_PM is not set # CONFIG_ARTHUR is not set -CONFIG_CMDLINE="" +CONFIG_CMDLINE="ramdisk_size=6144" CONFIG_ALIGNMENT_TRAP=y # @@ -223,15 +224,14 @@ CONFIG_MTD_PHYSMAP_START=FB000000 CONFIG_MTD_PHYSMAP_LEN=200000 CONFIG_MTD_PHYSMAP_BUSWIDTH=2 -CONFIG_MTD_ZIPLINE=m # CONFIG_MTD_NORA is not set # CONFIG_MTD_ARM_INTEGRATOR is not set # CONFIG_MTD_CDB89712 is not set # CONFIG_MTD_SA1100 is not set # CONFIG_MTD_DC21285 is not set # CONFIG_MTD_IQ80310 is not set +# CONFIG_MTD_EPXA10DB is not set # CONFIG_MTD_FORTUNET is not set -# CONFIG_MTD_EPXA is not set # CONFIG_MTD_AUTCPU12 is not set # CONFIG_MTD_EDB7312 is not set # CONFIG_MTD_IMPA7 is not set @@ -276,7 +276,7 @@ # CONFIG_BLK_DEV_LOOP is not set # CONFIG_BLK_DEV_NBD is not set CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=3072 +CONFIG_BLK_DEV_RAM_SIZE=4096 CONFIG_BLK_DEV_INITRD=y # CONFIG_BLK_STATS is not set @@ -362,7 +362,7 @@ # CONFIG_NET_ETHERNET=y # CONFIG_ARM_AM79C961A is not set -CONFIG_CS89x0=y +# CONFIG_CS89x0 is not set # CONFIG_SUNLANCE is not set # CONFIG_SUNBMAC is not set # CONFIG_SUNQE is not set @@ -466,17 +466,23 @@ # # Input core support # -# CONFIG_INPUT is not set -# CONFIG_INPUT_KEYBDEV is not set +CONFIG_INPUT=y +CONFIG_INPUT_KEYBDEV=m # CONFIG_INPUT_MOUSEDEV is not set # CONFIG_INPUT_JOYDEV is not set # CONFIG_INPUT_EVDEV is not set # CONFIG_INPUT_MX1TS is not set # +# MMC/SD +# +CONFIG_MMC=m + +# # Character devices # -# CONFIG_VT is not set +CONFIG_VT=y +# CONFIG_VT_CONSOLE is not set # CONFIG_SERIAL is not set # CONFIG_SERIAL_EXTENDED is not set # CONFIG_SERIAL_NONSTANDARD is not set @@ -511,12 +517,24 @@ # CONFIG_SERIAL_8250_HUB6 is not set CONFIG_SERIAL_CORE=y CONFIG_SERIAL_CORE_CONSOLE=y -# CONFIG_UNIX98_PTYS is not set +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=256 # # I2C support # -# CONFIG_I2C is not set +CONFIG_I2C=m +CONFIG_I2C_ALGOBIT=m +# CONFIG_I2C_PHILIPSPAR is not set +# CONFIG_I2C_ELV is not set +# CONFIG_I2C_VELLEMAN is not set +# CONFIG_SCx200_I2C is not set +# CONFIG_SCx200_ACB is not set +CONFIG_I2C_GUIDE=m +# CONFIG_I2C_ALGOPCF is not set +CONFIG_I2C_CHARDEV=m +CONFIG_I2C_PROC=m +# CONFIG_I2C_DS1307 is not set # # L3 serial bus support @@ -537,6 +555,32 @@ # Joysticks # # CONFIG_INPUT_GAMEPORT is not set +# CONFIG_INPUT_NS558 is not set +# CONFIG_INPUT_LIGHTNING is not set +# CONFIG_INPUT_PCIGAME is not set +# CONFIG_INPUT_CS461X is not set +# CONFIG_INPUT_EMU10K1 is not set +# CONFIG_INPUT_SERIO is not set +# CONFIG_INPUT_SERPORT is not set +# CONFIG_INPUT_ANALOG is not set +# CONFIG_INPUT_A3D is not set +# CONFIG_INPUT_ADI is not set +# CONFIG_INPUT_COBRA is not set +# CONFIG_INPUT_GF2K is not set +# CONFIG_INPUT_GRIP is not set +# CONFIG_INPUT_INTERACT is not set +# CONFIG_INPUT_TMDC is not set +# CONFIG_INPUT_SIDEWINDER is not set +# CONFIG_INPUT_IFORCE_USB is not set +# CONFIG_INPUT_IFORCE_232 is not set +# CONFIG_INPUT_WARRIOR is not set +# CONFIG_INPUT_MAGELLAN is not set +# CONFIG_INPUT_SPACEORB is not set +# CONFIG_INPUT_SPACEBALL is not set +# CONFIG_INPUT_STINGER is not set +# CONFIG_INPUT_DB9 is not set +# CONFIG_INPUT_GAMECON is not set +# CONFIG_INPUT_TURBOGRAFX is not set # CONFIG_QIC02_TAPE is not set # CONFIG_IPMI_HANDLER is not set # CONFIG_IPMI_PANIC_EVENT is not set @@ -612,7 +656,7 @@ # CONFIG_DEVFS_FS is not set # CONFIG_DEVFS_MOUNT is not set # CONFIG_DEVFS_DEBUG is not set -# CONFIG_DEVPTS_FS is not set +CONFIG_DEVPTS_FS=y # CONFIG_QNX4FS_FS is not set # CONFIG_QNX4FS_RW is not set # CONFIG_ROMFS_FS is not set @@ -658,6 +702,76 @@ # CONFIG_NLS is not set # +# Console drivers +# +# CONFIG_VGA_CONSOLE is not set + +# +# Frame-buffer support +# +CONFIG_FB=y +CONFIG_DUMMY_CONSOLE=y +# CONFIG_FB_ACORN is not set +# CONFIG_FB_ANAKIN is not set +CONFIG_FB_CLPS711X=y +# CONFIG_FB_SA1100 is not set +# CONFIG_FB_DBMX1 is not set +# CONFIG_FB_CYBER2000 is not set +# CONFIG_FB_VIRTUAL is not set +CONFIG_FBCON_ADVANCED=y +# CONFIG_FBCON_MFB is not set +# CONFIG_FBCON_CFB2 is not set +CONFIG_FBCON_CFB4=y +# CONFIG_FBCON_CFB8 is not set +# CONFIG_FBCON_CFB16 is not set +# CONFIG_FBCON_CFB24 is not set +# CONFIG_FBCON_CFB32 is not set +# CONFIG_FBCON_AFB is not set +# CONFIG_FBCON_ILBM is not set +# CONFIG_FBCON_IPLAN2P2 is not set +# CONFIG_FBCON_IPLAN2P4 is not set +# CONFIG_FBCON_IPLAN2P8 is not set +# CONFIG_FBCON_MAC is not set +# CONFIG_FBCON_VGA_PLANES is not set +# CONFIG_FBCON_VGA is not set +# CONFIG_FBCON_HGA is not set +CONFIG_FBCON_FONTWIDTH8_ONLY=y +# CONFIG_FBCON_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y + +# +# Sound +# +CONFIG_SOUND=m +# CONFIG_SOUND_ALI5455 is not set +# CONFIG_SOUND_BT878 is not set +# CONFIG_SOUND_CMPCI is not set +# CONFIG_SOUND_EMU10K1 is not set +# CONFIG_MIDI_EMU10K1 is not set +# CONFIG_SOUND_FUSION is not set +# CONFIG_SOUND_CS4281 is not set +# CONFIG_SOUND_ES1370 is not set +# CONFIG_SOUND_ES1371 is not set +# CONFIG_SOUND_ESSSOLO1 is not set +# CONFIG_SOUND_MAESTRO is not set +# CONFIG_SOUND_MAESTRO3 is not set +# CONFIG_SOUND_FORTE is not set +# CONFIG_SOUND_ICH is not set +# CONFIG_SOUND_RME96XX is not set +# CONFIG_SOUND_SONICVIBES is not set +# CONFIG_SOUND_TRIDENT is not set +# CONFIG_SOUND_MSNDCLAS is not set +# CONFIG_SOUND_MSNDPIN is not set +# CONFIG_SOUND_VIA82CXXX is not set +# CONFIG_MIDI_VIA82CXXX is not set +CONFIG_SOUND_7212=m +# CONFIG_SOUND_OSS is not set +# CONFIG_SOUND_VIDC is not set +# CONFIG_SOUND_WAVEARTIST is not set +# CONFIG_SOUND_TVMIXER is not set + +# # Multimedia Capabilities Port drivers # # CONFIG_MCP is not set @@ -680,16 +794,16 @@ # Kernel hacking # CONFIG_FRAME_POINTER=y -CONFIG_DEBUG_USER=y +# CONFIG_DEBUG_USER is not set # CONFIG_DEBUG_INFO is not set # CONFIG_NO_PGT_CACHE is not set -CONFIG_DEBUG_KERNEL=y +# CONFIG_DEBUG_KERNEL is not set # CONFIG_DEBUG_SLAB is not set # CONFIG_MAGIC_SYSRQ is not set # CONFIG_DEBUG_SPINLOCK is not set # CONFIG_DEBUG_WAITQ is not set -CONFIG_DEBUG_BUGVERBOSE=y -CONFIG_DEBUG_ERRORS=y +# CONFIG_DEBUG_BUGVERBOSE is not set +# CONFIG_DEBUG_ERRORS is not set # CONFIG_DEBUG_LL is not set # CONFIG_DEBUG_DC21285_PORT is not set # CONFIG_DEBUG_CLPS711X_UART2 is not set diff -urN -X dontdiff /usr4/linux-2.4.21/linux-2.4.21/arch/arm/kernel/fiq.c /usr4/linux-2.4.21.32/linux-2.4.21/arch/arm/kernel/fiq.c --- /usr4/linux-2.4.21/linux-2.4.21/arch/arm/kernel/fiq.c 2003-06-13 08:51:29.000000000 -0600 +++ /usr4/linux-2.4.21.32/linux-2.4.21/arch/arm/kernel/fiq.c 2005-03-20 10:55:05.000000000 -0700 @@ -122,22 +122,22 @@ register unsigned long tmp, tmp2; __asm__ volatile ( #ifdef CONFIG_CPU_26 - "mov %0, pc - bic %1, %0, #0x3 - orr %1, %1, %3 - teqp %1, #0 @ select FIQ mode - mov r0, r0 - ldmia %2, {r8 - r14} - teqp %0, #0 @ return to SVC mode + "mov %0, pc\n\ + bic %1, %0, #0x3\n\ + orr %1, %1, %3\n\ + teqp %1, #0 @ select FIQ mode\n\ + mov r0, r0\n\ + ldmia %2, {r8 - r14}\n\ + teqp %0, #0 @ return to SVC mode\n\ mov r0, r0" #endif #ifdef CONFIG_CPU_32 - "mrs %0, cpsr - mov %1, %3 - msr cpsr_c, %1 @ select FIQ mode - mov r0, r0 - ldmia %2, {r8 - r14} - msr cpsr_c, %0 @ return to SVC mode + "mrs %0, cpsr\n\ + mov %1, %3\n\ + msr cpsr_c, %1 @ select FIQ mode\n\ + mov r0, r0\n\ + ldmia %2, {r8 - r14}\n\ + msr cpsr_c, %0 @ return to SVC mode\n\ mov r0, r0" #endif : "=&r" (tmp), "=&r" (tmp2) @@ -154,22 +154,22 @@ register unsigned long tmp, tmp2; __asm__ volatile ( #ifdef CONFIG_CPU_26 - "mov %0, pc - bic %1, %0, #0x3 - orr %1, %1, %3 - teqp %1, #0 @ select FIQ mode - mov r0, r0 - stmia %2, {r8 - r14} - teqp %0, #0 @ return to SVC mode + "mov %0, pc\n\ + bic %1, %0, #0x3\n\ + orr %1, %1, %3\n\ + teqp %1, #0 @ select FIQ mode\n\ + mov r0, r0\n\ + stmia %2, {r8 - r14}\n\ + teqp %0, #0 @ return to SVC mode\n\ mov r0, r0" #endif #ifdef CONFIG_CPU_32 - "mrs %0, cpsr - mov %1, %3 - msr cpsr_c, %1 @ select FIQ mode - mov r0, r0 - stmia %2, {r8 - r14} - msr cpsr_c, %0 @ return to SVC mode + "mrs %0, cpsr\n\ + mov %1, %3\n\ + msr cpsr_c, %1 @ select FIQ mode\n\ + mov r0, r0\n\ + stmia %2, {r8 - r14}\n\ + msr cpsr_c, %0 @ return to SVC mode\n\ mov r0, r0" #endif : "=&r" (tmp), "=&r" (tmp2) diff -urN -X dontdiff /usr4/linux-2.4.21/linux-2.4.21/arch/arm/kernel/head-armv.S /usr4/linux-2.4.21.32/linux-2.4.21/arch/arm/kernel/head-armv.S --- /usr4/linux-2.4.21/linux-2.4.21/arch/arm/kernel/head-armv.S 2005-11-04 20:52:11.000000000 -0700 +++ /usr4/linux-2.4.21.32/linux-2.4.21/arch/arm/kernel/head-armv.S 2005-02-23 21:19:08.000000000 -0700 @@ -130,6 +130,13 @@ */ mov r1, #MACH_TYPE_L7200 #endif +#if defined(CONFIG_ARCH_ZIPLINE) +/* + * FIXME - No bootloader, so manually set 'r1' with our architecture number. +*/ + mov r1, #MACH_TYPE_ZIPLINE + +#endif mov r0, #F_BIT | I_BIT | MODE_SVC @ make sure svc mode msr cpsr_c, r0 @ and all irqs disabled diff -urN -X dontdiff /usr4/linux-2.4.21/linux-2.4.21/arch/arm/lib/getuser.S /usr4/linux-2.4.21.32/linux-2.4.21/arch/arm/lib/getuser.S --- /usr4/linux-2.4.21/linux-2.4.21/arch/arm/lib/getuser.S 2002-08-02 18:39:42.000000000 -0600 +++ /usr4/linux-2.4.21.32/linux-2.4.21/arch/arm/lib/getuser.S 2005-03-20 11:02:58.000000000 -0700 @@ -17,7 +17,7 @@ * * Inputs: r0 contains the address * Outputs: r0 is the error code - * r1, r2 contains the zero-extended value + * r1, ip contains the zero-extended value * lr corrupted * * No other registers must be altered. (see include/asm-arm/uaccess.h @@ -42,14 +42,14 @@ .global __get_user_2 __get_user_2: - bic r2, sp, #0x1f00 - bic r2, r2, #0x00ff - ldr r2, [r2, #TSK_ADDR_LIMIT] - sub r2, r2, #2 - cmp r0, r2 + bic ip, sp, #0x1f00 + bic ip, ip, #0x00ff + ldr ip, [ip, #TSK_ADDR_LIMIT] + sub ip, ip, #2 + cmp r0, ip 2: ldrlsbt r1, [r0], #1 -3: ldrlsbt r2, [r0] - orrls r1, r1, r2, lsl #8 +3: ldrlsbt ip, [r0] + orrls r1, r1, ip, lsl #8 movls r0, #0 movls pc, lr b __get_user_bad @@ -68,20 +68,20 @@ .global __get_user_8 __get_user_8: - bic r2, sp, #0x1f00 - bic r2, r2, #0x00ff - ldr r2, [r2, #TSK_ADDR_LIMIT] - sub r2, r2, #8 - cmp r0, r2 + bic ip, sp, #0x1f00 + bic ip, ip, #0x00ff + ldr ip, [ip, #TSK_ADDR_LIMIT] + sub ip, ip, #8 + cmp r0, ip 5: ldrlst r1, [r0], #4 -6: ldrlst r2, [r0] +6: ldrlst ip, [r0] movls r0, #0 movls pc, lr /* fall through */ __get_user_bad_8: - mov r2, #0 + mov ip, #0 __get_user_bad: mov r1, #0 mov r0, #-14 diff -urN -X dontdiff /usr4/linux-2.4.21/linux-2.4.21/arch/arm/lib/putuser.S /usr4/linux-2.4.21.32/linux-2.4.21/arch/arm/lib/putuser.S --- /usr4/linux-2.4.21/linux-2.4.21/arch/arm/lib/putuser.S 2001-10-11 10:04:57.000000000 -0600 +++ /usr4/linux-2.4.21.32/linux-2.4.21/arch/arm/lib/putuser.S 2005-03-20 11:04:05.000000000 -0700 @@ -16,7 +16,7 @@ * __put_user_X * * Inputs: r0 contains the address - * r1, r2 contains the value + * r1, ip contains the value * Outputs: r0 is the error code * lr corrupted * @@ -30,11 +30,11 @@ .global __put_user_1 __put_user_1: - bic r2, sp, #0x1f00 - bic r2, r2, #0x00ff - ldr r2, [r2, #TSK_ADDR_LIMIT] - sub r2, r2, #1 - cmp r0, r2 + bic ip, sp, #0x1f00 + bic ip, ip, #0x00ff + ldr ip, [ip, #TSK_ADDR_LIMIT] + sub ip, ip, #1 + cmp r0, ip 1: strlsbt r1, [r0] movls r0, #0 movls pc, lr @@ -42,11 +42,11 @@ .global __put_user_2 __put_user_2: - bic r2, sp, #0x1f00 - bic r2, r2, #0x00ff - ldr r2, [r2, #TSK_ADDR_LIMIT] - sub r2, r2, #2 - cmp r0, r2 + bic ip, sp, #0x1f00 + bic ip, ip, #0x00ff + ldr ip, [ip, #TSK_ADDR_LIMIT] + sub ip, ip, #2 + cmp r0, ip 2: strlsbt r1, [r0], #1 movls r1, r1, lsr #8 3: strlsbt r1, [r0] @@ -56,11 +56,11 @@ .global __put_user_4 __put_user_4: - bic r2, sp, #0x1f00 - bic r2, r2, #0x00ff - ldr r2, [r2, #TSK_ADDR_LIMIT] - sub r2, r2, #4 - cmp r0, r2 + bic ip, sp, #0x1f00 + bic ip, ip, #0x00ff + ldr ip, [ip, #TSK_ADDR_LIMIT] + sub ip, ip, #4 + cmp r0, ip 4: strlst r1, [r0] movls r0, #0 movls pc, lr @@ -74,7 +74,7 @@ sub ip, ip, #8 cmp r0, ip 5: strlst r1, [r0], #4 -6: strlst r2, [r0] +6: strlst ip, [r0] movls r0, #0 movls pc, lr diff -urN -X dontdiff /usr4/linux-2.4.21/linux-2.4.21/drivers/Makefile /usr4/linux-2.4.21.32/linux-2.4.21/drivers/Makefile --- /usr4/linux-2.4.21/linux-2.4.21/drivers/Makefile 2005-11-04 20:52:16.000000000 -0700 +++ /usr4/linux-2.4.21.32/linux-2.4.21/drivers/Makefile 2005-10-29 15:55:12.000000000 -0600 @@ -6,7 +6,7 @@ # -mod-subdirs := dio hil mtd sbus video macintosh usb input telephony sgi ide \ +mod-subdirs := dio hil mtd sbus video macintosh usb input mmc telephony sgi ide \ message/i2o message/fusion scsi md ieee1394 pnp isdn atm \ fc4 net/hamradio i2c l3 acpi bluetooth serial @@ -29,6 +29,7 @@ subdir-$(CONFIG_PPC32) += macintosh subdir-$(CONFIG_USB) += usb subdir-$(CONFIG_INPUT) += input +subdir-$(CONFIG_MMC) += mmc subdir-$(CONFIG_PHONE) += telephony subdir-$(CONFIG_SGI) += sgi subdir-$(CONFIG_IDE) += ide diff -urN -X dontdiff /usr4/linux-2.4.21/linux-2.4.21/drivers/block/rd.c /usr4/linux-2.4.21.32/linux-2.4.21/drivers/block/rd.c --- /usr4/linux-2.4.21/linux-2.4.21/drivers/block/rd.c 2005-11-04 20:52:16.000000000 -0700 +++ /usr4/linux-2.4.21.32/linux-2.4.21/drivers/block/rd.c 2005-03-14 10:20:41.000000000 -0700 @@ -62,7 +62,7 @@ /* The RAM disk size is now a parameter */ #ifdef CONFIG_ARCH_ZIPLINE -#define NUM_RAMDISKS 1 +#define NUM_RAMDISKS 4 #else #define NUM_RAMDISKS 16 /* This cannot be overridden (yet) */ #endif /* CONFIG_ARCH_ZIPLINE */ @@ -418,6 +418,7 @@ { int i; + if (rd_blocksize > PAGE_SIZE || rd_blocksize < 512 || (rd_blocksize & (rd_blocksize-1))) { diff -urN -X dontdiff /usr4/linux-2.4.21/linux-2.4.21/drivers/char/Config.in /usr4/linux-2.4.21.32/linux-2.4.21/drivers/char/Config.in --- /usr4/linux-2.4.21/linux-2.4.21/drivers/char/Config.in 2005-11-04 20:52:11.000000000 -0700 +++ /usr4/linux-2.4.21.32/linux-2.4.21/drivers/char/Config.in 2005-03-31 09:28:34.000000000 -0700 @@ -4,6 +4,8 @@ mainmenu_option next_comment comment 'Character devices' +# tristate 'Zipit LCD support (for EP7312)' CONFIG_LCD + bool 'Virtual terminal' CONFIG_VT if [ "$CONFIG_VT" = "y" ]; then bool ' Support for console on virtual terminal' CONFIG_VT_CONSOLE diff -urN -X dontdiff /usr4/linux-2.4.21/linux-2.4.21/drivers/char/Makefile /usr4/linux-2.4.21.32/linux-2.4.21/drivers/char/Makefile --- /usr4/linux-2.4.21/linux-2.4.21/drivers/char/Makefile 2005-11-04 20:52:11.000000000 -0700 +++ /usr4/linux-2.4.21.32/linux-2.4.21/drivers/char/Makefile 2005-03-11 11:18:45.000000000 -0700 @@ -18,6 +18,10 @@ obj-y += mem.o tty_io.o n_tty.o tty_ioctl.o raw.o pty.o misc.o random.o + +obj-$(CONFIG_LCD) += lcd_drv.o + + # All of the (potential) objects that export symbols. # This list comes from 'grep -l EXPORT_SYMBOL *.[hc]'. @@ -122,6 +126,10 @@ KEYMAP := defkeymap.o KEYBD += clps711x_keyb.o endif + ifeq ($(CONFIG_ARCH_ZIPLINE),y) + KEYMAP := zipkeymap.o + KEYBD += zipline_keyb.o + endif ifeq ($(CONFIG_SA1100_GRAPHICSCLIENT),y) KEYMAP = gckeymap.o KEYBD += gc_keyb.o @@ -369,5 +377,8 @@ defkeymap.c: defkeymap.map set -e ; loadkeys --mktable $< | sed -e 's/^static *//' > $@ +zipkeymap.c: zipkeymap.map + set -e ; loadkeys --mktable $< | sed -e 's/^static *//' > $@ + qtronixmap.c: qtronixmap.map set -e ; loadkeys --mktable $< | sed -e 's/^static *//' > $@ diff -urN -X dontdiff /usr4/linux-2.4.21/linux-2.4.21/drivers/char/keyboard.c /usr4/linux-2.4.21.32/linux-2.4.21/drivers/char/keyboard.c --- /usr4/linux-2.4.21/linux-2.4.21/drivers/char/keyboard.c 2005-11-04 20:52:11.000000000 -0700 +++ /usr4/linux-2.4.21.32/linux-2.4.21/drivers/char/keyboard.c 2005-03-24 10:28:09.000000000 -0700 @@ -71,8 +71,8 @@ * DEFAULT_REPEAT_TIMEOUT is the timeout from the keypress to the first repeat * DEFAULT_REPEAT_INTERVAL is the timeout between successive repeats */ -#define DEFAULT_REPEAT_TIMEOUT HZ*300/1000 -#define DEFAULT_REPEAT_INTERVAL HZ*30/1000 +#define DEFAULT_REPEAT_TIMEOUT HZ*500/1000 +#define DEFAULT_REPEAT_INTERVAL HZ*50/1000 void (*kbd_ledfunc)(unsigned int led); EXPORT_SYMBOL(handle_scancode); @@ -398,6 +398,8 @@ } rep = 0; out: + {}; + } /* @@ -1063,6 +1065,7 @@ kbd0.modeflags = KBD_DEFMODE; kbd0.kbdmode = VC_XLATE; + for (i = 0 ; i < MAX_NR_CONSOLES ; i++) kbd_table[i] = kbd0; diff -urN -X dontdiff /usr4/linux-2.4.21/linux-2.4.21/drivers/char/zipkeymap.map /usr4/linux-2.4.21.32/linux-2.4.21/drivers/char/zipkeymap.map --- /usr4/linux-2.4.21/linux-2.4.21/drivers/char/zipkeymap.map 1969-12-31 17:00:00.000000000 -0700 +++ /usr4/linux-2.4.21.32/linux-2.4.21/drivers/char/zipkeymap.map 2005-03-24 21:22:58.000000000 -0700 @@ -0,0 +1,384 @@ +# Zipline kernel keymap. This uses 7 modifier combinations. +keymaps 0-2,4-5,8,9,12 +# Change the above line into +# keymaps 0-2,4-6,8,12 +# in case you want the entries +# altgr control keycode 83 = Boot +# altgr control keycode 111 = Boot +# below. +# +# In fact AltGr is used very little, and one more keymap can +# be saved by mapping AltGr to Alt (and adapting a few entries): +# keycode 100 = Alt +# +keycode 1 = Escape grave + alt keycode 1 = bar + alt shift keycode 1 = backslash +keycode 2 = one exclam + alt keycode 2 = Meta_one +keycode 3 = two at at + control keycode 3 = nul + shift control keycode 3 = nul + alt keycode 3 = Meta_two +keycode 4 = three numbersign + control keycode 4 = Escape + alt keycode 4 = Meta_three +keycode 5 = four dollar dollar + control keycode 5 = Control_backslash + alt keycode 5 = Meta_four +keycode 6 = five percent + control keycode 6 = Control_bracketright + alt keycode 6 = Meta_five +keycode 7 = six asciicircum + control keycode 7 = Control_asciicircum + alt keycode 7 = Meta_six +keycode 8 = seven ampersand braceleft + control keycode 8 = Control_underscore + alt keycode 8 = Meta_seven +keycode 9 = eight asterisk bracketleft + control keycode 9 = Delete + alt keycode 9 = Meta_eight +keycode 10 = nine parenleft bracketright + alt keycode 10 = Meta_nine +keycode 11 = zero parenright braceright + alt keycode 11 = Meta_zero +keycode 12 = minus underscore backslash + control keycode 12 = Control_underscore + shift control keycode 12 = Control_underscore + alt keycode 12 = Meta_minus +keycode 13 = equal plus + alt keycode 13 = Meta_equal +keycode 14 = Delete Delete + control keycode 14 = BackSpace + alt keycode 14 = Meta_Delete +keycode 15 = Tab Tab + alt keycode 15 = Tab +keycode 16 = q + alt keycode 16 = one + alt shift keycode 16 = asciitilde +keycode 17 = w + alt keycode 17 = two +keycode 18 = e + alt keycode 18 = three +keycode 19 = r + alt keycode 19 = four +keycode 20 = t + alt keycode 20 = five +keycode 21 = y + alt keycode 21 = six + alt shift keycode 21 = asciicircum +keycode 22 = u + alt keycode 22 = seven +keycode 23 = i + alt keycode 23 = eight +keycode 24 = o + alt keycode 24 = nine +keycode 25 = p + alt keycode 25 = zero +keycode 26 = bracketleft braceleft + control keycode 26 = Escape + alt keycode 26 = Meta_bracketleft +keycode 27 = bracketright braceright asciitilde + control keycode 27 = Control_bracketright + alt keycode 27 = Meta_bracketright +keycode 28 = Return + alt keycode 28 = Meta_Control_m +keycode 29 = Control +keycode 30 = a + alt keycode 30 = dollar +keycode 31 = s + alt keycode 31 = numbersign +keycode 32 = d + alt keycode 32 = ampersand +keycode 33 = f + alt keycode 33 = at +keycode 34 = g + alt keycode 34 = quotedbl +keycode 35 = h + alt keycode 35 = apostrophe +keycode 36 = j + alt keycode 36 = parenleft + alt shift keycode 36 = braceleft +keycode 37 = k + alt keycode 37 = parenright + alt shift keycode 37 = braceright +keycode 38 = l + alt keycode 38 = minus +keycode 39 = semicolon colon + alt keycode 39 = colon +keycode 40 = apostrophe quotedbl + control keycode 40 = Control_g + alt keycode 40 = Meta_apostrophe +keycode 41 = grave asciitilde + control keycode 41 = nul + alt keycode 41 = Meta_grave +keycode 42 = Shift +keycode 43 = backslash bar + control keycode 43 = Control_backslash + alt keycode 43 = Meta_backslash +keycode 44 = z + alt keycode 44 = exclam +keycode 45 = x + alt keycode 45 = slash +keycode 46 = c + alt keycode 46 = plus + control keycode 46 = Control_c +keycode 47 = v + alt keycode 47 = asterisk +keycode 48 = b + alt keycode 48 = equal +keycode 49 = n + alt keycode 49 = underscore +keycode 50 = m + alt keycode 50 = question +keycode 51 = comma less + alt keycode 51 = less + alt shift keycode 51 = bracketleft +keycode 52 = period greater + alt keycode 52 = greater + alt shift keycode 52 = bracketright +keycode 53 = slash question + control keycode 53 = Delete + alt keycode 53 = Meta_slash +keycode 54 = Shift +keycode 55 = KP_Multiply +keycode 56 = Alt +keycode 57 = space space + control keycode 57 = nul + alt keycode 57 = Meta_space +keycode 58 = Caps_Lock +keycode 59 = F1 F11 Console_13 + control keycode 59 = F1 + alt keycode 59 = Console_1 + control alt keycode 59 = Console_1 +keycode 60 = F2 F12 Console_14 + control keycode 60 = F2 + alt keycode 60 = Console_2 + control alt keycode 60 = Console_2 +keycode 61 = F3 F13 Console_15 + control keycode 61 = F3 + alt keycode 61 = Console_3 + control alt keycode 61 = Console_3 +keycode 62 = F4 F14 Console_16 + control keycode 62 = F4 + alt keycode 62 = Console_4 + control alt keycode 62 = Console_4 +keycode 63 = F5 F15 Console_17 + control keycode 63 = F5 + alt keycode 63 = Console_5 + control alt keycode 63 = Console_5 +keycode 64 = F6 F16 Console_18 + control keycode 64 = F6 + alt keycode 64 = Console_6 + control alt keycode 64 = Console_6 +keycode 65 = F7 F17 Console_19 + control keycode 65 = F7 + alt keycode 65 = Console_7 + control alt keycode 65 = Console_7 +keycode 66 = F8 F18 Console_20 + control keycode 66 = F8 + alt keycode 66 = Console_8 + control alt keycode 66 = Console_8 +keycode 67 = F9 F19 Console_21 + control keycode 67 = F9 + alt keycode 67 = Console_9 + control alt keycode 67 = Console_9 +keycode 68 = F10 F20 Console_22 + control keycode 68 = F10 + alt keycode 68 = Console_10 + control alt keycode 68 = Console_10 +keycode 69 = Num_Lock + shift keycode 69 = Bare_Num_Lock +keycode 70 = Scroll_Lock Show_Memory Show_Registers + control keycode 70 = Show_State + alt keycode 70 = Scroll_Lock +keycode 71 = KP_7 + alt keycode 71 = Ascii_7 + altgr keycode 71 = Hex_7 +keycode 72 = Up KP_8 + alt keycode 72 = Prior + altgr keycode 72 = Hex_8 +keycode 73 = KP_9 + alt keycode 73 = Ascii_9 + altgr keycode 73 = Hex_9 +keycode 74 = KP_Subtract +keycode 75 = Left KP_4 + alt keycode 75 = Find + altgr keycode 75 = Hex_4 +keycode 76 = KP_5 + alt keycode 76 = Ascii_5 + altgr keycode 76 = Hex_5 +keycode 77 = Right KP_6 + alt keycode 77 = Select + altgr keycode 77 = Hex_6 +keycode 78 = KP_Add +keycode 79 = KP_1 + alt keycode 79 = Ascii_1 + altgr keycode 79 = Hex_1 +keycode 80 = Down KP_2 + alt keycode 80 = Next + altgr keycode 80 = Hex_2 +keycode 81 = KP_3 + alt keycode 81 = Ascii_3 + altgr keycode 81 = Hex_3 +keycode 82 = KP_0 + alt keycode 82 = Ascii_0 + altgr keycode 82 = Hex_0 +keycode 83 = KP_Period +# altgr control keycode 83 = Boot + control alt keycode 83 = Boot +keycode 84 = Last_Console +keycode 85 = +keycode 86 = less greater bar + alt keycode 86 = Meta_less +keycode 87 = F11 F11 Console_23 + control keycode 87 = F11 + alt keycode 87 = Console_11 + control alt keycode 87 = Console_11 +keycode 88 = F12 F12 Console_24 + control keycode 88 = F12 + alt keycode 88 = Console_12 + control alt keycode 88 = Console_12 +keycode 89 = +keycode 90 = +keycode 91 = +keycode 92 = +keycode 93 = +keycode 94 = +keycode 95 = +keycode 96 = KP_Enter +keycode 97 = Control +keycode 98 = KP_Divide +keycode 99 = Control_backslash + control keycode 99 = Control_backslash + alt keycode 99 = Control_backslash +keycode 100 = AltGr +keycode 101 = Break +keycode 102 = Find +keycode 103 = Up +keycode 104 = Prior + shift keycode 104 = Scroll_Backward +keycode 105 = Left + alt keycode 105 = Decr_Console +keycode 106 = Right + alt keycode 106 = Incr_Console +keycode 107 = Select +keycode 108 = Down +keycode 109 = Next + shift keycode 109 = Scroll_Forward +keycode 110 = Insert +keycode 111 = Remove +# altgr control keycode 111 = Boot + control alt keycode 111 = Boot +keycode 112 = Macro +keycode 113 = F13 +keycode 114 = F14 +keycode 115 = Help +keycode 116 = Do +keycode 117 = F17 +keycode 118 = KP_MinPlus +keycode 119 = Pause +keycode 120 = +keycode 121 = +keycode 122 = +keycode 123 = +keycode 124 = +keycode 125 = +keycode 126 = +keycode 127 = +#string F1 = "\033[[A" +#string F2 = "\033[[B" +#string F3 = "\033[[C" +string F4 = "\033[[D" +string F5 = "\033[[E" +string F6 = "\033[17~" +string F7 = "\033[18~" +string F8 = "\033[19~" +string F9 = "\033[20~" +string F10 = "\033[21~" +string F11 = "\033[23~" +string F12 = "\033[24~" +string F13 = "\033[25~" +string F14 = "\033[26~" +string F15 = "\033[28~" +string F16 = "\033[29~" +string F17 = "\033[31~" +string F18 = "\033[32~" +string F19 = "\033[33~" +string F20 = "\033[34~" +string Find = "\033[1~" +string Insert = "\033[2~" +string Remove = "\033[3~" +string Select = "\033[4~" +string Prior = "\033[5~" +string Next = "\033[6~" +string Macro = "\033[M" +string Pause = "\033[P" +compose '`' 'A' to 'À' +compose '`' 'a' to 'à' +compose '\'' 'A' to 'Á' +compose '\'' 'a' to 'á' +compose '^' 'A' to 'Â' +compose '^' 'a' to 'â' +compose '~' 'A' to 'Ã' +compose '~' 'a' to 'ã' +compose '"' 'A' to 'Ä' +compose '"' 'a' to 'ä' +compose 'O' 'A' to 'Å' +compose 'o' 'a' to 'å' +compose '0' 'A' to 'Å' +compose '0' 'a' to 'å' +compose 'A' 'A' to 'Å' +compose 'a' 'a' to 'å' +compose 'A' 'E' to 'Æ' +compose 'a' 'e' to 'æ' +compose ',' 'C' to 'Ç' +compose ',' 'c' to 'ç' +compose '`' 'E' to 'È' +compose '`' 'e' to 'è' +compose '\'' 'E' to 'É' +compose '\'' 'e' to 'é' +compose '^' 'E' to 'Ê' +compose '^' 'e' to 'ê' +compose '"' 'E' to 'Ë' +compose '"' 'e' to 'ë' +compose '`' 'I' to 'Ì' +compose '`' 'i' to 'ì' +compose '\'' 'I' to 'Í' +compose '\'' 'i' to 'í' +compose '^' 'I' to 'Î' +compose '^' 'i' to 'î' +compose '"' 'I' to 'Ï' +compose '"' 'i' to 'ï' +compose '-' 'D' to 'Ð' +compose '-' 'd' to 'ð' +compose '~' 'N' to 'Ñ' +compose '~' 'n' to 'ñ' +compose '`' 'O' to 'Ò' +compose '`' 'o' to 'ò' +compose '\'' 'O' to 'Ó' +compose '\'' 'o' to 'ó' +compose '^' 'O' to 'Ô' +compose '^' 'o' to 'ô' +compose '~' 'O' to 'Õ' +compose '~' 'o' to 'õ' +compose '"' 'O' to 'Ö' +compose '"' 'o' to 'ö' +compose '/' 'O' to 'Ø' +compose '/' 'o' to 'ø' +compose '`' 'U' to 'Ù' +compose '`' 'u' to 'ù' +compose '\'' 'U' to 'Ú' +compose '\'' 'u' to 'ú' +compose '^' 'U' to 'Û' +compose '^' 'u' to 'û' +compose '"' 'U' to 'Ü' +compose '"' 'u' to 'ü' +compose '\'' 'Y' to 'Ý' +compose '\'' 'y' to 'ý' +compose 'T' 'H' to 'Þ' +compose 't' 'h' to 'þ' +compose 's' 's' to 'ß' +compose '"' 'y' to 'ÿ' +compose 's' 'z' to 'ß' +compose 'i' 'j' to 'ÿ' diff -urN -X dontdiff /usr4/linux-2.4.21/linux-2.4.21/drivers/char/zipline_keyb.c /usr4/linux-2.4.21.32/linux-2.4.21/drivers/char/zipline_keyb.c --- /usr4/linux-2.4.21/linux-2.4.21/drivers/char/zipline_keyb.c 1969-12-31 17:00:00.000000000 -0700 +++ /usr4/linux-2.4.21.32/linux-2.4.21/drivers/char/zipline_keyb.c 2005-09-17 20:55:06.000000000 -0600 @@ -0,0 +1,377 @@ +/* + * drivers/char/zipline_keyb.c + * + * Copyright (C) 2005 Ken McGuire + * + * Keyboard driver for Zipit IM device, based on drivers/char/clps711x_keyb.c + * Lots trimmed since this is a reduction in scope from the original. + * + * * Copyright (C) 2001 Thomas Gleixner + * + * based on drivers/edb7211_keyb.c, which is copyright (C) 2000 Bluemug Inc. + * + * Keyboard driver for ARM Linux on EP7xxx and CS89712 processors + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. See the file COPYING + * in the main directory of this archive for more details. + * + * + * Hardware: + * + * matrix scan keyboards based on EP7209,7211,7212,7312,Zipit (zipline) and CS89712 + * on chip keyboard scanner. + * Adaption for different machines is done in init function. + * + * Basic Function: + * Changed because Zipit was stupid in their keyboard design. The Standby switch is + * attached to PA:7 pulled to vcc by a resistor and connedted to gnd when the lid + * is closed. This causes an interrupt to always occur if the keyboard is set up as + * below. I left this description in. + * + * Basicly the driver is interrupt driven. It sets all column drivers + * high. If any key is pressed, a interrupt occures. Now a seperate scan of + * each column is done. This scan is timer based, because we use a keyboard + * interface with decoupling capacitors (neccecary if you want to survive + * EMC compliance tests). Always one line is set high. When next timer event + * occures the scan data on port A are valid. This makes also sure, that no + * spurious keys are scanned. The kbd int on these CPU's is not deglitched! + * After scanning all columns, we switch back to int mode, if no key is + * pressed. If any is pressed we reschedule the scan within a programmable + * delay. If we would switch back to interrupt mode as long as a key is pressed, + * we come right back to the interrupt, because the int. is level triggered ! + * The timer based scan of the seperate columns can also be done in one + * timer event (set fastscan to 1). + * + * Summary: + * The design of this keyboard controller chip is stupid at all ! + * (I don't think so... (km)) + * + * Matrix translation: + * The matrix translation table is based on standard XT scancodes. + * + * HandyKey: + * Removed... + * + * Read access gives back the actual state of the keyboard scan function + * k:1 Disabled + * k:0 Enabled-- No change + * Write access has two functions. Changing the user function mode and applying + * a different scancode translation table. + * Syntax is: k:1 disable keyboard scan timer function + * k:0 no change + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include + + void zipline_kbd_init_hw(void); + +/* + * Values for the keyboard column scan control register. + */ +#define KBSC_HI 0x0 /* All driven high */ +#define KBSC_LO 0x1 /* All driven low */ +#define KBSC_X 0x2 /* All high impedance */ +#define KBSC_COL0 0x8 /* Column 0 high, others high impedance */ +#define KBSC_COL1 0x9 /* Column 1 high, others high impedance */ +#define KBSC_COL2 0xa /* Column 2 high, others high impedance */ +#define KBSC_COL3 0xb /* Column 3 high, others high impedance */ +#define KBSC_COL4 0xc /* Column 4 high, others high impedance */ +#define KBSC_COL5 0xd /* Column 5 high, others high impedance */ +#define KBSC_COL6 0xe /* Column 6 high, others high impedance */ +#define KBSC_COL7 0xf /* Column 7 high, others high impedance */ + + +/* Simple translation table for the SysRq keys */ + +#ifdef CONFIG_MAGIC_SYSRQ +unsigned char zipline_kbd_sysrq_xlate[128] = + "\000\0331234567890-=\177\t" /* 0x00 - 0x0f */ + "qwertyuiop[]\r\000as" /* 0x10 - 0x1f */ + "dfghjkl;'`\000\\zxcv" /* 0x20 - 0x2f */ + "bnm,./\000*\000 \000\201\202\203\204\205" /* 0x30 - 0x3f */ + "\206\207\210\211\212\000\000789-456+1" /* 0x40 - 0x4f */ + "230\177\000\000\213\214\000\000\000\000\000\000\000\000\000\000" /* 0x50 - 0x5f */ + "\r\000/"; /* 0x60 - 0x6f */ +#endif + +/* + * This table maps row/column keyboard matrix positions to XT scancodes. + * It's a default table, which can be overriden by writing to proc/keyboard + */ + +static unsigned char zip_scancode[64] = +{ +/* Column: + Row 0 1 2 3 4 5 6 7 */ +/* RtAr UpAr LtAr P2 P1 Stop Play Prev */ +/* A0 */ 0x4d, 0x48, 0x4b, 0x3c, 0x3b, 0x02, 0x03, 0x04, +/* P DnAr O(Oh) P3 Zip! /-/ Mute Next */ +/* A1 */ 0x19, 0x50, 0x18, 0x3d, 0x05, 0x00, 0x06, 0x0f, +/* I U Y T R E W Q */ +/* A2 */ 0x17, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x10, +/* K J H G F D S A */ +/* A3 */ 0x25, 0x24, 0x23, 0x22, 0x21, 0x20, 0x1f, 0x1e, +/* M N B V C X Z ... */ +/* A4 */ 0x32, 0x31, 0x30, 0x2f, 0x2e, 0x2d, 0x2c, 0x01, +/* /-/ Menu . , Spc Shft Ctrl Alt */ +/* A5 */ 0x00, 0x07, 0x34, 0x33, 0x39, 0x2a, 0x1d, 0x38, +/* /-/ ; Entr BS L /-/ /-/ /-/ */ +/* A6 */ 0x00, 0x27, 0x1c, 0x0e, 0x26, 0x00, 0x00, 0x00, +/* /-/ /-/ /-/ /-/ /-/ /-/ /-/ /-/ */ +/* A7 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +static int keys[8]; +static int new_keys[8]; +static int previous_keys[8]; + +static int fastscan; +static int scan_interval; +static int scan_delay; +static int last_column; +static int key_is_pressed; + +static unsigned char *act_scancode; + +static int keyb_ena; + +static struct tq_struct kbd_process_task; +static struct timer_list zipline_kbd_timer; +static struct proc_dir_entry *zipline_keyboard_proc_entry = NULL; + +/* + * Translate a raw keycode to an XT keyboard scancode. + */ +static int zipline_translate(unsigned char scancode, unsigned char *keycode, + char raw_mode) +{ + *keycode = act_scancode[scancode]; + + return 1; +} + + +/* +* Check for key and process it +*/ +void inline zipline_check(int col, int row) { + + int scode, down; + unsigned char kcode; + + scode = (row<<3) + col; + down = keys[col]>>row & 0x01; + kcode = act_scancode[scode]; + + if(!kcode) + return; + + handle_scancode(scode, down); + + return; +} + + +/* + * Process the new key data + */ +static void zipline_kbd_process(void* data) +{ + int col,row,res; + + for (col = 0; col < 8; col++) { + if (( res = previous_keys[col] ^ keys[col]) == 0) + continue; + for(row = 0; row < 8; row++) { + if ( ((res >> row) & 0x01) != 0) + zipline_check(col,row); + } + } + /* Update the state variables. */ + memcpy(previous_keys, keys, 8 * sizeof(int)); + + +} + +static char zipline_unexpected_up(unsigned char scancode) +{ + return 0200; +} + +/* +* Handle timer event, while in pollmode +*/ +static void zipline_kbd_timeout(unsigned long data) +{ + int i; + /* + * read bits of actual column or all columns in fastscan-mode + */ + for (i = 0; i < 8; i++) { + new_keys[last_column - KBSC_COL0] = clps_readb(PADR) & 0x7f; + key_is_pressed |= new_keys[last_column - KBSC_COL0]; + last_column = last_column < KBSC_COL7 ? last_column + 1 : KBSC_COL0; + clps_writel( (clps_readl(SYSCON1) & ~SYSCON1_KBDSCANMASK) + | last_column, SYSCON1); + /* + * For fastscan, apply a short delay to settle scanlines + * else break and wait for next timeout + */ + if (fastscan) + udelay(5); + else + break; + } + + /* + * reschedule scan + */ + if (last_column == KBSC_COL0) { + zipline_kbd_timer.expires = jiffies + scan_interval; + add_timer(&zipline_kbd_timer); + key_is_pressed = 0; + memcpy(keys, new_keys, 8 * sizeof(int)); + for (i = 0; i < 8; i++) { + if (previous_keys[i] != keys[i]) { + queue_task(&kbd_process_task, &tq_timer); + return; + } + } + } else { + zipline_kbd_timer.expires = jiffies + scan_delay; + add_timer(&zipline_kbd_timer); + } +} + +static int zipline_kbd_proc_keyboard_read(char *page, char **start, off_t off, + int count, int *eof, void *data) +{ + if (count < 2) + return -EINVAL; + + return sprintf(page,"k:%d\n",keyb_ena); +} + +static int zipline_kbd_proc_keyboard_write(struct file *file, const char *buffer, + unsigned long count, void *data) +{ + unsigned char buf[68]; + + if (count < 3|| count > 4) + return -EINVAL; + if (copy_from_user(buf, buffer, count)) + return -EFAULT; + if (buf[1] != ':') + return -EINVAL; + + if (buf[0] == 'k') { + switch (buf[2]) { + case '0': + + init_timer(&zipline_kbd_timer); + zipline_kbd_timer.function = zipline_kbd_timeout; + zipline_kbd_timer.data = 0; + + /* Initialise scan hardware, request int */ + clps_writel( (clps_readl(SYSCON1) & ~SYSCON1_KBDSCANMASK) + | KBSC_HI, SYSCON1); + zipline_kbd_timer.expires = jiffies + scan_delay; + add_timer(&zipline_kbd_timer); + + break; + case '1':del_timer(&zipline_kbd_timer); break; + } + keyb_ena = buf[2]-'0'; return count; + } + + return -EINVAL; +} + + +/* + * Initialize the keyboard hardware. + * Set all columns high + * + * Machine dependent parameters: + * + * fastscan: 0 = timer based scan for each column + * 1 = full scan is done in one timer event + * scan_delay: time between column scans + * setup even if you use fastscan (leeds to timer mode) + * scan_interval: time between full scans + * + */ +void __init zipline_kbd_init_hw(void) +{ + + /* + * put here machine dependent init stuff + */ + fastscan = 1; + scan_interval = 50*HZ/1000; + scan_delay = 20*HZ/1000; + act_scancode = zip_scancode; + + last_column = KBSC_COL0; + key_is_pressed = 0; + + /* Register the /proc entry */ + zipline_keyboard_proc_entry = create_proc_entry("keyboard", 0444, + &proc_root); + if (zipline_keyboard_proc_entry == NULL) + printk("Couldn't create the /proc entry for the keyboard\n"); + else { + zipline_keyboard_proc_entry->read_proc = + &zipline_kbd_proc_keyboard_read; + zipline_keyboard_proc_entry->write_proc = + &zipline_kbd_proc_keyboard_write; + } + + /* Initialize the matrix processing task. */ + k_translate = zipline_translate; + k_unexpected_up = zipline_unexpected_up; + kbd_process_task.routine = zipline_kbd_process; + kbd_process_task.data = 0; + + /* Setup the timer for keyboard polling */ + init_timer(&zipline_kbd_timer); + zipline_kbd_timer.function = zipline_kbd_timeout; + zipline_kbd_timer.data = 0; + + /* Initialise scan hardware */ + clps_writel( (clps_readl(SYSCON1) & ~SYSCON1_KBDSCANMASK) + | KBSC_HI, SYSCON1); + zipline_kbd_timer.expires = jiffies + scan_delay; + add_timer(&zipline_kbd_timer); + + printk("zipline keyboard init done\n"); + +} diff -urN -X dontdiff /usr4/linux-2.4.21/linux-2.4.21/drivers/i2c/i2c-guide.c /usr4/linux-2.4.21.32/linux-2.4.21/drivers/i2c/i2c-guide.c --- /usr4/linux-2.4.21/linux-2.4.21/drivers/i2c/i2c-guide.c 2005-11-04 20:52:11.000000000 -0700 +++ /usr4/linux-2.4.21.32/linux-2.4.21/drivers/i2c/i2c-guide.c 2005-03-29 08:17:51.000000000 -0700 @@ -32,20 +32,20 @@ #define DEB2(x) /* low level debugging - very slow */ #define DEBE(x) x /* error messages */ /* Pin Port Inverted name */ -#define I2C_SDA 0x08 /* port B ctrl pin 3 (inv) */ -#define I2C_SCL 0x04 /* port B ctrl pin 2 (inv) */ +#define I2C_SDA 0x40 /* port B ctrl pin 3 (inv) */ +#define I2C_SCL 0x80 /* port B ctrl pin 2 (inv) */ -#define I2C_SDAIN 0x08 /* use the same pin with output */ -#define I2C_SCLIN 0x04 /* use the same pin with output */ +#define I2C_SDAIN 0x40 /* use the same pin with output */ +#define I2C_SCLIN 0x80 /* use the same pin with output */ -#define I2C_DMASK 0xf7 /* inverse of I2C_SDA */ -#define I2C_CMASK 0xfb /* inverse of I2c_SCL */ +#define I2C_DMASK 0xbf /* inverse of I2C_SDA */ +#define I2C_CMASK 0x7f /* inverse of I2c_SCL */ -#define PORTB_PIN0_SDA_OUTPUT 0x08 /* pin 3 direction of port B output */ -#define PORTB_PIN0_SDA_INPUT 0xf7 /* pin 3 direction of port B input */ +#define PORTB_PIN0_SDA_OUTPUT 0x40 /* pin 3 direction of port B output */ +#define PORTB_PIN0_SDA_INPUT 0xbf /* pin 3 direction of port B input */ -#define PORTB_PIN1_SCL_OUTPUT 0x04 /* pin 2 direction of port B output */ -#define PORTB_PIN1_SCL_INPUT 0xfb /* pin 2 direction of port B input */ +#define PORTB_PIN1_SCL_OUTPUT 0x80 /* pin 2 direction of port B output */ +#define PORTB_PIN1_SCL_INPUT 0x7f /* pin 2 direction of port B input */ int base = 0; #define DEFAULT_BASE PBDR @@ -182,6 +182,11 @@ return 0; } +void i2c_bitguide_cleanup(void) +{ + i2c_bit_del_bus(&bit_guide_ops); +} + EXPORT_NO_SYMBOLS; MODULE_AUTHOR("T. C. Song "); @@ -191,6 +196,7 @@ MODULE_PARM(base, "i"); module_init(i2c_bitguide_init); +module_exit(i2c_bitguide_cleanup); /* for completeness, we should have a module_exit() function, but the GUIDE requires this to always be loaded. If it is unloaded, the operation of the GUIDE is undefined. diff -urN -X dontdiff /usr4/linux-2.4.21/linux-2.4.21/drivers/mmc/Config.in /usr4/linux-2.4.21.32/linux-2.4.21/drivers/mmc/Config.in --- /usr4/linux-2.4.21/linux-2.4.21/drivers/mmc/Config.in 1969-12-31 17:00:00.000000000 -0700 +++ /usr4/linux-2.4.21.32/linux-2.4.21/drivers/mmc/Config.in 2005-10-29 17:49:05.000000000 -0600 @@ -0,0 +1,14 @@ +# +# MMC/SD device configuration +# +mainmenu_option next_comment +comment 'MMC/SD devices' + +tristate 'MMC/SD' CONFIG_MMC + +#bool ' test +#if [ "$CONFIG_MMC" != "n" ]; then +# source drivers/mmc/Config.in +#fi + +endmenu diff -urN -X dontdiff /usr4/linux-2.4.21/linux-2.4.21/drivers/mmc/Makefile /usr4/linux-2.4.21.32/linux-2.4.21/drivers/mmc/Makefile --- /usr4/linux-2.4.21/linux-2.4.21/drivers/mmc/Makefile 1969-12-31 17:00:00.000000000 -0700 +++ /usr4/linux-2.4.21.32/linux-2.4.21/drivers/mmc/Makefile 2005-10-29 18:50:22.000000000 -0600 @@ -0,0 +1,25 @@ +# +# Makefile for the kernel mmc/sd device drivers. +# +# Note! Dependencies are done automagically by 'make dep', which also +# removes any old dependencies. DON'T put your own dependencies here +# unless it's something special (ie not a .c file). +# +# Note 2! The CFLAGS definitions are now inherited from the +# parent makes.. +# + +export-objs := mmc.o + +#obj-y := +#obj-n := +#obj-m := +#obj- := + + +#obj-y := $(CONFIG_MMC) +obj-$(CONFIG_MMC) += mmc.o + +#O_TARGET := mmc.o + +include $(TOPDIR)/Rules.make diff -urN -X dontdiff /usr4/linux-2.4.21/linux-2.4.21/drivers/mmc/devmem2.c /usr4/linux-2.4.21.32/linux-2.4.21/drivers/mmc/devmem2.c --- /usr4/linux-2.4.21/linux-2.4.21/drivers/mmc/devmem2.c 1969-12-31 17:00:00.000000000 -0700 +++ /usr4/linux-2.4.21.32/linux-2.4.21/drivers/mmc/devmem2.c 2005-10-24 13:14:08.000000000 -0600 @@ -0,0 +1,121 @@ +/* + * devmem2.c: Simple program to read/write from/to any location in memory. + * + * Copyright (C) 2000, Jan-Derk Bakker (jdb@lartmaker.nl) + * + * + * This software has been developed for the LART computing board + * (http://www.lart.tudelft.nl/). The development has been sponsored by + * the Mobile MultiMedia Communications (http://www.mmc.tudelft.nl/) + * and Ubiquitous Communications (http://www.ubicom.tudelft.nl/) + * projects. + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define FATAL do { fprintf(stderr, "Error at line %d, file %s (%d) [%s]\n", \ + __LINE__, __FILE__, errno, strerror(errno)); exit(1); } while(0) + +#define MAP_SIZE 4096UL +#define MAP_MASK (MAP_SIZE - 1) + +int main(int argc, char **argv) { + int fd; + void *map_base, *virt_addr; + unsigned long read_result, writeval; + off_t target; + int access_type = 'w'; + + if(argc < 2) { + fprintf(stderr, "\nUsage:\t%s { address } [ type [ data ] ]\n" + "\taddress : memory address to act upon\n" + "\ttype : access operation type : [b]yte, [h]alfword, [w]ord\n" + "\tdata : data to be written\n\n", + argv[0]); + exit(1); + } + target = strtoul(argv[1], 0, 0); + + if(argc > 2) + access_type = tolower(argv[2][0]); + + + if((fd = open("/dev/mem", O_RDWR | O_SYNC)) == -1) FATAL; + printf("/dev/mem opened.\n"); + fflush(stdout); + + /* Map one page */ + map_base = mmap(0, MAP_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, target & ~MAP_MASK); + if(map_base == (void *) -1) FATAL; + printf("Memory mapped at address %p.\n", map_base); + fflush(stdout); + + virt_addr = map_base + (target & MAP_MASK); + switch(access_type) { + case 'b': + read_result = *((unsigned char *) virt_addr); + break; + case 'h': + read_result = *((unsigned short *) virt_addr); + break; + case 'w': + read_result = *((unsigned long *) virt_addr); + break; + default: + fprintf(stderr, "Illegal data type '%c'.\n", access_type); + exit(2); + } + printf("Value at address 0x%X (%p): 0x%X\n", target, virt_addr, read_result); + fflush(stdout); + + if(argc > 3) { + writeval = strtoul(argv[3], 0, 0); + switch(access_type) { + case 'b': + *((unsigned char *) virt_addr) = writeval; + read_result = *((unsigned char *) virt_addr); + break; + case 'h': + *((unsigned short *) virt_addr) = writeval; + read_result = *((unsigned short *) virt_addr); + break; + case 'w': + *((unsigned long *) virt_addr) = writeval; + read_result = *((unsigned long *) virt_addr); + break; + } + printf("Written 0x%X; readback 0x%X\n", writeval, read_result); + fflush(stdout); + } + + if(munmap(map_base, MAP_SIZE) == -1) FATAL; + close(fd); + return 0; +} + diff -urN -X dontdiff /usr4/linux-2.4.21/linux-2.4.21/drivers/mmc/mmc.c /usr4/linux-2.4.21.32/linux-2.4.21/drivers/mmc/mmc.c --- /usr4/linux-2.4.21/linux-2.4.21/drivers/mmc/mmc.c 1969-12-31 17:00:00.000000000 -0700 +++ /usr4/linux-2.4.21.32/linux-2.4.21/drivers/mmc/mmc.c 2005-10-29 22:04:59.000000000 -0600 @@ -0,0 +1,696 @@ +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define DEVICE_NAME "mmc" +#define DEVICE_NR(device) (MINOR(device)) +#define DEVICE_ON(device) +#define DEVICE_OFF(device) +#define MAJOR_NR 121 + +#include + +MODULE_AUTHOR("Madsuk/Rohde/JMcGuire"); +MODULE_DESCRIPTION("Driver MMC/SD-Cards"); +MODULE_SUPPORTED_DEVICE("Zipit"); +MODULE_LICENSE("GPL"); + +/* Define the GPIO pin definitions here */ +/* The SD_DI value is used as a bit mask for the input function */ +/* The three output values indicate the respective bit functions in the common output register */ + +#define SD_DI 0x04 /* Zipit - PE[2] */ +#define SD_DO 0x0001 /* Zipit - using nEXTFIQ input in INTSR1 */ +#define SD_CLK 0x01 /* Zipit - PE[0] */ +#define SD_CS 0x02 /* Zipit - PE[1] */ + +#define DEBUG_MODE 1 /* un-comment to enable debug print messages */ +#define SD_INPUT_INVERTED 1 /* using the nEXTFIQ input, the data is inverted */ + +/* we have only one device */ +static int hd_sizes[1<<6]; +static int hd_blocksizes[1<<6]; +static int hd_hardsectsizes[1<<6]; +static int hd_maxsect[1<<6]; +static struct hd_struct hd[1<<6]; + +static struct timer_list mmc_timer; +static int mmc_media_detect = 0; +static int mmc_media_changed = 1; + +typedef unsigned int uint32; + +static unsigned char port_state = 0x00; /* shadow register for current port state */ +static volatile uint32 *gpioaddr_input = (uint32 *)0x80000240; /* Zipit - Interrupt Status Register 1 INTSR1 */ +static volatile uint32 *gpioaddr_output = (uint32 *)0x80000083; /* Zipit - Port E Data Register PEDR */ +static volatile uint32 *gpioaddr_enable = (uint32 *)0x800000C3; /* Zipit - Port E Data Direction Register PEDDR */ +/* static volatile uint32 *gpioaddr_control = (uint32 *)0xb800006c; Zipit - not used? */ +static unsigned char gpio_outen_save; // IPP + +static void mmc_spi_cs_low(void) +{ + port_state &= ~(SD_CS); + *gpioaddr_output = port_state; +} + +static void mmc_spi_cs_high(void) +{ + port_state |= SD_CS; + *gpioaddr_output = port_state; +} + +static unsigned char mmc_spi_io(unsigned char data_out) +{ + int i; + unsigned char result = 0, tmp_data = 0; + + for(i=0; i<8; i++) { + if(data_out & (0x01 << (7-i))) + port_state |= SD_DI; + else + port_state &= ~SD_DI; + + *gpioaddr_output = port_state; + port_state |= SD_CLK; + *gpioaddr_output = port_state; + + tmp_data = *gpioaddr_input; + + port_state &= ~SD_CLK; + *gpioaddr_output = port_state; + + result <<= 1; + +#ifdef SD_INPUT_INVERTED + if ((tmp_data & SD_DO)==0) /* account for nEXTFIQ inversion on Zipit */ + result |= 1; +#else + if (tmp_data & SD_DO) /* use this for normal input polarity */ + result |= 1; +#endif + } + + return(result); +} + +static int mmc_write_block(unsigned int dest_addr, unsigned char *data) +{ + unsigned int address; + unsigned char r = 0; + unsigned char ab0, ab1, ab2, ab3; + int i; + + address = dest_addr; + + ab3 = 0xff & (address >> 24); + ab2 = 0xff & (address >> 16); + ab1 = 0xff & (address >> 8); + ab0 = 0xff & address; + mmc_spi_cs_low(); + for (i = 0; i < 4; i++) mmc_spi_io(0xff); + mmc_spi_io(0x58); + mmc_spi_io(ab3); /* msb */ + mmc_spi_io(ab2); + mmc_spi_io(ab1); + mmc_spi_io(ab0); /* lsb */ + mmc_spi_io(0xff); + for (i = 0; i < 8; i++) + { + r = mmc_spi_io(0xff); + if (r == 0x00) break; + } + if (r != 0x00) + { + mmc_spi_cs_high(); + mmc_spi_io(0xff); + return(1); + } + + mmc_spi_io(0xfe); + for (i = 0; i < 512; i++) mmc_spi_io(data[i]); + for (i = 0; i < 2; i++) mmc_spi_io(0xff); + + for (i = 0; i < 1000000; i++) + { + r = mmc_spi_io(0xff); + if (r == 0xff) break; + } + if (r != 0xff) + { + mmc_spi_cs_high(); + mmc_spi_io(0xff); + return(3); + } + mmc_spi_cs_high(); + mmc_spi_io(0xff); + return(0); +} + +static int mmc_read_block(unsigned char *data, unsigned int src_addr) +{ + unsigned int address; + unsigned char r = 0; + unsigned char ab0, ab1, ab2, ab3; + int i; + + address = src_addr; + + ab3 = 0xff & (address >> 24); + ab2 = 0xff & (address >> 16); + ab1 = 0xff & (address >> 8); + ab0 = 0xff & address; + + mmc_spi_cs_low(); + for (i = 0; i < 4; i++) mmc_spi_io(0xff); + mmc_spi_io(0x51); + mmc_spi_io(ab3); /* msb */ + mmc_spi_io(ab2); + mmc_spi_io(ab1); + mmc_spi_io(ab0); /* lsb */ + + mmc_spi_io(0xff); + for (i = 0; i < 8; i++) + { + r = mmc_spi_io(0xff); + if (r == 0x00) break; + } + if (r != 0x00) + { + mmc_spi_cs_high(); + mmc_spi_io(0xff); + return(1); + } + for (i = 0; i < 100000; i++) + { + r = mmc_spi_io(0xff); + if (r == 0xfe) break; + } + if (r != 0xfe) + { + mmc_spi_cs_high(); + mmc_spi_io(0xff); + return(2); + } + for (i = 0; i < 512; i++) + { + r = mmc_spi_io(0xff); + data[i] = r; + } + for (i = 0; i < 2; i++) + { + r = mmc_spi_io(0xff); + } + mmc_spi_cs_high(); + mmc_spi_io(0xff); + + return(0); +} + +static void mmc_request(request_queue_t *q) +{ + unsigned int mmc_address; + unsigned char *buffer_address; + int nr_sectors; + int i; + int cmd; + int rc, code; + + (void)q; + while (1) + { + code = 1; // Default is success + INIT_REQUEST; + mmc_address = (CURRENT->sector + hd[MINOR(CURRENT->rq_dev)].start_sect) * hd_hardsectsizes[0]; + buffer_address = CURRENT->buffer; + nr_sectors = CURRENT->current_nr_sectors; + cmd = CURRENT->cmd; + if (((CURRENT->sector + CURRENT->current_nr_sectors + hd[MINOR(CURRENT->rq_dev)].start_sect) > hd[0].nr_sects) || (mmc_media_detect == 0)) + { + code = 0; + } + else if (cmd == READ) + { + spin_unlock_irq(&io_request_lock); + for (i = 0; i < nr_sectors; i++) + { + rc = mmc_read_block(buffer_address, mmc_address); + if (rc != 0) + { + printk("mmc: error in mmc_read_block (%d)\n", rc); + code = 0; + break; + } + else + { + mmc_address += hd_hardsectsizes[0]; + buffer_address += hd_hardsectsizes[0]; + } + } + spin_lock_irq(&io_request_lock); + } + else if (cmd == WRITE) + { + spin_unlock_irq(&io_request_lock); + for (i = 0; i < nr_sectors; i++) + { + rc = mmc_write_block(mmc_address, buffer_address); + if (rc != 0) + { + printk("mmc: error in mmc_write_block (%d)\n", rc); + code = 0; + break; + } + else + { + mmc_address += hd_hardsectsizes[0]; + buffer_address += hd_hardsectsizes[0]; + } + } + spin_lock_irq(&io_request_lock); + } + else + { + code = 0; + } + end_request(code); + } +} + + +static int mmc_open(struct inode *inode, struct file *filp) +{ + int device; + (void)filp; + + if (mmc_media_detect == 0) return -ENODEV; + +#if defined(MODULE) + MOD_INC_USE_COUNT; +#endif + return 0; +} + +static int mmc_release(struct inode *inode, struct file *filp) +{ + (void)filp; + fsync_dev(inode->i_rdev); + invalidate_buffers(inode->i_rdev); + +#if defined(MODULE) + MOD_DEC_USE_COUNT; +#endif + return 0; +} + +extern struct gendisk hd_gendisk; +static int mmc_revalidate(kdev_t dev) +{ + int target, max_p, start, i; + if (mmc_media_detect == 0) return -ENODEV; + + target = DEVICE_NR(dev); + + max_p = hd_gendisk.max_p; + start = target << 6; + for (i = max_p - 1; i >= 0; i--) { + int minor = start + i; + invalidate_device(MKDEV(MAJOR_NR, minor), 1); + hd_gendisk.part[minor].start_sect = 0; + hd_gendisk.part[minor].nr_sects = 0; + } + + grok_partitions(&hd_gendisk, target, 1 << 6, + hd_sizes[0] * 2); + + return 0; +} + +static int mmc_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg) +{ + if (!inode || !inode->i_rdev) + return -EINVAL; + + switch(cmd) { + case BLKGETSIZE: + return put_user(hd[MINOR(inode->i_rdev)].nr_sects, (unsigned long *)arg); + case BLKGETSIZE64: + return put_user((u64)hd[MINOR(inode->i_rdev)]. + nr_sects, (u64 *) arg); + case BLKRRPART: + if (!capable(CAP_SYS_ADMIN)) + return -EACCES; + + return mmc_revalidate(inode->i_rdev); + case HDIO_GETGEO: + { + struct hd_geometry *loc, g; + loc = (struct hd_geometry *) arg; + if (!loc) + return -EINVAL; + g.heads = 4; + g.sectors = 16; + g.cylinders = hd[0].nr_sects / (4 * 16); + g.start = hd[MINOR(inode->i_rdev)].start_sect; + return copy_to_user(loc, &g, sizeof(g)) ? -EFAULT : 0; + } + default: + return blk_ioctl(inode->i_rdev, cmd, arg); + } +} + +static int mmc_card_init(void) +{ + unsigned char r = 0; + short i, j; + unsigned long flags; + + save_flags(flags); + cli(); + + printk("mmc Card init\n"); + mmc_spi_cs_high(); + for (i = 0; i < 20; i++) mmc_spi_io(0xff); + + mmc_spi_cs_low(); + + mmc_spi_io(0x40); /* Send hex 40 00 00 00 00 95 command CMD0 to reset card */ + for (i = 0; i < 4; i++) mmc_spi_io(0x00); + mmc_spi_io(0x95); + for (i = 0; i < 8; i++) + { + r = mmc_spi_io(0xff); /* poll the card N times until it responds with a 0x01 "in idle state" R1 response */ + if (r == 0x01) break; + } + mmc_spi_cs_high(); + mmc_spi_io(0xff); /* send 8 clocks after nCS goes high to complete transaction */ + if (r != 0x01) + { + restore_flags(flags); /* card didn't respond with the 0x01, so declare a fault and exit */ + return(1); + } + + printk("mmc Card init *1*\n"); + for (j = 0; j < 10000; j++) + { + mmc_spi_cs_low(); + + mmc_spi_io(0x41); /* Send hex 41 00 00 00 00 FF command CMD1 (SEND_OP_COND) to wake-up card */ + for (i = 0; i < 4; i++) mmc_spi_io(0x00); + mmc_spi_io(0xff); + for (i = 0; i < 8; i++) + { + r = mmc_spi_io(0xff); + +#if defined(DEBUG_MODE) + printk("%x ",r); /* print the readback values if DEBUG_MODE is enabled */ +#endif + + if (r == 0x00) break; /* if the card response is 0x01, the "busy" bit is still set. when it's cleared, we're ready to go */ + } + mmc_spi_cs_high(); + mmc_spi_io(0xff); + if (r == 0x00) + { + restore_flags(flags); /* if we get here, card is initialized and in "ready" state */ + printk("mmc Card init *2*\n"); + return(0); + } + } + restore_flags(flags); + + return(2); +} + +static int mmc_card_config(void) +{ + unsigned char r = 0; + short i; + unsigned char csd[32]; + unsigned int c_size; + unsigned int c_size_mult; + unsigned int mult; + unsigned int read_bl_len; + unsigned int blocknr = 0; + unsigned int block_len = 0; + unsigned int size = 0; + + mmc_spi_cs_low(); + for (i = 0; i < 4; i++) mmc_spi_io(0xff); + mmc_spi_io(0x49); + for (i = 0; i < 4; i++) mmc_spi_io(0x00); + mmc_spi_io(0xff); + for (i = 0; i < 8; i++) + { + r = mmc_spi_io(0xff); + if (r == 0x00) break; + } + if (r != 0x00) + { + mmc_spi_cs_high(); + mmc_spi_io(0xff); + return(1); + } + for (i = 0; i < 8; i++) + { + r = mmc_spi_io(0xff); + if (r == 0xfe) break; + } + if (r != 0xfe) + { + mmc_spi_cs_high(); + mmc_spi_io(0xff); + return(2); + } + for (i = 0; i < 16; i++) + { + r = mmc_spi_io(0xff); + csd[i] = r; + } + for (i = 0; i < 2; i++) + { + r = mmc_spi_io(0xff); + } + mmc_spi_cs_high(); + mmc_spi_io(0xff); + if (r == 0x00) return(3); + + c_size = csd[8] + csd[7] * 256 + (csd[6] & 0x03) * 256 * 256; + c_size >>= 6; + c_size_mult = csd[10] + (csd[9] & 0x03) * 256; + c_size_mult >>= 7; + read_bl_len = csd[5] & 0x0f; + mult = 1; + mult <<= c_size_mult + 2; + blocknr = (c_size + 1) * mult; + block_len = 1; + block_len <<= read_bl_len; + size = block_len * blocknr; + size >>= 10; + + for(i=0; i<(1<<6); i++) { + hd_blocksizes[i] = 1024; + hd_hardsectsizes[i] = block_len; + hd_maxsect[i] = 256; + } + hd_sizes[0] = size; + hd[0].nr_sects = blocknr; + + + printk("Size = %d, hardsectsize = %d, sectors = %d\n", + size, block_len, blocknr); + + return 0; +} + +static int mmc_hardware_init(void) +{ + unsigned char gpio_outen; + + // Set inputs/outputs here + printk("mmc Hardware init\n"); + gpio_outen = *gpioaddr_enable; /* get current port state */ + gpio_outen_save = gpio_outen; // IPP +/* gpio_outen = (gpio_outen | SD_DI | SD_CLK | SD_CS) & ~SD_DO; */ + gpio_outen = (gpio_outen | SD_DI | SD_CLK | SD_CS); /* Zipit - use this for Zipit, input is in another port */ + *gpioaddr_enable = gpio_outen; + + port_state = (0x00 | SD_CS); /* Zipit - init port_state: DI and CLK low; nCS high */ + + // Clock low + port_state &= ~(SD_CLK | SD_DI | SD_CS); + *gpioaddr_output = port_state; + + return 0; +} + +static int mmc_check_media_change(kdev_t dev) +{ + (void)dev; + if (mmc_media_changed == 1) + { + mmc_media_changed = 0; + return 1; + } + else return 0; +} + +static struct block_device_operations mmc_bdops = +{ + open: mmc_open, + release: mmc_release, + ioctl: mmc_ioctl, +#if 0 + check_media_change: mmc_check_media_change, + revalidate: mmc_revalidate, +#endif +}; + +static struct gendisk hd_gendisk = { + major: MAJOR_NR, + major_name: DEVICE_NAME, + minor_shift: 6, + max_p: 1 << 6, + part: hd, + sizes: hd_sizes, + fops: &mmc_bdops, +}; + +static int mmc_init(void) +{ + int rc; + + rc = mmc_hardware_init(); + + if ( rc != 0) + { + printk("mmc: error in mmc_hardware_init (%d)\n", rc); + return -1; + } + + rc = mmc_card_init(); + if ( rc != 0) + { + // Give it an extra shot + rc = mmc_card_init(); + if ( rc != 0) + { + printk("mmc: error in mmc_card_init (%d)\n", rc); + return -1; + } + } + + memset(hd_sizes, 0, sizeof(hd_sizes)); + rc = mmc_card_config(); + if ( rc != 0) + { + printk("mmc: error in mmc_card_config (%d)\n", rc); + return -1; + } + + + blk_size[MAJOR_NR] = hd_sizes; + + memset(hd, 0, sizeof(hd)); + hd[0].nr_sects = hd_sizes[0]*2; + + blksize_size[MAJOR_NR] = hd_blocksizes; + hardsect_size[MAJOR_NR] = hd_hardsectsizes; + max_sectors[MAJOR_NR] = hd_maxsect; + + hd_gendisk.nr_real = 1; + + register_disk(&hd_gendisk, MKDEV(MAJOR_NR,0), 1<<6, + &mmc_bdops, hd_sizes[0]*2); + + return 0; +} + +static void mmc_exit(void) +{ + blk_size[MAJOR_NR] = NULL; + blksize_size[MAJOR_NR] = NULL; + hardsect_size[MAJOR_NR] = NULL; + max_sectors[MAJOR_NR] = NULL; + hd[0].nr_sects = 0; + *gpioaddr_enable = gpio_outen_save; // IPP +} + +static void mmc_check_media(void) +{ + int old_state; + int rc; + + old_state = mmc_media_detect; + + // TODO: Add card detection here + mmc_media_detect = 1; + if (old_state != mmc_media_detect) + { + mmc_media_changed = 1; + if (mmc_media_detect == 1) + { + rc = mmc_init(); + if (rc != 0) printk("mmc: error in mmc_init (%d)\n", rc); + } + else + { + mmc_exit(); + } + } + + /* del_timer(&mmc_timer); + mmc_timer.expires = jiffies + 10*HZ; + add_timer(&mmc_timer); */ +} + +static int __init mmc_driver_init(void) +{ + int rc; + + rc = devfs_register_blkdev(MAJOR_NR, DEVICE_NAME, &mmc_bdops); + if (rc < 0) + { + printk(KERN_WARNING "mmc: can't get major %d\n", MAJOR_NR); + return rc; + } + + blk_init_queue(BLK_DEFAULT_QUEUE(MAJOR_NR), mmc_request); + + read_ahead[MAJOR_NR] = 8; + add_gendisk(&hd_gendisk); + + mmc_check_media(); + + /*init_timer(&mmc_timer); + mmc_timer.expires = jiffies + HZ; + mmc_timer.function = (void *)mmc_check_media; + add_timer(&mmc_timer);*/ + + return 0; +} + +static void __exit mmc_driver_exit(void) +{ + int i; + del_timer(&mmc_timer); + + for (i = 0; i < (1 << 6); i++) + fsync_dev(MKDEV(MAJOR_NR, i)); + + blk_cleanup_queue(BLK_DEFAULT_QUEUE(MAJOR_NR)); + del_gendisk(&hd_gendisk); + devfs_unregister_blkdev(MAJOR_NR, DEVICE_NAME); + mmc_exit(); +} + +module_init(mmc_driver_init); +module_exit(mmc_driver_exit); diff -urN -X dontdiff /usr4/linux-2.4.21/linux-2.4.21/drivers/mmc/mmc_2.c /usr4/linux-2.4.21.32/linux-2.4.21/drivers/mmc/mmc_2.c --- /usr4/linux-2.4.21/linux-2.4.21/drivers/mmc/mmc_2.c 1969-12-31 17:00:00.000000000 -0700 +++ /usr4/linux-2.4.21.32/linux-2.4.21/drivers/mmc/mmc_2.c 2005-10-29 22:00:58.000000000 -0600 @@ -0,0 +1,696 @@ +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define DEVICE_NAME "mmc" +#define DEVICE_NR(device) (MINOR(device)) +#define DEVICE_ON(device) +#define DEVICE_OFF(device) +#define MAJOR_NR 121 + +#include + +MODULE_AUTHOR("Madsuk/Rohde/JMcGuire"); +MODULE_DESCRIPTION("Driver MMC/SD-Cards"); +MODULE_SUPPORTED_DEVICE("Zipit"); +MODULE_LICENSE("GPL"); + +/* Define the GPIO pin definitions here */ +/* The SD_DI value is used as a bit mask for the input function */ +/* The three output values indicate the respective bit functions in the common output register */ + +#define SD_DI 0x04 /* Zipit - PE[2] */ +#define SD_DO 0x0001 /* Zipit - using nEXTFIQ input in INTSR1 */ +#define SD_CLK 0x01 /* Zipit - PE[0] */ +#define SD_CS 0x02 /* Zipit - PE[1] */ + +#define DEBUG_MODE 1 /* un-comment to enable debug print messages */ +#define SD_INPUT_INVERTED 1 /* using the nEXTFIQ input, the data is inverted */ + +/* we have only one device */ +static int hd_sizes[1<<6]; +static int hd_blocksizes[1<<6]; +static int hd_hardsectsizes[1<<6]; +static int hd_maxsect[1<<6]; +static struct hd_struct hd[1<<6]; + +static struct timer_list mmc_timer; +static int mmc_media_detect = 0; +static int mmc_media_changed = 1; + +typedef unsigned int uint32; + +static unsigned char port_state = 0x00; /* shadow register for current port state */ +static volatile uint32 *gpioaddr_input = (uint32 *)0x80000240; /* Zipit - Interrupt Status Register 1 INTSR1 */ +static volatile uint32 *gpioaddr_output = (uint32 *)0x80000083; /* Zipit - Port E Data Register PEDR */ +static volatile uint32 *gpioaddr_enable = (uint32 *)0x800000C3; /* Zipit - Port E Data Direction Register PEDDR */ +/* static volatile uint32 *gpioaddr_control = (uint32 *)0xb800006c; Zipit - not used? */ +static unsigned char gpio_outen_save; // IPP + +static void mmc_spi_cs_low(void) +{ + port_state &= ~(SD_CS); + *gpioaddr_output = port_state; +} + +static void mmc_spi_cs_high(void) +{ + port_state |= SD_CS; + *gpioaddr_output = port_state; +} + +static unsigned char mmc_spi_io(unsigned char data_out) +{ + int i; + unsigned char result = 0, tmp_data = 0; + + for(i=0; i<8; i++) { + if(data_out & (0x01 << (7-i))) + port_state |= SD_DI; + else + port_state &= ~SD_DI; + + *gpioaddr_output = port_state; + port_state |= SD_CLK; + *gpioaddr_output = port_state; + + tmp_data = *gpioaddr_input; + + port_state &= ~SD_CLK; + *gpioaddr_output = port_state; + + result <<= 1; + +#ifdef SD_INPUT_INVERTED + if ((tmp_data & SD_DO)==0) /* account for nEXTFIQ inversion on Zipit */ + result |= 1; +#else + if (tmp_data & SD_DO) /* use this for normal input polarity */ + result |= 1; +#endif + } + + return(result); +} + +static int mmc_write_block(unsigned int dest_addr, unsigned char *data) +{ + unsigned int address; + unsigned char r = 0; + unsigned char ab0, ab1, ab2, ab3; + int i; + + address = dest_addr; + + ab3 = 0xff & (address >> 24); + ab2 = 0xff & (address >> 16); + ab1 = 0xff & (address >> 8); + ab0 = 0xff & address; + mmc_spi_cs_low(); + for (i = 0; i < 4; i++) mmc_spi_io(0xff); + mmc_spi_io(0x58); + mmc_spi_io(ab3); /* msb */ + mmc_spi_io(ab2); + mmc_spi_io(ab1); + mmc_spi_io(ab0); /* lsb */ + mmc_spi_io(0xff); + for (i = 0; i < 8; i++) + { + r = mmc_spi_io(0xff); + if (r == 0x00) break; + } + if (r != 0x00) + { + mmc_spi_cs_high(); + mmc_spi_io(0xff); + return(1); + } + + mmc_spi_io(0xfe); + for (i = 0; i < 512; i++) mmc_spi_io(data[i]); + for (i = 0; i < 2; i++) mmc_spi_io(0xff); + + for (i = 0; i < 1000000; i++) + { + r = mmc_spi_io(0xff); + if (r == 0xff) break; + } + if (r != 0xff) + { + mmc_spi_cs_high(); + mmc_spi_io(0xff); + return(3); + } + mmc_spi_cs_high(); + mmc_spi_io(0xff); + return(0); +} + +static int mmc_read_block(unsigned char *data, unsigned int src_addr) +{ + unsigned int address; + unsigned char r = 0; + unsigned char ab0, ab1, ab2, ab3; + int i; + + address = src_addr; + + ab3 = 0xff & (address >> 24); + ab2 = 0xff & (address >> 16); + ab1 = 0xff & (address >> 8); + ab0 = 0xff & address; + + mmc_spi_cs_low(); + for (i = 0; i < 4; i++) mmc_spi_io(0xff); + mmc_spi_io(0x51); + mmc_spi_io(ab3); /* msb */ + mmc_spi_io(ab2); + mmc_spi_io(ab1); + mmc_spi_io(ab0); /* lsb */ + + mmc_spi_io(0xff); + for (i = 0; i < 8; i++) + { + r = mmc_spi_io(0xff); + if (r == 0x00) break; + } + if (r != 0x00) + { + mmc_spi_cs_high(); + mmc_spi_io(0xff); + return(1); + } + for (i = 0; i < 100000; i++) + { + r = mmc_spi_io(0xff); + if (r == 0xfe) break; + } + if (r != 0xfe) + { + mmc_spi_cs_high(); + mmc_spi_io(0xff); + return(2); + } + for (i = 0; i < 512; i++) + { + r = mmc_spi_io(0xff); + data[i] = r; + } + for (i = 0; i < 2; i++) + { + r = mmc_spi_io(0xff); + } + mmc_spi_cs_high(); + mmc_spi_io(0xff); + + return(0); +} + +static void mmc_request(request_queue_t *q) +{ + unsigned int mmc_address; + unsigned char *buffer_address; + int nr_sectors; + int i; + int cmd; + int rc, code; + + (void)q; + while (1) + { + code = 1; // Default is success + INIT_REQUEST; + mmc_address = (CURRENT->sector + hd[MINOR(CURRENT->rq_dev)].start_sect) * hd_hardsectsizes[0]; + buffer_address = CURRENT->buffer; + nr_sectors = CURRENT->current_nr_sectors; + cmd = CURRENT->cmd; + if (((CURRENT->sector + CURRENT->current_nr_sectors + hd[MINOR(CURRENT->rq_dev)].start_sect) > hd[0].nr_sects) || (mmc_media_detect == 0)) + { + code = 0; + } + else if (cmd == READ) + { + spin_unlock_irq(&io_request_lock); + for (i = 0; i < nr_sectors; i++) + { + rc = mmc_read_block(buffer_address, mmc_address); + if (rc != 0) + { + printk("mmc: error in mmc_read_block (%d)\n", rc); + code = 0; + break; + } + else + { + mmc_address += hd_hardsectsizes[0]; + buffer_address += hd_hardsectsizes[0]; + } + } + spin_lock_irq(&io_request_lock); + } + else if (cmd == WRITE) + { + spin_unlock_irq(&io_request_lock); + for (i = 0; i < nr_sectors; i++) + { + rc = mmc_write_block(mmc_address, buffer_address); + if (rc != 0) + { + printk("mmc: error in mmc_write_block (%d)\n", rc); + code = 0; + break; + } + else + { + mmc_address += hd_hardsectsizes[0]; + buffer_address += hd_hardsectsizes[0]; + } + } + spin_lock_irq(&io_request_lock); + } + else + { + code = 0; + } + end_request(code); + } +} + + +static int mmc_open(struct inode *inode, struct file *filp) +{ + int device; + (void)filp; + + if (mmc_media_detect == 0) return -ENODEV; + +#if defined(MODULE) + MOD_INC_USE_COUNT; +#endif + return 0; +} + +static int mmc_release(struct inode *inode, struct file *filp) +{ + (void)filp; + fsync_dev(inode->i_rdev); + invalidate_buffers(inode->i_rdev); + +#if defined(MODULE) + MOD_DEC_USE_COUNT; +#endif + return 0; +} + +extern struct gendisk hd_gendisk; +static int mmc_revalidate(kdev_t dev) +{ + int target, max_p, start, i; + if (mmc_media_detect == 0) return -ENODEV; + + target = DEVICE_NR(dev); + + max_p = hd_gendisk.max_p; + start = target << 6; + for (i = max_p - 1; i >= 0; i--) { + int minor = start + i; + invalidate_device(MKDEV(MAJOR_NR, minor), 1); + hd_gendisk.part[minor].start_sect = 0; + hd_gendisk.part[minor].nr_sects = 0; + } + + grok_partitions(&hd_gendisk, target, 1 << 6, + hd_sizes[0] * 2); + + return 0; +} + +static int mmc_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg) +{ + if (!inode || !inode->i_rdev) + return -EINVAL; + + switch(cmd) { + case BLKGETSIZE: + return put_user(hd[MINOR(inode->i_rdev)].nr_sects, (unsigned long *)arg); + case BLKGETSIZE64: + return put_user((u64)hd[MINOR(inode->i_rdev)]. + nr_sects, (u64 *) arg); + case BLKRRPART: + if (!capable(CAP_SYS_ADMIN)) + return -EACCES; + + return mmc_revalidate(inode->i_rdev); + case HDIO_GETGEO: + { + struct hd_geometry *loc, g; + loc = (struct hd_geometry *) arg; + if (!loc) + return -EINVAL; + g.heads = 4; + g.sectors = 16; + g.cylinders = hd[0].nr_sects / (4 * 16); + g.start = hd[MINOR(inode->i_rdev)].start_sect; + return copy_to_user(loc, &g, sizeof(g)) ? -EFAULT : 0; + } + default: + return blk_ioctl(inode->i_rdev, cmd, arg); + } +} + +static int mmc_card_init(void) +{ + unsigned char r = 0; + short i, j; + unsigned long flags; + + save_flags(flags); + cli(); + + printk("mmc Card init\n"); + mmc_spi_cs_high(); + for (i = 0; i < 20; i++) mmc_spi_io(0xff); + + mmc_spi_cs_low(); + + mmc_spi_io(0x40); /* Send hex 40 00 00 00 00 95 command CMD0 to reset card */ + for (i = 0; i < 4; i++) mmc_spi_io(0x00); + mmc_spi_io(0x95); + for (i = 0; i < 8; i++) + { + r = mmc_spi_io(0xff); /* poll the card N times until it responds with a 0x01 "in idle state" R1 response */ + if (r == 0x01) break; + } + mmc_spi_cs_high(); + mmc_spi_io(0xff); /* send 8 clocks after nCS goes high to complete transaction */ + if (r != 0x01) + { + restore_flags(flags); /* card didn't respond with the 0x01, so declare a fault and exit */ + return(1); + } + + printk("mmc Card init *1*\n"); + for (j = 0; j < 10000; j++) + { + mmc_spi_cs_low(); + + mmc_spi_io(0x41); /* Send hex 41 00 00 00 00 FF command CMD1 (SEND_OP_COND) to wake-up card */ + for (i = 0; i < 4; i++) mmc_spi_io(0x00); + mmc_spi_io(0xff); + for (i = 0; i < 8; i++) + { + r = mmc_spi_io(0xff); + +#if defined(DEBUG_MODE) + printk("%x ",r); /* print the readback values if DEBUG_MODE is enabled */ +#endif + + if (r == 0x00) break; /* if the card response is 0x01, the "busy" bit is still set. when it's cleared, we're ready to go */ + } + mmc_spi_cs_high(); + mmc_spi_io(0xff); + if (r == 0x00) + { + restore_flags(flags); /* if we get here, card is initialized and in "ready" state */ + printk("mmc Card init *2*\n"); + return(0); + } + } + restore_flags(flags); + + return(2); +} + +static int mmc_card_config(void) +{ + unsigned char r = 0; + short i; + unsigned char csd[32]; + unsigned int c_size; + unsigned int c_size_mult; + unsigned int mult; + unsigned int read_bl_len; + unsigned int blocknr = 0; + unsigned int block_len = 0; + unsigned int size = 0; + + mmc_spi_cs_low(); + for (i = 0; i < 4; i++) mmc_spi_io(0xff); + mmc_spi_io(0x49); + for (i = 0; i < 4; i++) mmc_spi_io(0x00); + mmc_spi_io(0xff); + for (i = 0; i < 8; i++) + { + r = mmc_spi_io(0xff); + if (r == 0x00) break; + } + if (r != 0x00) + { + mmc_spi_cs_high(); + mmc_spi_io(0xff); + return(1); + } + for (i = 0; i < 8; i++) + { + r = mmc_spi_io(0xff); + if (r == 0xfe) break; + } + if (r != 0xfe) + { + mmc_spi_cs_high(); + mmc_spi_io(0xff); + return(2); + } + for (i = 0; i < 16; i++) + { + r = mmc_spi_io(0xff); + csd[i] = r; + } + for (i = 0; i < 2; i++) + { + r = mmc_spi_io(0xff); + } + mmc_spi_cs_high(); + mmc_spi_io(0xff); + if (r == 0x00) return(3); + + c_size = csd[8] + csd[7] * 256 + (csd[6] & 0x03) * 256 * 256; + c_size >>= 6; + c_size_mult = csd[10] + (csd[9] & 0x03) * 256; + c_size_mult >>= 7; + read_bl_len = csd[5] & 0x0f; + mult = 1; + mult <<= c_size_mult + 2; + blocknr = (c_size + 1) * mult; + block_len = 1; + block_len <<= read_bl_len; + size = block_len * blocknr; + size >>= 10; + + for(i=0; i<(1<<6); i++) { + hd_blocksizes[i] = 1024; + hd_hardsectsizes[i] = block_len; + hd_maxsect[i] = 256; + } + hd_sizes[0] = size; + hd[0].nr_sects = blocknr; + + + printk("Size = %d, hardsectsize = %d, sectors = %d\n", + size, block_len, blocknr); + + return 0; +} + +static int mmc_hardware_init(void) +{ + unsigned char gpio_outen; + + // Set inputs/outputs here + printk("mmc Hardware init\n"); + gpio_outen = *gpioaddr_enable; /* get current port state */ + gpio_outen_save = gpio_outen; // IPP +/* gpio_outen = (gpio_outen | SD_DI | SD_CLK | SD_CS) & ~SD_DO; */ + gpio_outen = (gpio_outen | SD_DI | SD_CLK | SD_CS); /* Zipit - use this for Zipit, input is in another port */ + *gpioaddr_enable = gpio_outen; + + port_state = (0x00 | SD_CS); /* Zipit - init port_state: DI and CLK low; nCS high */ + + // Clock low + port_state &= ~(SD_CLK | SD_DI | SD_CS); + *gpioaddr_output = port_state; + + return 0; +} + +static int mmc_check_media_change(kdev_t dev) +{ + (void)dev; + if (mmc_media_changed == 1) + { + mmc_media_changed = 0; + return 1; + } + else return 0; +} + +static struct block_device_operations mmc_bdops = +{ + open: mmc_open, + release: mmc_release, + ioctl: mmc_ioctl, +#if 0 + check_media_change: mmc_check_media_change, + revalidate: mmc_revalidate, +#endif +}; + +static struct gendisk hd_gendisk = { + major: MAJOR_NR, + major_name: DEVICE_NAME, + minor_shift: 6, + max_p: 1 << 6, + part: hd, + sizes: hd_sizes, + fops: &mmc_bdops, +}; + +static int mmc_init(void) +{ + int rc; + + rc = mmc_hardware_init(); + + if ( rc != 0) + { + printk("mmc: error in mmc_hardware_init (%d)\n", rc); + return -1; + } + + rc = mmc_card_init(); + if ( rc != 0) + { + // Give it an extra shot + rc = mmc_card_init(); + if ( rc != 0) + { + printk("mmc: error in mmc_card_init (%d)\n", rc); + return -1; + } + } + + memset(hd_sizes, 0, sizeof(hd_sizes)); + rc = mmc_card_config(); + if ( rc != 0) + { + printk("mmc: error in mmc_card_config (%d)\n", rc); + return -1; + } + + + blk_size[MAJOR_NR] = hd_sizes; + + memset(hd, 0, sizeof(hd)); + hd[0].nr_sects = hd_sizes[0]*2; + + blksize_size[MAJOR_NR] = hd_blocksizes; + hardsect_size[MAJOR_NR] = hd_hardsectsizes; + max_sectors[MAJOR_NR] = hd_maxsect; + + hd_gendisk.nr_real = 1; + + register_disk(&hd_gendisk, MKDEV(MAJOR_NR,0), 1<<6, + &mmc_bdops, hd_sizes[0]*2); + + return 0; +} + +static void mmc_exit(void) +{ + blk_size[MAJOR_NR] = NULL; + blksize_size[MAJOR_NR] = NULL; + hardsect_size[MAJOR_NR] = NULL; + max_sectors[MAJOR_NR] = NULL; + hd[0].nr_sects = 0; + *gpioaddr_enable = gpio_outen_save; // IPP +} + +static void mmc_check_media(void) +{ + int old_state; + int rc; + + old_state = mmc_media_detect; + + // TODO: Add card detection here + mmc_media_detect = 1; + if (old_state != mmc_media_detect) + { + mmc_media_changed = 1; + if (mmc_media_detect == 1) + { + rc = mmc_init(); + if (rc != 0) printk("mmc: error in mmc_init (%d)\n", rc); + } + else + { + mmc_exit(); + } + } + + /* del_timer(&mmc_timer); + mmc_timer.expires = jiffies + 10*HZ; + add_timer(&mmc_timer); */ +} + +static int __init mmc_driver_init(void) +{ + int rc; + + rc = devfs_register_blkdev(MAJOR_NR, DEVICE_NAME, &mmc_bdops); + if (rc < 0) + { + printk(KERN_WARNING "mmc: can't get major %d\n", MAJOR_NR); + return rc; + } + + blk_init_queue(BLK_DEFAULT_QUEUE(MAJOR_NR), mmc_request); + + read_ahead[MAJOR_NR] = 8; + add_gendisk(&hd_gendisk); + + mmc_check_media(); + + /*init_timer(&mmc_timer); + mmc_timer.expires = jiffies + HZ; + mmc_timer.function = (void *)mmc_check_media; + add_timer(&mmc_timer);*/ + + return 0; +} + +static void __exit mmc_driver_exit(void) +{ + int i; + del_timer(&mmc_timer); + + for (i = 0; i < (1 << 6); i++) + fsync_dev(MKDEV(MAJOR_NR, i)); + + blk_cleanup_queue(BLK_DEFAULT_QUEUE(MAJOR_NR)); + del_gendisk(&hd_gendisk); + devfs_unregister_blkdev(MAJOR_NR, DEVICE_NAME); + mmc_exit(); +} + +module_init(mmc_driver_init); +module_exit(mmc_driver_exit); diff -urN -X dontdiff /usr4/linux-2.4.21/linux-2.4.21/drivers/mmc/mmc_init.c /usr4/linux-2.4.21.32/linux-2.4.21/drivers/mmc/mmc_init.c --- /usr4/linux-2.4.21/linux-2.4.21/drivers/mmc/mmc_init.c 1969-12-31 17:00:00.000000000 -0700 +++ /usr4/linux-2.4.21.32/linux-2.4.21/drivers/mmc/mmc_init.c 2005-10-24 13:14:56.000000000 -0600 @@ -0,0 +1,400 @@ +/* + *mmc_init.c: A simple program to initialize an MMC card on a Zipit + * + * The original I/O routines in this program are derived from two sources - + * devmem2.c: a program to allow userland I/O access + * mmc.c: an MMC card driver written by Madsuk/Rohde + * + * The original soure copyright information is included below - + * + ** devmem2.c: Simple program to read/write from/to any location in memory. + ** + ** Copyright (C) 2000, Jan-Derk Bakker (jdb@lartmaker.nl) + ** + ** + ** This software has been developed for the LART computing board + ** (http://www.lart.tudelft.nl/). The development has been sponsored by + ** the Mobile MultiMedia Communications (http://www.mmc.tudelft.nl/) + ** and Ubiquitous Communications (http://www.ubicom.tudelft.nl/) + ** projects. + ** + ** + ** This program is free software; you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation; either version 2 of the License, or + ** (at your option) any later version. + ** + ** This program is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with this program; if not, write to the Free Software + ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + ** + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define FATAL do { fprintf(stderr, "Error at line %d, file %s (%d) [%s]\n", \ + __LINE__, __FILE__, errno, strerror(errno)); exit(1); } while(0) + +#define MAP_SIZE 4096UL +#define MAP_MASK (MAP_SIZE - 1) + +/* Define the GPIO pin definitions here */ +/* The SD_DI value is used as a bit mask for the input function */ +/* The three output values indicate the respective bit functions in the common output register */ + +#define SD_DI 0x04 /* Zipit - PE[2] */ +#define SD_DO 0x0001 /* Zipit - using nEXTFIQ input in INTSR1 */ +#define SD_CLK 0x01 /* Zipit - PE[0] */ +#define SD_CS 0x02 /* Zipit - PE[1] */ + +//#define DEBUG_MODE 1 /* un-comment to enable debug print messages */ +#define SD_INPUT_INVERTED 1 /* using the nEXTFIQ input, the data is inverted */ + +/* we have only one device +static int hd_sizes[1<<6]; +static int hd_blocksizes[1<<6]; +static int hd_hardsectsizes[1<<6]; +static int hd_maxsect[1<<6]; +static struct hd_struct hd[1<<6]; + +static struct timer_list mmc_timer; */ +static int mmc_media_detect = 0; +static int mmc_media_changed = 1; + +typedef unsigned int uint32; + +static unsigned char port_state = 0x00; /* shadow register for current port state */ + +#define out_addr 0x80000083; +#define ena_addr 0x800000C3; +#define inp_addr 0x80000240; + +static volatile uint32 *gpioaddr_input = (uint32 *) inp_addr; /* Zipit - Interrupt Status Register 1 INTSR1 */ +static volatile uint32 *gpioaddr_output = (uint32 *) out_addr; /* Zipit - Port E Data Register PEDR */ +static volatile uint32 *gpioaddr_enable = (uint32 *) ena_addr; /* Zipit - Port E Data Direction Register PEDDR */ +/* static volatile uint32 *gpioaddr_control = (uint32 *)0xb800006c; Zipit - not used? */ + + + + + +static void mmc_spi_cs_low(void) +{ + port_state &= ~(SD_CS); + *gpioaddr_output = port_state; +} + +static void mmc_spi_cs_high(void) +{ + port_state |= SD_CS; + *gpioaddr_output = port_state; +} + +static unsigned char mmc_spi_io(unsigned char data_out) +{ + int i; + unsigned char result = 0, tmp_data = 0; + + for(i=0; i<8; i++) { + if(data_out & (0x01 << (7-i))) + port_state |= SD_DI; + else + port_state &= ~SD_DI; + + *gpioaddr_output = port_state; + port_state |= SD_CLK; + *gpioaddr_output = port_state; + + tmp_data = *gpioaddr_input; + + port_state &= ~SD_CLK; + *gpioaddr_output = port_state; + + result <<= 1; + +#ifdef SD_INPUT_INVERTED + if ((tmp_data & SD_DO)==0) /* account for nEXTFIQ inversion on Zipit */ + result |= 1; +#else + if (tmp_data & SD_DO) /* use this for normal input polarity */ + result |= 1; +#endif + } + + return(result); +} + + + + +static int mmc_card_init(void) +{ + unsigned char r = 0; + short i, j; + unsigned long flags; + +// save_flags(flags); +// cli(); + + printf("mmc Card init\n"); + mmc_spi_cs_high(); + for (i = 0; i < 20; i++) mmc_spi_io(0xff); + + mmc_spi_cs_low(); + + mmc_spi_io(0x40); /* Send hex 40 00 00 00 00 95 command CMD0 to reset card */ + for (i = 0; i < 4; i++) mmc_spi_io(0x00); + mmc_spi_io(0x95); + for (i = 0; i < 8; i++) + { + r = mmc_spi_io(0xff); /* poll the card N times until it responds with a 0x01 "in idle state" R1 response */ + if (r == 0x01) break; + } + mmc_spi_cs_high(); + mmc_spi_io(0xff); /* send 8 clocks after nCS goes high to complete transaction */ + if (r != 0x01) + { +// restore_flags(flags); /* card didn't respond with the 0x01, so declare a fault and exit */ + return(1); + } + + printf("mmc Card init *1*\n"); + for (j = 0; j < 10000; j++) + { + mmc_spi_cs_low(); + + mmc_spi_io(0x41); /* Send hex 41 00 00 00 00 FF command CMD1 (SEND_OP_COND) to wake-up card */ + for (i = 0; i < 4; i++) mmc_spi_io(0x00); + mmc_spi_io(0xff); + for (i = 0; i < 8; i++) + { + r = mmc_spi_io(0xff); + +#if defined(DEBUG_MODE) + printf("%x ",r); /* print the readback values if DEBUG_MODE is enabled */ +#endif + + if (r == 0x00) break; /* if the card response is 0x01, the "busy" bit is still set. when it's cleared, we're ready to go */ + } + mmc_spi_cs_high(); + mmc_spi_io(0xff); + if (r == 0x00) + { +// restore_flags(flags); /* if we get here, card is initialized and in "ready" state */ + printf("mmc Card init *2*\n"); + return(0); + } + } +// restore_flags(flags); + + return(2); +} + +static int mmc_card_config(void) +{ + unsigned char r = 0; + short i; + unsigned char csd[32]; + unsigned int c_size; + unsigned int c_size_mult; + unsigned int mult; + unsigned int read_bl_len; + unsigned int blocknr = 0; + unsigned int block_len = 0; + unsigned int size = 0; + + mmc_spi_cs_low(); + for (i = 0; i < 4; i++) mmc_spi_io(0xff); + mmc_spi_io(0x49); + for (i = 0; i < 4; i++) mmc_spi_io(0x00); + mmc_spi_io(0xff); + for (i = 0; i < 8; i++) + { + r = mmc_spi_io(0xff); + if (r == 0x00) break; + } + if (r != 0x00) + { + mmc_spi_cs_high(); + mmc_spi_io(0xff); + return(1); + } + for (i = 0; i < 8; i++) + { + r = mmc_spi_io(0xff); + if (r == 0xfe) break; + } + if (r != 0xfe) + { + mmc_spi_cs_high(); + mmc_spi_io(0xff); + return(2); + } + for (i = 0; i < 16; i++) + { + r = mmc_spi_io(0xff); + csd[i] = r; + } + for (i = 0; i < 2; i++) + { + r = mmc_spi_io(0xff); + } + mmc_spi_cs_high(); + mmc_spi_io(0xff); + if (r == 0x00) return(3); + + c_size = csd[8] + csd[7] * 256 + (csd[6] & 0x03) * 256 * 256; + c_size >>= 6; + c_size_mult = csd[10] + (csd[9] & 0x03) * 256; + c_size_mult >>= 7; + read_bl_len = csd[5] & 0x0f; + mult = 1; + mult <<= c_size_mult + 2; + blocknr = (c_size + 1) * mult; + block_len = 1; + block_len <<= read_bl_len; + size = block_len * blocknr; + size >>= 10; + + + + printf("Size = %d, hardsectsize = %d, sectors = %d\n", + size, block_len, blocknr); + + return 0; +} + + + +static int mmc_hardware_init(void) +{ + unsigned char gpio_outen; + + // Set inputs/outputs here + printf("mmc Hardware init\n"); + gpio_outen = *gpioaddr_enable; /* get current port state */ + +/* gpio_outen = (gpio_outen | SD_DI | SD_CLK | SD_CS) & ~SD_DO; */ + gpio_outen = (gpio_outen | SD_DI | SD_CLK | SD_CS); /* Zipit - use this for Zipit, input is in another port */ + *gpioaddr_enable = gpio_outen; + + port_state = (0x00 | SD_CS); /* Zipit - init port_state: DI and CLK low; nCS high */ + *gpioaddr_output = port_state; + + return 0; +} + + + +static int mmc_init(void) +{ + int rc; + + rc = mmc_hardware_init(); + + if ( rc != 0) + { + printf("mmc: error in mmc_hardware_init (%d)\n", rc); + return -1; + } + + rc = mmc_card_init(); + if ( rc != 0) + { + // Give it an extra shot + rc = mmc_card_init(); + if ( rc != 0) + { + printf("mmc: error in mmc_card_init (%d)\n", rc); + return -1; + } + } + +// memset(hd_sizes, 0, sizeof(hd_sizes)); + rc = mmc_card_config(); + if ( rc != 0) + { + printf("mmc: error in mmc_card_config (%d)\n", rc); + return -1; + } + + + return 0; +} + + + + + + + + +int main(int argc, char **argv) { + int fd; + void *map_base, *virt_addr; + unsigned long read_result, writeval; + off_t target; + int access_type = 'w'; + + + printf("Starting mmc_init process\n"); + + if((fd = open("/dev/mem", O_RDWR | O_SYNC)) == -1) FATAL; + printf("/dev/mem opened.\n"); + fflush(stdout); + + /* All the ports on the Zipit MMC modificaiton fall within a 4k memory block */ + /* between 0x8000.0000 and 0x8000.0FFF. We'll only need one mapping to support */ + /* all of the necessary I/O. Other implementations may need two or three separate */ + /* maps to support the port I/O. */ + + /* Map memory page */ + target = out_addr; + map_base = mmap(0, MAP_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, target & ~MAP_MASK); + if(map_base == (void *) -1) FATAL; + printf("Ports memory-mapped at address %p.\n", map_base); + fflush(stdout); + + + /* redefine the port addresses to point to the new memory locations instead of the physical addresses */ + target = inp_addr; + gpioaddr_input = map_base + (target & MAP_MASK); + printf("Input port mapped at address 0x%X (%p)\n", target, gpioaddr_input); + target = out_addr; + gpioaddr_output = map_base + (target & MAP_MASK); + printf("Output port mapped at address 0x%X (%p)\n", target, gpioaddr_output); + target = ena_addr; + gpioaddr_enable = map_base + (target & MAP_MASK); + printf("Enable port mapped at address 0x%X (%p)\n", target, gpioaddr_enable); + fflush(stdout); + + + + /* call the MMC initialization routine */ + printf("Entering mmc_init call\n"); + + mmc_init(); + + printf("Exiting mmc_init call\n"); + + + if(munmap(map_base, MAP_SIZE) == -1) FATAL; + close(fd); + return 0; +} + diff -urN -X dontdiff /usr4/linux-2.4.21/linux-2.4.21/drivers/mtd/maps/physmap.c /usr4/linux-2.4.21.32/linux-2.4.21/drivers/mtd/maps/physmap.c --- /usr4/linux-2.4.21/linux-2.4.21/drivers/mtd/maps/physmap.c 2005-11-04 20:52:16.000000000 -0700 +++ /usr4/linux-2.4.21.32/linux-2.4.21/drivers/mtd/maps/physmap.c 2005-09-17 21:32:18.000000000 -0600 @@ -12,6 +12,10 @@ #include #include +#ifdef CONFIG_MTD_PARTITIONS_MODULE +#define CONDIF_MTD_PARTITIONS 1 +#endif + #ifdef CONFIG_MTD_PARTITIONS #include #endif @@ -86,26 +90,39 @@ #else static struct mtd_partition physmap_partitions[] = { /* Put your own partition definitions here */ -#if 0 +#ifdef ZIPIT_DANGER_PHYSMAP +#define RESCUE_MASK 0 +#define NONRESCUE_MASK 0 +#else +#define RESCUE_MASK_WRIEABLE +#define NONRESCUE_MASK 0 +#endif +#if 1 { - name: "bootROM", - size: 0x80000, + name: "boot loader", + size: 0x2000, /* 8k */ offset: 0, - mask_flags: MTD_WRITEABLE, /* force read-only */ + mask_flags: RESCUE_MASK, /* force read-only */ }, { name: "zImage", - size: 0x100000, - offset: MTDPART_OFS_APPEND, - mask_flags: MTD_WRITEABLE, /* force read-only */ + size: 0x8e000, /* 568k */ + offset: 0x2000, + mask_flags: RESCUE_MASK, /* force read-only */ }, { - name: "ramdisk.gz", - size: 0x300000, - offset: MTDPART_OFS_APPEND, - mask_flags: MTD_WRITEABLE, /* force read-only */ + name: "rescue/initrd" + size: 0xc0000, /* 768k */ + offset: 0x90000, + mask_flags: RESCUE_MASK, /* force read-only */ + }, { + name: "user area A", + size: 0xa0000, /* 640k */ + offset: 0x150000, + mask_flags: NONRESCUE_MASK, /* read-write */ }, { - name: "User FS", - size: MTDPART_SIZ_FULL, - offset: MTDPART_OFS_APPEND, + name: "user area B", + size: 0x10000, /* 64k */ + offset: 0x1f0000, + mask_flags: NONRESCUE_MASK, /* read-write */ } #endif }; @@ -122,7 +139,7 @@ printk(KERN_NOTICE "physmap flash device: %x at %x\n", WINDOW_SIZE, WINDOW_ADDR); #ifdef CONFIG_ARCH_ZIPLINE - physmap_map.map_priv_1 = (unsigned long)ioremapi_nocache(WINDOW_ADDR, WINDOW_SIZE); + physmap_map.map_priv_1 = (unsigned long)ioremap_nocache(WINDOW_ADDR, WINDOW_SIZE); #else physmap_map.map_priv_1 = (unsigned long)ioremap(WINDOW_ADDR, WINDOW_SIZE); #endif @@ -156,9 +173,23 @@ printk(KERN_NOTICE "Using physmap partition definition\n"); add_mtd_partitions (mymtd, physmap_partitions, NUM_PARTITIONS); + } else { + printk(KERN_NOTICE + "No partitions defined in physmap.c\n"); } #endif + /* Now reset whole-chip device to read-only status */ + +#ifndef ZIPIT_DANGER_PHYSMAP + printk(KERN_NOTICE + "Safe Zipit MTD mode: Marking whole-block device and kernel/initrd R/O\n"); + mymtd->flags = MTD_CAP_ROM; +#else + printk(KERN_NOTICE + "DANGER Zipit MTD mode: all flash partitions writeable\n"); +#endif + #endif return 0; } diff -urN -X dontdiff /usr4/linux-2.4.21/linux-2.4.21/drivers/serial/clps711x.c /usr4/linux-2.4.21.32/linux-2.4.21/drivers/serial/clps711x.c --- /usr4/linux-2.4.21/linux-2.4.21/drivers/serial/clps711x.c 2005-11-04 20:52:17.000000000 -0700 +++ /usr4/linux-2.4.21.32/linux-2.4.21/drivers/serial/clps711x.c 2005-09-13 18:08:54.000000000 -0600 @@ -196,6 +196,7 @@ struct uart_port *port = dev_id; struct circ_buf *xmit = &port->info->xmit; int count; + unsigned int full; if (port->x_char) { clps_writel(port->x_char, UARTDR(port)); @@ -210,6 +211,9 @@ count = port->fifosize >> 1; do { + full = (clps_readl(SYSFLG(port)) & SYSFLG_UTXFF); + if (full) /* test for fifo full, this seems neccessary for the Zipit */ + break; clps_writel(xmit->buf[xmit->tail], UARTDR(port)); xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1); port->icount.tx++; diff -urN -X dontdiff /usr4/linux-2.4.21/linux-2.4.21/drivers/sound/Config.in /usr4/linux-2.4.21.32/linux-2.4.21/drivers/sound/Config.in --- /usr4/linux-2.4.21/linux-2.4.21/drivers/sound/Config.in 2005-11-04 20:52:11.000000000 -0700 +++ /usr4/linux-2.4.21.32/linux-2.4.21/drivers/sound/Config.in 2005-03-31 09:34:31.000000000 -0700 @@ -125,6 +125,9 @@ dep_tristate ' VIA 82C686 Audio Codec' CONFIG_SOUND_VIA82CXXX $CONFIG_PCI dep_mbool ' VIA 82C686 MIDI' CONFIG_MIDI_VIA82CXXX $CONFIG_SOUND_VIA82CXXX +dep_tristate ' Zipline DAI audio support ' CONFIG_SOUND_7212 $CONFIG_SOUND + + if [ "$CONFIG_ARCH_SA1100" = "y" ]; then dep_tristate ' StrongARM-11x0 Sound Drivers' CONFIG_SOUND_SA1100 $CONFIG_ARCH_SA1100 $CONFIG_SOUND dep_tristate ' UDA1341 Stereo Codec' CONFIG_SOUND_UDA1341 $CONFIG_L3 $CONFIG_SOUND_SA1100 $CONFIG_SOUND diff -urN -X dontdiff /usr4/linux-2.4.21/linux-2.4.21/drivers/sound/Makefile /usr4/linux-2.4.21.32/linux-2.4.21/drivers/sound/Makefile --- /usr4/linux-2.4.21/linux-2.4.21/drivers/sound/Makefile 2005-11-04 20:52:11.000000000 -0700 +++ /usr4/linux-2.4.21.32/linux-2.4.21/drivers/sound/Makefile 2005-04-10 14:13:25.000000000 -0600 @@ -90,6 +90,8 @@ obj-$(CONFIG_SOUND_RME96XX) += rme96xx.o obj-$(CONFIG_SOUND_BT878) += btaudio.o obj-$(CONFIG_SOUND_IT8172) += ite8172.o ac97_codec.o +obj-$(CONFIG_SOUND_7212) += ep7212_audiodma.o wm8751l.o zipitaudio.o + ifeq ($(CONFIG_MIDI_EMU10K1),y) obj-$(CONFIG_SOUND_EMU10K1) += sound.o diff -urN -X dontdiff /usr4/linux-2.4.21/linux-2.4.21/drivers/sound/ep7212_audiodma.S /usr4/linux-2.4.21.32/linux-2.4.21/drivers/sound/ep7212_audiodma.S --- /usr4/linux-2.4.21/linux-2.4.21/drivers/sound/ep7212_audiodma.S 1969-12-31 17:00:00.000000000 -0700 +++ /usr4/linux-2.4.21.32/linux-2.4.21/drivers/sound/ep7212_audiodma.S 2005-04-26 10:38:31.000000000 -0600 @@ -0,0 +1,235 @@ +/* + * CL-PS7212/empeg Audio Device Driver - "DMA" (fiq!) section + * + * (C)2000 empeg ltd, http://www.empeg.com + * + * linux/drivers/char/ep7212_audiodma.S + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * Authors: + * Hugo Fiennes, + * Umar Qureshey, + * Petko Manolov, + * + * Version history: + * See ep7212_audio.c + */ + +#if !defined (__ASSEMBLY__) +#define __ASSEMBLY__ +#endif +#include +#include +#define DO_MONO + + .text + +.set BUFFERS_USED, 0 +.set BUFFERS_FREE, 4 +.set BUFFERS_HEAD, 8 +.set BUFFERS_TAIL, 12 +.set BUFFERS_POINTER, 16 +.set BUFFERS_MODE, 20 +.set BUFFERS_STATE, 24 +.set BUFFERS_ZERO, 28 +.set BUFFERS_VBASE, 32 +.set BUFFERS_COUNT, 128 + + .global SYMBOL_NAME(audio_7212_fiqend) + .global SYMBOL_NAME(audio_7212_fiq) + +audio_7212_fiq: + # Everything here is designed for the quickest possible + # "normal" fiq service, ie when we are filling from a known + # buffer + # r8 - scratch + # r9 - pointer to audio control structure + # r10 - pointer to DAI registers (0xd0002000) + # r11 - current player buffer + # r12 - number of samples left in buffer + # r13 - CPU base address (used to be stack pointer) + + # Do we have data in the buffer? + + cmp r12,#0 + beq fiq_nextbuffer + +newbuffers: # Read four samples from the play buffer and write them to the + # DAI FIFO. +#ifdef DO_MONO + ldr r8, [r9, #BUFFERS_MODE] + cmp r8, #0 + mov r13, #0 + beq mono +#endif + +/* Because the Zipit uses 16 bit wide memory we will use halfword instructions + to see if we can cut down the memory accesses. +*/ + + ldrh r8,[r11],#2 + str r8,[r10,#0x0080] + ldrh r8,[r11],#2 + strh r8,[r10,#0x0040] + + ldrh r8,[r11],#2 + str r8,[r10,#0x0080] + ldrh r8,[r11],#2 + strh r8,[r10,#0x0040] + + ldrh r8,[r11],#2 + str r8,[r10,#0x0080] + ldrh r8,[r11],#2 + strh r8,[r10,#0x0040] + + ldrh r8,[r11],#2 + str r8,[r10,#0x0080] + ldrh r8,[r11],#2 + strh r8,[r10,#0x0040] + + + # Decrement bytes left count + sub r12,r12,#16 +mono_out0: + # Clear RX fifos (euck!) + ldr r8,[r10,#0x0080] + ldr r8,[r10,#0x0040] + ldr r8,[r10,#0x0080] + ldr r8,[r10,#0x0040] + ldr r8,[r10,#0x0080] + ldr r8,[r10,#0x0040] + ldr r8,[r10,#0x0080] + ldr r8,[r10,#0x0040] + + mvn r8,#0 + str r8,[r10,#0x0100] + + # All done, return + subs pc,lr,#4 + +fiq_nextbuffer: + + # Are we supposed to be consuming data yet? + ldr r8,[r9,#BUFFERS_STATE] + cmp r8,#0 + beq zerofill + + # Check to see if there are any buffers left + ldr r8,[r9,#BUFFERS_USED] + cmp r8,#0 + bne fiq_nextbuffer1 + + # No buffers left; we are empty. Suspend playing until user + # task at least half-fills the audio buffer + mov r8,#0 + str r8,[r9,#BUFFERS_STATE] + +zerofill: + # Load from zero buffer + ldr r11,[r9,#BUFFERS_ZERO] + bal fiq_newbuffer + +fiq_nextbuffer1: + # Twiddle buffer counts + sub r8,r8,#1 + str r8,[r9,#BUFFERS_USED] + ldr r8,[r9,#BUFFERS_FREE] + add r8,r8,#1 + str r8,[r9,#BUFFERS_FREE] + + # Get next buffer + ldr r8,[r9,#BUFFERS_TAIL] + ldr r11,[r9,#BUFFERS_POINTER] + add r11,r11,r8,lsl#12 /* x4096 */ + add r11,r11,r8,lsl#9 /* x512 = 4608 */ + add r8,r8,#1 + cmp r8,#BUFFERS_COUNT + moveq r8,#0 + str r8,[r9,#BUFFERS_TAIL] + +fiq_newbuffer: + # Buffer is now full + mov r12,#4608 +#ifdef DO_MONO + ldr r8, [r9, #BUFFERS_MODE] + cmp r8, #0 + mov r13, #1 + beq mono +#endif + ldr r8,[r11],#4 + str r8,[r10,#0x0080] + mov r8,r8,lsr#16 + str r8,[r10,#0x0040] + + ldr r8,[r11],#4 + str r8,[r10,#0x0080] + mov r8,r8,lsr#16 + str r8,[r10,#0x0040] + + ldr r8,[r11],#4 + str r8,[r10,#0x0080] + mov r8,r8,lsr#16 + str r8,[r10,#0x0040] + + ldr r8,[r11],#4 + str r8,[r10,#0x0080] + mov r8,r8,lsr#16 + str r8,[r10,#0x0040] + + sub r12,r12,#16 +mono_out1: + # Clear RX fifos (euck!) + ldr r8,[r10,#0x0080] + ldr r8,[r10,#0x0040] + ldr r8,[r10,#0x0080] + ldr r8,[r10,#0x0040] + ldr r8,[r10,#0x0080] + ldr r8,[r10,#0x0040] + ldr r8,[r10,#0x0080] + ldr r8,[r10,#0x0040] + + mvn r8,#0 + str r8,[r10,#0x0100] + + # Run bottom half (no need to save r4-r11) + #stmfd r13!,{r0-r3,r12,r14} + #mov r0,r9 + #mov lr,pc + #ldr pc,[r9,#BUFFERS_CALL] + #ldmia r13!,{r0-r3,r12,r14} + + + #Generate bottom-half IRQ + ldr r13, [r9, #BUFFERS_VBASE] + ldr r8, [r13, #0x0280] + orr r8, r8, #0x100 + str r8, [r13, #0x0280] + str r8, [r13, #0x06C0] + mov r8, #1 + str r8, [r13, #0x0300] + + subs pc,lr,#4 + +mono: + ldr r8, [r11], #4 + str r8, [r10, #0x0080] + str r8, [r10, #0x0040] + mov r8, r8, lsr #16 + str r8, [r10, #0x0080] + str r8, [r10, #0x0040] + ldr r8, [r11], #4 + str r8, [r10, #0x0080] + str r8, [r10, #0x0040] + mov r8, r8, lsr #16 + str r8, [r10, #0x0080] + str r8, [r10, #0x0040] + + sub r12, r12, #8 + cmp r13, #0 + beq mono_out0 + b mono_out1 + +SYMBOL_NAME(audio_7212_fiqend): diff -urN -X dontdiff /usr4/linux-2.4.21/linux-2.4.21/drivers/sound/wm8751l.c /usr4/linux-2.4.21.32/linux-2.4.21/drivers/sound/wm8751l.c --- /usr4/linux-2.4.21/linux-2.4.21/drivers/sound/wm8751l.c 1969-12-31 17:00:00.000000000 -0700 +++ /usr4/linux-2.4.21.32/linux-2.4.21/drivers/sound/wm8751l.c 2005-04-15 19:01:43.000000000 -0600 @@ -0,0 +1,235 @@ +/* + * Wolfson Micro WM8751L Stereo DAC I2C Driver + * For the Zipit IM device + * + * (C) 2005 Ken McGuire + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * Based on original work by: + * + * CS43L42 DAC on the EDB7312 Cogent eval board + * + * (C) 2003 Heeltoe Consulting, http://www.heeltoe.com + * (c) 2003 Nucleus Systems, Petko Manolov + * + * linux/drivers/sound/wm8751l.c + */ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + /* Shift the address over to make room for the r/w bit */ +#define ADDR_WM8751L (0x1b << 1) +/* direction and i/o bits have the same offset */ +#define SCL (1 << 7) +#define SDA (1 << 6) + +static void make_scl_sda_outputs(void) +{ + unsigned char tmp; + + tmp = clps_readb(PBDDR); + tmp |= (SCL | SDA); + clps_writeb(tmp, PBDDR); +} + +static void make_sda_input(void) +{ + unsigned char tmp; + + tmp = clps_readb(PBDDR); + tmp &= ~SDA; + clps_writeb(tmp, PBDDR); +} + +static void set_scl(int val) +{ + unsigned char tmp; + + tmp = clps_readb(PBDR); + if (val) + tmp |= SCL; + else + tmp &= ~SCL; + clps_writeb(tmp, PBDR); +} + +static void set_sda(int val) +{ + unsigned char tmp; + + tmp = clps_readb(PBDR); + if (val) + tmp |= SDA; + else + tmp &= ~SDA; + clps_writeb(tmp, PBDR); +} + +static int get_sda(void) +{ + unsigned char tmp; + + tmp = clps_readb(PBDR); + return (tmp & SDA) ? 1 : 0; +} + + +static void clock_byte_out(int b, int set_output) +{ + int i, ack; + + for (i = 0; i < 8; i++) { + udelay(3); + set_sda(b & 0x80); + udelay(3); + set_scl(1); + udelay(5); /* Tlow == 4.7 uS */ + set_scl(0); + b <<= 1; + } + /* ack bit */ + make_sda_input(); + udelay(5); + set_scl(1); + udelay(2); + ack = get_sda(); + udelay(3); + set_scl(0); +// printk("ack= %d\n", ack); + + + if (set_output) { + make_scl_sda_outputs(); + } +} + + +static int wm8751l_i2c_write(int addr, int reg, int value) +{ + +// printk("dac write reg= %d, val= %d\n", reg, value); + + set_sda(1); + set_scl(1); + udelay(5); + set_sda(0); + udelay(4); + set_scl(0); + clock_byte_out(addr, 1); + clock_byte_out(reg, 1); + clock_byte_out(value, 1); + set_sda(1); + set_scl(1); + udelay(5); + + return 0; +} + +int wm8751l_write(int reg, int value) +{ + wm8751l_i2c_write(ADDR_WM8751L, reg, value); + + return 0; +} + +int setup_wm8751l(void) +{ + volatile long u; + volatile char port_b; + + printk("wm8751l: init dac\n"); + port_b = clps_readb(PBDR) & ~(SCL | SDA); + + + /* make SDA & SCL outputs */ + make_scl_sda_outputs(); + + + /* delay while the DAC initializes */ + for(u = 0; u < 15; u++) + udelay(5); + + + /* wm8751 init to Zipit compatible values */ + + /* reset the DAC */ + + wm8751l_i2c_write(ADDR_WM8751L, 0x1e, 0x00); + + /* power on the DAC R25 PWR Management */ + + wm8751l_i2c_write(ADDR_WM8751L, 0x33, 0xc0); + + /* delay while the DAC initializes */ + for(u = 0; u < 15; u++) + udelay(5); + + /* R2 LOUT1 */ + + wm8751l_i2c_write(ADDR_WM8751L, 0x05, 0x60); + + /* R3 ROUT1 */ + + wm8751l_i2c_write(ADDR_WM8751L, 0x07, 0x60); + + /* R5 DAC Control */ + + wm8751l_i2c_write(ADDR_WM8751L, 0x0a, 0x00); + + /* delay while the DAC initializes */ + for(u = 0; u < 15; u++) + udelay(5); + + /* R7 Audio Interface */ + + wm8751l_i2c_write(ADDR_WM8751L, 0x0e, 0x01); + + /* R8 Clocking */ + + wm8751l_i2c_write(ADDR_WM8751L, 0x10, 0x20); + + /* R26 Pwr Management 2 */ + + wm8751l_i2c_write(ADDR_WM8751L, 0x35, 0xf8); + + /* R24 Additional 2 */ + + wm8751l_i2c_write(ADDR_WM8751L, 0x30, 0x68); + + /* R34 Left Mix 1 */ + + wm8751l_i2c_write(ADDR_WM8751L, 0x45, 0x00); + + /* R37 Right Mix 1 */ + + wm8751l_i2c_write(ADDR_WM8751L, 0x4b, 0x00); + + /* R10 Left Digital Volume */ + + wm8751l_i2c_write(ADDR_WM8751L, 0x15, 0xff); + + /* R11 Right Digital Volume */ + + wm8751l_i2c_write(ADDR_WM8751L, 0x17, 0xff); + + /* restore original port B value */ + port_b |= clps_readb(PBDR); + clps_writeb(port_b, PBDR); + printk("wm8751l: init dac complete\n"); + + return 0; +} diff -urN -X dontdiff /usr4/linux-2.4.21/linux-2.4.21/drivers/sound/zipitaudio.c /usr4/linux-2.4.21.32/linux-2.4.21/drivers/sound/zipitaudio.c --- /usr4/linux-2.4.21/linux-2.4.21/drivers/sound/zipitaudio.c 1969-12-31 17:00:00.000000000 -0700 +++ /usr4/linux-2.4.21.32/linux-2.4.21/drivers/sound/zipitaudio.c 2005-04-26 10:38:42.000000000 -0600 @@ -0,0 +1,1118 @@ +/* + * Audio Device Driver + * For the Zipit IM device + * + * (C) 2005 Ken McGuire + * + * + * Based on the original work by: + * + * CL-PS7212/empeg Audio Device Driver + * + * (C)2000 empeg ltd, http://www.empeg.com + * + * linux/drivers/sound/ep7212_audio.c + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * N.B: This driver requires that it be fed data 4608 bytes at a time. + * See http://www.mock.com/receiver/demo for demo players or better + * yet, fix this! + * + * Version history: + * Hugo Fiennes + * + * 22-Feb-2000 - First version + * 28-Feb-2000 - Now flushes RX fifo to prevent spurious FIQs + * 29-Feb-2000 - Buffer needs to be half-full after emptying to start DMA + * consumption of data. This helps prevent stuttering on + * startup. + * 08-Mar-2000 - Use new save_flags_clif() call to disable FIQs during buffer + * twiddling. + * 02-May-2000 - Added mute control (sets soft mute bit on pcm1716) + * 07-May-2000 - Added hard mute control (sets hardware mute bit) + * + * Umar Qureshey + * + * 29-Jul-2002 - Ported to Linux v2.4; removed empeg hardware dependent + * code i.e. mixer and DAC controls. + * 04-Aug-2002 - Changed save_flags_clif() calls into successive cli() + * and clf() calls because they're "standard" ARM Linux. + * 05-Aug-2002 - Implemented a new bottom-half code activation in the + * audio_7212dma.S file because the bottom-half calls kernel + * queue functions and was run before the FIQ handler code + * exited. This crashed the kernel since kernel queue + * functions are not allowed in FIQ handler code (it would + * change an FIQ to an IRQ thus nullifying its advantage). + * Workaround to this issue is activating a normal IRQ in the + * FIQ handler and attaching the bottom-half code to that IRQ + * handler so as soon as the FIQ handler exits, the IRQ is + * executed with the bottom-half functionality. To generate + * an IRQ, the TC1 timer is loaded with a value of 1 which + * effectively activates an IRQ in one clock cycle to be + * executed after the FIQ code exits. + * 22-Aug-2002 - Added GPL notice. This software was originally + * distributed under GPL licensing. Added player notice. + * + * Petko Manolov , http://www.nucleusys.com/ + * + * 29-Jul-2003 - Modularizing the driver and writing exit routine. + * 31-Jul-2003 - Now the mono mode conversion is done in the fiq handler and + * check if it's size is greater than 0x1e4. + * Code cleanups, driver ported to edb7312. The DAI clock + * source is now a config option. + * + * + * Ken Mcguire + * + * 3-Apr-2005 - Mods to support Zipit IM device. + * 4-Apr-2005 - Added Mixer code + * 9-Apr-2005 - Added DAC interfac + * + * linux/drivers/sound/zipitaudio.c + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#define DRIVER_AUTHOR "Ken McGuire, Hugo Fiennes, Umar Qureshey and Petko Manolov" +#define DRIVER_DESC "ep7212/ep7312/Zipit audio driver" +MODULE_AUTHOR( DRIVER_AUTHOR ); +MODULE_DESCRIPTION( DRIVER_DESC ); +MODULE_LICENSE("GPL"); + +#ifdef CONFIG_PROC_FS +#include +#include +#endif + +#define DSP_PURGE 1 +#undef MIXER + +/* + * Debugging + */ +#if 0 +#define AUDIO_DEBUG 1 +#define AUDIO_DEBUG_VERBOSE 1 +#define AUDIO_DEBUG_STATS 1 /*AUDIO_DEBUG | AUDIO_DEBUG_VERBOSE*/ +#endif + +/* + * Constants + */ + +/* Names */ +#define AUDIO_NAME "Zipit audio" +#define AUDIO_NAME_VERBOSE "Zipit clps7212/wm8751l audio driver" +#define AUDIO_VERSION_STRING "Revision: 0.1" + +/* device numbers */ +#define AUDIO_MAJOR (245) //(ZIPIT_AUDIO_MAJOR) +#define AUDIO_NMINOR (5) +#define MIXER_MINOR (0) +#define DSP_MINOR (3) +#define AUDIO_MINOR (4) + +/* Client parameters */ +#define AUDIO_NOOF_BUFFERS (128) /* Number of audio buffers */ +/* NOTE! Need to move this to a header file as audio_7212dma needs this too */ + +#define AUDIO_BUFFER_SIZE (4608) /* Size of user buffer chunks */ + +/* Only EXTCLK mode works on the EDB7312. */ +#ifdef CONFIG_ARCH_EDB7312 +#define CONFIG_SOUND_EP7312_EXTCLK +#endif + + extern int setup_wm8751l(void); + extern int wm8751l_write(int reg, int value); + +/* + * Types + */ +/* structure to hold mixer specific information */ + +/* statistics */ +typedef struct { + ulong samples; + ulong interrupts; + ulong wakeups; + ulong fifo_err; + ulong buffer_hwm; + ulong first_fills; + ulong below_halfs; +} audio_stats; + +typedef struct { + /* Buffer */ + unsigned char data[AUDIO_BUFFER_SIZE]; +} audio_buf; + +static int resid_size; +static unsigned char resid_buf[AUDIO_BUFFER_SIZE]; + +/* NOTE! This struct is accessed directly by audio_7212dma.S, and so the + order and type of the first 7 entries are critical and should not be + changed without appropriate modifications to the dma code */ +typedef struct { + /* Buffers */ + volatile int used; /* Do not move */ + volatile int free; /* Do not move */ + volatile int head; /* Do not move */ + volatile int tail; /* Do not move */ + audio_buf *buffers; /* Do not move */ + volatile int mode; /* Do not move */ + int state; /* Do not move: Is DMA enabled? */ + audio_buf *zero; /* Do not move */ + volatile int vbase; + + /* Stack for FIQ routine - not referenced by fiq code */ + int *fiqstack; /* now defunct; should be removed UQ */ + + /* Buffer management */ + wait_queue_head_t waitq; + + /* Statistics */ + audio_stats stats; +} audio_dev; + +/* Devices in the system; just the one channel at the moment */ +static audio_dev audio[1]; +static int sample_rate; +static struct tq_struct emit_task; + +#ifdef CONFIG_PROC_FS +static struct proc_dir_entry *proc_audio; +static int audio_read_proc(char *buf, char **start, off_t offset, int length, + int *eof, void *private) +{ + audio_dev *dev = &audio[0]; + + length = 0; + length += sprintf(buf + length, "buffers : %d\n", AUDIO_NOOF_BUFFERS); + length += sprintf(buf + length, "buf size : %d\n", AUDIO_BUFFER_SIZE); + length += sprintf(buf + length, "samples : %ld\n", dev->stats.samples); + length += sprintf(buf + length, "interrupts: %ld\n", dev->stats.interrupts); + length += sprintf(buf + length, "wakeups : %ld\n", dev->stats.wakeups); + length += sprintf(buf + length, "fifo errs : %ld\n", dev->stats.fifo_err); + length += sprintf(buf + length, "buffer hwm: %ld\n", dev->stats.buffer_hwm); + length += sprintf(buf + length, "first fill: %ld\n", dev->stats.first_fills); + length += sprintf(buf + length, "below half: %ld\n", dev->stats.below_halfs); + + return (length); +} + +#endif /* CONFIG_PROC_FS */ + +/* FIQ stuff */ +static struct fiq_handler fh = { NULL, "audiodma", NULL, NULL }; +extern char audio_7212_fiq, audio_7212_fiqend; + +void newbuffer(int irq, void *dev_id, struct pt_regs *regs) +{ + queue_task(&emit_task, &tq_immediate); + mark_bh(IMMEDIATE_BH); +} + +static void emit_action(void *p) +{ + audio_dev *dev = &audio[0]; + + /* If we have just dipped below halfway, note this */ + if (dev->used == ((AUDIO_NOOF_BUFFERS / 2) - 1)) + dev->stats.below_halfs++; + + wake_up_interruptible(&audio[0].waitq); +} + +/* ***** arbitrary size buffers ***** */ +static int audio_write(struct file *file, const char *buffer, size_t count, + loff_t * ppos) +{ + audio_dev *dev = file->private_data; + int total = 0; + int local_buffer = 0; + +#if AUDIO_DEBUG_VERBOSE + printk(AUDIO_NAME + ": audio_write: count=%d, used=%d free=%d head=%d tail=%d\n", + count, dev->used, dev->free, dev->head, dev->tail); +#endif + + if (count <= 0) { + printk("ep7212_audio: %d byte write\n", count); + return 0; + } + + /* Any space left? (No need to disable IRQs: we're just checking for + a full buffer condition) */ + if (dev->free == 0) { + if (file->f_flags & O_NONBLOCK) { + return (-EAGAIN); + } + + while (dev->free < 8) { + /* next buffer full */ + interruptible_sleep_on(&dev->waitq); + } + } + + /* If we're filling an empty buffer, note this */ + if (dev->used == 0) + dev->stats.first_fills++; + + /* if we have a residual buffer, try and use that first */ + if (resid_size > 0 && (resid_size + count) >= AUDIO_BUFFER_SIZE) { + int remaining; + unsigned long flags; + + if (0) + printk("resid_size %d, count %d\n", resid_size, count); + + /* grab a buffer */ + save_flags(flags); + cli(); + clf(); + dev->free--; + restore_flags(flags); + + /* use residual first */ + memcpy(dev->buffers[dev->head].data, resid_buf, resid_size); + + /* if there's space, fill from user's write */ + if (resid_size < AUDIO_BUFFER_SIZE) { + remaining = AUDIO_BUFFER_SIZE - resid_size; + + if (0) + printk("remaining %d\n", remaining); + if (local_buffer) + memcpy(dev->buffers[dev->head].data + + resid_size, buffer, remaining); + else + copy_from_user(dev->buffers[dev->head].data + + resid_size, buffer, remaining); + + buffer += remaining; + count -= remaining; + total += remaining; + } +// fix_buffer(dev->buffers[dev->head].data); + + dev->head++; + if (dev->head == AUDIO_NOOF_BUFFERS) + dev->head = 0; + + dev->stats.samples += AUDIO_BUFFER_SIZE; + resid_size = 0; + + /* buffer is ready, tell the FIQ section there's new data */ + save_flags(flags); + cli(); + clf(); + dev->used++; + restore_flags(flags); + } + + if (0) + printk("before loop, count %d\n", count); + + while (dev->free < 8) { + /* next buffer full */ + interruptible_sleep_on(&dev->waitq); + } + + /* fill as many buffers as we can */ + while (count >= AUDIO_BUFFER_SIZE) { + unsigned long flags; + + if (dev->free == 0) { + if (file->f_flags & O_NONBLOCK) { + return total; + } + + /* next buffer full */ + interruptible_sleep_on(&dev->waitq); + } + + /* Critical sections kept as short as possible to give good + latency for other tasks: note we disable FIQs here too */ + save_flags(flags); + cli(); + clf(); + dev->free--; + restore_flags(flags); + + /* Copy chunk of data from user-space. We're safe updating the + head when not in cli() as this is the only place the head gets twiddled */ + if (local_buffer) + memcpy(dev->buffers[dev->head++].data, + buffer, AUDIO_BUFFER_SIZE); + else + copy_from_user(dev->buffers[dev->head++].data, + buffer, AUDIO_BUFFER_SIZE); + +// fix_buffer(dev->buffers[dev->head-1].data); + + if (dev->head == AUDIO_NOOF_BUFFERS) + dev->head = 0; + total += AUDIO_BUFFER_SIZE; + dev->stats.samples += AUDIO_BUFFER_SIZE; + count -= AUDIO_BUFFER_SIZE; + buffer += AUDIO_BUFFER_SIZE; + + /* buffer is ready, tell the FIQ section there's new data */ + save_flags(flags); + cli(); + clf(); + dev->used++; + restore_flags(flags); + } + + /* keep residual in a local buffer */ + if (count > 0) { + if (0) + printk("tail count %d\n", count); + + if (resid_size + count > AUDIO_BUFFER_SIZE) + count = AUDIO_BUFFER_SIZE - resid_size; + + if (local_buffer) + memcpy(&resid_buf[resid_size], buffer, count); + else + copy_from_user(&resid_buf[resid_size], buffer, count); + + resid_size += count; + total += count; + } + + /* Update hwm */ + if (dev->used > dev->stats.buffer_hwm) + dev->stats.buffer_hwm = dev->used; + + /* If we were empty before, enable DMA if we have passed the half-full + threshold */ + if (dev->state == 0 && dev->used >= (AUDIO_NOOF_BUFFERS / 2)) + dev->state = 1; + + if (0) + printk("total %d\n", total); + + /* Write complete */ + return (total); +} + +/* Throw away all complete blocks waiting to go out to the DAC and return how + many bytes that was. */ +static int audio_purge(audio_dev * dev) +{ + unsigned long flags; + int bytes; + struct pt_regs regs; + + /* We don't want DMA to come in here! */ + save_flags(flags); + cli(); + clf(); + + /* Work out how many bytes are left to send to the audio device: + we only worry about full buffers */ + bytes = dev->used * AUDIO_BUFFER_SIZE; + + /* Empty buffers */ + dev->head = dev->tail = dev->used = 0; + dev->free = AUDIO_NOOF_BUFFERS - 1; + + /* Stop DMA handler */ + get_fiq_regs(®s); + regs.ARM_fp = 0; /* r11 */ + regs.ARM_ip = 0; /* r12 */ + set_fiq_regs(®s); + + /* Let it run again */ + restore_flags(flags); + + return bytes; +} + +#define DAI64FS 0x2600 +#define I2SF64 (1<<0) +#define AUDCLKEN (1<<1) +#define AUDCLKSRC (1<<2) +#define MCLK256EN (1<<3) +#define LOOPBACK (1<<5) +#define RATE_48K (6<<8) +#define RATE_44K (8<<8) /* assumes 11.2896Mhz external clock */ +#define RATE_32K (11<<8) +#define RATE_24K (12<<8) +#define RATE_22K (16<<8) /* assumes 11.2896Mhz external clock */ +#define RATE_16K (22<<8) +#define RATE_12K (24<<8) +#define RATE_11K (32<<8) /* assumes 11.2896Mhz external clock */ +#define RATE_8K (44<<8) +#define RATE_MASK (0x7f<<8) + +static int set_sample_rate(int rate) +{ + int tmp; + + tmp = clps_readl(DAI64FS); + tmp &= ~RATE_MASK; + + switch (rate) { + case 44100: + clps_writel(tmp | RATE_44K, DAI64FS); + sample_rate = rate; + break; + case 22050: + clps_writel(tmp | RATE_22K, DAI64FS); + sample_rate = rate; + break; + case 11025: + clps_writel(tmp | RATE_11K, DAI64FS); + sample_rate = rate; + break; +// case 48000: +// clps_writel(tmp | RATE_48K, DAI64FS); +// sample_rate = rate; +// break; + case 32000: + clps_writel(tmp | RATE_32K, DAI64FS); + sample_rate = rate; + break; +// case 24000: +// clps_writel(tmp | RATE_24K, DAI64FS); +// sample_rate = rate; +// break; + case 16000: + clps_writel(tmp | RATE_16K, DAI64FS); + sample_rate = rate; + break; +// case 12000: +// clps_writel(tmp | RATE_12K, DAI64FS); +// sample_rate = rate; +// break; + case 8000: + clps_writel(tmp | RATE_8K, DAI64FS); + sample_rate = rate; + break; + default: + printk("unsupported sampling rate %d\n", rate); + return -1; + } + + return 0; +} + +static int audio_ioctl(struct inode *inode, struct file *file, uint command, + ulong arg) +{ + audio_dev *dev = file->private_data; + int val; + + switch (command) { + case SNDCTL_DSP_RESET: + + audio_7212_exit(); + zipit_init(); + + resid_size = 0; +#ifdef AUDIO_DEBUG + printk("ep7212_audio: reset\n"); +#endif + return 0; + + case SNDCTL_DSP_SYNC: + resid_size = 0; +#ifdef AUDIO_DEBUG + printk("ep7212_audio: sync\n"); +#endif + return 0; + + case SNDCTL_DSP_SPEED: + if (get_user(val, (int *) arg)){ + printk("error in setspeed arg=%d, val= %d\n",arg,val); + return -EFAULT; } + +// #ifdef AUDIO_DEBUG + if (val >= 0) { +// printk("ep7212_audio: set sample rate arg= %d, val= %d\n", arg, val); + } +// #endif +// if (val != 44100) +// return 1; +// else +// return 0; + sample_rate = val; +// printk("val1= %d\n",val); + val= set_sample_rate(sample_rate); +// printk("val2= %d\n",val); +// if (val = -1) +// return -1; +// else + + put_user(sample_rate, (int *) arg); + + return 0; + + case SNDCTL_DSP_SETFRAGMENT: + if (get_user(val, (long *) arg)) + return -EFAULT; +#ifdef AUDIO_DEBUG + printk("ep7212_audio: set frag 0x%08x\n", val); +#endif + return 0; + + case SNDCTL_DSP_SETFMT: /* Selects ONE fmt */ + if (get_user(val, (long *) arg)) + return -EFAULT; +#ifdef AUDIO_DEBUG + printk("ep7212_audio: set format 0x%08x\n", val); +#endif + return 0; + + case SNDCTL_DSP_CHANNELS: + if (get_user(val, (int *) arg)) + return -EFAULT; + if (val == 1) + dev->mode = 0; + else + dev->mode = 1; +#ifdef AUDIO_DEBUG + printk("ep7212_audio: set channels %d (%d)\n", val, dev->mode); +#endif + return 0; + + case SNDCTL_DSP_STEREO: + if (get_user(val, (int *) arg)) + return -EFAULT; + if (val == 0) + dev->mode = 0; + else + dev->mode = 1; +#ifdef AUDIO_DEBUG + printk("ep7212_audio: set stereo %d (%d)\n", val, dev->mode); +#endif + return 0; + + case DSP_PURGE: + { + int bytes = audio_purge(dev); + put_user(bytes, (int *) arg); + return 0; + } + default: + /* invalid command */ +#ifdef AUDIO_DEBUG + printk("ep7212_audio: unhandled ioctl 0x%08x\n", command); +#endif + return -EINVAL; + } +} + +/* Open the audio device */ +static int audio_open(struct inode *inode, struct file *file) +{ + audio_dev *dev = &audio[0]; + +#if AUDIO_DEBUG + printk(AUDIO_NAME ": audio_open\n"); +#endif + + file->private_data = dev; + /* Flush buffer */ + audio_purge(dev); + + return (0); +} + +/* Release the audio device */ +static int audio_release(struct inode *inode, struct file *file) +{ +#if AUDIO_DEBUG + printk(AUDIO_NAME ": audio_release\n"); +#endif + return (0); +} + +static struct file_operations audio_fops = { + write: audio_write, + ioctl: audio_ioctl, + open: audio_open, + release:audio_release, +}; + +/* ++++++++++++++++++++++++++++++++++++++++++++++++++++++ */ +static int wm8751l_mixer_open(struct inode *inode, struct file *file) +{ + int minor = minor(inode->i_rdev); +// printk("wm8751l: open mixer [%d]\n",minor); + return 0; +} + +static int wm8751l_mixer_release(struct inode *inode, struct file *file) +{ +// printk("wm8751l: release mixer\n"); + return 0; +} + + +/* Mixer stuff Shamelessly ripped from the ad1816 driver */ + +struct mixer_def { + unsigned int regno: 7; + unsigned int polarity:1; /* 0=normal, 1=reversed */ + unsigned int bitpos:4; + unsigned int nbits:4; +}; + +static char mix_cvt[101] = { + 0, 0, 3, 7,10,13,16,19,21,23,26,28,30,32,34,35,37,39,40,42, + 43,45,46,47,49,50,51,52,53,55,56,57,58,59,60,61,62,63,64,65, + 65,66,67,68,69,70,70,71,72,73,73,74,75,75,76,77,77,78,79,79, + 80,81,81,82,82,83,84,84,85,85,86,86,87,87,88,88,89,89,90,90, + 91,91,92,92,93,93,94,94,95,95,96,96,96,97,97,98,98,98,99,99, + 100 +}; + +typedef struct mixer_def mixer_ent; + +/* + * Some of the mixer entries work in backwards. Setting the polarity field + * makes them to work correctly. + * + * The reg number is modified to hold the msb of the 9 bit control code used + * by the WM8751L. + */ + +#define MIX_ENT(name, reg_l, pola_l, pos_l, len_l, reg_r, pola_r, pos_r, len_r) \ + {{reg_l, pola_l, pos_l, len_l}, {reg_r, pola_r, pos_r, len_r}} + + +mixer_ent mix_devices[SOUND_MIXER_NRDEVICES][2] = { +MIX_ENT(SOUND_MIXER_VOLUME, 0x04, 0, 0, 7, 0x07, 0, 0, 7), +MIX_ENT(SOUND_MIXER_BASS, 0x19, 1, 0, 4, 0x19, 1, 0, 0), +MIX_ENT(SOUND_MIXER_TREBLE, 0x1a, 1, 0, 4, 0x1a, 1, 0, 0), +MIX_ENT(SOUND_MIXER_SYNTH, 0, 0, 0, 0, 0, 0, 0, 0), +MIX_ENT(SOUND_MIXER_PCM, 0x14, 0, 0, 8, 0x17, 0, 0, 8), +MIX_ENT(SOUND_MIXER_SPEAKER, 0x50, 0, 0, 7, 0x53, 0, 0, 7), +MIX_ENT(SOUND_MIXER_LINE, 0, 0, 0, 0, 0, 0, 0, 0), +MIX_ENT(SOUND_MIXER_MIC, 0, 0, 0, 0, 0, 0, 0, 0), +MIX_ENT(SOUND_MIXER_CD, 0, 0, 0, 0, 9, 0, 0, 0), +MIX_ENT(SOUND_MIXER_IMIX, 0, 0, 0, 0, 0, 0, 0, 0), +MIX_ENT(SOUND_MIXER_ALTPCM, 0, 0, 0, 0, 0, 0, 0, 0), +MIX_ENT(SOUND_MIXER_RECLEV, 0, 0, 0, 0, 9, 0, 0, 0), +MIX_ENT(SOUND_MIXER_IGAIN, 0, 0, 0, 0, 0, 0, 0, 0), +MIX_ENT(SOUND_MIXER_OGAIN, 0, 0, 0, 0, 0, 0, 0, 0), +MIX_ENT(SOUND_MIXER_LINE1, 0, 0, 0, 0, 0, 0, 0, 0), +MIX_ENT(SOUND_MIXER_LINE2, 0, 0, 0, 0, 0, 0, 0, 0), +MIX_ENT(SOUND_MIXER_LINE3, 0, 0, 0, 0, 0, 0, 0, 0) +}; + +/* The default settings are hex percentages for l & r channels ie, 6464 = 100% 100% */ + +static unsigned short default_mixer_levels[SOUND_MIXER_NRDEVICES] = +{ + 0x5050, /* Master Volume */ + 0x0000, /* Bass */ + 0x0000, /* Treble */ + 0x0000, /* FM */ + 0x6464, /* PCM */ + 0x5858, /* PC Speaker */ + 0x0000, /* Ext Line */ + 0x0000, /* Mic */ + 0x0000, /* CD */ + 0x0000, /* Recording monitor */ + 0x0000, /* SB PCM */ + 0x0000, /* Recording level */ + 0x0000, /* Input gain */ + 0x0000, /* Output gain */ + 0x0000, /* Line1 */ + 0x0000, /* Line2 */ + 0x0000 /* Line3 (usually line in)*/ +}; + +#define LEFT_CHN 0 +#define RIGHT_CHN 1 + + + +static void +change_bits (int *regval, int dev, int chn, int newval) +{ + unsigned char mask; + int shift; + + /* Reverse polarity*/ + + if (mix_devices[dev][chn].polarity == 1) + newval = 100 - newval; + + mask = (1 << mix_devices[dev][chn].nbits) - 1; + shift = mix_devices[dev][chn].bitpos; + /* Scale it */ + newval = (int) ((newval * mask) + 50) / 100; + /* Set new value */ + *regval |= (newval & mask) << shift; +} + +static int +wm8751l_mixer_set (int dev, int value) +{ + int left = value & 0x000000ff; + int right = (value & 0x0000ff00) >> 8; + int retvol; + + int regoffs; + int val = 0; + int valmute = 0; + +#ifdef AUDIO_DEBUG + printk("wm8751l: mixer_set called!\n"); + printk ("set dev= %d, val= %d\n",dev,value); +#endif + if (dev < 0 || dev >= SOUND_MIXER_NRDEVICES ) + return -(EINVAL); + + if (left > 100) + left = 100; + if (left < 0) + left = 0; + if (right > 100) + right = 100; + if (right < 0) + right = 0; + + /* Mono control */ + if (mix_devices[dev][RIGHT_CHN].nbits == 0) + right = left; + retvol = left | (right << 8); + + /* Scale it */ + + left = mix_cvt[left]; + right = mix_cvt[right]; + + /* sanity check */ + if (mix_devices[dev][LEFT_CHN].nbits == 0) + return -(EINVAL); + + /* Set the left channel */ + regoffs = mix_devices[dev][LEFT_CHN].regno; + change_bits (&val, dev, LEFT_CHN, left); + + valmute=val; + + wm8751l_write(regoffs, valmute); + +#ifdef AUDIO_DEBUG + printk ("write l regoffs= %d, valmute= %d\n",regoffs,valmute); +#endif + + /* + * Set the right channel + */ + + /* Was just a mono channel */ + if (mix_devices[dev][RIGHT_CHN].nbits == 0) + return retvol; + + regoffs = mix_devices[dev][RIGHT_CHN].regno; + change_bits (&val, dev, RIGHT_CHN, right); + + valmute=val; + + wm8751l_write(regoffs, valmute); + +#ifdef AUDIO_DEBUG + printk ("write r regoffs= %d, valmute= %d\n",regoffs,valmute); +#endif + return retvol; +} + +#define MIXER_DEVICES ( SOUND_MASK_VOLUME | \ + SOUND_MASK_BASS | \ + SOUND_MASK_TREBLE | \ + SOUND_MASK_PCM | \ + SOUND_MASK_SPEAKER \ + ) +#define REC_DEVICES ( 0 ) + static int mix_lev[SOUND_MIXER_NRDEVICES]; + +static void +wm8751l_mixer_reset (void) +{ + int i; + + for (i = 0; i < SOUND_MIXER_NRDEVICES; i++) + if (MIXER_DEVICES & (1 << i)){ + mix_lev[i] = wm8751l_mixer_set (i, default_mixer_levels[i]); + } +} + +#define WM8751L_DEVMASK 0x00000037 +#define WM8751L_RECMASK 0x00000000 +#define WM8751L_RECSRC 0x00000000 +#define WM8751L_STEREODEVS 0x00000011 +#define WM8751L_MIXER_CAP 0x00000000 +#define WM8751L_CAP_EXCL_INPUT 0x00000000 + +static int wm8751l_mixer_ioctl(struct inode *inode, struct file *file, uint req, int *arg) +{ + + + /* Mixer ioctl */ + + if (((req >> 8) & 0xff) == 'M') { + switch (req){ + case SOUND_MIXER_READ_DEVMASK: + *arg = WM8751L_DEVMASK; + break; + case SOUND_MIXER_READ_RECMASK: + *arg = WM8751L_RECMASK; + break; + case SOUND_MIXER_READ_RECSRC: + *arg = WM8751L_RECSRC; + break; + case SOUND_MIXER_READ_STEREODEVS: + *arg = WM8751L_STEREODEVS; + break; + case SOUND_MIXER_CAPS: + *arg = WM8751L_MIXER_CAP; + break; + case SOUND_CAP_EXCL_INPUT: + *arg = WM8751L_CAP_EXCL_INPUT; + break; + default: + if (req >= MIXER_READ(0) && req < MIXER_READ(SOUND_MIXER_NRDEVICES)) { + *arg = mix_lev[(req - MIXER_READ(0) & 0xff)]; + + break; + } else if (req >= MIXER_WRITE(0) && req < MIXER_WRITE(SOUND_MIXER_NRDEVICES)) { + wm8751l_mixer_set ( (req - MIXER_WRITE(0)) & 0xff, *arg); + mix_lev[(req- MIXER_WRITE(0)) & 0xff] = *arg; + break; + } + return -1; + } + return 0; + } else + /* not for mixer */ + return -(EINVAL); +} + +static struct file_operations wm8751l_mixer_fops = { + open: wm8751l_mixer_open, + release: wm8751l_mixer_release, + ioctl: wm8751l_mixer_ioctl +}; + + + + +static int generic_open_switch(struct inode *inode, struct file *file) +{ + /* select based on minor device number */ + + + switch (MINOR(inode->i_rdev)) { + case AUDIO_MINOR: + case DSP_MINOR: + file->f_op = &audio_fops; + break; + case MIXER_MINOR: + file->f_op = &wm8751l_mixer_fops; + break; + default: + return (-ENXIO); + } + + /* invoke specialized open */ + return (file->f_op->open(inode, file)); +} + +static struct file_operations generic_fops = { + open: generic_open_switch, /* switch for real open */ +}; + + +int __init audio_7212_init(void) +{ + zipit_init(); + setup_wm8751l(); + wm8751l_mixer_reset(); + return 0; +} + +int zipit_init(void) +{ + audio_dev *dev = &audio[0]; + struct pt_regs regs; + int err; + int timeout; + + if ((&audio_7212_fiqend - &audio_7212_fiq) > 0x1e4) { + printk("the FIQ handler size is 0x%x, can't be greater than 0x%x\n", + &audio_7212_fiqend - &audio_7212_fiq, 0x1e4); + return -EINVAL; + } +#if AUDIO_DEBUG_VERBOSE + printk(AUDIO_NAME ": audio_7212_init\n"); +#endif + /* Blank everything to start with */ + memset(dev, 0, sizeof (audio_dev)); + + init_waitqueue_head(&audio[0].waitq); + + /* Allocate buffers: continuous in virtual memory is fine */ + if ((dev->buffers = + vmalloc(sizeof (audio_buf) * AUDIO_NOOF_BUFFERS)) == NULL) { + printk(KERN_CRIT "audio: can't get memory for buffers"); + } + /* + * We need one buffer which is just zeros, for outputting when + * idle. This mirrors the behaviour of the empeg-car display driver + */ + if ((dev->zero = vmalloc(sizeof (audio_buf))) == NULL) { + printk(KERN_CRIT "audio: can't get memory for buffers"); + } + + /* Zero it */ + memset(dev->zero, 0, sizeof (audio_buf)); + + /* Set up queue */ + dev->head = dev->tail = dev->used = 0; + dev->free = AUDIO_NOOF_BUFFERS - 1; + dev->mode = 1; /* stereo is the default mode */ + dev->vbase = CLPS7111_VIRT_BASE; + + /* Allocate fiq stack */ + + /* Setup callback */ + emit_task.routine = emit_action; + emit_task.sync = 0; + emit_task.data = NULL; + if (request_irq(8, newbuffer, SA_INTERRUPT, "audio", NULL)) { + printk(KERN_CRIT "Unable to get interrupt 8!\n"); + return -EBUSY; + } + + /* Install DMA handler */ + regs.ARM_r9 = (int) dev; + regs.ARM_r10 = CLPS7111_VIRT_BASE + 0x2000; + regs.ARM_fp = 0; /* r11 */ + regs.ARM_ip = 0; /* r12 */ + regs.ARM_sp = 0; + set_fiq_regs(®s); + set_fiq_handler(&audio_7212_fiq, (&audio_7212_fiqend - &audio_7212_fiq)); + if (claim_fiq(&fh)) { + printk(KERN_CRIT "Couldn't claim FIQ.\n"); + return -1; + } + + /* program for 64 F's */ +#ifdef CONFIG_SOUND_EP7312_EXTCLK + clps_writel(RATE_44K | I2SF64 | AUDCLKEN | AUDCLKSRC, DAI64FS); +// clps_writel(RATE_22K | I2SF64 | AUDCLKEN | AUDCLKSRC, DAI64FS); +// clps_writel(RATE_11K | I2SF64 | AUDCLKEN | AUDCLKSRC, DAI64FS); +#else +{ + int tmp = clps_readl(DAI64FS); + tmp &= ~(RATE_MASK | 0xc); + + /* Sets the default sample rate to 44.1K */ + clps_writel(tmp | RATE_44K | 8 | 2 | 1, DAI64FS); +} +#endif + /* Enable DAI interface */ + clps_writel((clps_readl(SYSCON3) | SYSCON3_DAISEL) & ~SYSCON3_DAIEN, + SYSCON3); + + /* Enable I2S output: select external clock input (11.2896Mhz) */ + clps_writel((0x0404 | DAIR_ECS | DAIR_RCTM), DAIR); + + /* Clear error bits */ + clps_writel(0xFFFFFFFF, DAISR); + + /* Enable DAI */ + clps_writel((clps_readl(DAIR) | DAIR_DAIEN), DAIR); + clps_writel(0x002b0404, DAIR); + /* Enable FIFOs */ + timeout = jiffies + HZ; + while (!(clps_readl(DAISR) & DAISR_FIFO) && (jiffies < timeout)); + clps_writel(0x000d8000, DAIDR2); + while (!(clps_readl(DAISR) & DAISR_FIFO) && (jiffies < timeout)); + clps_writel(0x00118000, DAIDR2); + while (!(clps_readl(DAISR) & DAISR_FIFO) && (jiffies < timeout)); + /* If this timed out, then there is a problem with the serial clock */ + if (jiffies >= timeout) { + printk("Failed to initialise audio_7212: is SSI_CLK active?\n"); + } + /* Unmask FIQ */ + clps_writel((clps_readl(INTMR3) | (1 << 0)), INTMR3); + /* Register device */ + if ((err = + register_chrdev(AUDIO_MAJOR, AUDIO_NAME, &generic_fops)) != 0) { + /* Log error and fail */ + printk(AUDIO_NAME ": unable to register major device %d\n", + AUDIO_MAJOR); + return (err); + } + + +#ifdef CONFIG_PROC_FS + /* Register procfs devices */ + proc_audio = create_proc_entry("audio", 0, 0); + if (proc_audio) + proc_audio->read_proc = audio_read_proc; +#endif /* CONFIG_PROC_FS */ + /* Log device registration */ + printk(AUDIO_NAME_VERBOSE " initialized\n"); + /* Everything OK */ + return (0); +} + + +void __exit audio_7212_exit(void) +{ + audio_dev *dev = &audio[0]; + + /* + * first unmask DAIINT FIQ to avoid spontaneous crashes + */ + clps_writel((clps_readl(INTMR3) & ~1), INTMR3); + release_fiq(&fh); + free_irq(8, NULL); + vfree(dev->buffers); + vfree(dev->zero); + unregister_chrdev(AUDIO_MAJOR, AUDIO_NAME); +} + + +module_init(audio_7212_init); +module_exit(audio_7212_exit); diff -urN -X dontdiff /usr4/linux-2.4.21/linux-2.4.21/drivers/video/clps711xfb.c /usr4/linux-2.4.21.32/linux-2.4.21/drivers/video/clps711xfb.c --- /usr4/linux-2.4.21/linux-2.4.21/drivers/video/clps711xfb.c 2005-11-04 20:52:11.000000000 -0700 +++ /usr4/linux-2.4.21.32/linux-2.4.21/drivers/video/clps711xfb.c 2005-03-13 09:13:23.000000000 -0700 @@ -1,7 +1,10 @@ /* - * linux/drivers/video/clps711xfb.c + * linux/drivers/video/clps711x_fb.c * - * Copyright (C) 2000-2001 Deep Blue Solutions Ltd. + * Mods to support Zipit + * Copyright (C) 2005 Ken McGuire + * + * Original work Copyright (C) 2000-2001 Deep Blue Solutions Ltd. * * 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 @@ -17,7 +20,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * Framebuffer driver for the CLPS7111 and EP7212 processors. + * Framebuffer driver for the zipit IM devide based on clps711xfb.c. */ #include #include @@ -46,13 +49,6 @@ #define CMAP_MAX_SIZE 16 -/* The /proc entry for the backlight. */ -static struct proc_dir_entry *clps7111fb_backlight_proc_entry = NULL; - -static int clps7111fb_proc_backlight_read(char *page, char **start, off_t off, - int count, int *eof, void *data); -static int clps7111fb_proc_backlight_write(struct file *file, - const char *buffer, unsigned long count, void *data); /* * LCD AC Prescale. This comes from the LCD panel manufacturers specifications. @@ -83,9 +79,8 @@ * This isn't true on all machines, so we only do it on EDB7211. * --rmk */ - if (machine_is_edb7211() || machine_is_guidea07()) { - level = 15 - level; - } + +// level = 15 - level; shift = 4 * (regno & 7); level <<= shift; @@ -113,6 +108,7 @@ int err = 0; /* no colormap allocated? */ + if (!dcmap->len) err = fb_alloc_cmap(dcmap, CMAP_MAX_SIZE, 0); @@ -138,6 +134,7 @@ unsigned int lcdcon, syscon, pixclock; int chgvar = 0; + if (var->activate & FB_ACTIVATE_TEST) return 0; @@ -209,7 +206,7 @@ display->ypanstep = cfb->fb.fix.ypanstep; display->ywrapstep = cfb->fb.fix.ywrapstep; display->can_soft_blank = 1; - display->inverse = 0; + display->inverse = 0; /* Applies to MFB only */ cfb->fb.var = *var; cfb->fb.var.activate &= ~FB_ACTIVATE_ALL; @@ -271,6 +268,7 @@ static int gen_get_cmap(struct fb_cmap *cmap, int kspc, int con, struct fb_info *info) { + fb_copy_cmap(&info->cmap, cmap, kspc ? 0 : 2); return 0; } @@ -282,6 +280,7 @@ gen_get_fix(struct fb_fix_screeninfo *fix, int con, struct fb_info *info) { *fix = info->fix; + return 0; } @@ -292,6 +291,7 @@ gen_get_var(struct fb_var_screeninfo *var, int con, struct fb_info *info) { *var = info->var; + return 0; } @@ -350,96 +350,16 @@ } static void clps7111fb_blank(int blank, struct fb_info *info) -{ - if (blank) { - if (machine_is_edb7211()) { - /* Turn off the LCD backlight. */ - clps_writeb(clps_readb(PDDR) & ~EDB_PD3_LCDBL, PDDR); - - /* Power off the LCD DC-DC converter. */ - clps_writeb(clps_readb(PDDR) & ~EDB_PD1_LCD_DC_DC_EN, PDDR); - - /* Delay for a little while (half a second). */ - udelay(100); - - /* Power off the LCD panel. */ - clps_writeb(clps_readb(PDDR) & ~EDB_PD2_LCDEN, PDDR); - - /* Power off the LCD controller. */ - clps_writel(clps_readl(SYSCON1) & ~SYSCON1_LCDEN, - SYSCON1); - } - } else { - if (machine_is_edb7211()) { - /* Power up the LCD controller. */ - clps_writel(clps_readl(SYSCON1) | SYSCON1_LCDEN, - SYSCON1); - - /* Power up the LCD panel. */ - clps_writeb(clps_readb(PDDR) | EDB_PD2_LCDEN, PDDR); - - /* Delay for a little while. */ - udelay(100); - - /* Power up the LCD DC-DC converter. */ - clps_writeb(clps_readb(PDDR) | EDB_PD1_LCD_DC_DC_EN, - PDDR); +{ - /* Turn on the LCD backlight. */ - clps_writeb(clps_readb(PDDR) | EDB_PD3_LCDBL, PDDR); - } - } -} - -static int -clps7111fb_proc_backlight_read(char *page, char **start, off_t off, - int count, int *eof, void *data) -{ - /* We need at least two characters, one for the digit, and one for - * the terminating NULL. */ - if (count < 2) - return -EINVAL; +// if (blank) { +// clps_writel(clps_readl(SYSCON1) & ~SYSCON1_LCDEN, SYSCON1); +// } else { +// clps_writel(clps_readl(SYSCON1) | SYSCON1_LCDEN, SYSCON1); +// } - if (machine_is_edb7211()) { - return sprintf(page, "%d\n", - (clps_readb(PDDR) & EDB_PD3_LCDBL) ? 1 : 0); - } - - return 0; } -static int -clps7111fb_proc_backlight_write(struct file *file, const char *buffer, - unsigned long count, void *data) -{ - unsigned char char_value; - int value; - - if (count < 1) { - return -EINVAL; - } - - if (copy_from_user(&char_value, buffer, 1)) - return -EFAULT; - - value = char_value - '0'; - - if (machine_is_edb7211()) { - unsigned char port_d; - - port_d = clps_readb(PDDR); - - if (value) { - port_d |= EDB_PD3_LCDBL; - } else { - port_d &= ~EDB_PD3_LCDBL; - } - - clps_writeb(port_d, PDDR); - } - - return count; -} static void __init clps711x_guess_lcd_params(struct fb_info *info) { @@ -459,6 +379,7 @@ * If the LCD controller is already running, decode the values * in LCDCON to xres/yres/bpp/pixclock/acprescale */ + syscon = clps_readl(SYSCON1); if (syscon & SYSCON1_LCDEN) { lcdcon = clps_readl(LCDCON); @@ -512,9 +433,9 @@ * CLPS7110 - no on-board SRAM * EP7212 - 38400 bytes */ - if (size <= 38400) { - printk(KERN_INFO "CLPS711xFB: could use on-board SRAM?\n"); - } +// if (size <= 38400) { +// printk(KERN_INFO "CLPS711xFB: could use on-board SRAM?\n"); +// } if ((syscon & SYSCON1_LCDEN) == 0) { /* @@ -530,9 +451,10 @@ info->fix.type = FB_TYPE_PACKED_PIXELS; } -/* this function initializes the LCD registers as required by the Guide A07 +/* this function initializes the LCD registers as required for the SRAM Frame Buffer */ -int __init clps711xfb_guidea07_init(void) + +int __init clps711xfb_sram_init(void) { unsigned long videomem, videosize; unsigned int lcdcon, syscon; @@ -541,9 +463,9 @@ syscon = clps_readl(SYSCON1); clps_writel(syscon & ~SYSCON1_LCDEN, SYSCON1); - printk(KERN_INFO "CLPS711xFB: setting up cs89712 SRAM as QVGA video framebuffer\n"); - clps_writel(0x6, FBADDR); //internal SRAM location - videomem = (unsigned long)ioremap(SRAM_START, SRAM_SIZE); + printk(KERN_INFO "CLPS711xFB: SRAM FB\n"); + clps_writel(FB_SEG, FBADDR); //internal SRAM location + videomem = (unsigned long)ioremap(ZIPLINE_PHYS_SRAM_CONFIG,SRAM_SIZE); if (!videomem) { printk("ioremap failed!\n"); kfree(cfb); @@ -554,7 +476,7 @@ memset((void *)videomem, 0, videosize); //clear the vid memory cfb->fb.screen_base = (void *)videomem; - cfb->fb.fix.smem_start = SRAM_START; //must be physical address + cfb->fb.fix.smem_start = ZIPLINE_PHYS_SRAM_CONFIG; //must be physical address cfb->fb.fix.smem_len = videosize; cfb->fb.var.grayscale = 1; @@ -567,6 +489,7 @@ lcdcon |= LCDCON_GSMD | LCDCON_GSEN; //4bpp //lcdcon |= 5 << 19; //pixel prescale value (pixclock) //lcdcon |= 13 << 25; //AC prescale value + clps_writel(lcdcon, LCDCON); //reenable LCD @@ -580,6 +503,7 @@ int err = -ENOMEM; cfb = kmalloc(sizeof(*cfb) + sizeof(struct display), GFP_KERNEL); + if (!cfb) goto out; @@ -602,50 +526,13 @@ clps711x_guess_lcd_params(&cfb->fb); - if (machine_is_guidea07()) { - clps711xfb_guidea07_init(); - } - - if (machine_is_fortunet()) { - cfb->fb.fix.smem_len = 0x20000; - } + clps711xfb_sram_init(); fb_alloc_cmap(&cfb->fb.cmap, CMAP_MAX_SIZE, 0); - /* Register the /proc entries. */ - clps7111fb_backlight_proc_entry = create_proc_entry("backlight", 0444, - &proc_root); - if (clps7111fb_backlight_proc_entry == NULL) { - printk("Couldn't create the /proc entry for the backlight.\n"); - return -EINVAL; - } - - clps7111fb_backlight_proc_entry->read_proc = - &clps7111fb_proc_backlight_read; - clps7111fb_backlight_proc_entry->write_proc = - &clps7111fb_proc_backlight_write; - /* * Power up the LCD */ - if (machine_is_p720t()) { - PLD_LCDEN = PLD_LCDEN_EN; - PLD_PWR |= (PLD_S4_ON|PLD_S3_ON|PLD_S2_ON|PLD_S1_ON); - } - - if (machine_is_edb7211()) { - /* Power up the LCD panel. */ - clps_writeb(clps_readb(PDDR) | EDB_PD2_LCDEN, PDDR); - - /* Delay for a little while. */ - udelay(100); - - /* Power up the LCD DC-DC converter. */ - clps_writeb(clps_readb(PDDR) | EDB_PD1_LCD_DC_DC_EN, PDDR); - - /* Turn on the LCD backlight. */ - clps_writeb(clps_readb(PDDR) | EDB_PD3_LCDBL, PDDR); - } clps7111fb_set_var(&cfb->fb.var, -1, &cfb->fb); err = register_framebuffer(&cfb->fb); @@ -661,10 +548,6 @@ /* * Power down the LCD */ - if (machine_is_p720t()) { - PLD_LCDEN = 0; - PLD_PWR &= ~(PLD_S4_ON|PLD_S3_ON|PLD_S2_ON|PLD_S1_ON); - } } #ifdef MODULE diff -urN -X dontdiff /usr4/linux-2.4.21/linux-2.4.21/drivers/video/fbcmap.c /usr4/linux-2.4.21.32/linux-2.4.21/drivers/video/fbcmap.c --- /usr4/linux-2.4.21/linux-2.4.21/drivers/video/fbcmap.c 2001-03-02 19:38:39.000000000 -0700 +++ /usr4/linux-2.4.21.32/linux-2.4.21/drivers/video/fbcmap.c 2005-09-17 20:57:56.000000000 -0600 @@ -50,15 +50,15 @@ }; static u16 red16[] = { - 0x0000, 0x0000, 0x0000, 0x0000, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, + 0x0000, 0x0000, 0x0000, 0x0000, 0xaaaa, 0xaaaa, 0xaaaa, 0xffff, 0x5555, 0x5555, 0x5555, 0x5555, 0xffff, 0xffff, 0xffff, 0xffff }; static u16 green16[] = { - 0x0000, 0x0000, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x5555, 0xaaaa, + 0x0000, 0x0000, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x5555, 0xffff, 0x5555, 0x5555, 0xffff, 0xffff, 0x5555, 0x5555, 0xffff, 0xffff }; static u16 blue16[] = { - 0x0000, 0xaaaa, 0x0000, 0xaaaa, 0x0000, 0xaaaa, 0x0000, 0xaaaa, + 0x0000, 0xaaaa, 0x0000, 0xaaaa, 0x0000, 0xaaaa, 0x0000, 0xffff, 0x5555, 0xffff, 0x5555, 0xffff, 0x5555, 0xffff, 0x5555, 0xffff }; diff -urN -X dontdiff /usr4/linux-2.4.21/linux-2.4.21/fs/block_dev.c /usr4/linux-2.4.21.32/linux-2.4.21/fs/block_dev.c --- /usr4/linux-2.4.21/linux-2.4.21/fs/block_dev.c 2003-06-13 08:51:37.000000000 -0600 +++ /usr4/linux-2.4.21.32/linux-2.4.21/fs/block_dev.c 2005-09-17 21:05:56.000000000 -0600 @@ -95,7 +95,10 @@ sync_buffers(dev, 2); blksize_size[MAJOR(dev)][MINOR(dev)] = size; bdev->bd_inode->i_blkbits = blksize_bits(size); - kill_bdev(bdev); + /* without the following change, mounts of cramfs-via-ramdisk fail with 'cramfs: wrong magic' - */ + /* fix per Debian patches to 2.4.22 */ + /* kill_bdev(bdev); */ + invalidate_bdev(bdev, 1); bdput(bdev); return 0; } diff -urN -X dontdiff /usr4/linux-2.4.21/linux-2.4.21/include/asm-arm/arch-clps711x/hardware.h /usr4/linux-2.4.21.32/linux-2.4.21/include/asm-arm/arch-clps711x/hardware.h --- /usr4/linux-2.4.21/linux-2.4.21/include/asm-arm/arch-clps711x/hardware.h 2005-11-04 20:52:17.000000000 -0700 +++ /usr4/linux-2.4.21.32/linux-2.4.21/include/asm-arm/arch-clps711x/hardware.h 2005-10-29 17:49:40.000000000 -0600 @@ -42,6 +42,7 @@ #define CS5_PHYS_BASE (0x50000000) #define CS6_PHYS_BASE (0x60000000) #define CS7_PHYS_BASE (0x70000000) +#define FB_SEG (0x6) #else #define CS0_PHYS_BASE (0x70000000) #define CS1_PHYS_BASE (0x60000000) @@ -51,6 +52,7 @@ #define CS5_PHYS_BASE (0x20000000) #define CS6_PHYS_BASE (0x10000000) #define CS7_PHYS_BASE (0x00000000) +#define FB_SEG (0x1) #endif #if defined (CONFIG_ARCH_EP7211) @@ -235,6 +237,7 @@ #define ZIPLINE_PHYS_SRAM_CONFIG CS6_PHYS_BASE /* physical */ #define ZIPLINE_VIRT_SRAM_CONFIG (0xf8000000) /* virtual */ +#define SRAM_SIZE (0xc000) #define FLASH_START CS0_PHYS_BASE #define FLASH_SIZE 0x00200000 diff -urN -X dontdiff /usr4/linux-2.4.21/linux-2.4.21/include/asm-arm/arch-clps711x/keyboard.h /usr4/linux-2.4.21.32/linux-2.4.21/include/asm-arm/arch-clps711x/keyboard.h --- /usr4/linux-2.4.21/linux-2.4.21/include/asm-arm/arch-clps711x/keyboard.h 2002-08-02 18:39:45.000000000 -0600 +++ /usr4/linux-2.4.21.32/linux-2.4.21/include/asm-arm/arch-clps711x/keyboard.h 2005-03-13 14:52:23.000000000 -0700 @@ -15,6 +15,7 @@ */ extern void edb7211_kbd_init_hw(void); extern void clps711x_kbd_init_hw(void); +extern void zipline_kbd_init_hw(void); static inline void kbd_init_hw(void) { @@ -22,5 +23,11 @@ edb7211_kbd_init_hw(); if (machine_is_autcpu12()) - clps711x_kbd_init_hw(); + autcpu12_kbd_init_hw(); + +// if (machine_is_clps711x()) +// clps711x_kbd_init_hw(); + +// if (machine_is_zipline()) + zipline_kbd_init_hw(); } diff -urN -X dontdiff /usr4/linux-2.4.21/linux-2.4.21/include/asm-arm/arch-clps711x/system.h /usr4/linux-2.4.21.32/linux-2.4.21/include/asm-arm/arch-clps711x/system.h --- /usr4/linux-2.4.21/linux-2.4.21/include/asm-arm/arch-clps711x/system.h 2003-06-13 08:51:38.000000000 -0600 +++ /usr4/linux-2.4.21.32/linux-2.4.21/include/asm-arm/arch-clps711x/system.h 2005-09-13 18:02:58.000000000 -0600 @@ -28,7 +28,7 @@ { clps_writel(1, HALT); __asm__ __volatile__( - "mov r0, r0 + "mov r0, r0 \n\ mov r0, r0"); } diff -urN -X dontdiff /usr4/linux-2.4.21/linux-2.4.21/include/asm-arm/uaccess.h /usr4/linux-2.4.21.32/linux-2.4.21/include/asm-arm/uaccess.h --- /usr4/linux-2.4.21/linux-2.4.21/include/asm-arm/uaccess.h 2001-10-25 14:53:55.000000000 -0600 +++ /usr4/linux-2.4.21.32/linux-2.4.21/include/asm-arm/uaccess.h 2005-10-29 17:49:40.000000000 -0600 @@ -86,7 +86,7 @@ __get_user_x(__r1, __p, __e, 1, "lr"); \ break; \ case 2: \ - __get_user_x(__r1, __p, __e, 2, "r2", "lr"); \ + __get_user_x(__r1, __p, __e, 2, "ip", "lr"); \ break; \ case 4: \ __get_user_x(__r1, __p, __e, 4, "lr"); \ @@ -122,13 +122,13 @@ register int __e asm("r0"); \ switch (sizeof(*(p))) { \ case 1: \ - __put_user_x(__r1, __p, __e, 1, "r2", "lr"); \ + __put_user_x(__r1, __p, __e, 1, "ip", "lr"); \ break; \ case 2: \ - __put_user_x(__r1, __p, __e, 2, "r2", "lr"); \ + __put_user_x(__r1, __p, __e, 2, "ip", "lr"); \ break; \ case 4: \ - __put_user_x(__r1, __p, __e, 4, "r2", "lr"); \ + __put_user_x(__r1, __p, __e, 4, "ip", "lr"); \ break; \ case 8: \ __put_user_x(__r1, __p, __e, 8, "ip", "lr"); \ diff -urN -X dontdiff /usr4/linux-2.4.21/linux-2.4.21/include/linux/keyboard.h /usr4/linux-2.4.21.32/linux-2.4.21/include/linux/keyboard.h --- /usr4/linux-2.4.21/linux-2.4.21/include/linux/keyboard.h 2002-08-02 18:39:45.000000000 -0600 +++ /usr4/linux-2.4.21.32/linux-2.4.21/include/linux/keyboard.h 2005-10-29 17:49:40.000000000 -0600 @@ -4,9 +4,9 @@ #include #define KG_SHIFT 0 +#define KG_ALTGR 1 #define KG_CTRL 2 #define KG_ALT 3 -#define KG_ALTGR 1 #define KG_SHIFTL 4 #define KG_SHIFTR 5 #define KG_CTRLL 6 diff -urN -X dontdiff /usr4/linux-2.4.21/linux-2.4.21/include/linux/linux_logo.h /usr4/linux-2.4.21.32/linux-2.4.21/include/linux/linux_logo.h --- /usr4/linux-2.4.21/linux-2.4.21/include/linux/linux_logo.h 2001-06-11 20:15:27.000000000 -0600 +++ /usr4/linux-2.4.21.32/linux-2.4.21/include/linux/linux_logo.h 2005-03-20 12:53:22.000000000 -0700 @@ -2,6 +2,8 @@ * include/linux/linux_logo.h: This is a linux logo * to be displayed on boot. * + * Copyright (C) 2005 Ken McGuire + * Adapted for Zipit based on original work: * Copyright (C) 1996 Larry Ewing (lewing@isc.tamu.edu) * Copyright (C) 1996,1998 Jakub Jelinek (jj@sunsite.mff.cuni.cz) * @@ -17,9 +19,8 @@ * Serial_console ascii image can be any size, * but should contain %s to display the version */ - #ifndef __HAVE_ARCH_LINUX_LOGO -#define LINUX_LOGO_COLORS 187 +#define LINUX_LOGO_COLORS 214 #endif #ifdef INCLUDE_LINUX_LOGO_DATA @@ -27,1394 +28,655 @@ #ifndef __HAVE_ARCH_LINUX_LOGO unsigned char linux_logo_red[] __initdata = { - 0x00, 0x06, 0x0a, 0x0e, 0x16, 0x1a, 0x1e, 0x22, - 0x12, 0x00, 0x2a, 0x36, 0x42, 0x4e, 0x4a, 0x56, - 0x26, 0x46, 0x2e, 0x32, 0x52, 0x3a, 0x02, 0x65, - 0x5e, 0x3e, 0x74, 0x8a, 0xa2, 0x9a, 0x86, 0xc6, - 0xc3, 0x65, 0xbb, 0xd2, 0xda, 0xd6, 0xe2, 0xf6, - 0xfd, 0xae, 0x7b, 0xdd, 0xea, 0x6a, 0xaa, 0xe7, - 0xbe, 0x5a, 0xee, 0x9e, 0x95, 0x80, 0x76, 0x79, - 0x62, 0x36, 0x9a, 0xe2, 0xec, 0xe1, 0xb8, 0xd7, - 0xaf, 0x25, 0xbc, 0xc0, 0xef, 0xea, 0xe8, 0xe8, - 0xf5, 0xf1, 0xda, 0xd3, 0x79, 0xdb, 0xf4, 0xf6, - 0xf6, 0xf6, 0xe2, 0x3d, 0xb4, 0xce, 0xe6, 0xee, - 0xf6, 0x68, 0xd8, 0xec, 0xf5, 0xc6, 0xc8, 0x9c, - 0x89, 0xd2, 0xee, 0xcb, 0xb9, 0xd2, 0x66, 0x5e, - 0x8b, 0xbe, 0xa8, 0xd5, 0xca, 0xb6, 0xae, 0x9c, - 0xc5, 0xbe, 0xbe, 0xca, 0x90, 0xb2, 0x9a, 0xa8, - 0xb6, 0xf2, 0xce, 0xfa, 0xb2, 0x6e, 0xa6, 0x12, - 0x4a, 0x8e, 0xf2, 0xf6, 0xf6, 0xee, 0xb5, 0xe4, - 0xf1, 0x26, 0x9a, 0xea, 0xf6, 0xe0, 0xd2, 0x16, - 0x9a, 0x2e, 0x70, 0xd6, 0x46, 0x7c, 0xb4, 0x62, - 0xd6, 0xa3, 0x74, 0xa7, 0xa2, 0xca, 0xe0, 0xae, - 0xbe, 0xce, 0xa3, 0x8e, 0x6d, 0x8e, 0x32, 0xaf, - 0x50, 0x9e, 0x5b, 0x8a, 0x98, 0x82, 0x7a, 0x82, - 0x56, 0x7c, 0x8a, 0x56, 0x5e, 0x86, 0x6a, 0x52, - 0x59, 0x64, 0x5e, + 0x02, 0x56, 0x98, 0xc8, 0xe7, 0xd8, 0xa7, 0x68, 0x17, 0x87, 0xfc, 0x27, 0x38, 0x77, 0x48, 0xb6, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; unsigned char linux_logo_green[] __initdata = { - 0x00, 0x06, 0x0a, 0x0e, 0x16, 0x1a, 0x1e, 0x22, - 0x12, 0x00, 0x2a, 0x36, 0x42, 0x4e, 0x4a, 0x56, - 0x26, 0x46, 0x2e, 0x32, 0x52, 0x3a, 0x02, 0x65, - 0x5e, 0x3e, 0x74, 0x8a, 0xa2, 0x9a, 0x86, 0xc6, - 0xc3, 0x62, 0xbb, 0xd2, 0xda, 0xd6, 0xe2, 0xf6, - 0xfd, 0xae, 0x7b, 0xdd, 0xea, 0x6a, 0xaa, 0xe7, - 0xbe, 0x5a, 0xee, 0x9e, 0x95, 0x80, 0x62, 0x5c, - 0x4e, 0x26, 0x72, 0xaa, 0xba, 0xaf, 0x90, 0xae, - 0x92, 0x1a, 0xa4, 0x85, 0xb6, 0xbe, 0xc3, 0xc8, - 0xcf, 0xd0, 0xc2, 0xce, 0x57, 0xa2, 0xd6, 0xda, - 0xda, 0xd7, 0xb8, 0x2a, 0x7b, 0x91, 0xae, 0xca, - 0xda, 0x45, 0x9e, 0xb2, 0xd7, 0x9b, 0x90, 0x76, - 0x5c, 0xa2, 0xbe, 0xa6, 0x85, 0x96, 0x4e, 0x46, - 0x66, 0x92, 0x7a, 0x9a, 0x96, 0x9d, 0x9a, 0x6b, - 0x8a, 0x8e, 0xb2, 0xca, 0x90, 0xa6, 0x79, 0x7c, - 0xb6, 0xf2, 0xce, 0xfa, 0xb2, 0x6e, 0xa6, 0x0e, - 0x36, 0x86, 0xba, 0xbe, 0xe6, 0xcc, 0x8e, 0xb8, - 0xc4, 0x1e, 0x8e, 0xae, 0xba, 0xb2, 0xa6, 0x12, - 0x7a, 0x20, 0x64, 0xaa, 0x2f, 0x70, 0x85, 0x46, - 0xa6, 0x6e, 0x51, 0x72, 0x92, 0xa2, 0xa6, 0x87, - 0x96, 0xa2, 0x85, 0x7a, 0x6a, 0x6e, 0x22, 0x76, - 0x36, 0x76, 0x3c, 0x6e, 0x63, 0x53, 0x66, 0x62, - 0x42, 0x50, 0x56, 0x42, 0x56, 0x56, 0x56, 0x3e, - 0x51, 0x52, 0x56, + 0x02, 0x56, 0x98, 0xc8, 0xe7, 0xd8, 0xa7, 0x68, 0x17, 0x87, 0xfc, 0x27, 0x38, 0x77, 0x48, 0xb6, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; unsigned char linux_logo_blue[] __initdata = { - 0x00, 0x06, 0x0a, 0x0e, 0x16, 0x1a, 0x1e, 0x22, - 0x12, 0x01, 0x2a, 0x36, 0x42, 0x4e, 0x4a, 0x56, - 0x26, 0x46, 0x2e, 0x32, 0x52, 0x3a, 0x06, 0x65, - 0x5e, 0x3e, 0x74, 0x8a, 0xa2, 0x9a, 0x86, 0xc6, - 0xc3, 0x59, 0xbb, 0xd2, 0xda, 0xd6, 0xe2, 0xf6, - 0xfd, 0xae, 0x7b, 0xdd, 0xea, 0x6a, 0xaa, 0xe7, - 0xbe, 0x5a, 0xee, 0x9e, 0x95, 0x80, 0x2e, 0x08, - 0x0a, 0x06, 0x0a, 0x0b, 0x0b, 0x0f, 0x0c, 0x0f, - 0x3d, 0x09, 0x73, 0x09, 0x0d, 0x0a, 0x10, 0x1e, - 0x2d, 0x13, 0x86, 0xba, 0x19, 0x0a, 0x36, 0x3c, - 0x26, 0x14, 0x0d, 0x06, 0x07, 0x0a, 0x0b, 0x0f, - 0x4a, 0x06, 0x0a, 0x0c, 0x2b, 0x0a, 0x0b, 0x0a, - 0x06, 0x0a, 0x0a, 0x11, 0x0b, 0x0a, 0x0a, 0x1e, - 0x0f, 0x0d, 0x0a, 0x0b, 0x22, 0x6a, 0x72, 0x0b, - 0x0b, 0x22, 0x90, 0xca, 0x90, 0x92, 0x3c, 0x2c, - 0xb6, 0xf2, 0xce, 0xfa, 0xb2, 0x6e, 0xa6, 0x06, - 0x0e, 0x6a, 0x0e, 0x0e, 0xbe, 0x5b, 0x2c, 0x3e, - 0x0e, 0x0a, 0x5a, 0x0d, 0x0e, 0x3e, 0x0a, 0x06, - 0x2e, 0x06, 0x4e, 0x36, 0x06, 0x58, 0x24, 0x06, - 0x3a, 0x08, 0x08, 0x07, 0x5e, 0x45, 0x0a, 0x32, - 0x2e, 0x2a, 0x43, 0x48, 0x5f, 0x2e, 0x06, 0x06, - 0x07, 0x24, 0x06, 0x32, 0x06, 0x06, 0x46, 0x2e, - 0x22, 0x06, 0x06, 0x1e, 0x4c, 0x06, 0x3a, 0x22, - 0x42, 0x34, 0x42, + 0x02, 0x56, 0x98, 0xc8, 0xe7, 0xd8, 0xa7, 0x68, 0x17, 0x87, 0xfc, 0x27, 0x38, 0x77, 0x48, 0xb6, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; unsigned char linux_logo[] __initdata = { - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x21, 0x21, 0x22, 0x22, - 0x22, 0x21, 0x21, 0x21, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, - 0x26, 0x26, 0x25, 0x28, 0x23, 0x22, 0x21, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x29, 0x29, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x21, 0x23, 0x25, 0x2a, 0x2b, 0x2c, 0x2d, 0x2d, - 0x2d, 0x2e, 0x2c, 0x2b, 0x2a, 0x25, 0x28, 0x22, - 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x29, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, - 0x24, 0x2a, 0x2c, 0x2f, 0x2c, 0x30, 0x30, 0x24, - 0x25, 0x27, 0x2b, 0x2c, 0x2f, 0x31, 0x32, 0x25, - 0x23, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x29, 0x29, 0x29, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x25, - 0x33, 0x34, 0x35, 0x21, 0x36, 0x36, 0x36, 0x36, - 0x36, 0x36, 0x36, 0x36, 0x21, 0x2b, 0x2f, 0x2c, - 0x30, 0x28, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x24, 0x33, - 0x2d, 0x27, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, - 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x21, 0x31, - 0x2d, 0x32, 0x24, 0x21, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x29, 0x29, 0x29, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x21, 0x28, 0x2a, 0x34, - 0x25, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, - 0x36, 0x36, 0x36, 0x23, 0x32, 0x27, 0x21, 0x36, - 0x2a, 0x2d, 0x2a, 0x28, 0x21, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x29, 0x20, 0x29, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x2c, 0x35, - 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, - 0x36, 0x36, 0x36, 0x25, 0x2f, 0x37, 0x32, 0x22, - 0x36, 0x35, 0x31, 0x27, 0x22, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x29, 0x29, 0x29, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x23, 0x2a, 0x2f, 0x22, - 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, - 0x36, 0x36, 0x36, 0x26, 0x38, 0x38, 0x35, 0x25, - 0x36, 0x21, 0x2d, 0x2b, 0x24, 0x21, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x21, 0x24, 0x39, 0x39, 0x36, - 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, - 0x36, 0x36, 0x36, 0x25, 0x2b, 0x30, 0x28, 0x22, - 0x36, 0x36, 0x27, 0x34, 0x30, 0x23, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x29, 0x29, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x21, 0x26, 0x2d, 0x26, 0x36, - 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, - 0x36, 0x36, 0x36, 0x22, 0x22, 0x36, 0x36, 0x36, - 0x36, 0x36, 0x36, 0x2d, 0x33, 0x28, 0x21, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x29, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x22, 0x30, 0x2f, 0x23, 0x36, - 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, - 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, - 0x36, 0x36, 0x36, 0x2b, 0x2c, 0x25, 0x21, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x29, 0x29, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x23, 0x2a, 0x34, 0x36, 0x36, - 0x36, 0x21, 0x22, 0x36, 0x36, 0x36, 0x36, 0x36, - 0x36, 0x36, 0x36, 0x21, 0x23, 0x22, 0x36, 0x36, - 0x36, 0x36, 0x36, 0x28, 0x34, 0x27, 0x22, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x29, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x23, 0x32, 0x2f, 0x36, 0x36, - 0x21, 0x21, 0x24, 0x27, 0x21, 0x36, 0x36, 0x36, - 0x36, 0x36, 0x28, 0x27, 0x22, 0x33, 0x24, 0x36, - 0x36, 0x36, 0x36, 0x22, 0x2f, 0x2a, 0x23, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x29, 0x29, 0x29, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x23, 0x32, 0x2f, 0x36, 0x36, - 0x30, 0x3a, 0x38, 0x24, 0x24, 0x36, 0x36, 0x36, - 0x23, 0x2f, 0x3b, 0x3c, 0x3d, 0x30, 0x25, 0x21, - 0x36, 0x36, 0x36, 0x36, 0x2f, 0x32, 0x23, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x23, 0x32, 0x2f, 0x36, 0x23, - 0x3e, 0x3f, 0x40, 0x3a, 0x22, 0x36, 0x36, 0x21, - 0x41, 0x42, 0x43, 0x44, 0x45, 0x3e, 0x23, 0x21, - 0x36, 0x36, 0x36, 0x36, 0x2f, 0x33, 0x28, 0x21, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x29, 0x20, 0x29, 0x29, 0x29, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x23, 0x32, 0x2f, 0x36, 0x2b, - 0x44, 0x40, 0x46, 0x47, 0x35, 0x36, 0x36, 0x26, - 0x43, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x2e, 0x36, - 0x36, 0x36, 0x36, 0x36, 0x31, 0x35, 0x24, 0x21, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x23, 0x32, 0x34, 0x36, 0x4d, - 0x4e, 0x25, 0x2f, 0x46, 0x4a, 0x22, 0x23, 0x32, - 0x4f, 0x50, 0x21, 0x31, 0x51, 0x52, 0x53, 0x36, - 0x36, 0x36, 0x36, 0x36, 0x31, 0x35, 0x24, 0x21, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x29, 0x20, 0x29, 0x29, 0x29, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x23, 0x2a, 0x2f, 0x21, 0x3a, - 0x4d, 0x21, 0x31, 0x54, 0x55, 0x28, 0x30, 0x2b, - 0x4b, 0x4d, 0x36, 0x23, 0x32, 0x50, 0x3f, 0x36, - 0x36, 0x36, 0x36, 0x36, 0x2e, 0x39, 0x24, 0x21, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x29, 0x20, 0x29, 0x20, 0x29, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x23, 0x2a, 0x38, 0x23, 0x37, - 0x55, 0x36, 0x28, 0x3a, 0x56, 0x57, 0x57, 0x58, - 0x3c, 0x4d, 0x36, 0x36, 0x36, 0x40, 0x40, 0x21, - 0x36, 0x36, 0x36, 0x36, 0x2e, 0x39, 0x24, 0x21, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x29, 0x29, 0x29, 0x20, 0x29, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x22, 0x30, 0x51, 0x23, 0x35, - 0x43, 0x25, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, - 0x5f, 0x60, 0x61, 0x36, 0x31, 0x47, 0x3b, 0x36, - 0x36, 0x36, 0x36, 0x36, 0x31, 0x2c, 0x25, 0x21, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x22, 0x30, 0x2f, 0x23, 0x22, - 0x40, 0x62, 0x63, 0x5d, 0x64, 0x65, 0x66, 0x67, - 0x68, 0x69, 0x66, 0x5e, 0x6a, 0x6b, 0x2a, 0x36, - 0x36, 0x36, 0x36, 0x36, 0x33, 0x2e, 0x26, 0x21, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x22, 0x27, 0x2f, 0x23, 0x36, - 0x6c, 0x63, 0x6d, 0x64, 0x5c, 0x66, 0x69, 0x6e, - 0x6f, 0x70, 0x71, 0x69, 0x69, 0x72, 0x6c, 0x36, - 0x36, 0x36, 0x36, 0x36, 0x33, 0x34, 0x27, 0x22, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x22, 0x27, 0x34, 0x26, 0x73, - 0x74, 0x75, 0x76, 0x64, 0x65, 0x77, 0x69, 0x78, - 0x70, 0x71, 0x71, 0x71, 0x72, 0x5f, 0x5e, 0x21, - 0x36, 0x36, 0x36, 0x36, 0x25, 0x38, 0x2a, 0x23, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x22, 0x26, 0x2d, 0x33, 0x79, - 0x63, 0x7a, 0x7b, 0x5c, 0x66, 0x69, 0x6e, 0x7c, - 0x71, 0x71, 0x69, 0x7d, 0x7e, 0x7a, 0x7f, 0x36, - 0x36, 0x36, 0x36, 0x36, 0x21, 0x51, 0x2b, 0x28, - 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x22, 0x26, 0x2d, 0x32, 0x24, - 0x80, 0x81, 0x64, 0x82, 0x77, 0x69, 0x71, 0x71, - 0x69, 0x83, 0x84, 0x85, 0x7a, 0x85, 0x86, 0x36, - 0x21, 0x2b, 0x23, 0x36, 0x36, 0x39, 0x2e, 0x26, - 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x22, 0x27, 0x2d, 0x33, 0x21, - 0x87, 0x88, 0x89, 0x72, 0x67, 0x66, 0x5f, 0x89, - 0x8a, 0x63, 0x85, 0x8b, 0x8c, 0x8d, 0x41, 0x36, - 0x36, 0x2d, 0x3a, 0x35, 0x36, 0x24, 0x51, 0x32, - 0x28, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x22, 0x30, 0x2f, 0x33, 0x21, - 0x55, 0x8e, 0x8f, 0x8a, 0x7d, 0x5e, 0x90, 0x7e, - 0x75, 0x75, 0x90, 0x62, 0x40, 0x3f, 0x49, 0x23, - 0x36, 0x24, 0x3a, 0x3a, 0x24, 0x36, 0x2e, 0x31, - 0x26, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x21, 0x28, 0x33, 0x37, 0x25, 0x22, - 0x3b, 0x50, 0x8e, 0x8f, 0x90, 0x7e, 0x90, 0x63, - 0x74, 0x91, 0x92, 0x42, 0x93, 0x4b, 0x45, 0x2c, - 0x36, 0x36, 0x33, 0x39, 0x21, 0x36, 0x22, 0x51, - 0x33, 0x28, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x22, 0x27, 0x2e, 0x2e, 0x36, 0x21, - 0x94, 0x3f, 0x50, 0x95, 0x96, 0x8f, 0x8f, 0x97, - 0x8e, 0x42, 0x50, 0x43, 0x47, 0x48, 0x48, 0x98, - 0x21, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x39, - 0x2e, 0x27, 0x23, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x22, 0x24, 0x2b, 0x38, 0x28, 0x36, 0x32, - 0x4c, 0x4b, 0x50, 0x50, 0x50, 0x42, 0x42, 0x50, - 0x50, 0x40, 0x45, 0x99, 0x48, 0x48, 0x48, 0x48, - 0x34, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x23, - 0x2f, 0x2b, 0x24, 0x21, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x21, 0x28, 0x32, 0x51, 0x32, 0x28, 0x21, 0x98, - 0x48, 0x47, 0x9a, 0x50, 0x50, 0x50, 0x50, 0x50, - 0x9a, 0x4f, 0x9b, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x93, 0x23, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, - 0x2a, 0x2f, 0x2a, 0x28, 0x21, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, - 0x23, 0x30, 0x2e, 0x2c, 0x36, 0x21, 0x51, 0x9b, - 0x48, 0x48, 0x52, 0x3f, 0x50, 0x50, 0x40, 0x4b, - 0x47, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x34, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, - 0x36, 0x2d, 0x31, 0x27, 0x23, 0x21, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x23, - 0x27, 0x2c, 0x2d, 0x21, 0x36, 0x28, 0x44, 0x48, - 0x48, 0x48, 0x48, 0x47, 0x46, 0x4f, 0x47, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x9c, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, - 0x36, 0x28, 0x51, 0x39, 0x26, 0x22, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x25, - 0x35, 0x51, 0x28, 0x36, 0x36, 0x9d, 0x48, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x9b, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x4f, 0x28, 0x36, 0x36, 0x36, 0x36, 0x36, - 0x36, 0x36, 0x28, 0x38, 0x2b, 0x25, 0x22, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x24, 0x33, - 0x51, 0x25, 0x36, 0x36, 0x23, 0x40, 0x9b, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x9b, 0x99, 0x2b, 0x36, 0x36, 0x36, 0x36, 0x36, - 0x36, 0x36, 0x36, 0x30, 0x2f, 0x33, 0x24, 0x21, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x21, 0x23, 0x30, 0x34, - 0x27, 0x36, 0x36, 0x36, 0x2a, 0x40, 0x47, 0x48, - 0x48, 0x48, 0x48, 0x9b, 0x99, 0x99, 0x9b, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x9b, 0x47, 0x52, - 0x46, 0x4f, 0x37, 0x21, 0x36, 0x36, 0x36, 0x36, - 0x36, 0x36, 0x36, 0x36, 0x30, 0x34, 0x2a, 0x23, - 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x22, 0x25, 0x39, 0x2c, - 0x36, 0x36, 0x36, 0x21, 0x31, 0x4e, 0x9a, 0x4c, - 0x47, 0x9b, 0x9b, 0x52, 0x46, 0x4f, 0x52, 0x9b, - 0x9b, 0x9b, 0x47, 0x4f, 0x45, 0x9a, 0x93, 0x93, - 0x3f, 0x93, 0x98, 0x28, 0x36, 0x36, 0x36, 0x36, - 0x36, 0x36, 0x36, 0x36, 0x36, 0x39, 0x2c, 0x26, - 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x23, 0x2a, 0x34, 0x28, - 0x36, 0x36, 0x36, 0x22, 0x38, 0x98, 0x44, 0x99, - 0x9b, 0x48, 0x48, 0x9b, 0x4c, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x48, 0x47, 0x52, 0x46, 0x43, 0x93, - 0x40, 0x40, 0x43, 0x53, 0x21, 0x23, 0x33, 0x23, - 0x36, 0x36, 0x36, 0x36, 0x36, 0x21, 0x2f, 0x32, - 0x28, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x21, 0x24, 0x2b, 0x31, 0x36, - 0x36, 0x22, 0x36, 0x24, 0x9e, 0x4f, 0x9b, 0x48, - 0x48, 0x48, 0x48, 0x9b, 0x99, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x47, - 0x4f, 0x9a, 0x3f, 0x46, 0x38, 0x36, 0x21, 0x30, - 0x26, 0x36, 0x36, 0x36, 0x36, 0x36, 0x39, 0x2c, - 0x25, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x22, 0x26, 0x2e, 0x33, 0x36, - 0x25, 0x25, 0x36, 0x4d, 0x52, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x47, 0x44, 0x93, 0x43, 0x23, 0x36, 0x36, - 0x26, 0x24, 0x36, 0x36, 0x36, 0x36, 0x28, 0x2f, - 0x2a, 0x23, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x23, 0x2a, 0x51, 0x24, 0x36, - 0x2a, 0x36, 0x28, 0x44, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x9b, 0x4b, 0x44, 0x37, 0x36, 0x23, - 0x28, 0x30, 0x22, 0x36, 0x36, 0x36, 0x36, 0x2d, - 0x35, 0x24, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x21, 0x28, 0x2b, 0x34, 0x36, 0x25, - 0x24, 0x36, 0x4a, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x48, 0x9b, 0x52, 0x3f, 0x21, 0x30, - 0x35, 0x25, 0x30, 0x36, 0x36, 0x36, 0x36, 0x32, - 0x2d, 0x26, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x22, 0x26, 0x2e, 0x35, 0x36, 0x2a, - 0x36, 0x24, 0x4f, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x48, 0x9b, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x47, 0x32, 0x30, - 0x2a, 0x23, 0x30, 0x23, 0x36, 0x36, 0x36, 0x21, - 0x2f, 0x32, 0x23, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x21, 0x23, 0x2a, 0x51, 0x28, 0x28, 0x25, - 0x36, 0x3a, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x9b, 0x52, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x38, 0x21, - 0x36, 0x36, 0x22, 0x27, 0x36, 0x36, 0x36, 0x36, - 0x2e, 0x35, 0x24, 0x21, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x22, 0x25, 0x2c, 0x34, 0x36, 0x30, 0x21, - 0x23, 0x43, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x47, 0x99, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x94, 0x36, - 0x36, 0x36, 0x36, 0x32, 0x36, 0x36, 0x36, 0x36, - 0x2a, 0x2e, 0x26, 0x22, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x21, 0x23, 0x2a, 0x51, 0x25, 0x21, 0x2a, 0x36, - 0x2e, 0x9b, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x99, 0x99, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x98, 0x36, - 0x36, 0x36, 0x36, 0x32, 0x36, 0x36, 0x36, 0x36, - 0x22, 0x2f, 0x30, 0x22, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x22, 0x25, 0x2c, 0x34, 0x36, 0x24, 0x28, 0x36, - 0x54, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x4c, 0x99, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x9a, 0x36, - 0x36, 0x36, 0x36, 0x30, 0x36, 0x36, 0x36, 0x36, - 0x21, 0x2f, 0x32, 0x23, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, - 0x28, 0x32, 0x2f, 0x28, 0x36, 0x27, 0x22, 0x21, - 0x43, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x4c, 0x99, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x4b, 0x21, - 0x36, 0x36, 0x21, 0x26, 0x36, 0x36, 0x36, 0x36, - 0x36, 0x34, 0x2b, 0x28, 0x21, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, - 0x25, 0x2c, 0x39, 0x36, 0x36, 0x30, 0x22, 0x25, - 0x52, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x4f, 0x52, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x4f, 0x21, - 0x36, 0x36, 0x22, 0x26, 0x36, 0x36, 0x36, 0x36, - 0x36, 0x2c, 0x35, 0x24, 0x21, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, - 0x30, 0x2d, 0x21, 0x36, 0x36, 0x32, 0x23, 0x2a, - 0x47, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x4f, 0x99, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x4c, 0x22, - 0x36, 0x36, 0x24, 0x23, 0x36, 0x36, 0x36, 0x36, - 0x36, 0x2c, 0x39, 0x24, 0x21, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x28, - 0x33, 0x2e, 0x36, 0x36, 0x23, 0x31, 0x27, 0x39, - 0x9b, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x4f, 0x47, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x4c, 0x23, - 0x36, 0x36, 0x26, 0x36, 0x36, 0x36, 0x36, 0x36, - 0x36, 0x2c, 0x39, 0x24, 0x21, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x28, - 0x2b, 0x39, 0x36, 0x36, 0x36, 0x26, 0x32, 0x31, - 0x9b, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x4f, 0x47, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x46, 0x22, - 0x36, 0x21, 0x26, 0x36, 0x36, 0x36, 0x36, 0x36, - 0x36, 0x2c, 0x35, 0x24, 0x21, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x24, - 0x35, 0x39, 0x36, 0x36, 0x36, 0x36, 0x26, 0x2d, - 0x9b, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x4f, 0x47, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x9a, 0x36, - 0x24, 0x27, 0x9f, 0x24, 0x25, 0x28, 0x21, 0x36, - 0x36, 0x34, 0x2b, 0x28, 0x21, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x25, - 0x39, 0x4d, 0xa0, 0x84, 0x81, 0x57, 0x21, 0x39, - 0x52, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x4f, 0x47, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x53, 0x28, - 0x23, 0x36, 0x36, 0x36, 0x21, 0x28, 0x2c, 0x30, - 0x21, 0x38, 0x33, 0x28, 0x21, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x21, 0x22, 0x22, 0x28, 0x30, - 0x2d, 0xa1, 0x7a, 0xa2, 0xa3, 0xa3, 0x7f, 0x22, - 0x51, 0x52, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x4f, 0x9b, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x48, 0xa4, 0xa5, 0xa5, 0xa6, 0x61, - 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x30, 0x32, - 0x25, 0x4d, 0x2b, 0x28, 0x21, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x21, 0x23, 0x24, 0x26, 0x30, 0x33, 0x31, - 0x4d, 0x91, 0x5b, 0xa2, 0xa3, 0xa3, 0xa3, 0x5a, - 0x21, 0x2e, 0x46, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x4f, 0x9b, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x48, 0xa7, 0xa8, 0x69, 0x66, 0xa9, - 0x36, 0x36, 0x36, 0x36, 0x36, 0x21, 0x26, 0x25, - 0x83, 0xaa, 0x2c, 0x25, 0x21, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x21, 0x28, 0x30, 0x35, 0x2d, 0x2f, 0x37, 0x4a, - 0x60, 0x85, 0xab, 0xac, 0xa3, 0xa3, 0xa3, 0x82, - 0x86, 0x36, 0x32, 0x3f, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x4c, 0x99, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x48, 0xad, 0xa2, 0xa8, 0xae, 0xaf, - 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x21, 0x57, - 0x77, 0x66, 0x34, 0x27, 0x22, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x23, 0x30, 0x31, 0xb0, 0x91, 0x7e, 0x90, 0x90, - 0x8b, 0x5b, 0xa2, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, - 0x5d, 0xb1, 0x36, 0x24, 0x53, 0x9b, 0x48, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x9b, 0x99, 0xad, 0x64, 0x5c, 0x8b, 0xb1, - 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x73, 0x5d, - 0x82, 0x5c, 0xb2, 0x2a, 0x23, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, - 0x24, 0x2b, 0xb0, 0x8b, 0x5b, 0x76, 0x5b, 0x5b, - 0x7b, 0xa2, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, - 0xa8, 0x5e, 0x22, 0x36, 0x21, 0x3a, 0x99, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x4f, 0x3f, 0xb3, 0x7b, 0x7b, 0x85, 0x80, - 0x9f, 0x36, 0x36, 0x36, 0x21, 0xb4, 0x7e, 0x7b, - 0x64, 0x64, 0xb5, 0x35, 0x24, 0x21, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, - 0x26, 0x31, 0xb6, 0x5b, 0x64, 0xa2, 0xa2, 0xac, - 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, - 0xa3, 0x66, 0xb7, 0x36, 0x36, 0x36, 0x2c, 0x4b, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x9a, 0x3f, 0xb8, 0x76, 0x76, 0x7a, 0x63, - 0xb9, 0xba, 0x86, 0xba, 0xbb, 0x90, 0x5b, 0x64, - 0xa2, 0xa2, 0xbc, 0x2d, 0x27, 0x23, 0x21, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, - 0x26, 0x2d, 0x91, 0x5b, 0x64, 0xa3, 0xa3, 0xa3, - 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, - 0xa3, 0xa8, 0x83, 0xaf, 0x36, 0x36, 0x36, 0x30, - 0x44, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x9b, 0x9a, 0x3f, 0xbd, 0x5b, 0x7b, 0xbe, 0x85, - 0x7e, 0x90, 0x63, 0x90, 0x85, 0x5b, 0xa2, 0xa3, - 0xa3, 0xac, 0x5d, 0xb5, 0x39, 0x26, 0x23, 0x21, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, - 0x26, 0x2d, 0xbf, 0xbe, 0x64, 0xa3, 0xa3, 0xa3, - 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, - 0xa3, 0xa3, 0xa8, 0x88, 0x36, 0x36, 0x36, 0x36, - 0x2d, 0x9b, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x9b, 0x45, 0x3f, 0xc0, 0x6d, 0x7b, 0xab, 0xbe, - 0x7a, 0x8b, 0x8b, 0x7a, 0x5b, 0x64, 0xa3, 0xa3, - 0xa3, 0xa3, 0xa2, 0xc1, 0x37, 0x35, 0x26, 0x23, - 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, - 0x26, 0x2e, 0xbf, 0x7a, 0x7b, 0xa3, 0xa3, 0xa3, - 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, - 0xa3, 0xa3, 0xa8, 0x72, 0x73, 0x36, 0x36, 0x36, - 0x24, 0x52, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x46, 0x42, 0xb6, 0x7a, 0x7b, 0x64, 0x7b, - 0x76, 0x5b, 0x5b, 0x76, 0x7b, 0xa2, 0xa3, 0xa3, - 0xa3, 0xa3, 0xac, 0x64, 0xc1, 0x4d, 0x2c, 0x27, - 0x23, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, - 0x25, 0x31, 0xc2, 0x8b, 0x7b, 0xa3, 0xa3, 0xa3, - 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, - 0xa3, 0xa3, 0xa3, 0xa8, 0x89, 0x9f, 0x36, 0x36, - 0x32, 0x47, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x4b, 0x2f, 0x8f, 0x7a, 0x7b, 0xa2, 0xac, - 0xa2, 0x64, 0x64, 0xa2, 0xa2, 0xac, 0xa3, 0xa3, - 0xa3, 0xa3, 0xa3, 0xa3, 0xa2, 0x5d, 0xc3, 0x2c, - 0x26, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, - 0x25, 0x31, 0xc2, 0x85, 0x7b, 0xa3, 0xa3, 0xa3, - 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, - 0xa3, 0xa3, 0xa3, 0xa3, 0x66, 0x57, 0x27, 0x4d, - 0x4b, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x99, 0x34, 0x9f, 0xb9, 0x7a, 0x7b, 0xa2, 0xa3, - 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, - 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa2, 0xc2, - 0x32, 0x28, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, - 0x26, 0x2d, 0xc2, 0x85, 0x7b, 0xac, 0xa3, 0xa3, - 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, - 0xa3, 0xa3, 0xa3, 0xa3, 0xa8, 0x5f, 0x92, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x44, - 0x35, 0x36, 0xaf, 0xbb, 0x7a, 0x7b, 0xac, 0xa3, - 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, - 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xac, 0xa2, 0xc0, - 0x2b, 0x24, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x23, - 0x30, 0x2f, 0xb6, 0x8b, 0x7b, 0xac, 0xa3, 0xa3, - 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, - 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0x66, 0x89, 0x45, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x9b, 0x4e, 0x25, - 0x36, 0x36, 0x61, 0xb9, 0x6d, 0x64, 0xac, 0xa3, - 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, - 0xa3, 0xa3, 0xa3, 0xa3, 0xac, 0x7b, 0xbe, 0xc3, - 0x32, 0x28, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x28, - 0x33, 0xc4, 0x63, 0xbe, 0xa2, 0xa3, 0xa3, 0xa3, - 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, - 0xa3, 0xa3, 0xa3, 0xa3, 0xa2, 0x72, 0x81, 0xc5, - 0x46, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x3f, 0x2c, 0x36, 0x36, - 0x36, 0x36, 0xc6, 0x8f, 0x6d, 0x64, 0xac, 0xa3, - 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, - 0xa3, 0xa3, 0xa3, 0xa2, 0xab, 0x8b, 0xb0, 0x2c, - 0x26, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x24, - 0x35, 0x96, 0x75, 0xab, 0xa2, 0xac, 0xa3, 0xa3, - 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, - 0xa3, 0xa3, 0xa3, 0xa3, 0xac, 0x7b, 0x81, 0xb9, - 0x73, 0x3b, 0x44, 0x9b, 0x48, 0x48, 0x48, 0x9b, - 0x99, 0x43, 0x94, 0x2c, 0x21, 0x36, 0x36, 0x36, - 0x36, 0x36, 0x73, 0xb9, 0x7a, 0x7b, 0xa3, 0xa3, - 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, - 0xa3, 0x64, 0x76, 0x7a, 0x91, 0xb5, 0x31, 0x30, - 0x28, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x24, - 0x39, 0x97, 0x75, 0xbe, 0x7b, 0x64, 0xa2, 0xa2, - 0xac, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, - 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0x7b, 0x7a, 0xc7, - 0xc8, 0x36, 0x21, 0x26, 0x2b, 0x39, 0x33, 0x30, - 0x23, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, - 0x36, 0x21, 0xc8, 0xbb, 0x8b, 0x7b, 0xa3, 0xa3, - 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa2, 0x64, 0x64, - 0x76, 0x85, 0xbf, 0xb5, 0x34, 0x2b, 0x27, 0x28, - 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x28, - 0x33, 0xc9, 0x63, 0x7e, 0x7a, 0x6d, 0xbe, 0x5b, - 0x76, 0x7b, 0x64, 0x64, 0xa2, 0xac, 0xa3, 0xa3, - 0xa3, 0xa3, 0xa3, 0xa3, 0xac, 0x76, 0x85, 0xb9, - 0x79, 0x22, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, - 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, - 0x36, 0x21, 0xca, 0xbb, 0x75, 0x76, 0xa2, 0xa3, - 0xa3, 0xa3, 0xac, 0xa2, 0x64, 0x76, 0xbe, 0x8b, - 0xb6, 0xb5, 0x2f, 0x35, 0x30, 0x24, 0x22, 0x21, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x23, - 0x27, 0x31, 0xcb, 0xc9, 0xbb, 0x74, 0x63, 0x90, - 0x7e, 0x75, 0x8b, 0x6d, 0xbe, 0x76, 0x64, 0xa2, - 0xac, 0xac, 0xac, 0xac, 0x64, 0x7a, 0x84, 0xcc, - 0x79, 0x9f, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, - 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, - 0x36, 0x21, 0xc8, 0xcc, 0x63, 0x6d, 0x7b, 0x64, - 0xac, 0xa2, 0x64, 0x7b, 0xbe, 0x75, 0x63, 0x96, - 0x38, 0x39, 0x2a, 0x24, 0x23, 0x21, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, - 0x28, 0x27, 0x35, 0x2d, 0x41, 0xb5, 0xc5, 0x8f, - 0xb9, 0xbb, 0xc7, 0x74, 0x84, 0x90, 0x85, 0x6d, - 0x5b, 0x7b, 0x7b, 0xab, 0x6d, 0x90, 0xb9, 0xcd, - 0xca, 0x22, 0x36, 0x36, 0x28, 0x30, 0x30, 0x30, - 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x25, 0x36, - 0x36, 0x21, 0xb4, 0x80, 0xc7, 0x7e, 0x6d, 0x76, - 0xab, 0x76, 0x6d, 0x85, 0x63, 0xb9, 0xb5, 0x34, - 0x33, 0x26, 0x23, 0x21, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x21, 0x23, 0x24, 0x27, 0x2a, 0x35, 0x2e, 0x2f, - 0x41, 0xce, 0xcf, 0x6c, 0x80, 0xcc, 0xb9, 0x74, - 0x84, 0x90, 0x75, 0x7e, 0x74, 0x8f, 0xcd, 0x79, - 0xc6, 0x2b, 0x9d, 0x41, 0x2f, 0x34, 0x2d, 0x2d, - 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x34, 0x2f, 0x38, - 0x4d, 0x37, 0xd0, 0xd1, 0x8f, 0x74, 0x63, 0x7e, - 0x75, 0x7e, 0x63, 0xc7, 0x88, 0xc4, 0x31, 0x2a, - 0x24, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x21, 0x22, 0x23, 0x24, 0x26, 0x30, - 0x33, 0x39, 0x2e, 0x51, 0x41, 0xb2, 0x6c, 0xd1, - 0x80, 0xcc, 0xcc, 0xcc, 0xd2, 0xd1, 0xb7, 0xd3, - 0x41, 0x34, 0x35, 0x32, 0x30, 0x27, 0x27, 0x27, - 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x30, 0x2a, - 0x2b, 0x34, 0xd4, 0xca, 0xd5, 0x8f, 0xbb, 0xc7, - 0xc7, 0xbb, 0xcc, 0x6c, 0x41, 0x39, 0x27, 0x28, - 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x21, 0x22, - 0x28, 0x24, 0x26, 0x2a, 0x33, 0x2c, 0x2f, 0x41, - 0xd6, 0xb7, 0x79, 0x79, 0x79, 0xca, 0xd7, 0x51, - 0x39, 0x30, 0x24, 0x23, 0x22, 0x22, 0x22, 0x22, - 0x22, 0x22, 0x21, 0x22, 0x22, 0x22, 0x22, 0x23, - 0x24, 0x2a, 0x31, 0xd8, 0xc8, 0x79, 0xd1, 0x80, - 0xd5, 0xba, 0xd9, 0x2f, 0x35, 0x26, 0x23, 0x21, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x21, 0x22, 0x23, 0x28, 0x25, 0x30, 0x2b, - 0x31, 0x2f, 0xd4, 0xd8, 0xd8, 0x2f, 0x2e, 0x33, - 0x26, 0x23, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x21, 0x28, 0x27, 0x35, 0x34, 0xd8, 0xd8, 0xd8, - 0xda, 0xd4, 0x2e, 0x33, 0x25, 0x23, 0x21, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x21, 0x21, 0x23, 0x28, - 0x26, 0x30, 0x32, 0x2b, 0x33, 0x2a, 0x26, 0x28, - 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x21, 0x23, 0x25, 0x30, 0x33, 0x35, 0x35, - 0x2b, 0x2a, 0x26, 0x28, 0x22, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, - 0x21, 0x22, 0x23, 0x28, 0x28, 0x23, 0x22, 0x21, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x21, 0x23, 0x28, 0x24, 0x24, - 0x28, 0x23, 0x22, 0x21, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x25, 0x26, 0x27, 0x28, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x28, 0x29, 0x24, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x26, 0x2b, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x2c, 0x24, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2d, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, + 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x23, 0x25, 0x2a, 0x2a, + 0x26, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x25, + 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x28, 0x28, 0x24, 0x2a, + 0x2a, 0x29, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x2a, + 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x20, 0x2c, 0x24, 0x2a, + 0x2a, 0x2a, 0x2c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2a, + 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x24, 0x2a, 0x2a, 0x2a, + 0x2a, 0x2a, 0x26, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x24, 0x2a, + 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, + 0x2a, 0x2a, 0x2a, 0x2b, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2b, 0x2a, 0x2a, + 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, + 0x2a, 0x2a, 0x2a, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2a, 0x2a, + 0x2a, 0x2a, 0x24, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x25, 0x2f, 0x2a, 0x2a, + 0x2a, 0x2a, 0x2a, 0x23, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2a, 0x2a, + 0x2a, 0x24, 0x25, 0x26, 0x25, 0x2a, 0x2a, 0x2a, 0x2a, 0x23, 0x27, 0x21, 0x29, 0x25, 0x2f, 0x2a, + 0x2a, 0x2a, 0x2a, 0x2a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x2a, 0x2a, + 0x27, 0x20, 0x20, 0x26, 0x26, 0x2a, 0x2a, 0x2a, 0x2f, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x23, 0x24, + 0x2a, 0x2a, 0x2a, 0x2a, 0x2b, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x2a, 0x25, + 0x20, 0x20, 0x20, 0x20, 0x25, 0x2a, 0x2a, 0x2a, 0x28, 0x20, 0x20, 0x20, 0x20, 0x20, 0x26, 0x2a, + 0x2a, 0x2a, 0x2a, 0x2a, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2a, 0x26, + 0x2b, 0x26, 0x2d, 0x20, 0x27, 0x2a, 0x2a, 0x2f, 0x20, 0x28, 0x26, 0x2f, 0x2e, 0x20, 0x2c, 0x2a, + 0x2a, 0x2a, 0x2a, 0x2a, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2a, 0x22, + 0x29, 0x24, 0x2d, 0x2e, 0x2e, 0x2a, 0x2a, 0x26, 0x20, 0x2d, 0x2a, 0x2f, 0x26, 0x20, 0x20, 0x2a, + 0x2a, 0x2a, 0x2a, 0x2a, 0x2c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2a, 0x26, + 0x22, 0x2a, 0x24, 0x27, 0x21, 0x2a, 0x2a, 0x2f, 0x20, 0x22, 0x2a, 0x2a, 0x2a, 0x2e, 0x20, 0x24, + 0x2a, 0x2a, 0x2a, 0x2a, 0x2b, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2b, 0x2a, 0x23, + 0x21, 0x2a, 0x2a, 0x29, 0x2c, 0x28, 0x28, 0x2c, 0x2e, 0x2f, 0x2a, 0x2a, 0x2a, 0x2b, 0x28, 0x2a, + 0x2a, 0x2a, 0x2a, 0x2a, 0x2c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2b, 0x2a, 0x2a, + 0x2b, 0x2f, 0x21, 0x2e, 0x21, 0x20, 0x28, 0x29, 0x28, 0x28, 0x2d, 0x25, 0x22, 0x20, 0x27, 0x2a, + 0x2a, 0x2a, 0x2a, 0x2a, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x2a, + 0x2f, 0x2b, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x2e, 0x25, 0x2a, + 0x2a, 0x2a, 0x2a, 0x2a, 0x29, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x25, + 0x28, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2a, + 0x2a, 0x2a, 0x2a, 0x2a, 0x23, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x24, 0x2d, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2b, 0x2f, 0x27, 0x28, 0x2a, + 0x2a, 0x2a, 0x2a, 0x2a, 0x24, 0x28, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x25, 0x29, + 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x29, 0x2f, 0x2b, 0x20, 0x2e, 0x2a, + 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x23, 0x25, + 0x29, 0x29, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x29, 0x2f, 0x21, 0x20, 0x20, 0x20, 0x22, 0x2a, + 0x2a, 0x2c, 0x27, 0x25, 0x2a, 0x2f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2a, + 0x2d, 0x2e, 0x2f, 0x22, 0x22, 0x22, 0x26, 0x26, 0x2e, 0x20, 0x20, 0x20, 0x2e, 0x21, 0x28, 0x2a, + 0x2a, 0x29, 0x20, 0x2b, 0x2a, 0x2a, 0x28, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x23, 0x2a, + 0x28, 0x2e, 0x2b, 0x20, 0x28, 0x28, 0x20, 0x20, 0x20, 0x20, 0x2b, 0x21, 0x20, 0x20, 0x20, 0x26, + 0x2a, 0x2a, 0x21, 0x28, 0x24, 0x2a, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2b, 0x2a, 0x24, + 0x20, 0x20, 0x2e, 0x2b, 0x20, 0x20, 0x20, 0x20, 0x28, 0x21, 0x2b, 0x20, 0x20, 0x20, 0x20, 0x2c, + 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2b, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x2a, 0x24, + 0x20, 0x20, 0x20, 0x2c, 0x2e, 0x2e, 0x2e, 0x2e, 0x2c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x26, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x2a, 0x2a, 0x2f, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x2b, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x24, 0x2a, 0x24, 0x28, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x2f, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x24, 0x28, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x2a, 0x2e, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x21, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x23, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x29, 0x2a, 0x2a, 0x2f, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x28, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x2a, 0x2a, 0x2a, 0x21, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x26, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2c, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2b, 0x24, 0x2a, 0x2a, 0x2a, 0x21, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x21, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x25, 0x28, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x2a, 0x2a, 0x2a, 0x24, 0x21, 0x20, + 0x20, 0x20, 0x20, 0x2c, 0x2c, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x21, 0x29, 0x26, + 0x2f, 0x2e, 0x20, 0x24, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x22, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2f, 0x28, + 0x20, 0x20, 0x20, 0x20, 0x22, 0x2b, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x2f, 0x2a, 0x2a, + 0x2a, 0x2a, 0x2c, 0x27, 0x2a, 0x2a, 0x24, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2e, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x24, 0x2a, 0x2a, 0x2a, 0x2a, 0x26, 0x2b, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, + 0x26, 0x2a, 0x25, 0x2b, 0x24, 0x2a, 0x2f, 0x2f, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x25, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2a, 0x2a, 0x25, 0x2a, 0x22, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x2c, 0x25, 0x26, 0x27, 0x2a, 0x2a, 0x25, 0x22, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x27, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x24, 0x2a, 0x22, 0x2a, 0x2a, 0x28, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x28, 0x23, 0x2e, 0x24, 0x2a, 0x2a, 0x25, 0x2f, 0x2a, 0x2a, 0x2a, 0x2a, 0x24, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x29, 0x2a, 0x24, 0x2f, 0x2a, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x28, 0x2b, 0x2d, 0x2a, 0x2a, 0x2a, 0x26, 0x24, 0x2a, 0x2a, 0x2a, 0x2a, 0x27, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x24, 0x2a, 0x22, 0x2a, 0x24, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x2b, 0x2a, 0x2a, 0x2a, 0x2a, 0x22, 0x2a, 0x2a, 0x2a, 0x2a, 0x25, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x27, 0x2a, 0x2a, 0x26, 0x2a, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x25, 0x2a, 0x2a, 0x2a, 0x26, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, + 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x25, 0x2a, 0x26, 0x24, 0x24, 0x28, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x26, 0x2a, 0x2a, 0x2a, 0x25, 0x23, 0x2a, 0x2a, 0x2a, 0x2a, + 0x26, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x2c, 0x2a, 0x2a, 0x22, 0x2a, 0x26, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2a, 0x2a, 0x2a, 0x2a, 0x26, 0x2a, 0x2a, 0x2a, 0x2a, + 0x2a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x26, 0x2a, 0x2a, 0x26, 0x2a, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x2c, 0x28, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x2a, 0x2a, 0x2a, 0x2a, 0x26, 0x2a, 0x2a, 0x2a, 0x2a, + 0x2a, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x28, 0x2a, 0x2a, 0x25, 0x23, 0x2a, 0x2b, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x29, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x2a, 0x2a, 0x2a, 0x2a, 0x26, 0x2a, 0x2a, 0x2a, 0x2a, + 0x2a, 0x29, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x2d, 0x2a, 0x2a, 0x2f, 0x24, 0x24, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2b, 0x2a, 0x2a, 0x2a, 0x2a, 0x26, 0x2a, 0x2a, 0x2a, 0x2a, + 0x2a, 0x2f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x23, 0x2a, 0x2a, 0x26, 0x24, 0x23, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x2a, 0x2a, 0x2a, 0x23, 0x23, 0x2a, 0x2a, 0x2a, 0x2a, + 0x2a, 0x25, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x2a, 0x2a, 0x2a, 0x23, 0x23, 0x26, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x2a, 0x2a, 0x2a, 0x26, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, + 0x2a, 0x24, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x28, 0x2a, 0x2a, 0x2a, 0x2a, 0x26, 0x26, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x2a, 0x2a, 0x2a, 0x22, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, + 0x2a, 0x25, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x2a, 0x2a, 0x2a, 0x2a, 0x26, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2b, 0x2a, 0x2a, 0x26, 0x29, 0x2f, 0x23, 0x2a, 0x2a, 0x2a, + 0x2a, 0x26, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x2f, 0x27, 0x28, 0x21, 0x24, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x24, 0x22, 0x25, 0x2a, 0x24, 0x25, 0x22, 0x22, 0x2a, + 0x2a, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x2c, 0x2b, 0x20, 0x20, 0x20, 0x2b, 0x25, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x2c, 0x2e, 0x2e, 0x27, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x25, 0x26, + 0x2a, 0x28, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x28, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x2a, 0x29, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x23, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x25, + 0x21, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x2a, 0x26, 0x28, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x2b, 0x28, 0x20, 0x20, 0x20, 0x25, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2c, + 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x21, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x23, 0x28, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x2c, 0x28, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2d, 0x20, + 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2b, 0x2e, 0x2e, 0x2e, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x24, 0x2a, 0x24, 0x2c, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x2c, 0x28, 0x20, 0x20, 0x20, 0x28, 0x23, 0x2a, 0x2a, 0x2a, 0x24, 0x21, 0x20, 0x20, + 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2b, 0x21, 0x28, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x2a, 0x2a, 0x2a, 0x27, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x2c, 0x28, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x21, 0x21, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x2a, 0x2a, 0x22, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x2c, 0x28, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x2b, 0x2c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2b, 0x2a, 0x2a, 0x2a, 0x2a, + 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x2c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x2c, 0x2b, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x29, 0x2a, 0x2a, 0x2a, + 0x2a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x2c, 0x2c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x25, 0x2a, 0x2a, + 0x2a, 0x28, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x21, 0x28, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2a, 0x25, + 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x2e, 0x23, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x21, 0x2a, 0x2f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x28, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x26, + 0x2a, 0x2a, 0x29, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2b, + 0x2c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x24, 0x2a, + 0x2a, 0x2a, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2b, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x2c, 0x2b, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x29, 0x25, 0x2a, 0x2a, 0x2a, + 0x2a, 0x2a, 0x2c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x2b, 0x21, 0x28, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x2f, 0x2f, 0x22, 0x2d, 0x2d, 0x29, 0x22, 0x23, 0x24, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, + 0x2a, 0x2a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x28, 0x21, 0x2b, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x2d, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, + 0x2a, 0x24, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x2e, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2b, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x27, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, + 0x2a, 0x25, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, + 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2b, 0x2e, 0x2e, 0x2c, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x27, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x24, 0x25, 0x23, 0x2f, 0x23, 0x23, 0x24, 0x2a, + 0x2a, 0x25, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2c, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x2e, 0x2e, + 0x2e, 0x2e, 0x28, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x2d, 0x21, 0x2b, 0x28, 0x28, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, + 0x2e, 0x22, 0x28, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x21, 0x28, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x2c, 0x2e, 0x2e, 0x2c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x21, 0x28, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x2e, 0x2e, 0x2b, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x21, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x2e, 0x28, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x21, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2b, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x2c, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2c, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20 }; -#endif /* !__HAVE_ARCH_LINUX_LOGO */ +#endif -#ifndef __HAVE_ARCH_LINUX_LOGOBW +#ifndef __HAVE_ARCH_LINUX_LOGO16 -unsigned char linux_logo_bw[] __initdata = { - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xf0, 0x0f, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xcf, 0xf3, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfc, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xfd, 0xff, 0xf3, 0xdf, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xfd, 0xff, 0xf7, 0xef, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xfb, 0x9f, 0x87, 0xfb, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xfb, 0x0f, 0x03, 0xfb, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xfb, 0x67, 0x33, 0xfb, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xfb, 0xe7, 0x79, 0xfb, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xfb, 0xf7, 0x79, 0xfb, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xfb, 0xff, 0xf9, 0xf7, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xfb, 0x60, 0x3b, 0xf7, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xfb, 0x89, 0x07, 0xfb, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xfb, 0x00, 0x03, 0xfb, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xfb, 0x00, 0x0d, 0xfb, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xfb, 0x80, 0x33, 0xfd, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xfb, 0xc0, 0xc3, 0xfd, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xfb, 0xff, 0x0d, 0xdd, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xfb, 0x40, 0x31, 0xee, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xf7, 0x20, 0xc1, 0xee, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xf7, 0x1f, 0x00, 0xff, 0x7f, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xef, 0x00, 0x00, 0x7f, 0xbf, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xee, 0x00, 0x00, 0x7f, 0xbf, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xde, 0x00, 0x00, 0x7f, 0xdf, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xbc, 0x00, 0x00, 0x3f, 0xef, 0xff, 0xff, - 0xff, 0xff, 0xff, 0x7c, 0x00, 0x00, 0x3f, 0xf7, 0xff, 0xff, - 0xff, 0xff, 0xff, 0x7c, 0x00, 0x00, 0x1f, 0xf7, 0xff, 0xff, - 0xff, 0xff, 0xfe, 0xff, 0x1c, 0x07, 0xdf, 0xfb, 0xff, 0xff, - 0xff, 0xff, 0xfd, 0xfc, 0x08, 0x0f, 0xef, 0xfd, 0xff, 0xff, - 0xff, 0xff, 0xfd, 0xf8, 0x00, 0x01, 0xef, 0xfd, 0xff, 0xff, - 0xff, 0xff, 0xfb, 0xf0, 0x00, 0x00, 0x7f, 0xfe, 0xff, 0xff, - 0xff, 0xff, 0xfb, 0xe0, 0x00, 0x00, 0x1f, 0xfe, 0xff, 0xff, - 0xff, 0xff, 0xf7, 0xe0, 0x00, 0x00, 0x07, 0xbf, 0x7f, 0xff, - 0xff, 0xff, 0xf7, 0xc0, 0x00, 0x00, 0x03, 0xbf, 0x7f, 0xff, - 0xff, 0xff, 0xef, 0xc0, 0x00, 0x00, 0x03, 0xdf, 0xbf, 0xff, - 0xff, 0xff, 0xef, 0x80, 0x00, 0x00, 0x03, 0xdf, 0xbf, 0xff, - 0xff, 0xff, 0xdf, 0x80, 0x00, 0x00, 0x03, 0xdf, 0xbf, 0xff, - 0xff, 0xff, 0xdf, 0x80, 0x00, 0x00, 0x01, 0xef, 0xdf, 0xff, - 0xff, 0xff, 0xdf, 0x80, 0x00, 0x00, 0x01, 0xef, 0xdf, 0xff, - 0xff, 0xff, 0xbf, 0x00, 0x20, 0x00, 0x01, 0xef, 0xdf, 0xff, - 0xff, 0xff, 0xbf, 0x00, 0x20, 0x00, 0x01, 0xef, 0xdf, 0xff, - 0xff, 0xff, 0xbf, 0x00, 0x20, 0x00, 0x01, 0xef, 0xdf, 0xff, - 0xff, 0xff, 0xbf, 0x00, 0x20, 0x00, 0x01, 0xef, 0xdf, 0xff, - 0xff, 0xff, 0xbf, 0x00, 0x20, 0x00, 0x03, 0x03, 0xdf, 0xff, - 0xff, 0xff, 0xbf, 0x00, 0x20, 0x00, 0x02, 0xfd, 0xdf, 0xff, - 0xff, 0xff, 0xa3, 0x80, 0x00, 0x00, 0x1f, 0xff, 0xdf, 0xff, - 0xff, 0xff, 0xc1, 0xc0, 0x00, 0x00, 0x11, 0xff, 0x3f, 0xff, - 0xff, 0xff, 0x80, 0xe0, 0x00, 0x00, 0x21, 0xfe, 0x3f, 0xff, - 0xff, 0xff, 0x00, 0x70, 0x00, 0x00, 0x21, 0xfc, 0x3f, 0xff, - 0xff, 0xfe, 0x00, 0x3c, 0x00, 0x00, 0x20, 0xf8, 0x3f, 0xff, - 0xff, 0xf0, 0x00, 0x3e, 0x00, 0x00, 0x20, 0x00, 0x3f, 0xff, - 0xff, 0xc0, 0x00, 0x1f, 0x00, 0x00, 0x20, 0x00, 0x3f, 0xff, - 0xff, 0xc0, 0x00, 0x1f, 0x80, 0x00, 0x20, 0x00, 0x1f, 0xff, - 0xff, 0xc0, 0x00, 0x0f, 0x80, 0x00, 0x20, 0x00, 0x07, 0xff, - 0xff, 0xc0, 0x00, 0x07, 0x80, 0x00, 0x20, 0x00, 0x03, 0xff, - 0xff, 0xc0, 0x00, 0x07, 0x80, 0x00, 0x60, 0x00, 0x01, 0xff, - 0xff, 0xc0, 0x00, 0x02, 0x00, 0x00, 0xe0, 0x00, 0x01, 0xff, - 0xff, 0xc0, 0x00, 0x01, 0x00, 0x01, 0xe0, 0x00, 0x01, 0xff, - 0xff, 0xc0, 0x00, 0x00, 0x80, 0x07, 0xe0, 0x00, 0x03, 0xff, - 0xff, 0xc0, 0x00, 0x00, 0x80, 0x3f, 0xe0, 0x00, 0x0f, 0xff, - 0xff, 0xc0, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0x1f, 0xff, - 0xff, 0xc0, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0x7f, 0xff, - 0xff, 0xe0, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0xff, 0xff, - 0xff, 0xfc, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x03, 0xff, 0xff, - 0xff, 0xff, 0xc0, 0x00, 0x70, 0x00, 0xc0, 0x07, 0xff, 0xff, - 0xff, 0xff, 0xfc, 0x00, 0x8f, 0xff, 0x20, 0x0f, 0xff, 0xff, - 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xe0, 0x1f, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +unsigned char linux_logo16_red[] __initdata = { +0x02, 0x56, 0x98, 0xc8, 0xe7, 0xd8, 0xa7, 0x68, 0x17, 0x87, 0xfc, 0x27, 0x38, 0x77, 0x48, 0xb6 }; -#endif /* !__HAVE_ARCH_LINUX_LOGOBW */ +unsigned char linux_logo16_green[] __initdata = { +0x02, 0x56, 0x98, 0xc8, 0xe7, 0xd8, 0xa7, 0x68, 0x17, 0x87, 0xfc, 0x27, 0x38, 0x77, 0x48, 0xb6 +}; -#ifndef __HAVE_ARCH_LINUX_LOGO16 +unsigned char linux_logo16_blue[] __initdata = { +0x02, 0x56, 0x98, 0xc8, 0xe7, 0xd8, 0xa7, 0x68, 0x17, 0x87, 0xfc, 0x27, 0x38, 0x77, 0x48, 0xb6 +}; unsigned char linux_logo16[] __initdata = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x88, 0x80, 0x00, 0x00, 0x08, 0x88, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x80, - 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, - 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, - 0x08, 0x70, 0x00, 0x00, 0x00, 0x77, 0x70, 0x00, - 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, - 0x87, 0x77, 0x00, 0x00, 0x07, 0xff, 0xf7, 0x00, - 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, - 0x77, 0xff, 0x00, 0x00, 0x7f, 0x77, 0xf7, 0x00, - 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, - 0x70, 0x0f, 0x80, 0x00, 0xf7, 0x08, 0x7f, 0x70, - 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, - 0x80, 0x07, 0x80, 0x00, 0xf8, 0x00, 0x8f, 0x70, - 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, - 0x70, 0x07, 0x88, 0x88, 0xf8, 0x00, 0x8f, 0x70, - 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, - 0xf0, 0x06, 0xe6, 0xe6, 0xe6, 0x00, 0x8f, 0x00, - 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, - 0x77, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x77, 0x00, - 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, - 0x06, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0x00, - 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, - 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x60, - 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, - 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0x60, - 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, - 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x66, 0x66, 0x80, - 0x08, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, - 0x86, 0xe6, 0xe6, 0xe6, 0x66, 0x66, 0x66, 0x80, - 0x08, 0x78, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, - 0x86, 0x66, 0x66, 0x66, 0x66, 0x66, 0x77, 0x70, - 0x00, 0x77, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, - 0x87, 0x66, 0x66, 0x66, 0x66, 0x77, 0x77, 0x78, - 0x00, 0x88, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, - 0x87, 0x76, 0x66, 0x66, 0x77, 0x77, 0xff, 0xf7, - 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, - 0xff, 0x77, 0x77, 0x77, 0x77, 0xff, 0xff, 0xff, - 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, - 0xff, 0x77, 0x77, 0x77, 0x7f, 0xff, 0xff, 0xff, - 0x70, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x8f, - 0xff, 0xf7, 0x77, 0x77, 0xff, 0xff, 0xff, 0xff, - 0xf0, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x7f, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xf8, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xf7, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x87, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x87, 0x77, - 0xff, 0xf7, 0x77, 0xff, 0xff, 0xff, 0x77, 0x77, - 0x77, 0x78, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x77, 0x7f, - 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0x77, - 0x77, 0x78, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x7f, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xf7, 0x77, 0x00, 0x08, 0x80, 0x00, 0x00, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0x80, 0x08, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0x77, 0x80, 0x00, 0x08, 0x00, 0x00, 0x08, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x08, 0x00, 0x80, 0x07, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0x78, 0x00, 0x08, 0x80, 0x00, 0x08, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x08, 0x08, 0x00, 0x8f, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xf7, 0x08, 0x80, 0x80, 0x00, 0x08, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x08, 0x08, 0x08, 0x7f, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xf7, 0x08, 0x80, 0x80, 0x00, 0x00, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0x08, 0x07, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0x80, 0x00, 0x08, 0x00, 0x00, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0x80, 0x0f, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0x70, 0x00, 0x08, 0x00, 0x00, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x08, 0x00, 0x80, 0x8f, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0x70, 0x00, 0x08, 0x00, 0x00, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x08, 0x08, 0x00, 0x7f, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0x70, 0x00, 0x08, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x80, 0x08, 0x00, 0xff, 0xff, 0xff, 0xff, - 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xf0, 0x00, 0x08, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x08, 0x00, 0xff, 0xff, 0xff, 0xff, - 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xf0, 0x00, 0x08, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x08, 0x08, 0xff, 0xff, 0xff, 0xff, - 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xf0, 0x00, 0x08, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x08, 0x08, 0xff, 0xff, 0xff, 0xff, - 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xf0, 0x00, 0x08, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x88, 0xff, 0xff, 0xff, 0xff, - 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xf0, 0x00, 0x08, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x08, 0xff, 0xff, 0xff, 0xff, - 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xf0, 0x88, 0x88, 0x80, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x06, 0xe6, 0x00, 0x8f, 0xff, 0xff, 0xff, - 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x08, 0x80, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x6e, 0x6e, 0x60, 0x08, 0xff, 0xff, 0xff, - 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xe6, 0xe0, 0x00, 0x00, 0x00, 0x88, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x06, 0xe6, 0xe6, 0xe6, 0x00, 0x8f, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xfe, 0x6e, 0x60, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x6e, 0x6e, 0x6e, 0x6e, 0x60, 0x08, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xf6, 0xe6, 0xe0, 0x00, 0x00, 0x00, 0x06, - 0xe6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xe6, 0xe6, - 0xe6, 0xe6, 0xe6, 0xe6, 0xe0, 0x00, 0x8f, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xfe, 0x6e, 0x60, 0x00, 0x00, 0x00, 0x0e, - 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x6e, 0x6e, - 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x00, 0x08, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0x76, 0xe6, 0xe6, 0x00, 0x00, 0x00, 0xe6, - 0xe6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0xe6, 0xe6, - 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe0, 0x00, 0x8f, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xf7, 0x7e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, - 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x6e, 0x6e, - 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x60, 0x00, 0x08, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xf7, 0x76, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, - 0xe6, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0xe6, 0xe6, - 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0x00, 0x00, - 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xf7, 0x7e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, - 0x6e, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x6e, 0x6e, - 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x60, 0x00, - 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xf7, 0x76, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, - 0xe6, 0xe6, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0xe6, 0xe6, - 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe0, 0x00, - 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xf7, 0x8e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, - 0x6e, 0x6e, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x6e, 0x6e, - 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x88, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x78, 0x86, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, - 0xe6, 0xe6, 0xe6, 0xe6, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0xe6, 0xe6, - 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xef, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, - 0x80, 0x06, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, - 0x6e, 0x6e, 0x6e, 0x6e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x6e, 0x6e, - 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, - 0x00, 0x06, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, - 0xe6, 0xe6, 0xe6, 0xe0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0xe6, 0xe6, - 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, - 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x80, - 0x00, 0x06, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, - 0x6e, 0x6e, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0e, 0x6e, 0x6e, 0x6e, - 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x66, - 0x67, 0xff, 0xff, 0xff, 0xff, 0x78, 0x80, 0x00, - 0x00, 0x86, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, - 0xe6, 0xe6, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x06, 0xe6, 0xe6, 0xe6, - 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, - 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x86, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, - 0x66, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0e, 0x6e, 0x6e, 0x6e, - 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x66, - 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x86, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, - 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0xe6, 0xe6, - 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, - 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x86, 0x6e, 0x6e, 0x6e, 0x6e, 0x66, 0x66, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, - 0x66, 0x66, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x66, - 0x60, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80, - 0x00, 0x06, 0x66, 0xe6, 0xe6, 0xe6, 0x66, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x66, 0x66, 0x66, 0x66, 0xe6, 0xe6, 0x66, - 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, - 0x88, 0x86, 0x66, 0x6e, 0x6e, 0x66, 0x60, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x06, 0x66, 0x66, 0x66, 0x66, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x06, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x06, 0x66, 0x66, 0x60, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x66, 0x66, 0x66, 0x60, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x34, 0x55, 0x67, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x94, 0xaa, 0xaa, 0xaa, 0xaa, 0xa6, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc4, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x35, 0xaa, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x88, 0x4a, 0xa9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x0c, 0x4a, 0xaa, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x4a, 0xaa, 0xaa, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xab, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0xaa, 0xaa, 0x4a, 0xaa, 0xaa, 0xaa, 0xaa, 0x5f, 0xaa, 0xaa, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0xaa, 0xa4, 0x56, 0x5a, 0xaa, 0xa3, 0x71, 0x95, 0xfa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xaa, 0x70, 0x06, 0x6a, 0xaa, 0xf0, 0x00, 0x0e, 0x34, 0xaa, 0xaa, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xa5, 0x00, 0x00, 0x5a, 0xaa, 0x80, 0x00, 0x00, 0x6a, 0xaa, 0xaa, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0xa6, 0xb6, 0xd0, 0x7a, 0xaf, 0x08, 0x6f, 0xe0, 0xca, 0xaa, 0xaa, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0xa2, 0x94, 0xde, 0xea, 0xa6, 0x0d, 0xaf, 0x60, 0x0a, 0xaa, 0xaa, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0xa6, 0x2a, 0x47, 0x1a, 0xaf, 0x02, 0xaa, 0xae, 0x04, 0xaa, 0xaa, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xa3, 0x1a, 0xa9, 0xc8, 0x8c, 0xef, 0xaa, 0xab, 0x8a, 0xaa, 0xaa, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xaa, 0xbf, 0x1e, 0x10, 0x89, 0x88, 0xd5, 0x20, 0x7a, 0xaa, 0xaa, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xfb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8e, 0x5a, 0xaa, 0xaa, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa5, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xea, 0xaa, 0xaa, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xf7, 0x8a, 0xaa, 0xaa, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x10, 0x00, 0x00, 0x00, 0x08, 0x9f, 0xb0, 0xea, 0xaa, 0xaa, 0xa1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x99, 0x00, 0x00, 0x08, 0x9f, 0x10, 0x00, 0x2a, 0xac, 0x75, 0xaf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0xde, 0xf2, 0x22, 0x66, 0xe0, 0x00, 0xe1, 0x8a, 0xa9, 0x0b, 0xaa, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x8e, 0xb0, 0x88, 0x00, 0x00, 0xb1, 0x00, 0x06, 0xaa, 0x18, 0x4a, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xa4, 0x00, 0xeb, 0x00, 0x00, 0x81, 0xb0, 0x00, 0x0c, 0xaa, 0xaa, 0xaa, 0xab, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xa4, 0x00, 0x0c, 0xee, 0xee, 0xc0, 0x00, 0x00, 0x00, 0x6a, 0xaa, 0xaa, 0xaf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xca, 0xaf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xba, 0xaa, 0xaa, 0xaa, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x4a, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xaa, 0xaa, 0xaa, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xaa, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xaa, 0xaa, 0xaa, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9a, 0xaf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xaa, 0xaa, 0xaa, 0xaa, 0xd0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xaa, 0xa1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6a, 0xaa, 0xaa, 0xaa, 0xac, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb4, 0xaa, 0xa1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0xaa, 0xaa, 0xaa, 0xa5, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0xaa, 0xa4, 0x10, 0x00, 0x0c, 0xce, 0x00, 0x00, 0x00, 0x81, 0x96, 0xfe, 0x04, 0xaa, 0xaa, 0xaa, 0xaa, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xaa, 0xaa, 0xaa, 0xf8, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x7f, 0xaa, 0xaa, 0xc7, 0xaa, 0x4a, 0xaa, 0xaa, 0xae, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xaa, 0xaa, 0x6b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x6a, 0x5b, 0x4a, 0xff, 0xaa, 0xaa, 0xa5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xda, 0xa5, 0xa2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x56, 0x7a, 0xa5, 0x2a, 0xaa, 0xaa, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x4a, 0x2a, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0xe4, 0xaa, 0x5f, 0xaa, 0xaa, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0xa4, 0xfa, 0xd0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xbd, 0xaa, 0xa6, 0x4a, 0xaa, 0xa7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xa2, 0xa4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xaa, 0xaa, 0x2a, 0xaa, 0xa5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0xa6, 0xa7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0xaa, 0x6a, 0xaa, 0xaa, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x64, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6a, 0xaa, 0x53, 0xaa, 0xaa, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0xaa, 0x2a, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xda, 0xaa, 0xa6, 0xaa, 0xaa, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xaa, 0x6a, 0x70, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0xaa, 0xa6, 0xaa, 0xaa, 0xae, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8a, 0xa5, 0x3a, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xca, 0xaa, 0xa6, 0xaa, 0xaa, 0xa9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xda, 0xaf, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xba, 0xaa, 0xa6, 0xaa, 0xaa, 0xaf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0xa6, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8a, 0xaa, 0x33, 0xaa, 0xaa, 0xa5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xa3, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8a, 0xaa, 0x6a, 0xaa, 0xaa, 0xa4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xaa, 0xaa, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8a, 0xaa, 0x2a, 0xaa, 0xaa, 0xa5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xba, 0xa6, 0x9f, 0x3a, 0xaa, 0xa6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf7, 0x81, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc4, 0x25, 0xa4, 0x52, 0x2a, 0xa1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0xb0, 0x00, 0xb5, 0x10, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0xee, 0x7a, 0xaa, 0xaa, 0xaa, 0x56, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x0c, 0xa9, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0xaa, 0xaa, 0xaa, 0xa5, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x7a, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x00, 0x05, 0xaa, 0xaa, 0xaa, 0xac, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xa3, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x0f, 0xaa, 0xaa, 0xaa, 0xd0, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xee, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x08, 0x4a, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x08, 0x3a, 0xaa, 0x41, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x0b, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0xaa, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x0c, 0x11, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xaa, 0xa2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xaa, 0xaa, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9a, 0xaa, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0xaa, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x18, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0xa5, 0xd0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x80, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xaa, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x4a, 0xaa, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xeb, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcb, 0x00, 0x00, 0x00, 0x00, 0xc9, 0x5a, 0xaa, 0xaa, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb1, 0x80, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf2, 0xdd, 0x92, 0x34, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xa4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x0e, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xa5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xec, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xaa, 0xaa, 0xaa, 0x45, 0x3f, 0x33, 0x4a, 0xa5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xee, 0xee, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x1b, 0x88, 0x00, 0x00, 0x00, 0x00, 0x08, 0xe2, 0x80, 0x00, 0x00, 0x00, 0x00, 0x81, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xce, 0xec, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xee, 0xb0, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xee, 0xee, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0xee, 0xee, 0xee, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -#endif /* !__HAVE_ARCH_LINUX_LOGO16 */ +#endif -#else /* !INCLUDE_LINUX_LOGO_DATA */ +#ifndef __HAVE_ARCH_LINUX_LOGOBW + +unsigned char linux_logo_bw[] __initdata = { +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xf8, 0x1f, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xc0, 0x03, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xfe, 0x00, 0x0c, 0x7f, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xfe, 0x00, 0x0c, 0x3f, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xfc, 0x20, 0x3a, 0x0f, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xfc, 0xe8, 0x7c, 0x0f, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xf8, 0xf0, 0xfc, 0x0f, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xfc, 0xb8, 0xce, 0x07, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xfd, 0x19, 0x86, 0x0f, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xfc, 0x88, 0xc6, 0x0f, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xfc, 0x9f, 0x86, 0x0f, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xfc, 0x96, 0xe6, 0x07, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xfc, 0x7f, 0xfc, 0x0f, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xfc, 0xff, 0xfe, 0x07, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xfd, 0xff, 0xf6, 0x07, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xfc, 0xff, 0xce, 0x03, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xfc, 0xbf, 0x3c, 0x63, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xfc, 0x52, 0xfe, 0x33, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xfc, 0xff, 0xee, 0x31, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xfc, 0xdf, 0xff, 0x01, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xf8, 0xfb, 0x7f, 0x00, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0x80, 0x7f, 0xff, 0xff, +0xff, 0xff, 0xff, 0xf1, 0xff, 0xff, 0x80, 0x7f, 0xff, 0xff, +0xff, 0xff, 0xff, 0xe3, 0xff, 0xff, 0xc0, 0x3f, 0xff, 0xff, +0xff, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc0, 0x1f, 0xff, 0xff, +0xff, 0xff, 0xff, 0xc7, 0xff, 0xff, 0xc0, 0x0f, 0xff, 0xff, +0xfd, 0xff, 0xff, 0x87, 0xff, 0xff, 0xe0, 0x0f, 0xff, 0xff, +0xff, 0xff, 0xff, 0x01, 0xef, 0xfa, 0x60, 0x07, 0xff, 0xff, +0xff, 0xf7, 0xff, 0x01, 0xf7, 0xf8, 0x30, 0x07, 0xff, 0xff, +0xff, 0xff, 0xfe, 0x07, 0xff, 0xff, 0x11, 0x03, 0xff, 0xff, +0xff, 0xff, 0xfc, 0x1f, 0xff, 0xff, 0xc8, 0x01, 0xff, 0xff, +0xff, 0xff, 0xfc, 0x9f, 0xff, 0xff, 0xe8, 0x81, 0xff, 0xff, +0xff, 0xff, 0xf8, 0x3f, 0xff, 0xff, 0xfc, 0x01, 0xff, 0xff, +0xff, 0xff, 0xf9, 0x3f, 0xff, 0xff, 0xfc, 0x20, 0xff, 0xff, +0xff, 0xff, 0xf8, 0x7f, 0xff, 0xff, 0xfc, 0x00, 0xff, 0xff, +0xff, 0xff, 0xf0, 0x7f, 0xff, 0xff, 0xfe, 0x00, 0x7f, 0xff, +0xff, 0xff, 0xf2, 0x7f, 0xff, 0xff, 0xfc, 0x10, 0x7f, 0xff, +0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x3f, 0xff, +0xff, 0xff, 0xe0, 0xff, 0xdf, 0xff, 0xfe, 0x10, 0x7f, 0xff, +0xff, 0xff, 0xe4, 0xff, 0xdf, 0xff, 0xfe, 0x00, 0x3f, 0xff, +0xff, 0xff, 0xc0, 0xff, 0xdf, 0xff, 0xfe, 0x00, 0x3f, 0xff, +0xff, 0xff, 0xc4, 0xff, 0xdf, 0xff, 0xfe, 0x20, 0x3f, 0xff, +0xff, 0xff, 0xc1, 0xff, 0xdf, 0xff, 0xfe, 0x00, 0x3f, 0xff, +0xff, 0xff, 0xc0, 0xff, 0xdf, 0xff, 0xfe, 0x50, 0x3f, 0xff, +0xff, 0xff, 0xdd, 0xff, 0xdf, 0xff, 0xfe, 0x04, 0x7f, 0xff, +0xff, 0xff, 0xfe, 0x7f, 0xdf, 0xff, 0xfa, 0x00, 0x7f, 0xff, +0xff, 0xff, 0xbf, 0x3f, 0xff, 0xff, 0xee, 0x01, 0x7f, 0xff, +0xff, 0xff, 0xff, 0x9f, 0xff, 0xff, 0xfe, 0x01, 0xdf, 0xff, +0xff, 0xfe, 0xff, 0x8f, 0xff, 0xff, 0xfe, 0x03, 0xff, 0xff, +0xff, 0xf7, 0xff, 0xc7, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, +0xff, 0xbf, 0xff, 0xe1, 0xff, 0xff, 0xdf, 0xff, 0xdf, 0xff, +0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xbf, 0xff, 0xf0, 0x7f, 0xff, 0xff, 0xff, 0xef, 0xff, +0xff, 0xff, 0xff, 0xf8, 0x7f, 0xff, 0xff, 0xff, 0xf7, 0xff, +0xff, 0xff, 0xff, 0xf8, 0x7f, 0xff, 0xdf, 0xff, 0xfd, 0xff, +0xff, 0xbf, 0xff, 0xfc, 0x7f, 0xff, 0xdf, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xfe, 0xff, +0xff, 0xbf, 0xff, 0xff, 0x7f, 0xf8, 0x3f, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x3f, 0xff, 0xfb, 0xff, +0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x3f, 0xff, 0xef, 0xff, +0xff, 0xbf, 0xff, 0xff, 0xc0, 0x00, 0x3f, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x3f, 0xff, 0x7f, 0xff, +0xff, 0xf7, 0xff, 0xff, 0xc0, 0x10, 0x3f, 0xff, 0xff, 0xff, +0xff, 0xfd, 0x7f, 0xff, 0xff, 0xff, 0xbf, 0xfb, 0xff, 0xff, +0xff, 0xff, 0xf7, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xdf, 0xef, 0xff, 0xff, +0xff, 0xff, 0xff, 0xad, 0xff, 0xff, 0xf5, 0x7f, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff +}; -/* prototypes only */ -extern unsigned char linux_logo_red[]; -extern unsigned char linux_logo_green[]; -extern unsigned char linux_logo_blue[]; -extern unsigned char linux_logo[]; -extern unsigned char linux_logo_bw[]; -extern unsigned char linux_logo16[]; +#endif + +#else -#endif /* !INCLUDE_LINUX_LOGO_DATA */ +#external unsigned char linux_logo_red[]; +#external unsigned char linux_logo_green[]; +#external unsigned char linux_logo_blue[]; +#external unsigned char linux_logo[]; +#external unsigned char linux_logobw[]; +#external unsigned char linux_logo16[]; + +#endif